测试ARM9的外部中断功能
- /*******************************************
- *文件名称:EINT.c
- *实现功能:测试外部中断的操作
- *作者:jianqi
- *版本:1.0
- **********************************************/
- #include"2440addr.h"//包含2440相关寄存器的设置
- #include"def.h"
- #defineLED15
- #defineLED26
- #defineLED37
- #defineLED48
- #defineKEY11
- #defineKEY24
- #defineKEY32
- #defineKEY40
- #defineBit(x)(1<
- #defineOutput(x)(1<<2*x)//将对应IO置为输出
- #defineLED_On(x)rGPBDAT=~Bit(x)//点亮对应LED
- /*******************************************
- *名称:Key1_ISR
- *功能:key1控制LED1亮灭
- *入口参数:无
- *出口参数:无
- **********************************************/
- void__irqKey1_ISR(void)//EINT1中断服务程序
- {
- intled;
- rSRCPND=rSRCPND|(0x01<<1);//清除中断标志位
- rINTPND=rINTPND|(0x01<<1);//清除中断标志位
- led=rGPBDAT&(0x1<
- if(led==0)
- {
- rGPBDAT=rGPBDAT|(0x1<
- }
- else
- {
- rGPBDAT=rGPBDAT&~(0x1<
- }
- }
- /*******************************************
- *名称:Key2_ISR
- *功能:key2控制LED2亮灭
- *入口参数:无
- *出口参数:无
- **********************************************/
- void__irqKey2_ISR(void)//EINT4中断服务程序
- {
- intled;
- rSRCPND=rSRCPND|(0x01<<4);//清除中断标志位
- rINTPND=rINTPND|(0x01<<4);//清除中断标志位
- if(rEINTPEND&(1<<4))
- {
- rEINTPEND=rEINTPEND|(0x1<<4);//清除中断标志位
- led=rGPBDAT&(0x1<
- if(led==0)
- {
- rGPBDAT=rGPBDAT|(0x1<
- }
- else
- {
- rGPBDAT=rGPBDAT&~(0x1<
- }
- }
- }
- /*******************************************
- *名称:Key3_ISR
- *功能:key3控制LED3亮灭
- *入口参数:无
- *出口参数:无
- **********************************************/
- void__irqKey3_ISR(void)//EINT2中断服务程序
- {
- intled;
- rSRCPND=rSRCPND|(0x01<<2);//清除中断标志位
- rINTPND=rINTPND|(0x01<<2);//清除中断标志位
- led=rGPBDAT&(0x1<
- if(led==0)
- {
- rGPBDAT=rGPBDAT|(0x1<
- }
- else
- {
- rGPBDAT=rGPBDAT&~(0x1<
- }
- }
- /*******************************************
- *名称:Key4_ISR
- *功能:key4控制LED4亮灭
- *入口参数:无
- *出口参数:无
- **********************************************/
- void__irqKey4_ISR(void)//EINT0中断服务程序
- {
- intled;
- rSRCPND=rSRCPND|0x1;//清除中断标志位
- rINTPND=rINTPND|0x1;//清除中断标志位
- led=rGPBDAT&(0x1<
- if(led==0)
- {
- rGPBDAT=rGPBDAT|(0x1<
- }
- else
- {
- rGPBDAT=rGPBDAT&~(0x1<
- }
- }
- /*******************************************
- *名称:Main
- *功能:初始化外部中断相关寄存器
- *入口参数:无
- *出口参数:无
- **********************************************/
- voidMain(void)
- {
- rGPBCON=(1<<2*LED1)|(1<<2*LED2)|(1<<2*LED3)|(1<<2*LED4);//设置四个LED为输出
- rGPBDAT=0xffff;//全部熄灭
- rGPFCON=0xaaaa;//0~7外部中断
- rEXTINT0=0x20222;//下降沿中断
- rEINTMASK=~(1<<4);//不屏蔽外部中断0,1,2,4
- rEINTPEND=(1<<4);//0,1,2,4产生中断
- rSRCPND=0x17;//外部中断
- rINTPND=0x17;//外部中断使能
- rINTMOD=0x00;//全部为IRQ中断
- rINTMSK=~0x17;//不屏蔽外部中断
- pISR_EINT0=(U32)Key4_ISR;
- pISR_EINT1=(U32)Key1_ISR;
- pISR_EINT2=(U32)Key3_ISR;
- pISR_EINT4_7=(U32)Key2_ISR;
- while(1)
- {
- ;
- }
- }
评论