工具与软件:
我正在创建一个应用来处理通过 UART 传入的数据。 数据以~600字节的大块提供。 我有一个处理 UART RX 中断的 ISR、配置为在 FIFO 达到2个字节时关闭。 我最初是在监视 UARTRIS 中的溢出标志 OERIS、但是发现即使数据看似已丢失、也没有发生溢出。 我切换到监视 UARTRER 中的 OE 标志、发现 FIFO 每个块多次溢出。 这两个标志之间的区别是什么?在这种情况下、我应该使用哪一个?
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.
工具与软件:
我正在创建一个应用来处理通过 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 保持较短、因此它的主要任务是响应中断、而不是处理数据。