编写LINUX驱动,中断问题。

发布于 2022-09-23 13:16:17 字数 81 浏览 24 评论 0

一个中断号只能有一个中断处理函数
在中断处理时可以根据SUB SOURCE PENDING REGISTER来判断是TXD,RXD还是ERR产生的中断

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

坚持沉默 2022-09-30 13:16:17

原帖由 wuyunzdh 于 2008-12-17 15:35 发表
我的CPU是三星的2410。内核是2.4.18
在irqs.h中定义了串口中断号
#define IRQ_UART0                28        /* UART0 interrupt */

但是,
我的驱动中定义了三个中断处理函数,一个是接收中断处理函数,一个发送处理函数,一 ...

可以查看串口的状态寄存器,确定到底是哪个中断发生了

只有影子陪我不离不弃 2022-09-30 13:16:17

中断共享,可以看一下ldd上面有讲到。
就是说共享中断的话,一般中断发生,会遍历执行各个共享注册的中断处理程序,于是,就要求这些中断处理程序能加以判断是否是自己的中断,不是的话能尽快退出。

束缚m 2022-09-30 13:16:17

我所说的判断就是在调用这个中断处理程序的时候,能很快知道是不是自己的中断,不是的话就立即返回。如果你使用的是共享中断,这个中断处理程序在编写的时候就需要多考虑一下了。

霞映澄塘 2022-09-30 13:16:17

原帖由 wuyunzdh 于 2008-12-19 12:10 发表
安装中断的代码如下所示:
    ret = request_irq(RX_IRQ(port), s3c2410uart_rx_interrupt, SA_INTERRUPT,
                      "serial_s3c2410_rx", info);
    if (ret) goto rx_failed;
    ret = r ...

SA_INTERRUPT这个flag应该是快速处理中断,并不是共享的。如果是这样的话,那就是说你这些东东(tx,rx)是使用的独立中断

上课铃就是安魂曲 2022-09-30 13:16:17

中断号是共享的,所有相同中断号的ISR都注册到一个链上。
这个连上的ISR都会被调用。
在你的中断处理函数中需要检测状态寄存器才能是哪个中断发生了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文