中断控制

发布于 2022-09-21 01:43:29 字数 253 浏览 13 评论 0

利用arm的外部中断时,需要在linux下设置中断控制寄存器吗?例如INTMOD SRCCON这些等。
每次发生中断后,是不是要对有些状态寄存器重新设置。没有操作系统时好象需要,但在操作系统下,在中断处理函数中,我没有设置任何和中断有关的寄存器了。好象也能中断。
  ------------------是不是中断寄存器都是由操作系统自动设置的呀

[ 本帖最后由 bsdhnit 于 2008-9-5 16:30 编辑 ]

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

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

发布评论

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

评论(4

我还不会笑 2022-09-28 01:43:29

原帖由 bsdhnit 于 2008-9-5 13:27 发表
利用arm的外部中断时,需要在linux下设置中断控制寄存器吗?例如INTMOD SRCCON这些等。
每次发生中断后,是不是要对有些状态寄存器重新设置。没有操作系统时好象需要,但在操作系统下,我没有回中断发生后设置 ...

看看驱动程序,是不是完成了这个设置。

娇柔作态 2022-09-28 01:43:29

不熟悉ARM,不过一般中断控制器的处理主要是由操作系统统一处理的吧,具体的中断中主要是处理自己针对的外设相关的操作,一般不会处理中断控制器。

绮筵 2022-09-28 01:43:29

系统在引导的时候由loader来完成,中断控制器的初始化工作,建立起中断向量列表(如果采用中断向量的话),ARM体系结构下通常会有这样的代码:
handler
        B       P_abort                                           ; Handler Programme abort
        B       D_abort                                         ; Handler Data abort
        B       .                                                     ; handlerReserved
        LDR     PC,     =HandlerIRQ
        LDR     PC,     =HandlerFIQ
        LDR     PC,     =HandlerEINT0                   ; 0x20
        LDR     PC,     =HandlerEINT1
        LDR     PC,     =HandlerEINT2
        LDR     PC,     =HandlerEINT3
        LDR     PC,     =HandlerEINT4567

   
这就是你的中断向量列表,当中断发生后,运行相应的代码,将中断的中断号提交给linux(这项工作应该在loader中进行,或者你叫他BIOS也可以),linux利用这个中断号,检查先前谁通过request_irq申请过这个中断号,如果找到的话调用request_irq中指定的中断处理程序。
好了大体流程是这样的,现在就有一个方法的选择问题。通常的做法是当中断发生后,由BIOS或loader记录下中断号,然后将中断号发往linux并清除中断的pending、开中断,剩下的就是linux根据中断号做相应的调用,这样做可以实现中断的快速响应,如果在你的驱动开中断的话,系统的中断将会被关闭很长时间而得不到响应。
当然你也可以选择其他的操作方法,根本不用BIOS或loader,完全由linux来控制底层,只不过是可以移植性要受到影响~~

[ 本帖最后由 .kaka 于 2008-9-7 16:26 编辑 ]

梦晓ヶ微光ヅ倾城 2022-09-28 01:43:29

LINUX下的中断是由OS处理的,中断发生,向OS发出信号,OS根据中断,进行相应的处理。

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