Cortex-A7中断系统
-----------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------
1.中断向量表
中断向量表:存放中断向量的表
中断向量:中断服务程序的入口地址或存放中断服务程序的首地址
中断向量表偏移:通过它就可以讲中断向量表存放到任意地址处
1.当某个中断触发以后就会自动跳转到向量表对应的中断服务程序入口地址处.
2.中断向量表都是链接到代码的最前面,但是链接地址的时候并不是最前面,而是在最前面的基础上产生了偏移
2.GIC(general interrupt controller)中断控制器
当GIC接收到外部中断信号以后就会告诉ARM内核,但是ARM内核只提供了4个信号:VFIQ,VIRQ,FIQ,IRQ.
也就是说很多中断源都会传到GIC,然后在转换成对应的信号传给ARM内核。
GIC控制器把中断源分成:1SPI(共享中断) 2、PPI(私有中断) 3、SGI(软件中断)
唯一区分的方法就是给这三类中断分配ID,ID0~ID15给SGI,ID16 ~ ID31给PPI,剩余给SPI
GIC架构分为了两个逻辑块:分发器端和CPU接口端
分发器端作用: 收集所有的中断源,并控制它们的优先级,然后把优先级高的中断源发给CPU接口端
CPU接口端作用: 是分发器与CPU Core之间的桥梁
3.中断使能
要使用某个外设的中断,肯定要先使能这个外设的中断。
中断使能有两部分,一个是总中断使能,另一个中断源的使能
3.1IRQ和FIQ总中断使能
通过寄存器CPSR
3.2中断ID中断
通过寄存器GICD_ISENABLERn和 GIDC_ICENABLERn
3.3中断优先级设置
中断优先级分为抢占优先级和子优先级——
GICC_PMR寄存器: 决定使用几级优先级
GICC_BPR寄存器: 抢占优先级和子优先级各占多少位
D_IPRIORITYR: 某个中断ID的中断优先级设置
4.中断服务函数
使用中断的目的是为了使用中断服务函数。当中断发生以后,中断服务函数就会被调用,而要中断要去做什么事,就可以放到中断服务函数里面去完成。
5.CP15协处理器
CP15协处理器一共有16个32位寄存器,处理器的访问通过指令来完成.
MCR {cond} p15, (opc1), (Rt),(CRn),(CRm),(opc2)
cond:指令执行的条件码,如果忽略的话就表示无条件执行。
opc1:协处理器要执行的操作码。
Rt:ARM 源寄存器,要写入到 CP15 寄存器的数据就保存在此寄存器中。
CRn:CP15 协处理器的目标寄存器。
CRm:协处理器中附加的目标寄存器或者源操作数寄存器,如果不需要附加信息就将
CRm 设置为 C0,否则结果不可预测。
opc2:可选的协处理器特定操作码,当不需要的时候要设置为 0。
-------------------------------------------------------------分割线结束-----------------------------------------------------------------
后话:刚接触,如果有什么说不清楚或者错误的地方,还请谅解。同时麻烦您私信给我,我及时做修改以及补充。
求关注,求支持//一个努力精进的boy…//