中断分类:
1.由软件中断指令SWI引起的软件中断。SWI中断可以实现从用户模式到特权模式的切换。一般用于特权操作的系统程序。
2.由外设引起的硬件中断。arm有两个中断控制信号 一个是fiq一个是irq 。中断控制器是这两个中断和多个外部中断之间的桥梁。通过设置cpsr的6 7位可以使能或者禁止这两类中断。
中断响应时间:
外部中断信号发出到取出中断服务程序的第一条指令经历的时间。FIQ模式下备份寄存器最多,保证了FIQ不需要花更多的时间去备份寄存器数据,而ldm和stm的执行时间是跟操作的寄存器列表中寄存器数量成正比的。
可重入的中断处理程序和不可重入的中断处理程序:
可重入的中断处理程序是指当前中断服务程序执行时屏蔽了同类中断,例如IRQ中断处理程序在cpsr中将I位置1了,再次发生IRQ中断时便不响应。即不嵌套响应中断。一般情况下arm中断是不可重入的。
不可重入中断就是中断处理程序中允许新的IRQ或者FIQ中断。
使能IRQ中断的代码:
使能FIQ中断的代码:
禁止IRQ中断的代码:
禁止FIQ中断的代码:
arm硬件中断发生的检测:
执行完当前指令后,查询FIQ和IRQ引脚电平,并检查CPSR中I位和F位的状态。
arm硬件中断的处理流程:
一.arm内核自动完成的动作:
(1)复制cpsr的到spsr_fiq/spsr_irq
(2)可选操作 设置处理器的状态位CPSR[5] 设置处理器进入相应异常模式CPSR[4:0] 设置中断禁止位禁止相应中断CPSR[7:6]
(3)跟新lr_irq/lr_fiq
(4)设置pc到相应的异常向量
二.跳转到中断处理函数:
如果使用B指令的话,只能实现指令前后32m地址空间的跳转 所以一般采用mov或者ldr指令
例如mov pc,#数值 该数值(0-255)*22n
例如ldr pc,[pc + offset] 这里存储目标地址的的存储单元必须在当前指令前后的4KB范围内
进入中断处理程序后必须做的三件事情:
1.保存当前模式下没有被自动分组保存的寄存器
2.确定中断源,判断发生了什么中断
3.计算出响应的中断服务程序的入口地址。
三.中断处理完成后的返回:
1.通用寄存器的恢复
2.状态寄存器的恢复
3.pc指针的恢复
4.开中断
版权声明:本文为leftover_crazy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。