在没有改动启动代码的情况下(实际上也不会改),要实现通过外部中断0的中断控制LED的亮灭,参考了电子版的书籍,也参考了《ARM嵌入式系统基础教程(第2版)》,也参考过光盘里的示例代码,发现要实现外部中断0的控制,这几份资料的代码设置都不一样,而且没有一份资料的代码是成功的。
不知道是不是启动代码需要修改???
下面贴上我现在设置的代码,麻烦各大虾帮忙看看哪里有问题,不胜感激!!!
#define LED 1<<18
void __irq Eint0IRQ(void)
{
if(IO0PIN & (1<<18) == 0 )
{
IO0SET = 1<<18; /*熄灭发光二极管*/
}
else /*点亮发光二极管*/
{
IO0CLR = 1<<18;
}
while((IO0PIN & (1<<16)) == 0); /*等待按键松开*/
EXTINT = 0X01; /*清中断标志*/
VICVectAddr = 0x00; /*通知VIC中断处理结束*/
}
int main (void)
{
P016(1); //P.16设置为外部中断0功能
P018(0); //P.18设置为GPIO功能 注:P0xx(MODE)是我自己改的宏定义,GPIO实验证明是没问题的
IO0DIR = LED;//P.18设置为输出功能
IO0SET = LED;//P.18设置为高电平
IRQEnable();
EXTMODE = EXTMODE&0X0E; //外部中断设置为低电平触发
EXTPOLAR = EXTPOLAR&0x0E;
VICIntSelect = 0<<14; /*选择EINT0为IRQ中断*/
VICVectAddr0 = (uint32)Eint0IRQ; /*设置中断服务程序地址*/
VICVectCntl0 = 0x20 |14; /*将外部中断0分配给向量中断*/
VICIntEnable = 1<<14; /*使能被分配为FIQ或IRQ的中断请求或软件中断*/
EXTINT = 0X0F; /*清除EINT0中断标志*/
while(1);
}
|