This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:UART 溢出标志和原始溢出中断的差异

Guru**** 1831610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1385187/tm4c1294ncpdt-difference-between-uart-overrun-flag-and-raw-overrun-interrupt

器件型号:TM4C1294NCPDT

工具与软件:

我正在创建一个应用来处理通过 UART 传入的数据。 数据以~600字节的大块提供。 我有一个处理 UART RX 中断的 ISR、配置为在 FIFO 达到2个字节时关闭。 我最初是在监视 UARTRIS 中的溢出标志 OERIS、但是发现即使数据看似已丢失、也没有发生溢出。 我切换到监视 UARTRER 中的 OE 标志、发现 FIFO 每个块多次溢出。 这两个标志之间的区别是什么?在这种情况下、我应该使用哪一个?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我不知道如何在 ISR 中处理接收到的数据、以及是否在 ISR 中清除了任何状态标志。 您可能已将 UARTSR 寄存器清零、因此 UARTRIS 寄存器的 OE 位会清零。 在数据表中、"写入任何值到 UARTECR 寄存器都会清除帧错误、奇偶校验错误、中止错误和溢出错误。"

     我还建议您不要直接在 ISR 中处理数据。 当您处于 ISR 中时、如果您由于 FIFO 溢出或已满而中断、那么 该事件将不会 及时处理、直到您完成数据处理后退出 ISR。  我建议您在 ISR 之外进行数据处理。 在 ISR 中、您只需设置一个标志来指示数据已被接收。 在您的 main()或数据处理函数内部、只有在设置标志时才会触发。 完成数据处理后、您会将标志复位为0。 如果您有输入速度非常快的数据、则 Essene 将使 ISR 保持较短、因此它的主要任务是响应中断、而不是处理数据。