|
#include "2410addr.h"
#define LED1 (1<<5) // rGPB[5] =1 ;
#define LED2 (1<<6) // rGPB[6] =1 ;
#define LED3 (1<<7) // rGPB[7] =1 ;
#define LED4 (1<<8) // rGPB[8] =1 ;
#define KEY1 (1<<1) // rGPF[1] =1 ;
#define KEY2 (1<<4) // rGPF[4] =1 ;
#define KEY3 (1<<2) // rGPF[2] =1 ;
#define KEY4 (1<<0) // rGPF[0] =1 ;
/*******************************************************************************************
函数原形:void __irq IRQ_KEY(void)
功能描述:键盘中断处理程序,当产生键盘中断后将读取键值,重新刷新LED显示
参 数:无
*******************************************************************************************/
void __irq IRQ_KEY(void)
{
ClearPending(BIT_EINT4_7);
rEINTPEND = 0xffffff;
rGPFUP = 0xf800; // KEY [7:0] => PU En
rGPFCON=0xfcc0; //KEY[7:0] => INPUT;
if ( !(rGPFDAT & KEY1) )
rGPBDAT=rGPBDAT & ~LED1;
if ( !(rGPFDAT & KEY2) )
rGPBDAT=rGPBDAT & ~LED2;
if ( !(rGPFDAT & KEY3) )
rGPBDAT=rGPBDAT & ~LED3;
if ( !(rGPFDAT & KEY4) )
rGPBDAT=rGPBDAT & ~LED4;
rGPFCON=0xfcc0;
}
/*******************************************************************************************
函数原形:void __irq IRQ_KEY(void)
功能描述:键盘中断初始化,将按键输入管脚设置成外部中断输入功能,双边沿触发,IRQ中断模式
参 数:无
*******************************************************************************************/
void EINT_Init(void)
{
//rGPFCON |= ((1 << 1) | (1 << 3) | (1 << 5) | (1 << 9));
rGPFCON = rGPFCON & (~((3<<4)|(3<<0)|(3<<8)|(3<<2))) | ((2<<4)|(2<<0)|(2<<8)|(2<<2)) ; //GPF4,2,1,0 set EINT
//rGPFCON[9:8],[5:4],[3:2],[1:0]=10b,即GPF[4,2,1,0]为外部中断输入功能
rEXTINT0 &= ~(7|(7<<4)|(7<<8)|(7<<16));
rEXTINT0 |= (0|(0<<4)|(0<<8)|(0<<16)); //set eint0,1,2,4 falling edge int
//pISR_EINT8_23 = (unsigned int)IRQ_KEY;
rPRIORITY = 0x00000000; // 使用默认的固定的优先级
//ClearPending(BIT_EINT8_23); // 清除中断标志位
rEINTPEND = 0xffffff;
//rINTMOD = 0x00000000; // 所有中断均为IRQ中断
//rINTMSK &= (~BIT_EINT8_23); // 使能外部中断8_23
//rEINTMASK &= (~((1 << 0) | (1 << 1) | (1 << 2) | (1 << 4)));//使用能EINT0,EINT1,EINT2,EINT4
rEINTPEND |= (1<<4); //clear eint 4
rEINTMASK &= ~(1<<4); //enable eint 4
ClearPending(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);
pISR_EINT0 = pISR_EINT1 = pISR_EINT2 = pISR_EINT4_7 = (unsigned int)IRQ_KEY;
EnableIrq(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);
}
void Main(void){
rGPBCON = 0x015550;
rGPBUP = 0x7ff;
rGPBDAT = 0xfff;
rGPFCON = 0x55aa;
rGPFUP = 0xff;
rINTMOD=0x0; // All=IRQ mode
rINTMSK=BIT_ALLMSK; // All interrupt is masked.
EINT_Init();
while (1);
} |
|