ARM中断深入分析几点

1.程序发生中断后,是如何跳转到中断程序里面的?

2.执行完中断后,如何返回到原来被打断的地方接着执行呢?

3.ARM处理器的流水线结构对中断返回地址的计算有什么影响?

4.ARM7,ARM9处理器流水线结构一个是3级一个是5级,为什么中断返回地址是相同的?

5.ARM启动后是SVC模式,发生中断后进入什么模式?

6.发生中断后,哪些事情是需要ARM自动完成?哪些是需要编程实现的?

  读书留痕,思考留果

1.程序发生中断后,是如何跳转到中断程序里面的?

  首先要执行完当前指令!然后自动完成以下事情:

  CPSR---->SPSR_irq(IRQ模式)(逆过程不能自动完成)

  PC-4  ----> R14_irq

  PC <---- 0X00000018(irq中断向量表的入口地址)

程序员需要补充做的事情有:

R0----R12,和LR的值入栈。

用户处理函数放在irq中断向量表的入口地址,以供跳转。

2.执行完中断后,如何返回到原来被打断的地方接着执行呢?

  恢复R0--R12,出栈;

  R14-4 ----> PC

  SPSR_irq---->CPSR

3.ARM处理器的流水线结构对中断返回地址的计算有什么影响?

  pc始终指向当前正在执行指令的下两条指令处(PC-8).执行完当前的,就变为PC-4。保存的就是PC-4.

4.ARM7,ARM9处理器流水线结构一个是3级一个是5级,为什么中断返回地址是相同的?

  因为:pc始终指向当前正在执行指令的下两条指令处(PC-8),不管是几级流水线。

5.ARM启动后是SVC模式,发生中断后进入什么模式?

  IRQ模式

6.发生中断后,哪些事情是需要ARM自动完成?哪些是需要编程实现的?

ARM自动完成:

 CPSR---->SPSR_irq(IRQ模式)(逆过程不能自动完成)

  PC-4  ----> R14_irq

  PC <---- 0X00000018(irq中断向量表的入口地址)

需要编程实现的:

  R0----R12,和LR的值入栈。

  用户处理函数放在irq中断向量表的入口地址,以供跳转。

今天的学习就到这里了。

  

05-28 20:31