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

📄 init.c

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

    InitMeterDisplayFlag = TRUE;
}
/*****end of 初始化装置状态变量*****/


/*****初始化与SCIO发送相关的变量(与RCM3200通信)*****/
void InitSci0TransVariable(void)
{
    unsigned int i, j;
    for (i=0; i<SEND_RCM3200_QUEUE_DEPTH; i++)
    {
        for (j=0; j<SEND_RCM3200_QUEUE_LENGTH; j++)
        {
            SendRcm3200Queue[i].Data[j] = 0;
        }
        SendRcm3200Queue[i].DataLength = 0;
    }
    WriteSendRcm3200QueuePtr = &SendRcm3200Queue[0];
    ReadSendRcm3200QueuePtr = &SendRcm3200Queue[0];

    for (i=0; i<SEND_RCM3200_QUEUE_LENGTH; i++)
    {
        Sci0SendBuf[i] = 0;
    }
    Sci0SendBufCurrPtr = &Sci0SendBuf[0];
    Sci0SendBufEndPtr= &Sci0SendBuf[0];
    Sci0SendFlag = FALSE;
}
/*****end of 初始化与SCIO发送相关的变量(与RCM3200通信)*****/


/*****初始化与SCIO接收相关的变量(与RCM3200通信)*****/
#pragma interrupt
void InitSci0RecVariable(void)
{
    unsigned int i;
    for (i=0; i<REC_RCM3200_BUF_SIZE; i++)
    {
        RecRcm3200Buf[i] = 0;
    }
    RecRcm3200DataSize = 0;
    RecRcm3200BufPtr = &RecRcm3200Buf[0];
    RecSci0Flag = 0;
    LastSci0Data = 0;
}
/*****end of 初始化与SCIO接收相关的变量(与RCM3200通信)*****/


/*****初始化与SCI1发送相关的变量(向数据表发送数据)*****/
#pragma interrupt
void InitSci1TransVariable(void)
{
    Sci1SendBufPtr = &SendMeterBuf[0];
    Sci1SendFlag = 0;
    ClockRecFinishCounter = 0;
    Sci1SwitchCounter = 0;
}
/*****end of 初始化与SCI1发送相关的变量(向数据表发送数据)*****/


/*****初始化与SCI1接收相关的变量(接收GPS时钟信号)*****/
#pragma interrupt
void InitSci1RecVariable(void)
{
    unsigned int i;
    for (i=0; i<85; i++)
    {
        RecSci1Buf[i] = 0;  //初始化接收数组
    }
    RecSci1BufPtr = 0;

    RecSci1Flag = 0;

    CalSocFlag = 0;
}
/*****end of 初始化与SCI1接收相关的变量(接收GPS时钟信号)*****/


/*****初始化TimerA*****/
void InitTimerA (void)
{
    *TMRA1_SCR  = 0x0000;
    *TMRA3_SCR  = 0x0000;

    *TMRA1_CTRL = 0xe800;   //与TA0级联
    //bit15-13     111     级联计数模式
    //bit12-9       0100    第一计数源为计数器0的输出
    //bit8-7        00      第二计数源为计数器0的输入引脚
    //bit6(ONCE)    0       0——不停计数,1——Compare发生后计数停止
    //bit5(LENGTH)  0       0——计数到溢出,1——Compare发生后初始化计数值
    //bit4(DIR)     0       0——向上计数,1——向下计数
    //bit3(Co Init) 0       0——不允许此模块内的其他计数器强制初始化本计数器
    //bit2-0        000     输出模式

    *TMRA3_CTRL = 0xec00;   //与TA2级联
    //bit15-13     111     级联计数模式
    //bit12-9       0110    第一计数源为计数器2的输出
    //bit8-7        00      第二计数源为计数器0的输入引脚
    //bit6(ONCE)    0       0——不停计数,1——Compare发生后计数停止
    //bit5(LENGTH)  0       0——计数到溢出,1——Compare发生后初始化计数值
    //bit4(DIR)     0       0——向上计数,1——向下计数
    //bit3(Co Init) 0       0——不允许此模块内的其他计数器强制初始化本计数器
    //bit2-0        000     输出模式

    *TMRA0_CMP1 = 0xffff;
    *TMRA2_CMP1 = 0xffff;
    //级联方式下,CMP1事件发生时高位计数器加1,这样设置当TA0、TA2计数到0时,TA1、TA3恰好加1
}
/*****end of 初始化TimerA*****/


