“线程:C2000WARE”中讨论的其它部件
你好!
我使用 F280025C UC 作为主中继器,通过 SCI (UART)与 WiFi 模块进行通信,以发送和接收 AT 命令及其响应。
我正在使用 Tx FIFO 和 Rx FIFO 中断实现相同的结果。 由于 AT 通信及其对应的响应是一组字符,因此我已 为我的应用程序修改了 SCI_writeCharArray 和 SCI_ReadCharArray。
只要长度n´t 超过最大 FIFO 长度(即16),中断函数和对 AT 通信的响应就可以正常工作。 当响应超过16个字符(大多数情况下)时,会出现 FIFO 溢出,并且我只能读取丢失第一个字符的最后16个字符。
Rx 中断如下所示:
__interrupt void sciaRXISR(void)
{
//ESTOP0;
uint16_t i;
for(i = 0U; i < 100 ; i++)
{
FifoFromWlanUart[FifoFromWlanUartWritePointer] = (uint16_t)
(HWREGH(SCIA_BASE + SCI_O_RXBUF) & SCI_RXBUF_SAR_M);
delay(30000);
if(++FifoFromWlanUartWritePointer>=FifoFromWlanUartLength)
FifoFromWlanUartWritePointer=0;
if((FifoFromWlanUart[i-3] == 0x4F && FifoFromWlanUart[i-2] == 0x4B && FifoFromWlanUart[i-1] == 0xD && FifoFromWlanUart[i] == 0xA) ||
(FifoFromWlanUart[i-6] == 0x45 && FifoFromWlanUart[i-5] == 0x52 && FifoFromWlanUart[i-4] == 0x52 && FifoFromWlanUart[i-3] == 0x4F &&
FifoFromWlanUart[i-2] == 0x52 && FifoFromWlanUart[i-1] == 0xD && FifoFromWlanUart[i] == 0xA))
{
break;
}
}
SCI_clearOverflowStatus(SCIA_BASE);
SCI_clearInterruptStatus(mySCIA_BASE, SCI_INT_RXFF);
//SCI_clearInterruptStatus(mySCIA_BASE, SCI_INT_RXRDY_BRKDT);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}
所以我的问题是, 如何在不出现溢出问题的情况下阅读完整的回答? 有关如何在不出现 FIFO 溢出的情况下读取 Wifi 模块的完整响应的解决方案和建议将非常有帮助。 现在我一直在这个问题上,我真的很希望能有任何帮助。 谢谢你们!!