jz2440 中断体系结构

ARM 129浏览

一: arm体系中断模式

@1: FIQ 快速中断模式

@2:IRQ中断模式

@3: SVC 管理模式 ------操作系统的保护模式

@4:USR 用户模式 -----ARM处理器正常的运行状态

@5:SYS 系统模式 ---运行某些特权的操作系统任务

@6:UND 未定义指令终止模式

@7: Abt : 数据访问终止模式

除了用户模式,其他六种都属于特权模式,正常情况下程序都运行在用户模式下。

另外ARM有两种工作状态:

1:ARM 工作状态;指计算机运行32位指令

2:Thumb状态:指计算机运行在16位指令

ARM920T有31个32位的通用寄存器,6个状态寄存器,总共37个寄存器。这37个寄存器分为7组。每组16个通用寄存器和一个状态寄存器或者2个状态寄存器。其中每种工作模式下都有自己的副本,当切换到另一种模式时,这个副本将被使用。这些寄存器又被称作备份寄存器

下图是7种工作模式寄存器的分组情况

图中R0和R15可以直接访问,即R0-R15即可以存数据又可以存地址。其中R13--R15稍微特殊一些。其中R13是存放当前模式下所保存的栈的指针,所以R13又称作栈指针寄存器。当执行BL子程序调用的指令,R14得到R15(程序计数器PC)的备份,而当发生中断或者异常时候对应的R14会保存R15的返回值,所以R14称为程序连接器。R15是程序计数器。

每种工作模式不仅有R0---R15, 16种通用寄存器还有第17个寄存器CPSR,当前程序状态寄存器。

CPSR 中各位意义如下:

(1)T位: 当T位置1时是thump 状态,否则处于ARM状态

(2)I,F位:两位为中断禁止位,I位置1为中断禁止,F位置1 为快速中断禁止

除了上述的CPSR寄存器外还有SPSR寄存器,此寄存器作用是:当切换到另外一种工作模式时,SPSR保存前一个CPSR寄存器的工作模式值,这样返回到前一个工作模式时候,可以将SPSR寄存器的工作模式值再返回到CPSR中。

中断发生到中断程序完成到返回的步骤如下:

1:当一个中断发生时候,R14链接器存期会保存前一个工作模式下的下一条即将执行指令的地址。对于ARM状态是当前PC的值加4或者加8.

2:将CPSR的状态寄存器的值复制到异常模式的SPSR中

3:将CPSR的工作模式位设为这个异常的对应的工作模式

4:令PC指等于这个异常模式在异常向量表中的地址。即跳转去执行异常向量表中的相应指令。

中断执行完成之后退回之前的工作模式:

1:前面的R14链接寄存器存放了中断之前的工作模式的指令指针的地址,将它减去4或者8赋值给PC指针

2:将SPSR的值赋值给CPSR

二:中断控制器

1:CPU获取外设的两种方法:

       @1 : 查询遍历

       @2:中断方式

2:CPU的处理中断的过程(大部分CPU处理中断的过程基本相同,只是细节上有所差异):

    @1:中断控制器汇集各种外设发射的中断信号,然后告诉CPU

    @2:CPU保护当前模式的运行环境,调用中断服务程序(ISR)来处理中断

    @3:在ISR中通过读取中断控制器的寄存器的值来判断是哪种外设发出的中断信号,并进行相应的处理

    @4:清除中断

    @5:最后恢复之前被中断的程序模式,进行运行

3:中断处理框图如下:

(1)如果是外部中断源信号触发之后,SRCPND寄存器相应的位会被置1,如果没有被INITMASK寄存器屏蔽或者被快速中断的话,他将近一不被处理

(2)如果是中断源信号(Request sources),SUBSRCPND寄存器会被置为1,如果不被SUBMASK屏蔽的话,它在SRCPND的寄存器中相应的位会被置为1.它只会的处理和外部中断源一样了

综上所述使用中断的步骤如下:

(1)设置好中断模式的堆栈,当发生中断时候,CPU进入中断模式,这时使用之前设置好的堆栈

(2)准备好中断函数.

  (3)进入退出中断模式需要保存和恢复中断运行的环境

  (4)根据具体中断设置外设

  (5) 确定中断方式

中断函数的准备:

(1)异常向量表的准备

(2)中断服务程序(ISR)

   (3) 清楚中断