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