程序参照网上的基本没有差别,实在找不出是哪里的问题,还望指教,初始化函数如下:
void INTC_Init()
{
rGPNCON = (rGPNCON & ~(0xfffU)) | 0xaaa; //k1,k2,k3,k4,k5,k6中断方式
rGPLCON1 = (rGPLCON1 & ~(0xff<<12)) | (0x33<<12);//k7,k8
rEINT0CON0 =(rEINT0CON0 & ~(0xfffU)) |0x222; //k1,k2,k3,k4,k5,k6下降沿触发
rEINT0CON1 =(rEINT0CON1 & ~(0xff<<4)) |(0x22<<4);//k7,k8下降沿触发
rEINT0FLTCON0 |=0x00C0C0C0;//使能过滤器 EINT0,1,2,3,4,5选择数字滤波器
rEINT0FLTCON2 |=0x00C0C000;//使能过滤器 EINT19,20选择数字滤波器
rEINT0MASK = ~(0x18003f); //中断使能,开中断
rEINT0PEND = 0x18003f;
//中断选择寄存器,是置为IRQ 还是FRQ
rVIC0INTSELECT &=0xFFFFFFFE; //设置IRQ模式,其实可以不设,上电自动复位
VIC0VECTADDR_00=(unsigned)KeyIntHandle;//KeyIntHandle为中断处理函数
VIC0VECTADDR_01=(unsigned)KeyIntHandle;
VIC1VECTADDR_32=(unsigned)KeyIntHandle;
VIC1VECTADDR_33=(unsigned)KeyIntHandle;
//配置中断使能寄存器 GPN0,1,2,3,4,5为EINT0,1,2,3,4,5属于VIC0,对应于VIC0中的00,01寄存器,GPL11,12为EINT19,20属于VIC1中的32,33寄存器
rVIC0INTENABLE |=0x00000003 ;
rVIC1INTENABLE |=0x00000003 ;
}