请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C1294NCPDT 大家好、
我必须在配置为9位 UART 模式的应用中使用 UART (UART7)。 我实现了接收结束将由 RX 超时中断签名的逻辑。 中断服务例程如下所示:
void Interrupt (){ uint32_t intState = map_UARTIntStatus (MODBUS_UART、TRUE); if (intState & UART_INT_9BIT){ //首次写入必须是从器件地址 _receivedpdu.unerialize (static_cast) (MAP_UARTCharGet (MODBUS_UART))); MAP_UARTIntClear (MODBUS_UART、UART_INT_9BIT); } IF (intState & UART_INT_RX){ while (MAP_UARTCharsAvail (MODBUS_UART)))}{ _receivedpdu.uniledcast (static_cast) (MAP_UARTCharGet (MODBUS_UART))); } if (intState & UART_INT_RT){ xSemaphoreGiveFromISR (_receiveSemaphore、NULL); MAP_UARTIntClear (MODBUS_UART、UART_INT_RT); }
如您所见、有三个条件:
- 检查我们是否收到了地址帧
- 检查我们是否应该读出数据
- 检查超时:通知 FreeRTOS 线程接收完成
FreeRTOS 线程如下所示:
SetRS485DriverToTxDir (); Send9BitAddress () SendByte (); while (UARTBusy ()); SetRS485DriverToRTxDir (); //如果 (xSemaphoreTake (_receiveSemaphore、50)= pdFALSE)、则等待50 ms;} 错误返回
但我经历过、我会收到接收超时中断、即使没有人向我发送数据(没有电缆连接到电路板)、因此信号量将被获取、而不会超时。 另一个信息:当我通过调试器检查外设时、我看到数据寄存器包含0x500、即:
- 中断错误
- 奇偶校验错误
- EMPY 数据(数据= 0x0)
有人能帮我吗?这种奇怪的行为有什么原因呢?