【1】正常启动流程
1.设备一上电,中断向量表作为第一段执行程序
2.初始化异常向量表基地址协处理器(默认是0,修改后异常跳转时,PC值=基地址+向量表位置偏移)
3.禁用MMU内存管理单元
4.分配栈空间,初始化各个模式下的栈空间(user栈初始化放在最后)
5.跳转到main执行程序
【2】IRQ中断响应原理
假设产生中断时,CPU当中正在执行一段程序(正常情况),突然之间产生外部中断,整个CPU的相应以及处理流程:
1.CPU相应流程(CPU自己完成)
1)复制备份CPSR到SPSR_IRQ
2)配置CPSR寄存器
设置工作状态为arm态
修改工作模式为IRQ模式
禁用相应中断(IRQ)
3)保存返回地址到LR_IRQ
4)设置PC到异常向量表中的IRQ处理项(0x18)
2.根据异常向量表中的跳转语句跳转到IRQ_Handle处理程序(程序员写的)
1)调整LR的值,为异常结束返回做准备
2)入栈保护寄存器数据
3)跳转到IRQ_Handle处理函数
4)出栈恢复数据
5)返回退出异常程序,并恢复CPSR
【3】中断初始化配置
1.谁产生的中断
2.什么时候产生中断
3.中断怎么到达SOC
4.产生的中断交给哪个CPU去处理
5.同时产生多个中断时,怎么处理
6.当一个IRQ中断正在处理的时候,又来了同类型的一个中断怎么办
【4】GIC中断控制器作用
中断控制器GIC的作用
1.当多个中断同时产生的时候,中断管理器将对这些中断进行排队,将优先级最高的转发给CPU处理,其他再进行排队等待
2.当一个中断正在处理的时候,外设又产生另一个中断,中断管理器会对这个中断进行记忆,等上一个响应完