s3c2440外部中断
时间:11-19
来源:互联网
点击:
上文用到了pwm控制蜂鸣器,实现了蜂鸣器频率的改变,有一点不好就是蜂鸣器一直响,可以用一个交互的方式来关闭蜂鸣器。这里就选择按键,开发板上一共4个按键,对应这4个外部中断EINT0,EINT1,EINT2和EINT4(为什么不是EINT0~3呢,让人蛋疼)
其中 key_int 0 1 3都是空函数(这里的对应关系没验证,比如按开发板上的K1不一定执行到key_int1函数)。
要使用外部中断,首先要初始化外部中断。外部中断跟外部引脚F和G复用。要把相应的引脚配置为中断模式:
配置完引脚后,还需要配置具体的中断功能。我们要打开某一中断的屏蔽,这样才能响应该中断,相对应的寄存器为INTMSK有些位对应着多个外部中断;
由于存在位对应着多个外部中断,如上图EINT4~7EINT8~23对应INTMSK一个屏蔽位,所以要精确打开某一个外部中断就要配置EINTMASK。下图只列出了一部分,对于EINT4~23都适用。
外部中断也要有一个触发的方式,选择低电平、高电平、上升沿、下降沿触发等方式,这个要配置EXTINT寄存器
如前面博文gun-ucos的s3c2440处理器中断部分所述,因为中断来的时候硬件会把SRCPND和INTPND置1,所以需要把相应的位清零(通过置1来清零),对于外部中断还要判断具体是哪个外部中断,这就要看EINTPEND寄存器了。这个寄存器同样也要通过置1来清零。
下面给出段代码,当系统启动后开始蜂鸣,如果按下key2 那么设置GPB0位输出模式,并且输出低电平,蜂鸣器停止!
void init_key(void){rGPFCON &= ~0x33f;rGPFCON |= 0x22a;rINTMSK &= ~( (1<0)|(1<1)|(1<2)|(1<4)); /// enable eintrEINTMASK &= ~(1<4); /// enable eint4rEXTINT0 &= ~0x70777;rEXTINT0 |= 0x20222;pIRQ_EINT0 = (uint32)key_int0;pIRQ_EINT1 = (uint32)key_int1;pIRQ_EINT2 = (uint32)key_int3;pIRQ_EINT4_7 = (uint32)eint4_7;}
其中 key_int 0 1 3都是空函数(这里的对应关系没验证,比如按开发板上的K1不一定执行到key_int1函数)。
按键2由eint4_7处理,在这个函数里面清除 rEINTPEND,关闭蜂鸣器:
void eint4_7(void){UINT32 eintpnd;UINT8 index;eintpnd = rEINTPEND;for(index = 4;index < 24;index ++){if(eintpnd & (1
s3c2440外部中 相关文章:
- S3C2440外部中断详解(12-02)
- s3c2440外部中断操作(11-19)
- S3C2440外部中断之按键中断(11-11)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)