/*****初始化TimerB*****/
void InitTimerB (void)
{
    if (DaMode)     //用TimerB控制DA输出(5SF.004.080)
    {
        //禁止TBx输出,使DA控制引脚处于高阻状态
        *TMRB0_SCR = 0x0000;
        *TMRB1_SCR = 0x0000;
        *TMRB2_SCR = 0x0000;
        *TMRB3_SCR = 0x0000;
    }
}
/*****end of 初始化TimerB*****/


/*****初始化Timer C0*****/
void InitTimerC0(void)
{
    *TMRC0_SCR = 0x0000;

    *TMRC0_CTRL = 0x0000;   //DA芯片FAULT状态输入
    //bit 8-7 00  输入为0脚输入
}
/*****end of 初始化Timer C0*****/


/*****初始化Timer C1*****/
void InitTimerC1(void)
{
    *TMRC1_SCR = 0x0;

    *TMRC1_CMP1 = 600;  //15us对应的计数值

    *TMRC1_CTRL = 0x3020;
    //bit15-13     001     计数模式 :对第一计数源上升沿计数
    //bit12-9       1000    第一计数源为IPBus=40MHz
    //bit8-7        00      第二计数源为计数器0的输入引脚
    //bit6(ONCE)    0       0——不停计数,1——Compare发生后计数停止
    //bit5(LENGTH)  1       0——计数到溢出,1——Compare发生后初始化计数值
    //bit4(DIR)     0       0——向上计数,1——向下计数
    //bit3(Co Init) 0       0——不允许此模块内的其他计数器强制初始化本计数器
    //bit2-0        000     输出模式
}
/*****end of 初始化Timer C1*****/


