作者:Lee
本人已测试通过,代码如下:
#include “def.h”
#include “option.h”
#include “2440addr.h”
#include “2440lib.h”
#include “2440slib.h”
#include “Uart.h”
int recnt,flag;
void GPG_Init(void)
{
rGPGCON=0×80A882;//Enable EINT[19,15,14,13,11,8],other input
rGPBUP=0×0;//pull up
}
void __irq Eint_Sv(void)
{
U32 a,b,c;
flag=1;
a=rSRCPND;
rSRCPND=a;
b=rINTPND;
rINTPND=b;
c=rEINTPEND;
rEINTPEND=c;
switch(c)
{
case 0×100:Uart_Printf(”Key1 Press!\n”);recnt=1;break;
case 0×800:Uart_Printf(”Key2 Press!\n”);recnt=2;break;
case 0×2000:Uart_Printf(”Key3 Press!\n”);recnt=3;break;
case 0×4000:Uart_Printf(”Key4 Press!\n”);recnt=4;break;
case 0×8000:Uart_Printf(”Key5 Press!\n”);recnt=5;break;
case 0×80000:Uart_Printf(”Key6 Press!\n”);recnt=6;break;
}
}
void Int_Init(void)
{
rINTMSK=0xffffffdf;
rEXTINT1=0×22202002;//filter disable,falling_edege
rEXTINT2=0×2000;
rEINTMASK&=0xF716FF;
rINTMOD=0×0;//irq mode
pISR_EINT8_23=(unsigned)Eint_Sv;
}
int Main()
{
clkset();
Uart_Init();
GPG_Init();
Int_Init();
while(1)
{
if(flag==1)
{
flag=0;
Uart_Printf(”Key%d Release!\n”,recnt);
}
}
}