arm lpc 中断不能够返回的问题

[复制链接]
2472|1
 楼主| 780653337378 发表于 2011-11-14 22:11 | 显示全部楼层 |阅读模式
#include<lpc210x.h>
#define INT32U unsigned int
#define LED1  1<<17
#define LED2  1<<18
#define LED3  1<<19
void Delay(INT32U num)
{
while(num)
{
  num--;
}
}
void Display()
{
   IOCLR = LED1;
   Delay(500000);
      IOSET = LED1;
}
void Displayled()
{
    while(1)
    {
   IOCLR = LED2;
   Delay(500000);
      IOSET = LED2;
   Delay(500000);
    }
}
void IRQ_Eint1()
{
  Display();
  while ((EXTINT&0x02)!= 0)
  {
  EXTINT=0x02;  //清除EINT1 中断标志
  }
  VICVectAddr=0;
}
int main()
{
PINSEL0 = 0x50000000;
PINSEL1 = 0x00000000;
IODIR = LED1|LED2|LED3;
    IOSET = LED1|LED2|LED3;
VICIntSelect=0;/*全部中断设置为IRQ,若某位为1 是FIQ*/
    VICIntEnable=0x00008000;/*使能EINT1,EINT 为第15 位*/
    VICVectCntl1=0x2F;/*0xF,15 号中断*/
    VICVectAddr1=(int)IRQ_Eint1;/*设置中断服务子程序*/
    EXTINT=0x07;
while(1)
{
Displayled();
}
}


在这个程序中,正常执行后,按下按键后能进入中断,但是不能返回到主函数,也不能够再次进入中断,是啥原因啊,我用的是飞利浦的lpc2103的板子。
 楼主| 780653337378 发表于 2011-11-15 09:06 | 显示全部楼层
问题解决,void IRQ_Eint1()
{
  Display();
  while ((EXTINT&0x02)!= 0)
  {
  EXTINT=0x02;  //清除EINT1 中断标志
  }
  VICVectAddr=0;
}
将其改成
void __irq IRQ_Eint1()
{
  Display();
  while ((EXTINT&0x02)!= 0)
  {
  EXTINT=0x02;  //清除EINT1 中断标志
  }
  VICVectAddr=0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

17

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部