工具/软件:TI C/C++编译器
大家好
SCIC 外设用于接收 GPS/INS 集成导航系统中的 GPS 信息、T0、T1、T2 启用、SCIC Rx 中断启用、但 SCIC Rx 中断有时会发生、有时不会发生、因此 GPS 信息接收异常。 我找不到原因。 初始化函数、中断函数和主函数的一部分如下所示。主函数的计算量很大。附录是整个程序代码。
波特率=9600;
void SCIC_init (uint32波特率)
{
//注意:SCIC 外设的时钟被打开
//在 InitSysCtrl()函数中
//为 SCI-C 初始化 GPIO
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;//启用 GPIO63的上拉电阻器(SCITXDC)
GpioCtrlRegs.GPBPUD.bit.GPIO62=0;//启用 GPIO62的上拉电阻器(SCIRXDC)
GpioCtrlRegs.GPBQSEL2.bit.GPIO62=3;//异步输入 GPIO62 (SCIRXDC)
GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;//将 GPIO63配置为 SCITXDC 操作
GpioCtrlRegs.GPBMUX2.bit.GPIO62=1;//将 GPIO62配置为 SCIRXDC 操作
EDIS;
SCIC_fifo_init();
// Buad Rate BBR = LSPCLK (37.5MHz)/(BuadRate*8)- 1.
波特率= 37500000/(波特率*8)-1;
// 1停止位,无环回
//无奇偶校验,8个字符位,
ScicRegs.SCICCR.all =0x0007;
//异步模式,空闲线协议
//启用 TX、RX、内部 SCICLK、
scicRegs.SCICTL1.all =0x0003;
//禁用 RX ERR、睡眠、TXWAKE
ScicRegs.SCICTL2.all =0x0003;
ScicRegs.SCILBAUD =波特率& 0xff;
ScicRegs.SCIHBAUD =(波特率>>>8)& 0xff;
scicRegs.SCICCR.bit.LOOPBKENA=0;//禁用回路
//启用接收中断
ScicRegs.SCICTL2.bit.RXBKINTENA=1;
//启用发送中断
ScicRegs.SCICTL2.bit.TXINTENA=1;
//从复位中撤回 SCI
ScicRegs.SCICTL1.bit.SWRESET = 1;
}
中断空 SCIC_Rx_ISR (空)
{
unsigned char t;
while (ScicRegs.SCIRXST.bit.RXRDY)
{
t = ScicRegs.SCIRXBUF.bit.RXDT;
IF (ISDirectGPS)
{
scia_xmit_ex (t);
}
其他
{
IF (SCIC_RX_COUNT < SCI_RX_BUF_MAX)
{
SCIC_RX_BUF[SCIC_RX_COUNT++]= t;
SCIC_RX_NEW = true;
}
}
}
//确认此中断以接收来自组8的更多中断
PieCtrlRegs.PIEACk.bit.ACK8 = 1;
}
MAIN ()
{
(笑声)
while (!(ins_Para.IsNoGPS))
{
IF (SCIC_RX_NEW)
{
//如果有一些新的 GPS 数据
Close_SCIC_RX;
R = UBX_Addbytes (SCIC_RX_BUF、SCIC_RX_COUNT);
SCIC_RX_COUNT = 0;
SCIC_RX_NEW =错误;
OPEN_SCIC_RX;
(笑声)
}
(笑声)
}
(笑声)
}