×
单片机 > 单片机程序设计 > 详情

快速学Arm(27)--向量中断控制器VIC(5)

发布时间:2024-06-26 发布时间:
|

接着上篇,再继续讲,我们再看一下IRQ.被设置为IRQ的中断源是可以进行优先级设置的.


在中断源表中,32个中断源都可以被分配为IRQ,那么这些中断源同时到达的时候,先处理哪一个中断?因此不同的IRQ要被分配不同的优先级,而IRQ是,而已被分配(0~15)供16个优先级,其中0优先级最高,而15优先级最低.


当有多个中断请求被分配为IRQ时,VIC会将它们"相或"后,在向处理器发送IRQ信号.


要让外设的中断请求得到响应,需要进行初始化操作.其流程是这样的.


我们再讲一下IRQ中断请求响应的过程,看一下下面的图:


我们来叙述一下:

1.用户正在执行.

2.发送外部中断0中断

3.VIC硬件自动将中断服务程序地址装入到VICVectAddr寄存器中.例如将VICVectAddr14的内容装入到VICVectAddr寄存器中.

4.执行流转至向量表IRQ入口处.

5.在IRQ入口,读取VICVectAddr里的服务程序地址:LDR PC,[PC,#-0x120]

6.中断服务程序结束,继续执行被中断的用户代码.

FIQ优先级最高,响应最迅速,常用于处理系统中最重要紧急的中断事务.一般来说都是用于一些安全处理.FIQ之所以比较快,是因为ARM为FIQ设计了8个专用的寄存器,发送FIQ中断时这8个寄存器无需压站,这使得处理速度被大大提高,中断延迟被缩短.在主函数中使能FIQ中断,然后编写FIQ处理程序即可使用FIQ.下面给出一个FIQ在EInt0中断请求处理中的应用例子:


1.首先通过VICIntSelect选择EINT0的中断类型.

2.使能中断:VICIntEnable=1<

3.中断响应完成后,清楚中断标志并返回:EXTINT=0x01;//清除中断标志

可以将中断请求分配为向量IRQ.优先级也可以在16个中断优先级中进行选择,同时,也可以通过编程屏蔽任一优先级的向量IRQ.每一个中断源都有一个专门的中断优先级寄存器和向量地址寄存器.


每个通道对应着前一篇中的中断源表.下面以向量IRQ在定时器0中断请求处理内的应用为例来描述IRQ的操作.

1.选择中断类型

2.IRQ设置

3.清除中断标志

4.使能中断.
中断响应完成后,还需要执行以下的操作:

T0IR=0x01//清除中断标志.

VICVectAddr=0//通知VIC中断结束



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP432学习笔记:ADC14