我按照阿南给的按键中断例子改了下按键的中断口而已 然后下载到2440上运行,但是就是没有反应,经自己检查,好像没有错误了
#include "def.h" #include "option.h" #include "2440addr.h" #include "2440lib.h" //#include "uart.h"
#define KEY1 (1 << 0)//GPF0,EINT0 #define KEY2 (1 << 2)//GPF2,EINT2 #define KEY3 (1 << 3)//GPG3,EINT11 #define KEY4 (1 << 11)//GPG11,EINT19
#define LED1 (1 << 4)//GPF4 #define LED2 (1 << 5)//GPF5 #define LED3 (1 << 6)//GPF6 #define LED4 (1 << 7)//GPF7
/******************************************************************************************* 函数原形:void __irq IRQ_KEY(void) 功能描述:键盘中断处理程序,当产生键盘中断后将读取键值,重新刷新LED显示 参 数:无 *******************************************************************************************/ void __irq IRQ_KEY(void) { // unsigned int i; ClearPending(BIT_EINT8_23); rEINTPEND = 0xffffff; rGPGCON = rGPGCON & (~((3 << 6) | (3 << 22)));//设置为输入状态 if (rGPGDAT & KEY3){ rGPFDAT |= LED3; } else { rGPFDAT &= ~LED3; } if (rGPGDAT & KEY4){ rGPFDAT |= LED4; } else { rGPFDAT &= ~LED4; } rGPGCON |= ((2 << 6) | (2 << 22));//重新设置外部中断输入功能 } /******************************************************************************************* 函数原形:void __irq IRQ_KEY(void) 功能描述:键盘中断初始化,将按键输入管脚设置成外部中断输入功能,双边沿触发,IRQ中断模式 参 数:无 *******************************************************************************************/ void EINT_Init(void) { //==============================设置IO口为中断输入模式============================= rGPGCON &= (~((3 << 6) | (3 << 22)));//将相应位清零 rGPGCON |= ((2 << 6) | (2 << 22)); //rGPGCON[23:22],[7:6]=10b,即GPG[11,9]为外部中断输入功能 //================================================================================= //===============================设置外部中断控制寄存器======================= rEXTINT1 = rEXTINT1 & (~(7 << 12)) | (6 << 12);//EINT11下降沿触发中断 rEXTINT2 = rEXTINT2 & (~(7 << 12)) | (6 << 12);//EINT19下降沿触发中断 //============================================================================
pISR_EINT8_23 = (unsigned int)IRQ_KEY;//中断服务程序入口 rPRIORITY = 0x00000000; // 使用默认的固定的优先级 ClearPending(BIT_EINT8_23); // 清除中断标志位
rEINTPEND = 0xffffff; //清除外部中断未决寄存器的全部位 rINTMOD = 0x00000000; // 所有中断均为IRQ中断 rINTMSK &= (~BIT_EINT8_23); //使能外部中断0,2,8_23 rEINTMASK &= (~((1 << 11) | (1 << 19))); //使能EINT11,EINT19 }
void Main(void) {
rGPFCON = (rGPFCON & 0x00ff) | 0x5500;//设置GPF[7:4](LED[4:1])为输出功能 rGPFDAT |= LED1 | LED2 | LED3 | LED4; EINT_Init(); while (1); } // end of main(...) |