主机平台:Linux CentOS 6.5
arm平台:粤嵌GEC210开发板(S5PV210)
中断是arm里面很重要的一个部分,但S5PV210数据手册中中断那一章里讲的基本是一些概述性的内容,没有具体的中断实现流程,如果没有参考例程的话,完全不知到如何入手写一个中断程序。(或者其它地方有,但是我没有找到,哪位知道的麻烦告诉我一下)
下面把一些我认为比较重要的归纳下。因为是个人归纳的,而且有些地方涉及到芯片内部的操作,所以在某些细节方面可能会有不严谨的地方,这些地方我会加一些注释的,但在整体的流程上应该是没有问题的。
此外,下面所有的内容都以IRQ中断为例。
首先是:
中断系统接收到一个由外设来的中断信号时,会执行:
1.检测全局的IRQ中断是否打开。(注:这里也有可能是:若全局的IRQ中断没有打开,中断系统根本不会接收到中断信号)
2.若全局IRQ中断以打开,检查对应外设的中断在中断系统对应寄存器是否使能(注:同上,也可能并非检测)
3.若使能,将对应中断入口地址加载到其所在中断组的VIC0ADDRESS寄存器中,并置位对应的中断状态标志位。(注:这一步的位置不太确定)
4.跳转到异常向量表中,查找IRQ中断的对应入口地址,并进入此地址中执行通用中断服务程序,这个中断服务程序是所有IRQ中断共用的。
5.建立中断所需的环境(注:这里不太清楚具体做了那些工作,至少在我调试过程中,会自动将SP设置为IRQ模式下的对应值)
5.5.这步与中断系统无关,是在程序中通过中断系统的相关寄存器,从通用的中断服务程序跳转到与外设相关的特定中断服务程序。
6.当从特定中断服务程序返回时,会再次进入通用的中断服务程序,
7.从中断服务程序返回,恢复环境,此次中断结束