⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 一个串口终端解释程序。用于单片机调试串口的超级终端应用。
💻 C
📖 第 1 页 / 共 3 页
字号:


/*****初始化串口SCI0*****/
void InitSci0(void)
{
    *SCI0_SCIBR = 0x002b;  // 0000 0010 0000 1001 b
    //bit15-13      xxx     保留
    //bit12-0(SBR)  0x2b    SCI波特率57600=SCI模块时钟40M/(16×SBR)

    *SCI0_SCICR = 0x002c;   // 0000 0000 0010 1100 b
    //bit15(LOOP)   0   禁用LOOP(自环)方式
    //bit14(SWAI)   0   在等待模式也允许SCI
    //bit13(RSRC)   0   接收输入内部连接到传送(用于当LOOP为1时决定接受的内部反馈路径)
    //bit12(M)      0   数据格式 1个起始位,8个数据,1个停止位
    //bit11(WAKE)   0   唤醒方式:Idle line
    //bit10(POL)    0   极性不变
    //bit9(PE)      0   禁用奇偶校验位
    //bit8(PT)      0   奇偶校验方式:偶校验
    //bit7(TEIE)    0   发送数据寄存器空时不允许中断请求
    //bit6(TIIE)    0   传送空闲中断不允许
    //bit5(RIE)     1   允许接收满时中断
    //bit4(REIE)    0   不允许接收错误中断
    //bit3(TE)      1   允许输出
    //bit2(RE)      1   允许接收
    //bit1(RWU)     0   Normal Operation    1=Standby state
    //bit0(SBK)     0   No break characters
}
/*****end of 初始化串口SCI0*****/


/*****初始化串口SCI1发送状态*****/
void InitSci1Trans( void )
{
    if (!MeterType) //使用新型号的数显表
    {
        *SCI1_SCIBR = 0x0412;
        //bit15-13      xxx     保留
        //bit12-0(SBR)  0x412   SCI波特率2400=SCI模块时钟40M/(16×SBR)
    }
    else            //使用旧型号的数显表
    {
        *SCI1_SCIBR = 0x0823;  // 0000 0010 0000 1001 b
        //bit15-13      xxx     保留
        //bit12-0(SBR)  0x823   SCI波特率1200=SCI模块时钟40M/(16×SBR)
    }

    *SCI1_SCICR = 0x0008;   // 0000 0000 00000 1000 b
    //bit15(LOOP)   0   禁用LOOP(自环)方式
    //bit14(SWAI)   0   在等待模式也允许SCI
    //bit13(RSRC)   0   接收输入内部连接到传送(用于当LOOP为1时决定接受的内部反馈路径)
    //bit12(M)      0   数据格式 1个起始位,8个数据,1个停止位
    //bit11(WAKE)   0   唤醒方式:Idle line
    //bit10(POL)    0   极性不变
    //bit9(PE)      0   禁用奇偶校验位
    //bit8(PT)      0   奇偶校验方式:偶校验
    //bit7(TEIE)    0   发送数据寄存器空时不允许中断请求
    //bit6(TIIE)    0   传送空闲中断不允许
    //bit5(RIE)     0   禁止接收满时中断
    //bit4(REIE)    0   不允许接收错误中断
    //bit3(TE)      1   允许TXD输出
    //bit2(RE)      0   禁止接收
    //bit1(RWU)     0   Normal Operation    1=Standby state
    //bit0(SBK)     0   No break characters
}
/*****end of 初始化串口SCI1发送状态*****/


/*****初始化串口SCI1接收状态*****/
#pragma interrupt
void InitSci1Rec( void )
{
    *SCI1_SCIBR = 0x0209;  // 0000 0010 0000 1001 b
    //bit15-13      xxx     保留
    //bit12-0(SBR)  0x209   SCI波特率4800=SCI模块时钟40M/(16×SBR)

    *SCI1_SCICR = 0x0024;   // 0000 0000 0010 0100 b
    //bit15(LOOP)   0   禁用LOOP(自环)方式
    //bit14(SWAI)   0   在等待模式也允许SCI
    //bit13(RSRC)   0   接收输入内部连接到传送(用于当LOOP为1时决定接受的内部反馈路径)
    //bit12(M)      0   数据格式 1个起始位,8个数据,1个停止位
    //bit11(WAKE)   0   唤醒方式:Idle line
    //bit10(POL)    0   极性不变
    //bit9(PE)      0   禁用奇偶校验位
    //bit8(PT)      0   奇偶校验方式:偶校验
    //bit7(TEIE)    0   发送数据寄存器空时不允许中断请求
    //bit6(TIIE)    0   传送空闲中断不允许
    //bit5(RIE)     1   允许接收满时中断
    //bit4(REIE)    0   不允许接收错误中断
    //bit3(TE)      0   禁用TXD输出
    //bit2(RE)      1   允许接收
    //bit1(RWU)     0   Normal Operation    1=Standby state
    //bit0(SBK)     0   No break characters
}
/*****end of 初始化串口SCI1接收状态*****/


