查看: 713|回复: 0

[经验] 关于ARM9中断控制器的控制流程,图文解说

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-8-31 09:04:38 | 显示全部楼层 |阅读模式
    分享到:
    下面讲讲ARM9中断控制器的控制流程:

    1.首先能识别触发的中断(对应中断源必须打开,然后查询当前中断状态寄存器),硬件会操控PC跳到中断向量入口(IRQ_HANDLE,硬件控制的只要是IRQ中断类型就会进入),在中断跳转函数里面保存现场(保存R0等等工作寄存器)--跳到服务函数(里面进行中断源判断和处理)---恢复现场,基本流程是这样。

    2.中断的触发:高低电平,上升下降沿等等,具体的设置寄存器实现。

    3.中断能否传到CPU?触发以后还要通过许多开关(寄存器设置使能与否)确保到达CPU,这样CPU才能识别(有的中断源是不需要的),有些中断是二级中断,需要开关比较多,注意芯片手册说明




    4.比如我们要触发的是INT_TC这个二级中断信号。好,那么我们要打开的开关是什么呢?在二级中断信号里,INTSUBMSK是二级中断信号的开关,我们要在里面找到INT_TC这个位并设置为1即可。二级中断还得传到一级中控器处理,那么我们先找出INT_TC是属于哪个一级中断信号的,看表里的紫色框起来的是二级属于同一个一级信号的,一级信号处理那个也有个紫色框,INT_ADC就是我们要找到的对应一级信号。而它也有对应的开关,那么就是INTMSK这个控制器。我们把INTMSK里的INT_ADC位设置为1就算成功了。
    代码也就是  
    INTSUBMSK |= ( 0x1 << 9);//因为INT_TC在INTSUBMSK里的第9位,注意从0开始
    INTMSK |= (0x1 << 31); //INT_ADC在INTMSK里的第31位。

    其他的类似外部中断也是这样操作。只是一级中断的可以直接从一级中控器处理,那么就只设置一级中控器的相应开关即可。也就是说,我们要用到的设备接口,我们就把相应的开关打开就可以了,其他的让ARM来处理就可以了。

    5.EIN4_7属于一级中断源,但是该中断源包含EIN4\EIN5\EIN6\EIN7四个子中断源。
    SRCPND源挂起寄存器。
    该寄存器在中断源发出请求时候,处理器就会自动置位该寄存器的相应的位为1.

    注意:根据三星文档知道,该位不受寄存器影响,这个寄存器是屏蔽寄存器。在则在执行服务程序时候,该位不许进行清除,否则会导致连续中断。清除方法是往该位写入1。

    INTMOD中断模式寄存器

    该寄存器决定中断源为FIQ中断还是IRQ中断。

    注意:根据三星文档,INTPND寄存器和INTOFFSET寄存器只对IRQ模式有效

    INTMSK中断屏蔽寄存器

    决定是否屏蔽某中断源

    注意:没有

    PRIORITY优先级寄存器

    决定中断源优先级。

    INTPND中断服务程序标志位

    根据文档说,在中断源没被屏蔽,并且在等待中断服务,优先级也是最最高的置1.啥意思,就是该寄存器对应位置1,表示CPU已经响应该对应的中断请求。

    注意:和SRCPND一样,在中断服务程序时候要清除该对应位。

    INTOFFSET寄存器

    该寄存器和INTPND配合使用的。标明INTPND寄存器里对应IRQ中断反映在INTOFFSET寄存器的值

    注意:也需要清除位

    SUBSRCPND寄存器

    该寄存器与.SRCPND寄存器配合使用,在子中断源发出请求时候,处理器就会自动置位该寄存器的相应的位为1.

    INTSUBMSK寄存器

    该寄存器和INTMSK寄存器一样,只不过是相对于子中断而言而已。

    6.借用别人网站的图

    其中深黑色的就是编程要用的寄存器,而浅黑色的寄存器时CPU根据我们配置的寄存器产生的标志位寄存器。

    7.最后我感觉和51还是比较类似的,设置引脚为外部中断(有的是内部中断),使能,确定优先级,识别到触发,保存现场,处理,恢复现场。嵌入式linux的程序需要和汇编一起组织,目前不是特别熟悉,学习ing~






    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-13 13:18 , Processed in 0.109421 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.