主题中讨论的其他部件: C2000WARE, SFRA
尊敬的团队:
我们有使用TMS320F2.8384万D的定制板,我们通过 使用FIFO RX ISR的SCIA_BASE从外部HMI接收数据。
如果帧匹配 ,则它工作正常。否则,如果帧不匹配 程序被删除,我们将重新启动主板。
例如
正常工作:
这是0到16的数组中的帧
10.02015亿 0万 000 0亿 0万 1.8亿
20.02015亿 0万 000 0亿 0万 1.8亿
不工作(程序卡住)
0亿 0万 0亿 0亿 0万 0亿
000
FF
123.
请在下面查找代码片段。
void initSCIAFIFO ()
{
中断注册(INT_SCIA_RX,SCiaRXFIFO);
Sci_setConfig (SCIA_BASE,DEVICE_LSPCLK_FREQ,11.52万,(SCI_CONFIG_WLEN_8 |)
sci_config_stop_one |
sci_config_par_none);
sci_enableModule (scia_base);
Sci_resetChannels (SCIA_BASE);
sci_enableFIFO (scia_base);
中断启用(INT_SCIA_RX);
Sci_enableInterrupt (SCIA_BASE,SCI_INT_RXFF);
SCI_DisableInterrupt (SCIA_BASE,SCI_INT_RXERR);
SCI_setFIFO InterruptLevel (SCIA_BASE,SCI_FIFO,TX1,SCI_FIFO,RX1);
sci_performSoftwareReset(SCIA_base);
SCI_resetRxFIFO (SCIA_BASE);
interrupT_clearACKGroup(interrupT_ACK_group9);
}
//
// sciaRXFIFO - SCIA接收FIFO ISR
//
__interrupt void sciaRXFIFO (void)
{
PostTransmission1();
配方=6 ?SCI_readCharArray(SCIA_base,(uint16_t *)(Display_RX_buf),86): Sci_readCharArray(SCIA_base,(uint16_t *)(Display_RX_buf),16);
配方=Display_RX_buf[1];
IF ((Display_RX_buf[0]=SPID[1]&& SPID[1]!=0)||(Display_RX_buf[0]=SPID[2]&&&&SPID[2]!=0)||(Display_RX_buf[0]=SPID[3]&&&SPID[3]&SPID[3]&SPID[2]!=0)|SPID[0)|(RX_buf_0)=SPID[0)|=SPID[0)|=SPID[0)=SPID[0)|(RX_=SPID[0)|=SPID[0)=SPID[0
{
check_setting();
}
SCI_resetRxFIFO (SCIA_BASE); //清除RxFIFO
SCI_resetTxFIFO (SCIA_BASE); //清除TxFIFO
sci_clearOverflowStatus (scia_base); //清除溢出状态
SCI_clearInterruptStatus (SCIA_BASE,SCI_INT_RXFF|SCI_INT_RXERR);//清除中断RX状态
interrupT_clearACKGroup(interrupT_ACK_group9); //清除中断
}
对于不匹配的帧,我们实施了下面的代码来清除中断和基本以及接收器缓冲区变量(Display_RX_buf[1])。例如,如果Display_RX_buf不匹配中的函数代码,我们将清除中断。
但是仍然有问题。 请指导我们解决这个问题。提前感谢您的指导。
IF ((Display_RX_buf[1]=0 && Display_RX_buf[0]=0)||( Display_RX_buf[0]>=20 && Display_RX_buf[1]>=20))
{
SCI_clearInterruptStatus (SCIA_BASE,SCI_INT_RXFF|SCI_INT_RXERR);//清除中断RX状态
SCI_resetRxFIFO (SCIA_BASE);
reset_Display_TX_buf();
SCI_resetTxFIFO (SCIA_BASE);
sci_clearOverflowStatus (scia_base); //清除溢出状态
interrupT_clearACKGroup(interrupT_ACK_group9);
reset_Display_RX_buf();
}
Rgds
Sunil Raj