打印

跪求解答,急啊,谢谢各位大哥!

[复制链接]
1637|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zolo_jiang|  楼主 | 2009-9-23 14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:
void __irq EINT1_Hand (void)  
{
    EXTINT = EINT1;  /* clear interrupt */
  
    //IENABLE;   /* handles nested interrupt */
IOSET1 = 0x20000000;
  
delay(500);
//EXTINT = EINT1;  /* clear interrupt */
    //IDISABLE;
   
//while((EXTINT&0x02)!=0)
   //{
//      EXTINT=0x02;//清除中断标志
   //}
VICVectAddr = 0x00;  /* Acknowledge Interrupt */
}

int main (void)
{      
// DWORD *vect_addr;
//   DWORD *vect_cntl;
// PINSEL4 = 0x00400000; /* set P2.10 as EINT0 and*/
PINSEL4 = 0x00400000;
IODIR1 = 0xFFFFFFFF;
/* initialize GPIO pins as external interrupts */        
    UARTInit(0,9600);

//EINT1_Init();
EXTMODE=0x02;//设置EINT1为边沿触发模式
EXTPOLAR=0x00;//设置EINT1为下降沿触发
  SendByte(0,0x05);
//VICIntEnClr = 1 << 15;
VICIntSelect=0;//设置所有中断为IRQ中断
VICVectAddr15=(int)EINT1_Hand;//设置中断服务程序地址
//VICVectCntl15=0x01;
    //EXTINT=0x02;//清除EINT1中断标志
//VICIntEnClr = 1 << 15;
     //EXTINT = EINT1;
VICIntEnable=1<<15;//使能EINT1中断
SendByte(0,0x06);
    /****** It's an endless loop waiting for external interrupt ******/   
    /* On Keil MCB2300 board, EINT0 can be used to test the external interrupt */   
    while( 1 )
{
  IOSET1 = 0x20000000;
  delay(1);
  IOCLR1 = 0x20000000;
  delay(500);
  //delay(1000);
  //VICVectAddr = 0;  /* Acknowledge Interrupt */
}
    //return 0;
}
在执行到VICIntEnable=1<<15;//使能EINT1中断
的时候就进入了中断 然后就一直在中断里面死循环了  有谁知道怎么回事啊 ?

相关帖子

沙发
xinzha| | 2009-9-23 15:05 | 只看该作者
中断里不清中断必然要死循环啊,arm是不自清中断的。

使用特权

评论回复
板凳
haibian826| | 2009-9-23 15:10 | 只看该作者
想寻找在校同学一起合作代理开发板,利润50元/块
QQ :1016294520
mail: kaifaban_2006@163.com

使用特权

评论回复
地板
lelee007| | 2009-9-23 15:31 | 只看该作者
初始化的时候清中断标志,中断服务程序里边也要清中断标志

就是2L所说的,ARM的中断标志不是硬件清除,需要手工清除

使用特权

评论回复
5
zolo_jiang|  楼主 | 2009-9-24 17:59 | 只看该作者
关键是我清了中断了  一开始就清了

使用特权

评论回复
6
lelee007| | 2009-9-24 18:05 | 只看该作者
那得看你硬件上中断源了,是不是一直处于触发状态

使用特权

评论回复
7
xinjie1023| | 2009-9-24 20:29 | 只看该作者
标记下,程序貌似没问题

使用特权

评论回复
8
xinzha| | 2009-9-24 20:46 | 只看该作者
EXTINT = EINT1;  /* clear interrupt */
EXTINT=0x02;//清除中断标志
到底哪个是清中断呢?LZ提供一些更详细的信息吧。
并且被注掉的代码中有这么一段
while((EXTINT&0x02)!=0)
   //{
//      EXTINT=0x02;//清除中断标志
   //}
是不是清除中断标志不是一次成功,需要多次操作呢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