📄 init.c
字号:
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 + -