第06课 中断控制器
第6课 中断体系结构
1. ARM中断体系结构
7种工作模式
异常
2. S3C2440中断体系结构
中断处理过程
相关寄存器
源码分析
7种工作模式
每种工作模式有:
不同的寄存器
不同的权限 (配合mmu)
不同的触发条件
- 上电后位于 svc
- 发生中断,IRQ模式
中断
比如你在家里看电视,怎么知道有客人来
- (查询)每过5分钟去看看有没有人来
- (中断)客人按门铃
程序想知道key被按下
- 查询
- 中断,中断是一种异常,(数据访问中止是一种异常,未定义指令中止也是一种异常)
发生异常之后
- CPU进入异常模式,比如中断模式,或者取址异常模式,相当于切换寄存器
- PC指针=异常入口(固定)
比如要转入中断模式,PC指针会指向0x18 HandleIRQ,0x18,0x08这些地址就叫做异常入口
每个模式都有一组寄存器,有的共用,有的不共用每组独有的寄存器称谓备份寄存器。
模式转换过程中
- 保护现场。
保存非备份寄存器,恢复的时候,恢复保存的内容即可。
怎么用中断,什么“中断”
设置中断,初始化,使能中断
- 中断发生 保护现场
- 中断处理 分便中断源,进行不同的处理,清理中断
- 恢复现场
中断至少涉及5个方面得寄存器
- 使能/禁止寄存器;
- 分辨中断源的状态寄存器;
- 设置中断条件的寄存器;(比如高低电平,上下跳边沿触发)
- 引脚设置即硬件相关的设置
- 优先级寄存器
从芯片手册上的介绍
SUB子 SRC源 PND等待
SUB下一级 MASK屏蔽->屏蔽寄存器
SRCPND显然也是状态寄存器,使得中断源等待处理
MASK另一个屏蔽使能寄存器
Priority优先级寄存器
INTPND看哪些中断源还在等待
MODE 模式寄存器
IRQ FIQ直接送到CPU去
书上有详细介绍
看一个程序首先看makefile
可以看出有四个文件
接下来看代码
一上电跳转到 Reset
可以看出每个异常向量相隔四个字节,一般处理不在这四个字节之内,所以用跳转命令跳转到别处。
比如说跳转到Reset对应的程序
设置栈指针才能调用C函数,关看门狗等等
HandleUndef:
b HandleUndef
此处为死循环,还没进行处理
最后要设置总中断I位使能
每个模式的r13记载着每个模式的栈指针。
通过给cpsr寄存器复制,进入中断模式
进入每个模式的时候,要事先设置好栈指针
ldr sp, =3072
0xd2的值的意思可以在下表寻找
M0~M4代表不同的工作模式
I F位是全局中断,快中断设置。
比如说一开始0xd2-----1101 0010禁止所有的中断及快中断
中断初始化
INTMSK 使能中断源中断
发生中断:
硬件
- 进入中断模式,切换寄存器,其中最重要一个寄存器还有一个sp寄存器
- pc=IRQ入口地址
软件:
sub lr,lr, #4
计算返回地址,当前lr值减去4,有ARM架构决定
- b handle IRQ 计算返回地址“被中断处”的地址
- 保存现场 寄存器
- 调用处理函数
- 分辨中断
- 处理
- 清除
- 恢复被中断程序
中断服务程序
INTOFSET中断源服务程序,判断哪个按键按下
ENTPND是中断等待寄存器意味着正在处理中断,清到可中断状态
最后跳转PC回到中断前程序位置。