/*****初始化中断优先级*****/
void InitIPL(void)
{
    *GPR5  = 0x0101;    //GPIO B, GPIO D 中断优先级
    *GPR7  = 0x0400;    //TimerD0 中断优先级
    *GPR8  = 0x7030;    //TimerC1、TimerD3中断优先级
    *GPR10 = 0x0700;    //TimerA0 中断优先级
    *GPR11 = 0x0007;    //TimerA2 中断优先级
    *GPR12 = 0x0050;    //SCI1 Receiver full 中断优先级
    *GPR13 = 0x0050;    //SCI0 Receiver full 中断优先级

    *IPR  = 0xfe00;  //允许0-6级中断
    //bit15-9 111111 允许0-6级中断
    //bit8-6  xxx   保留
    //bit5    0   irqb为电平触发
    //bit4    0   irqb中断屏蔽
    //bit3    0   低触发
    //bit2    0   irqa为电平触发
    //bit1    0   irqa中断屏蔽
    //bit0    0   低触发
}
/*****end of 初始化中断优先级*****/


/*****允许捕捉键相脉冲和A相电压脉冲中断*****/
#pragma interrupt
void InitPulseCapture(void)
{
    *TMRA0_SCR  = 0x04c0;
    *TMRA2_SCR  = 0x04c0;
    //bit15(TCF)    0   Compare发生标志
    //bit14(TCFIE)  0   1——允许Compare中断
    //bit13(TOF)    0   计数器溢出标志
    //bit12(TOFIE)  0   1——允许溢出中断
    //bit11(IEF)    0   输入信号边沿触发(CAPTURE)标志
    //bit10(IEFIE)  1   1——允许输入信号边沿触发中断(捕捉发生时发出中断)
    //bit9(IPS)     0   1——对外部引脚输入信号反向
    //bit8(INPUT)   x   反映外部引脚的电平状态,只读
    //bit7-6(CAPTURE MODE)  11  外部输入(CAPTURE)触发模式,11——跳变沿触发方式
    //bit5(MSTR)    0   0——不广播信息给其他定时器
    //bit4(EEOF)    0   0——不允许其它定时器影响本定时器的外部OFLAG输出
    //bit3(VAL)     0   OFLAG强制输出值
    //bit2(FORCE)   0   1——强制OFLAG输出VAL的值,只写,读=0
    //bit1(OPS)     0   0——输出极性不反向
    //bit0(OEN)     0   0——禁用外部引脚输出
}
/*****end of 允许捕捉键相脉冲和A相电压脉冲中断*****/


/*****初始化测试用变量*****/
void InitTestVariable(void)
{
    unsigned int i;

    for (i=0; i<32; i++)
    {
        InputPpsCounterRecBuf[i] = 0;   //输入PPS上升沿计数器值存储缓冲区,用于测试
        OutputPpsCounterRecBuf[i] = 0;  //输出PPS上升沿计数器值存储缓冲区,用于测试
        Td3OverflowCounterRecBuf[i] = 0;
    }
    InputPpsCounterRecBufPtr = &InputPpsCounterRecBuf[0];
    OutputPpsCounterRecBufPtr = &OutputPpsCounterRecBuf[0];
    Td3OverflowCounterRecBufPtr = &Td3OverflowCounterRecBuf[0];


    for (i=0; i<TEST_BUS_SIZE; i++)
    {
        EAbsoluteAngleBuf[i] = 0;
        RotateSpeedBuf[i] = 0;
        PowerAngleBuf[i] = 0;
    }
    EAbsoluteAngleBufPtr = &EAbsoluteAngleBuf[0];
    RotateSpeedBufPtr = &RotateSpeedBuf[0];
    PowerAngleBufPtr = &PowerAngleBuf[0];

    FirstTimes = 0;
    LastPowerAngle = 0;

    for (i=0; i<50; i++)
    {
        Sci0RecBuf[i] = 0;
    }
    Sci0RecBufPtr = &Sci0RecBuf[0];

    for (i=0; i<100; i++)
    {
        Sci1RecBuf[i] = 0;
    }
    Sci1RecBufPtr = &Sci1RecBuf[0];

    IntFlag = 0;

    EErrorTimes = 0;

    GpsReportMaxReachTime = 0;
    GpsReportMinReachTime = 999;

    for (i=0; i<20; i++)
    {
        GpsReachTime.ReachTime[i] = 0;
        GpsReachTime.FixStat[i] = 0;
    }
    GpsReachTimeWritePtr = 0;
    GpsReachTimeErrorCnt = 0;    
}
/*****end of 初始化测试用变量*****/













































































































































⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -