什么是(中断)句柄?



我正在尝试为 esp32 上的 UART 中断定义一个 ISR,通常,我的程序应该只从传输缓冲区(tx-FIFO)发送和字节数组,一旦传输缓冲区为空就做一个中断,并从传输缓冲区启动同一数组的另一个输出。

目前我找不到如何将特定的 ISR(然后我可以自己定义)分配给UART_TX_DONE_INT中断,这表明传输缓冲区为空。

我卡住的一个主要原因是因为我不知道中断句柄/处理程序是什么,就像这家伙 http://zerothelement21.blogspot.com/2018/05/esp32-uart-interrupt-handling.html 描述它的方式一样。

期望: 我可以定义一个中断,当tx_FIFO为空时触发,我可以自己定义此中断的 ISR。

中断处理程序中断服务例程(ISR)只是硬件在发生中断时调用的功能/例程,在您的情况下,当UART TX FIFO低于某个点时,UART将断言适当的中断标志,然后告诉中断控制器以"停止"CPU,然后调用相应的 ISR。因此,一般流程是将中断处理程序创建为函数,您将再次填充FIFO,将该函数注册为中断服务例程,然后启用中断并启动TX。

幸运的是,在ESP32 中,乐鑫在他们的 SDK 中设置了一些方便的功能来帮助处理中断,请参阅编程指南中的这一部分。The TL;DR是您需要通过调用uart_intr_config()来配置中断,使用uart_isr_register注册自己的处理程序(只需任何C函数都可以),然后使用uart_enable_tx_intr()启用中断。

编辑添加:您是否考虑过您可能不需要编写自定义 ISR 来完成您想要的?签出uart_write_bytes(),它将数据复制到中间环形缓冲区,然后退出,而 SDK 提供的 ISR 将数据传输到 FIFO。

最新更新