您的位置:首页 > 其它

飞凌OK6410学习之中断的学习 继续。。

2013-03-01 16:35 323 查看
假设我们中断多了,是不是要在程序中一个个的把中断写上去呢?答案是否定的,这里我们就需要用到中断向量控制器;

S3c6410中含有两个中断控制寄存器:



中断控制器的处理机制:

1、发生中断后,矢量地址VICxVECTADDR0~VICxVECTADDR31相应一个寄存器的值就会赋给VICxADDRESS

2、中断服务寄存器就可以根据VICxADDRESS中的值来分辨是哪一个中断,发生中断,肯定该寄存器不为0

下面给出一个例子:

首先,对中断进行初始化



初始化函数为

接下来是初始化代码:


注意:这里有一个很重要的问题涉及到C语言中断的函数指针了

Int_Init函数的参数是一个函数指针unsigned是对这个函数的地址强制进行类型转换

请继续看下面的代码


现在大家应该了解了吧:

下面大概讲讲这个程序处理中断的顺序:

1、  首先对中断进行初始化,同时程序会把interrupt0的地址赋给rVIC0VECTADDR0

2、  当出现外部中断的时候,此时硬件会自动的把rVIC0VECTADDR0的值赋给rVIC0ADDRESS,而rVIC0ADDRESS就能够辨别出是哪组中断(这里指的是这组中断



3、  此时程序会进入中断0的处理程序中,但那时具体还不清楚到底是哪个中断,通过以下代码具体实现



我们外部中断的程序就学习到这里。

                   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息