测试ARM9的外部中断功能
2011-03-27 23:42
246 查看
/******************************************* * 文件名称:EINT.c * 实现功能:测试外部中断的操作 * 作者:jianqi * 版本:1.0 **********************************************/ #include"2440addr.h" //包含2440相关寄存器的设置 #include"def.h" #define LED1 5 #define LED2 6 #define LED3 7 #define LED4 8 #define KEY1 1 #define KEY2 4 #define KEY3 2 #define KEY4 0 #define Bit(x) (1<<x) //将某位置位 #define Output(x) (1<<2*x) //将对应IO置为输出 #define LED_On(x) rGPBDAT=~Bit(x) //点亮对应LED /******************************************* * 名称:Key1_ISR * 功能:key1控制LED1亮灭 * 入口参数:无 * 出口参数:无 **********************************************/ void __irq Key1_ISR(void) //EINT1中断服务程序 { int led; rSRCPND=rSRCPND|(0x01<<1); //清除中断标志位 rINTPND=rINTPND |(0x01<<1); //清除中断标志位 led=rGPBDAT&(0x1<<LED1); if (led==0) { rGPBDAT=rGPBDAT|(0x1<<LED1); } else { rGPBDAT=rGPBDAT&~(0x1<<LED1); } } /******************************************* * 名称:Key2_ISR * 功能:key2控制LED2亮灭 * 入口参数:无 * 出口参数:无 **********************************************/ void __irq Key2_ISR(void) //EINT4中断服务程序 { int led; rSRCPND=rSRCPND|(0x01<<4); //清除中断标志位 rINTPND=rINTPND |(0x01<<4);//清除中断标志位 if(rEINTPEND&(1<<4)) { rEINTPEND=rEINTPEND|(0x1<<4); //清除中断标志位 led=rGPBDAT&(0x1<<LED2); if (led ==0) { rGPBDAT=rGPBDAT|(0x1<<LED2); } else { rGPBDAT=rGPBDAT&~(0x1<<LED2); } } } /******************************************* * 名称:Key3_ISR * 功能:key3控制LED3亮灭 * 入口参数:无 * 出口参数:无 **********************************************/ void __irq Key3_ISR(void) //EINT2中断服务程序 { int led; rSRCPND=rSRCPND|(0x01<<2); //清除中断标志位 rINTPND=rINTPND |(0x01<<2); //清除中断标志位 led=rGPBDAT&(0x1<<LED3); if (led==0) { rGPBDAT=rGPBDAT|(0x1<<LED3); } else { rGPBDAT=rGPBDAT&~(0x1<<LED3); } } /******************************************* * 名称:Key4_ISR * 功能:key4控制LED4亮灭 * 入口参数:无 * 出口参数:无 **********************************************/ void __irq Key4_ISR(void) //EINT0中断服务程序 { int led; rSRCPND=rSRCPND|0x1; //清除中断标志位 rINTPND=rINTPND |0x1; //清除中断标志位 led=rGPBDAT&(0x1<<LED4); if(led==0) { rGPBDAT=rGPBDAT|(0x1<<LED4); } else { rGPBDAT=rGPBDAT&~(0x1<<LED4); } } /******************************************* * 名称:Main * 功能:初始化外部中断相关寄存器 * 入口参数:无 * 出口参数:无 **********************************************/ void Main(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) { ; } }
相关文章推荐
- 多个功能子程序的中断例程测试程序
- 多个功能子程序的中断例程测试程序
- STM32学习之路-按键中断测试(外部中断)
- IAR+Proteus7.6仿真MSP430单片机PORT1外部中断功能
- STM32外部中断测试
- 如果主存中的某页正在与外部设备交换信息,缺页中断时可以将这一页淘汰吗?为了实现正确的页面调度,应如何扩充页表的功能?
- AVR系列之外部中断测试
- ARM7测试外部方波信号(利用GPIO口和定时器中断)
- 外部中断
- 转 - 动态载入及操作外部JS文件的几种方法(未测试)
- oracle外部表的测试学习
- BeagleBone Black板第十课:测试PWM功能
- nose测试中修改nose_html_reporting插件,使生成的html报告加入显示截图功能
- 功能测试过程
- STM32_外部中断(寄存器版)_笔记
- STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关系
- 网站测试基本方法-6. 应用程序特定的功能测试
- 测试用例设计白皮书--功能图分析方法
- 功能缺陷的测试方法流程
- CnBlogs.Com用到的CSS控制的代码折叠功能测试