这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » eint,while eint中断为啥要用一个while循环?

共2条 1/1 1 跳转至

eint,while eint中断为啥要用一个while循环?

院士
2006-09-17 18:14:16     打赏
eint,while eint中断为啥要用一个while循环?



关键词: while     中断     为啥     要用     一个     循环    

院士
2006-12-22 22:43:00     打赏
2楼
问 // 这是我的
void e_int (void)  __irq
{
    EXTINT =0x1;
    VICVectAddr = 0;
}
//这是周立功的例子
void e_int (void)  __irq
{
         while((EXTINT &0x1)!=0)
        {
        EXTINT =0x1;
         }
    VICVectAddr = 0;
}
这里的循环是一个演示的例子还是有什么特别的用途呢?我是用边沿触发。发现中断会导致莫明奇妙死机(我没有开看门狗).感觉好像死机和中断有关
1: 我用的是2132我看到2100系列有eint中断的问题,2132有没有啊? 2: 我有对eint的关中断操作。我是通过pinsel来关中断的。是不是用这种方法关中断的时候,必须要先关总中断,然后改pinsel,然后开总中断,才会不死机? 3: INT1为电平触发肯定要while防止再中断边沿触发就不需要了.

void EINT0IRQ (void) __irq {//IRQ中断函数EINT0IRQ被挂接在VICVectCntl0
  if (VICIRQStatus & (1 << VICIntSel_EINT0)) {
    IOPIN1 ^= (1 << P1_16);    //取反P1.16
  }
  VICSoftIntClr = (1 << VICIntSel_EINT0);
  EXTINT = (1 << EINT0);    //清除INT0中断标志
  VICVectAddr = 0;
}

void EINT1IRQ (void) __irq {//IRQ中断函数EINT1IRQ被挂接在VICVectCntl1
  if (VICIRQStatus & (1 << VICIntSel_EINT1)) {
    IOSET1 = (1 << P1_17);    //P1.17=1
    while(EXTINT & (1 << EINT1)) {
      EXTINT = (1 << EINT1);    //清除INT1中断标志
    }
    IOCLR1 = (1 << P1_17);    //P1.17=0
    VICSoftIntClr = (1 << VICIntSel_EINT1);
  }
  VICVectAddr = 0;
}

void main (void)  {
//.......................................................
  EXTMODE        |= (1 << EXTMODE0) //设置INT0为边沿触发
                  | (1 << EXTMODE2) //设置INT2为边沿触发
                  | (1 << EXTMODE3);//设置INT3为边沿触发

  EXTMODE        &= ~(1 << EXTMODE1);//设置INT1为电平触发
//.......................................................
} 4: 等待while循环是为了等待外部中断请求信号的消失,然后清除EXINT相应位,最后通知cpu中断结束 5: 只所以提问,主要是我挂上eint中断容易死机我在eint里面要关掉中断,然后在timer中断里面打开,我是采用改变pinsel的方式来实现中断的开关。
是不是开关中断的时候要关掉cpsr(好像有帖子这么说过)。 6: hotpower,我又要和你争论了!   外部中断时,p1.16为输入脚,它的电平是由外部控制的,所以不能在中断服务程序里给它取反,即使取反也没用,比如说,外部将它拉低,即使你内部给它置高,它还是低。
   哈哈,我又和hotpower争论了,说错了大家别拍砖.... 7: 先拷贝下来,有些眼晕,等我清醒清醒说实话,我真是ARM菜鸟,因为我至今没在ARM芯片上编过一个实战程序,虽然马上就要成为现实了.

我承认自己很菜,但我很努力,至少感发表一些菜鸟的邪论,...至少我做到了.

软仿真和实际运行肯定有很大的出入,不对之处也请各位批判... 8: 软件仿真图例全速运行后点击P0.16引发INT1中断(此时P1.16为一种状态),程序停留在断点处.


单步执行,P1.16翻转


再全速运行后点击P0.16两次引发INT1中断(此时P1.16为一种状态),程序停留在断点处.

单步执行,P1.16翻转


我很菜,不知硬件运行时到底翻转否,不明白,望大家帮我硬件仿真一下...

谢谢!!!

看来我是该买块开发板了,省得自己没底气...我晕~~ 9: hotpower    你真的没有用过ARM??你的学习精神值得我佩服!
    外部中断一般用于程序对外部事件的响应,程序不用将p1.16翻转,没有这个必要,比如说p1.16被外部设备接地了,你的程序无论如何都不可能将它置高的,你的中断处理程序只需要对外部事件进行处理,不需要将p1.16翻转.
    我虽然用过ARM,但没有用过ARM的外部中断,(不过我用过很多单片机),说的不一定对,仅供参考,谁让我们是老乡呢,呵呵
10: 晕~~~窝里斗的老陕,我拿它看是否进入过中断!!!晕~~~穷人买不起,还不让"看"进中断的"场景"???

晕...确实没用过ARM!!!!!!!!!!!!!!!!!!

本来应该在电子大楼金龙那里买上,可是拉不进菜地里施肥.

他的技术员也无奈...还说这"门太小"(旧机子)...

所以...至今仍是ARM菜鸟...难道不对吗???还不承认我是ARM菜鸟吗???

晕~~~ 11: hotpower2我还发现你发表的中断干扰防御程序的其它问题,不过,你提出中断防御的思想是很好的. 12: 哈哈,哈哈,和你开个玩笑,不要当真,因为看到老乡,倍感亲切,所以和你开个玩笑,哈哈,咋老陕不应该这么小气吧,哈哈 13: 哈哈,我本来就是以"乐"为生的这坛子里好象我还像"打不死的吴青华"吧...

来到这里就是学习和交流的,没什么非要争个你高我低的...

我们都是以手艺混饭吃的,说好听的是"技术",难听点的是卖脑浆!!!

说不好听的,有时真感到不如买豆浆和油条的!!! 14: 不要太悲观只要你搞某项技术搞精,会过的很好. 15: hotpower:你为何又钻研上AVR了你为何又钻研上AVR了?? 16: 看在MCU中用C++好玩 17: MCU中用c++意义不是很大语言只不过是一种工具,MCU程序不大,C++意义不大.
18: 省心就好... 19: 我原来搞AVR我5年前搞AVR,因为找不到C,是用汇编,呵呵,惨....

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]