主题中讨论的其他器件:TM4C123
您好!
我有一个很大的项目、它包含许多模块。 一个模块负责通过 UART 与主机系统进行通信。 我禁用 FIFO 并为每个发送的字节使用一个中断、我的问题是、当我使用 UARTTxIntModeSet (UART_base、UART_TXINT_MODE_FIFO)时、在某个随机的时间时刻、在消息传输期间不会触发中断。 它可以在数百万次成功的交易之后发生、绝对是随机发生的。 另一方面、当我使用 UARTTxIntModeSet (UART_base、UART_TXINT_MODE_EOT)时、一切都正常、但我对 MODE_FIFO 为什么会出现这样一个奇怪的情况感兴趣、并且我将在我的另一个项目中使用 FIFO 中断。
UART 初始化例程:
void UART_Host_Init (uint32_t 时钟速率) { // //启用 UART 使用的 GPIO 外设。 // SysCtlPeripheralEnable (UART_HOST_PERIPh_GPIO); // //启用 UART 主机时钟 // SysCtlPeripheralEnable (UART_HOST_CLOCK); // //为 UART 模式配置 GPIO 引脚。 // GPIOPinConfigure (UART_HOST_GPIO_RX); GPIOPinConfigure (UART_HOST_GPIO_TX); GPIOPinTypeUART (UART_HOST_GPIO_BASE_PORT、UART_HOST_GPIO_PIN_RX | UART_HOST_GPIO_PIN_TX); // //使用内部16MHz 振荡器作为 UART 时钟源。 // UARTConfigSetExpClk (UART_HOST、时钟速率、UART_HOST_SPEED、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_Two | UART_CONFIG_PAR_NONE)); UARTFIFODisable (UART_HOST); // //如果下面的行未注释,则一切正常 // // UARTTxIntModeSet (UART_HOST、UART_TXINT_MODE_EOT); // //启用 RT -接收超时、TX 和 RX 中断 // IntEnable (UART_HOST_INT_INDEX); UARTIntEnable (UART_HOST、UART_INT_RT | UART_INT_TX | UART_INT_RX); }
在主循环中:
while (1) { // //正在发生一些事情 // if (msgSent = true) { msgSent = false; if (UARTCharPutNonBlocking (UART_HOST、MESSAGE[index++])== false) { #ifdef debug while (1){}; #endif } }
UART 中断:
UARTIntHandler (void) { uint32_t ui32Status; ui32Status = UARTIntStatus (UART_HOST、TRUE);//获取中断状态 UARTIntClear (UART_HOST、ui32Status);//清除断言的中断 // 接收数据 // if (ui32Status & UART_uart_host);//清除 UART32+ (UART_uart_uart_uart_uart_uiCommand) while UART+(UART+ uart_uart_uchart_uart_uart_uart+)+)+(uart_uart_uartuart_uart_uart_uart_uart_uart_uartui //获取接收到的字符 } // 发送数据 // if (ui32Status & UART_INT_TX) { g_ui32UARTIntTransmit++; if (index < length) { if (UARTCharPutNonBlocking (UART_host、message[index+])= false) { #dif debug while (1)}= true ;}= dif}= dif};sendent (u_host = false);sf}= true