/*****初始化TimerD*****/
void InitTimerD (void)
{
    *TMRD1_SCR  = 0x0000;

    *TMRD1_CTRL = 0xe800;   //与TD0级联
    //bit15-13     111     级联计数模式
    //bit12-9       0100    第一计数源为计数器0的输出
    //bit8-7        00      第二计数源为计数器0的输入引脚
    //bit6(ONCE)    0       0——不停计数,1——Compare发生后计数停止
    //bit5(LENGTH)  0       0——计数到溢出,1——Compare发生后初始化计数值
    //bit4(DIR)     0       0——向上计数,1——向下计数
    //bit3(Co Init) 0       0——不允许此模块内的其他计数器强制初始化本计数器
    //bit2-0        000     输出模式

    *TMRD0_CMP1 = 0xffff;
    //级联方式下,CMP1事件发生时高位计数器加1,这样设置当TD0计数到0时,TD1恰好加1

    *TMRD0_SCR  = 0x0440;
    //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)  01  外部输入(CAPTURE)触发模式,01——上升沿触发方式
    //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——禁用外部引脚输出

    *TMRD3_SCR  = 0x4000;
    //bit15(TCF)    0   Compare发生标志
    //bit14(TCFIE)  1   1——允许Compare中断
    //bit13(TOF)    0   计数器溢出标志
    //bit12(TOFIE)  0   1——允许溢出中断
    //bit11(IEF)    0   输入信号边沿触发(CAPTURE)标志
    //bit10(IEFIE)  0   1——允许输入信号边沿触发中断(捕捉发生时发出中断)
    //bit9(IPS)     0   1——对外部引脚输入信号反向
    //bit8(INPUT)   x   反映外部引脚的电平状态,只读
    //bit7-6(CAPTURE MODE)  00  外部输入(CAPTURE)触发模式,00——禁用CAPTURE触发
    //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 初始化TimerD*****/


/*****启动多个定时器开始同步计数*****/
void StartTimer(void)
{
    *TMRD0_CNTR = 2;
    *TMRA0_CNTR = 5;    //与TD0的计数值同步
    *TMRA2_CNTR = 8;    //与TD0的计数值同步

    asm (movei #0x3000,X:0x1166);   //*TMRD0_CTRL = 0x3000;     //测量输入PPS信号
    asm (movei #0x3000,X:0x1106);   //*TMRA0_CTRL = 0x3000; //测量输入键相脉冲信号
    //bit15-13     001     计数模式 :对第一计数源上升沿计数
    //bit12-9       1000    第一计数源为IPBus=40MHz
    //bit8-7        00      第二计数源为计数器0的输入引脚
    //bit6(ONCE)    0       0——不停计数,1——Compare发生后计数停止
    //bit5(LENGTH)  0       0——计数到溢出,1——Compare发生后初始化计数值
    //bit4(DIR)     0       0——向上计数,1——向下计数
    //bit3(Co Init) 0       0——不允许此模块内的其他计数器强制初始化本计数器
    //bit2-0        000     输出模式

    asm (movei #0x3100,X:0x1116);   //*TMRA2_CTRL = 0x3100;     //测量整形后的机端电压脉冲信号
    //bit15-13     001     计数模式 :对第一计数源上升沿计数
    //bit12-9       1000    第一计数源为IPBus=40MHz
    //bit8-7        10      第二计数源为计数器2的输入引脚
    //bit6(ONCE)    0       0——不停计数,1——Compare发生后计数停止
    //bit5(LENGTH)  0       0——计数到溢出,1——Compare发生后初始化计数值
    //bit4(DIR)     0       0——向上计数,1——向下计数
    //bit3(Co Init) 0       0——不允许此模块内的其他计数器强制初始化本计数器
    //bit2-0        000     输出模式
}
/*****end of 启动多个定时器开始同步计数*****/


/*****初始化GPIOB*****/
void InitPortB( void )
{
    *GPIO_B_IAR   = 0x0000;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  00000000   Disable Port B Interrupt for  Software Testing

    *GPIO_B_IENR  = 0x0001;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  00000001  1——Interrupt detection enable

    *GPIO_B_IPOLR = 0x00ff;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  11111111  1——Interrupt polarity active low

    *GPIO_B_PUR   = 0x00ff;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  11111111  0——Port D Pull up disable

    *GPIO_B_DDR   = 0x0038;     //开启外部看门狗    0x0030;
    //bit15-8 xxxxxxxx  保留
    //bit8-0  00111000  1——Output

    *GPIO_B_DR  = 0x0000;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  00000000  Port D Data 0's

    *GPIO_B_PER   = 0x0000;
    //bit15-8 xxxxxxxx  保留
    //bit8-0  00000000  1——peripheral manages the GPIO pin
}
/*****end of 初始化GPIOB*****/


/*****初始化GPIOD*****/
void InitPortD( void )
{
    *GPIO_D_IAR   = 0x0000;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  00000000   Disable Port D Interrupt for  Software Testing

    *GPIO_D_IENR  = 0x0001;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  00000001  1——Interrupt detection enable

    *GPIO_D_IPOLR = 0x00ff;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  00000001  1——Interrupt polarity active low

    *GPIO_D_PUR   = 0x00ff;
    //bit15-8 xxxxxxxx  保留
    //bit7-0  11111111  0——Port D Pull up disable

    *GPIO_D_DDR = 0x003e;
    //bit15-8 xxxxxxxx  保留
    //bit8-0  00111110  1——Output

    *GPIO_D_DR  = 0x003e;       //所有前面板信号灯熄灭
    //bit15-8 xxxxxxxx  保留
    //bit7-0  00111110

    *GPIO_D_PER   = 0x00c0; //enable TXD1,RXD1
}
/*****end of 初始化GPIOD*****/


/*****初始化GPIOE*****/
void InitPortE (void)
{
    if (!DaMode)    //用GPIOE控制DA输出(5SF.004.080/V1之后版本)
    {
        *GPIO_E_IAR   = 0x0000;
        //bit15-8 xxxxxxxx  保留
        //bit7-0  00000000   Disable Port E Interrupt for  Software Testing

        *GPIO_E_IENR  = 0x0000;
        //bit15-8 xxxxxxxx  保留
        //bit7-0  00000000  1——Interrupt detection enable

        *GPIO_E_IPOLR = 0x0000;
        //bit15-8 xxxxxxxx  保留
        //bit7-0  00000000  0——Interrupt polarity active high

        *GPIO_E_PUR   = 0x00ff;
        //bit15-8 xxxxxxxx  保留
        //bit7-0  11111111  0——Port D Pull up disable

        *GPIO_E_DDR   = 0x0000;     //设置为输入口,相当于高阻态
        //bit15-8 xxxxxxxx  保留
        //bit8-0  00000000  1——Output

        *GPIO_E_DR  = 0x0000;
        //bit15-8 xxxxxxxx  保留
        //bit7-0  00000000  Port D Data 0's

        *GPIO_E_PER = 0x000f;
        //0——Port E is GPIO
    }
}
/*****end of 初始化GPIOE*****/

⌨️ 快捷键说明

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