安防监控知识
电气知识|LPC2000系列ARM向量中断控制器(VIC)
2016-03-09  浏览:41
安防之家讯:向量中断控制器概述

ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。但是芯片内部有许多中断源, 最多可以有32个中断输入请求。向量中断控制器的作用就是允许哪些中断源可以产生中断、可以产生哪类中断、产生中断后执行哪段服务程序。 中断源列表 允许中断源产生中断

芯片内部许多部件都可以作为中断源,但并不是每个中断源都需要在中断情况下进行操作,也可以通过其它方法来处理各种状态。

比如通过串口发送一段数据,可以选择在一批发送结束后产生中断,然后在中断服务程序中发送下一批数据。也可以通过查询发送标志位来决定什么时候发送下一批数据。

允许中断源产生中断由寄存器VICIntEnable和VICIntEnClr控制,前者使能中断,后者禁止中断。

中断使能寄存器(VICIntEnable):

寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入1时,允许对应的中断源产生中断。

中断使能清零寄存器(VICIntEnClr):

与中断使能寄存器的功能相反,向某位写入1时,禁止对应的中断源产生中断。

选择产生中断的类型

ARM7TDMI内核具有FIQ和IRQ两个中断输入,所有中断源产生的中断都可以选择产生其中一种中断。这通过中断选择寄存器完成。

中断选择寄存器(VICIntSelect):

寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入1时,对应中断源产生的中断为FIQ中断,否则为IRQ中断。

中断类型

中断输入请求可以在VIC中被设置为以下三类:

FIQ中断:具有最高优先级;

向量IRQ中断:具有中等优先级;

非向量IRQ中断:具有最低优先级;

向量IRQ中断

VIC最多支持16个向量IRQ中断,这些中断被分为16个优先级,并且为每个优先级指定一个服务程序入口地址。在发生向量IRQ中断后,相应优先级的服务程序入口地址被装入向量地址寄存器VICVectAddr中,通过一条ARM指令即可跳转到相应的服务程序入口处,所以向量IRQ中断具有较快的中断响应。

非向量IRQ中断

任何中断源都可以设置为非向量IRQ中断。它与向量IRQ中断的区别在于前者不能为每个非向量IRQ中断源设置服务程序地址,而是所有的非向量IRQ中断都共用一个相同的服务程序入口地址。

当有多个中断源被设置为非向量IRQ中断时,需要在用户程序中识别中断源,并分别作出处理。所以非向量IRQ中断响应延时相对较长。

向量IRQ中断相关寄存器

VICVectCntl0~15和VICVectAddr0~15两类寄存器与向量IRQ中断设置有关,前者为中断源分配向量IRQ中断的优先级,后者为该中断优先级设置服务程序入口地址。寄存器名称最后的数字同时也代表该寄存器控制的向量IRQ中断的优先级,数值越小优先级越高。

注意:如果将同一个中断源分配给多个使能的向量IRQ中断,那么该中断源发生中断时,会使用最高优先级(最低编号)的寄存器设置。

向量IRQ中断相关寄存器

向量控制寄存器(VICVectCntl0~15):

VICVectCntlx[4:0]:分配给此优先级向量IRQ中断的中断源序号;

VICVectCntlx[5]:该位为1,使能当前优先级的向量IRQ中断。否则为禁止。

向量地址寄存器(VICVectAddr0~15):

该寄存器中存放对应优先级向量IRQ中断服务程序的入口地址。

非向量IRQ中断相关寄存器

向量地址寄存器(VICDefVectAddr):

VICDefVectAddr寄存器存放非向量中断服务程序的入口地址,当发生非向量中断时该寄存器中保存的地址存入VICVectAddr寄存器。

产生中断后的服务程序地址

在发生向量IRQ中断后,VIC能将对应中断的服务程序地址存入VICVectAddr寄存器中。如果为非向量中断,将把VICDefVectAddr寄存器的值存入该寄存器。在异常向量表的IRQ异常入口处放置一条指令,将VICVectAddr寄存器的内容装入程序计数器(PC),就可以跳转到当前中断的服务函数。 这样的设计可以减小中断响应延时。

向量地址寄存器(VICVectAddr):

中断状态寄存器

如果使用了多个非向量IRQ中断或多个FIQ中断,那么在发生中断后要在程序中查找中断源。通过IRQ状态寄存器和FIQ状态寄存器可以了解到这些中断源的中断请求状态。

任何在VIC中使能的中断都会把中断请求反映在“所有中断状态寄存器(VICRawIntr)”中。

所有中断状态寄存器(VICRawIntr):

FIQ状态寄存器(VICFIQStatus): IRQ状态寄存器(VICIRQStatus): 软件中断寄存器

在一些特殊场合或者调试时,可能需要使用软件强制产生某个中断请求。

软件中断寄存器(VICSoftInt):

软件中断清零寄存器(VICSoftIntClear): 保护使能寄存器

在某些场合可能需要禁止在用户模式下访问VIC寄存器,以提高软件的安全等级。

软件中断寄存器(VICSoftInt):

IRQ中断的设计实例

设置外部中断0产生向量IRQ中断后执行中断服务程序“IRQ_Eint0( )”。

图示IRQ中断的发生过程 使用VIC的注意要点

如果在片内RAM中调试程序,并使用了中断,那么必须将存储器映射控制设置为内部RAM模式;

将多个中断源设置为FIQ,将增加中断响应延时,所以建议FIQ中断只有一个中断源;

ADS1.2规定在定义中断服务函数时必须加入关键字“__irq”,保证函数返回时会切换处理器模式;

在退出中断服务程序时要清零相应外设的中断标志,以及VICVectAddr寄存器,为响应下次中断作好准备。

VIC相关启动代码分析

安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 安防之家 的产品:
  • 安防监控资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 Bybc.cn SYSTEM All Rights Reserved