教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

ARM中断基础知识 - 图文(3)

来源:网络收集 时间:2026-09-06
导读: 09 for(ch='a';ch 10 if( (VIC0RAWINTR 12 EINT0PEND = 0x1; 13 } 14 uart_putchar(ch); 15 delay(); 16 } 17 } 按一下KEY打印出一个“+”,然后查询VIC0RAWINTR 寄存器,发现中断触发信号没有了,说明EINT0PEND的

09 for(ch='a';ch<='z';ch++){

10 if( (VIC0RAWINTR & 0x1)==0x1){ 11 uart_putchar('+'); 12 EINT0PEND = 0x1; 13 }

14 uart_putchar(ch); 15 delay(); 16 } 17 }

按一下KEY打印出一个“+”,然后查询VIC0RAWINTR 寄存器,发现中断触发信号没有了,说明EINT0PEND的值直接影响到VIC0RAWINTR 的值,VIC0RAWINTR 跟随EINT0PEND变化,EINT0PEND的变化实时反映到VIC0RAWINTR上来,当然得看MASK有没有屏蔽掉中断触发信号啦。

信号接着往上面传送,直到cpu内核检测到中断触发信号并产生对应的操作为止: 使用VIC(中断向量控制器) VIC0INTENABLE的描述:

对应的清除寄存器VIC0INTENCLEAR的描述:

VIC0SELECT的描述:

我们这里选择IRQ方式,也可以是FIQ方式。 VIC0IRQSTATUS的描述:

VIC0FIQSTATUS描述:

我们选择IRQ方式,并且使能中断功能,看能不能到VIC0IRQSTATUS中查询到中断触发信号:

01 void mymain(void){ 02 unsigned char ch; 03 unsigned int temp=0; 04

05 /* set GPNIO to EINT mode , 10 --> Eint */ 06 temp = GPNCON ; 07 temp &= ~(0x3<<0); 08 temp |= (0x2<<0); 09 GPNCON = temp; 10

11 /* set EINT triger mode to falling eage ,01x = Falling edge */ 12 temp = EINT0CON0 ;

13 temp &= ~(0x7<<0); 14 temp |= (0x3<<0); 15 EINT0CON0 = temp; 16

17 /* EINT0MASK[0] = 0 : disMask EINT0 */ 18 temp = EINT0MASK ; 19 temp &= ~(0x1<<0); 20 //temp |= (0x1<<0); 21 EINT0MASK = temp; 22

23 /* VIC0INTENABLE[0]=1 : enable interrupt */ 24 /* clear bit by VIC0INTENCLEAR */ 25 temp = VIC0INTENABLE ; 26 temp &= ~(0x1<<0); 27 temp |= (0x1<<0); 28 VIC0INTENABLE = temp; 29

30 /* VIC0INTSELECT[0] = 0 : set to IRQ */ 31 temp = VIC0INTSELECT ; 32 temp &= ~(0x1<<0); 33 VIC0INTSELECT = temp; 34

35 uart_init(); 36 while (1) 37 {

38 for(ch='a';ch<='z';ch++){

39 if( (VIC0IRQSTATUS & 0x1)==0x1){ 40 uart_putchar('+'); 41 EINT0PEND = 0x1; 42 }

43 uart_putchar(ch); 44 delay(); 45 } 46 }

按下KEY出现下面的现象: 按一次打印一个“+”,说明

如果是把VIC0INTENABLE对应位设置成disable,那么就会屏蔽掉中断信号,这里相当于又建立了一道关卡,它没同意就不能把信号传达到上一层。

1 /* VIC0INTENABLE[0]=0 : disable interrupt */ 2 /* clear bit by VIC0INTENCLEAR */ 3 temp = VIC0INTENABLE ; 4 temp &= ~(0x1<<0); 5 VIC0INTENABLE = temp;

现象:

怎么按KEY也不会打印出“+”,说明中断信号被屏蔽了。

当信号传达到这里的时候还得继续往上,还需要经过中断优先级的寄存器,判别那个中断优先级最高,这个只影响到中断的顺序,不影响中断信号的有无。但是在cpu内核的最近的地方还有个中断的开关,是个总开关——CPSR的I/F-bit,默认是关闭的。这个一打开了就会把中断信号送给cpu内核了。

打开最后这个总开关有两个写法,一个是在汇编里面写,一个是在c语言里面的嵌入汇编里面写,我们这里在c语言潜入汇编来写:

1 /* init CPSR I-bit */ 2 //0101,0011 3 __asm{

4 mov r0,#0x53 5 msr cpsr,r0 6 }

但是编译的时候有警告,说应该吧这个r0定义成一个变量:

ARM中断基础知识 - 图文(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/444994.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)