毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

先清除SRCPND后清除EINTPEND也没有见到第二次中断

更新时间:2013-2-13:  来源:毕业论文

先清除SRCPND后清除EINTPEND也没有见到第二次中断
一个key,外部中断都正常了,最后之余在课后还有《浅谈S3C2440的中断寄存器及中断过程》上都看到:
2.4 中断的清除

a.如果是不带子中断的内部中断,只需清除SRCPND,注意清除需位置1。
b 如果是带子中断的内部中断,需清除SRCPND和SUBSRCPND,注意先清除SUBSRCPND,再清除SRCPND。因为,如果你先清除SRCPND的话,然后在清除SUBSRCPND的过程中,SRCPND会以为又有中断发生,又会置1。也就是说一次中断会响应两次。所以必须先掐断源头。
c 如果是外部中断,对于EINT8-23需要清除EINTPEND和SRCPND(同样注意顺序)。对于EINT0-EINT3只需清除SRCPND。

正常的代码是这样的:
static void __irq key_handler(void) {     /*判断是否是按键K2产生的中断*/    if(rINTPND==BIT_EINT8_23)      {                   if(rEINTPEND&(1<<11))          {             rEINTPEND |= 1<< 11;             beep_run();                 }         ClearPending(BIT_EINT8_23);     } }

我改过之后:
static void __irq key_handler(void) {     /*判断是否是按键K2产生的中断*/      //    if(rINTPND==BIT_EINT8_23)  //    {          ClearPending(BIT_EINT8_23);         //if(rEINTPEND&(1<<11))          //{         //delay(1000);             rEINTPEND |= 1<< 11;                           beep_run();                 //}          //    } }

我在按键时也没有感觉到有第二次中断的出现,设置的低电平触发,应该我松手之后就一直中断状态,而我却没有遇到。我很想见识见识,我隐隐约约感觉到是我的测试方法不对?我还加了延时,还是不行,诸位有什么好的方法吗?我不想尽信书呀?

用led显示寄存器的值

[1] [2] 下一页

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。