zoukankan      html  css  js  c++  java
  • ARM9的中断控制器

    简要复习一下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_TCINTSUBMSK里的第9位,注意从0开始

    INTMSK |= (0x1 << 31); //INT_ADCINTMSK里的第31位。

     

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

     

    5.EIN4_7属于一级中断源,但是该中断源包含EIN4EIN5EIN6EIN7四个子中断源。

    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~

  • 相关阅读:
    PHP实现无限极分类
    html2canvas生成并下载图片
    一次线上问题引发的过程回顾和思考,以更换两台服务器结束
    Intellij IDEA启动项目报Command line is too long. Shorten command line for XXXApplication or also for
    mq 消费消息 与发送消息传参问题
    idea 创建不了 java 文件
    Java switch 中如何使用枚举?
    Collections排序
    在idea 设置 git 的用户名
    mongodb添加字段和创建自增主键
  • 原文地址:https://www.cnblogs.com/Forever-LJX/p/5807775.html
Copyright © 2011-2022 走看看