- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学习arm中断
中断原理(定时器中断,外部中断,串口中断)
一,简单介绍
VIC(向量中断控制器)包括:FIQ, IRQ, 非IRQ ;
快速中断请求(FIQ)要求具有最高优先级。如果分配给FIQ 的请求多于1 个,VIC
将中断请求“相或”后向ARM 处理器产生FIQ 信号。当只有一个中断被分配为FIQ 时可
实现最短的FIQ 等待时间,因为FIQ 服务程序只要简单地启动器件的处理就可以了。但如
果分配给FIQ 级的中断多于1 个,FIQ 服务程序从VIC 中读出一个字来识别产生中断请求
的FIQ 中断源是哪一个。
向量 IRQ 具有中等优先级。该级别可分配32 个请求中的16 个。32 个请求中的任意
一个都可分配到16 个向量IRQ slot 中的任意一个,其中slot0 具有最高优先级,而slot15
则为最低优先级。
非向量 IRQ 的优先级最低。
VIC 将所有向量和非向量IRQ“相或”向ARM 处理器产生IRQ 信号。IRQ 服务程序
可通过读取VIC 的一个寄存器立即启动并跳转到相应地址。如果有任意一个向量IRQ 发
出请求,VIC 则提供最高优先级请求IRQ 服务程序的地址,否则提供所默认程序的地址。
该默认程序由所有非向量IRQ 共用。默认程序可读取另一个VIC 寄存器以确定哪个IRQ
被激活。
VIC 中所有的寄存器都为字寄存器。不支持字节和半字的读和写操作。
重点讲IRQ (向量中断)
二 ,VIC 寄存器
1,中断选择寄存器(VICIntSelect - 0xFFFFF00C,读/写)
该寄存器将 32 个中断请求分别分配为FIQ 或IRQ。
一般选IRQ时:VICIntSelect = 0x00;
2,向量控制寄存器0-15(VICVectCnt l0-15 - 0xFFFFF200-23C,读/写)
上面什么意思:不要将把相同的中断编号分配给多于一个使能的向量IRQ slot。?
3 向量地址寄存器0-15(VICVectAddr0-15 - 0xFFFFF100-13C,读/写)
一般(以Slot0为例):VICVectAddr0 = (uint32)IRQ_TIME0 ;
4 向量地址寄存器(VICVectAddr - 0xFFFFF030,读/写)
VICVectAddr = 0x00; // 通知VIC中断处理结束
5 默认向量地址寄存器(VICDefVectAddr - 0xFFFFF034,读/写)
这些寄存器保存非向量 IRQ 中断服务程序(ISR)的地址。
例: VICDefVectAddr = (uint32)nIRQ_TIME;
6 中断使能寄存器(VICIntEnable - 0xFFFFF010,读/写)
7 IRQ 状态寄存器(VICIRQStatus - 0xFFFFF000,只读)
该寄存器读取使能并分配为 IRQ 的中断请求的状态,它不对向量和非向量IRQ 进行
区分
void __irq nIRQ_TIME()
{
uint32 tmp;
tmp = VICIRQStatus;
if( tmp time0)
{
……
}
if( tmp time1)
{
……
}
}
8 FIQ 状态寄存器(VICFIQStatus - 0xFFFFF004,只读)
三 定时器中断
一个寄存器:
中断寄存器(IR: 定时器0 - T0IR:0x定时器1 - T1IR:
0xE0008000)
中断寄存器包含 4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中
的对应位会置位,否则为0。向对应的IR 位写入1 会复位中断。写入0 无效。
A IRQ
#include config.h
#define BEEP 1 5 // P0.5引脚控制Beep,高电平蜂鸣
#define LED1 1 16
#define LED2 1 17
/****************************************************************************
* 名 称:IRQ_Time0()
* 功 能:定时器中断服务程序,取反BEEP控制口。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void __irq IRQ_Time0(void)
{
if( (IO1SETLED1) == 0 )
{
原创力文档


文档评论(0)