假设我们中断多了,是不是要在程序中一个个的把中断写上去呢?答案是否定的,这里我们就需要用到中断向量控制器;
S3c6410中含有两个中断控制寄存器:
中断控制器的处理机制:
1、发生中断后,矢量地址VICxVECTADDR0~VICxVECTADDR31相应一个寄存器的值就会赋给VICxADDRESS
2、中断服务寄存器就可以根据VICxADDRESS中的值来分辨是哪一个中断,发生中断,肯定该寄存器不为0
下面给出一个例子:
首先,对中断进行初始化
初始化函数为
接下来是初始化代码:
注意:这里有一个很重要的问题涉及到C语言中断的函数指针了
Int_Init函数的参数是一个函数指针unsigned是对这个函数的地址强制进行类型转换
请继续看下面的代码
现在大家应该了解了吧:
下面大概讲讲这个程序处理中断的顺序:
1、 首先对中断进行初始化,同时程序会把interrupt0的地址赋给rVIC0VECTADDR0
2、 当出现外部中断的时候,此时硬件会自动的把rVIC0VECTADDR0的值赋给rVIC0ADDRESS,而rVIC0ADDRESS就能够辨别出是哪组中断(这里指的是这组中断
3、 此时程序会进入中断0的处理程序中,但那时具体还不清楚到底是哪个中断,通过以下代码具体实现
我们外部中断的程序就学习到这里。