ARM 学习笔记整理(二)

六、中断体系结构

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

         上图为S3C2440 ARM处理的框图,从上图我们可以看到ARM920T是实现ARMv4T指令集的内核,而下面的功能模块是各个厂家基于这个内核设计的,各个功能模块的寄存器通过地址映射到ARM920T的地址空间中(比如我们在芯片手册中看到的各种控制器的寄存器地址),并通过AMBA总线和内核模块进行通信,比如中断控制器,nand flash控制器等。这个框图为我们清晰的展示了一个处理器的结构,让我们能更好的理解和使用一个处理器,我们可以模仿这种结构,通过在处理器外部使用FPGA芯片设计我们自己的中断控制器等模块,通过将FPGA中的寄存器地址映射到处理器地址空间中,让处理器来进行中断服务。

        CPU在运行的过程中是如何知道有中断产生,当有中断事件发生的时候,硬件会设置中断控制器中的某个寄存器(比如中断悬挂寄存器),CPU在每执行完一个指令时,通过硬件查看这个寄存器(通过AHB总线查看中断控制器中的寄存器),如果发现所关注的事件发生了,则中断当前程序流程,跳转到一个固定的地址处理这事件,最后返回继续执行被中断的程序。

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

         上图是三星公司为S3C2440处理器设计的分级中断控制器结构,采用分级中断结构的目的是为了灵活的控制各种中断,满足不同应用的需要。从上图可以看出,对于Request sources(with sub-register)类型的中断,在SRCPND寄存器前还有两个寄存器可以用来控制,当Request sources(with sub-register)类型中的中断源被触发后,SUBSRCPND寄存器中的相应位被置1,如果此中断没有被SUBMASK寄存器屏蔽,则它在SRCPND寄存器中的相应位被置1,如果SRCPND寄存器中的中断没有被MASK寄存器屏蔽或者是快速中断(FIQ)的话,将被进一步处理。对于Request sources(without sub-register)类型的中断,中断发生后直接设置SRCPND寄存器,后续的处理同上所述。

        从上面的分析可知,中断的产生是从源开始,逐渐的设置各个寄存器,最后产生对应的中断。中断的清除也应该从源开始清除,如下过程,这个在中断处理程序的编程中经常用到:

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

        某一类型的中断(可能由多个中断源组成)具有相同的优先级,他们可能同时或者先后产生中断,但在INTPND中只有这一类型的中断的相应位被置1,然后由中断服务程序通过特定的寄存器来区分是那个中断源产生的中断,再进行相应的处理。

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 上面的第(4)条,通常异常向量表中的地址是相应的异常处理函数,而PC的值究竟是多少是根据异常中断的类型由ARM内核设计决定的,比如:地址0x00是复位向量,0x04是未定义指令终止模式的向量地址,0x08是管理模式的向量地址,通过SWI指令进入此模式,等等。CPSR寄存器的工作模式位就对应了ARM处理器的7种工作模式,而7种工作模式分别对应各自的向量地址,在设计ARM内核的时候就由硬件设置PC寄存器,这样软件和硬件就结合起来了。

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客当一个异常发生时,ARM CPU进入的7中工作模式:

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
         上面是从ARM CPU的硬件结构上理解了中断处理的详细过程,下面给出一个实际的例子,从软件的角度来进一步的理解ARM CPU的中断处理过程:

ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客

 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 ARM 学习笔记整理(二) - 北极星 - xiebingsuccess的博客
 

猜你喜欢

转载自blog.csdn.net/xiebingsuccess/article/details/88824217
今日推荐