1.前言
在介绍基于三星exynos4412型号芯片的中断处理之前,我们需要先做的是理解arm的异常处理机制,然后在这个基础之上去学习三星的exynos4412芯片的中断处理。其实exynos4412使用的CPU核就arm的contex-a9芯片。
2.arm异常处理机制
在arm中,首先将处理器的工作模式分为了7种:user模式、system模式、FIQ模式、IRQ模式、SVC模式、undefined模式和abort模式,在cortex-A系列中,多了一种模式:Monitor 监控模式,这是为了执行代码安全监控。在这里,要区分下异常和中断的关系,异常顾名思义就是不正常,与异常相对的就是正常,系统程序在按顺序执行过程就是正常过程,除了这种情况外的都是异常情况,那么中断也是一种异常,鉴于二者之间的这种关系,我们有必要了解下异常的处理:
1)处理器备份CPSR(当前程序状态寄存器)到对应模式下的SPSR(备份程序状态寄存器)
方便异常处理结束之后恢复CPSR
2)配置CPSR寄存器:
(1)切换处理器工作状态到arm状态
(2)修改处理工作模式到相应模式
(3)根据需要使能或禁止中断
3)保存返回地址到对应的模式下的LR寄存器
因为异常工作模式下使用的LR和正常模式下(user和system)的不是同一个物理寄存器
4)跳转到对应的异常向量表中的位置(设置PC为相应的异常向量)
将要跳转的异常向量表中的地址赋值到PC实现跳转到异常处理程序
以上步骤是在异常出现时,CPU主动完成的工作,我们只需要在异常处理程序中完成对异常现象的处理就可以了,返回的时候(这两步是需要程序员来完成的):
1)将SPSR值恢复到CPSR
2)将LR的值恢复到PC实现异常返回
这些都是异常处理以及返回的主要内容
3.中断处理
上述第2章是对异常处理以及返回的主要内容,那么我们来想象下,这些都是在假设中断初始化的基础之上实现的,那么中断初始化都初始化了那些内容呢?这就需要我们对中断有一个基本的认识:对于一个处理器芯片来说,他只认识两种外部中断:快速访问中断和外部中断,这两者的区别只是中断优先级的高低,但是实际上中断有多个,CPU核也有多个,CPU怎么区分外部中断哪是哪、这些中断给那个CPU核来处理,中断的优先级又是什么,这些都是要有人来完成,而完成这个工作的就是中断控制器。
但是中断在到达中断控制器之前,他是先和引脚连接的,使用的引脚复用功能是外部中断,这就要求我们在初始化中断控制器之前先要初始化先这些和引脚以及外部中断相关的寄存器,接下来初始化中断控制器的主要内容就是:
1)全局使能中断控制器
2)使能对应中断源
3)选择CPU核处理该中断
4)配置该中断优先级
5)打开选择的CPU核与中断控制器的接口
综上所述牵涉到的寄存器配置有: