什么是(中断)句柄?

问题描述 投票:0回答:1

我试图在esp32上为UART中断定义一个ISR,一般来说,我的程序应该只从发送缓冲区(tx-FIFO)发出字节数组,一旦发送缓冲区为空就做一个中断。从发送缓冲区启动相同数组的另一个输出。

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

我卡住的一个主要原因是因为我没有得到中断处理程序/处理程序的概念,就像这个人qazxsw poi描述的那样。

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

interrupt uart interrupt-handling esp32
1个回答
0
投票

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

幸运的是,在ESP32的情况下,Espressif在他们的SDK中设置了一些便利功能来帮助中断处理,请参阅http://zerothelement21.blogspot.com/2018/05/esp32-uart-interrupt-handling.html。 TL; DR是你需要通过调用this section in the programming guide配置中断,使用uart_intr_config()注册你自己的处理程序(只需要任何C函数),然后使用uart_isr_register启用中断。

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

© www.soinside.com 2019 - 2024. All rights reserved.