測試ARM9的外部中斷功能
- /*******************************************
- *文件名稱:EINT.c
- *實現(xiàn)功能:測試外部中斷的操作
- *作者:jianqi
- *版本:1.0
- **********************************************/
- #include"2440addr.h"http://包含2440相關(guān)寄存器的設(shè)置
- #include"def.h"
- #defineLED15
- #defineLED26
- #defineLED37
- #defineLED48
- #defineKEY11
- #defineKEY24
- #defineKEY32
- #defineKEY40
- #defineBit(x)(1<
- #defineOutput(x)(1<<2*x)//將對應(yīng)IO置為輸出
- #defineLED_On(x)rGPBDAT=~Bit(x)//點亮對應(yīng)LED
- /*******************************************
- *名稱:Key1_ISR
- *功能:key1控制LED1亮滅
- *入口參數(shù):無
- *出口參數(shù):無
- **********************************************/
- void__irqKey1_ISR(void)//EINT1中斷服務(wù)程序
- {
- 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亮滅
- *入口參數(shù):無
- *出口參數(shù):無
- **********************************************/
- void__irqKey2_ISR(void)//EINT4中斷服務(wù)程序
- {
- 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亮滅
- *入口參數(shù):無
- *出口參數(shù):無
- **********************************************/
- void__irqKey3_ISR(void)//EINT2中斷服務(wù)程序
- {
- 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亮滅
- *入口參數(shù):無
- *出口參數(shù):無
- **********************************************/
- void__irqKey4_ISR(void)//EINT0中斷服務(wù)程序
- {
- intled;
- rSRCPND=rSRCPND|0x1;//清除中斷標志位
- rINTPND=rINTPND|0x1;//清除中斷標志位
- led=rGPBDAT&(0x1<
- if(led==0)
- {
- rGPBDAT=rGPBDAT|(0x1<
- }
- else
- {
- rGPBDAT=rGPBDAT&~(0x1<
- }
- }
- /*******************************************
- *名稱:Main
- *功能:初始化外部中斷相關(guān)寄存器
- *入口參數(shù):無
- *出口參數(shù):無
- **********************************************/
- voidMain(void)
- {
- rGPBCON=(1<<2*LED1)|(1<<2*LED2)|(1<<2*LED3)|(1<<2*LED4);//設(shè)置四個LED為輸出
- rGPBDAT=0xffff;//全部熄滅
- rGPFCON=0xaaaa;//0~7外部中斷
- rEXTINT0=0x20222;//下降沿中斷
- rEINTMASK=~(1<<4);//不屏蔽外部中斷0,1,2,4
- rEINTPEND=(1<<4);//0,1,2,4產(chǎn)生中斷
- 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)
- {
- ;
- }
- }
評論