ARM7学习笔记——中断向量控制器VIC
2015-09-15 22:15
295 查看
◆向量中断控制器概述
ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。但是芯片内部有许多中断源,最多可以有32个中断输入请求。向量中断控制器的作用就是允许哪些中断源可以产生中断,可以产生哪类中断,产生中断后执行哪段服务程序。
◆允许中断源产生中断
允许中断源产生中断由寄存器VICIntEnable和VICIntEnClr控制,前者使能中断,后者禁止中断。
中断使能寄存器(VICIntEnable):
寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入1时,允许对应的中断源产生中断。
中断使能清零寄存器(VICIntEnClr):
与中断使能寄存器功能相反,向某位写1时,禁止对应的中断源产生。
◆选择产生中断的类型
ARM7DMI内核具有FIQ和IRQ两个中断输入,所有中断源产生的中断都可以选择产生其中一种中断。这通过中断选择寄存器完成。
中断选择寄存器(VICIntSelect):
寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入1时,对应中断源产生的中断为FIQ中断,否则为IRQ中断。
◆中断类型
中断输入请求可以在VIC中被设置为一下三类:
FIQ中断:具有最高优先级;
向量IRQ中断:具有中等优先级;
非向量IRQ中断:具有最低优先级;
◆向量IRQ中断
VIC最多支持16个向量IRQ中断,这些中断被分为16个优先级,并且为每个优先级制定一个服务程序入口地址。在发生向量IRQ中断后,相应优先级的服务程序入口地址被装入向量地址寄存器VICVectAddr中,通过一条ARM指令即可跳转到相应的服务程序入口处,所以向量IRQ中断具有较快的中断响应。
向量控制寄存器(VICVectCntl0~15):
VICVectCntlx[4:0]:分配给此优先级向量IRQ中断的中断源序号,为中断源分配向量IRQ中断的优先级;
VICVectCntlx[5]:该位为1,使能当前优先级的向量IRQ中断,否则为禁止。
寄存器名称最后的数字同时也表示中断的优先级,越小优先级越高。
向量地址寄存器(VICVectAddr0~15):
该寄存器存放对应优先级向量IRQ中断服务程序的入口地址,为对应中断优先级设置服务程序入口地址。
◆非向量IRQ中断
任何中断源都可以设置为非向量IRQ中断。它与向量IRQ的区别在于前者不能为每个非向量IRQ中断源设置服务程序地址,而是所有的非向量IRQ中断都共用一个相同的服务程序入口地址。当有多个中断源被设置为非向量IRQ中断时,需要在用户程序中识别中断源,并分别作出处理。所以非向量IRQ中断响应延时相对较长。
向量地址寄存器(VICDefVectAddr):
VICDefVectAddr寄存器存放非向量中断服务程序的入口地址,当发生非向量中断时,该寄存器中保存的地址存入VICVectAddr寄存器。
ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。但是芯片内部有许多中断源,最多可以有32个中断输入请求。向量中断控制器的作用就是允许哪些中断源可以产生中断,可以产生哪类中断,产生中断后执行哪段服务程序。
◆允许中断源产生中断
允许中断源产生中断由寄存器VICIntEnable和VICIntEnClr控制,前者使能中断,后者禁止中断。
中断使能寄存器(VICIntEnable):
寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入1时,允许对应的中断源产生中断。
中断使能清零寄存器(VICIntEnClr):
与中断使能寄存器功能相反,向某位写1时,禁止对应的中断源产生。
◆选择产生中断的类型
ARM7DMI内核具有FIQ和IRQ两个中断输入,所有中断源产生的中断都可以选择产生其中一种中断。这通过中断选择寄存器完成。
中断选择寄存器(VICIntSelect):
寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入1时,对应中断源产生的中断为FIQ中断,否则为IRQ中断。
VICIntSelect = 1<<14; //选择FIQ VICIntEnable = 1<<14; 使能中断源14
◆中断类型
中断输入请求可以在VIC中被设置为一下三类:
FIQ中断:具有最高优先级;
向量IRQ中断:具有中等优先级;
非向量IRQ中断:具有最低优先级;
◆向量IRQ中断
VIC最多支持16个向量IRQ中断,这些中断被分为16个优先级,并且为每个优先级制定一个服务程序入口地址。在发生向量IRQ中断后,相应优先级的服务程序入口地址被装入向量地址寄存器VICVectAddr中,通过一条ARM指令即可跳转到相应的服务程序入口处,所以向量IRQ中断具有较快的中断响应。
向量控制寄存器(VICVectCntl0~15):
VICVectCntlx[4:0]:分配给此优先级向量IRQ中断的中断源序号,为中断源分配向量IRQ中断的优先级;
VICVectCntlx[5]:该位为1,使能当前优先级的向量IRQ中断,否则为禁止。
寄存器名称最后的数字同时也表示中断的优先级,越小优先级越高。
向量地址寄存器(VICVectAddr0~15):
该寄存器存放对应优先级向量IRQ中断服务程序的入口地址,为对应中断优先级设置服务程序入口地址。
◆非向量IRQ中断
任何中断源都可以设置为非向量IRQ中断。它与向量IRQ的区别在于前者不能为每个非向量IRQ中断源设置服务程序地址,而是所有的非向量IRQ中断都共用一个相同的服务程序入口地址。当有多个中断源被设置为非向量IRQ中断时,需要在用户程序中识别中断源,并分别作出处理。所以非向量IRQ中断响应延时相对较长。
向量地址寄存器(VICDefVectAddr):
VICDefVectAddr寄存器存放非向量中断服务程序的入口地址,当发生非向量中断时,该寄存器中保存的地址存入VICVectAddr寄存器。
相关文章推荐
- hdoj 1166 敌兵布阵
- Android之MediaPlayer——SurfaceView的简单使用
- UVALive 6653 Pattern Locker(组合数学)
- Processing 教程(17) - Lerp and Lerp
- jsp知识点总结
- 趣吃饭相关 资料
- 网易2016两道题Assuming Digits && Best Compression Algorithms
- Linux下多线程编程
- OSSIM
- 2015/9/15 Python基础(12):模块和包
- java设计模式学习笔记---适配器
- 赵文成 VMware Workstation nat 借助宿主机上网 (移动虚拟机需要重新添加vmdk文件)
- QQ浏览器X5内核问题汇总 转
- 关键字(linux 、系统调用、open、umask、文件权限) blog.sina.com.cn/s/blog_695a54a00100ni93.html
- Win32 线程知识点梳理二
- 核心动画1、(初解)
- HDOJ 1877 又一版 A+B(进制转换,水)
- Flume前述(二)--功能配置
- Cascade Adaboost级联分类器的训练
- Cascade Adaboost级联分类器的训练