This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于PIE IFR标志位清除的问题

看手册上讲,IFRx.y在读取中断向量时自动清除,但是外设的中断标志是要手动清除的。我的疑惑是,如果外设的标志不清除,那么即使清除了PIE中的中断,那么,外设还是会再触发PIE中断的,请问这是怎么回事

  • 从图上可以看出,中断信号的传递方向。从  IFRx.y  ->   IFR -> CPU. IFRx.y在响应中断前的时候自动清除, IFR在中断响应程序中手动清除。

    你所说的“外设的中断标志”是指IFR吗? “PIE中的中断“指哪个位?

  • 请查阅文档SPRUFB0D的114页的Figure 78.

    中断信号的传递方向。从  IFRx.y  ->   IFR -> CPU. IFRx.y在响应中断前的时候自动清除, IFR在中断响应程序中手动清除。

    你所说的“外设的中断标志”是指IFR吗? “PIE中的中断“指哪个位?

  • 不是啊,CPU and Instruction SetReference里边写的是IFR bit会自动清除,另外在System Control and Interrupt 那本报讯手册里提到PIEIFRx.y也会自动化清除,但是来自外设的INTx.y并没有因此而取消,所以PIEIFR还是会受到影响,因为,除非是将INTx.y的中断信号清楚了,再清除PIEIFRx.y才不会有影响吧。可是手册上写的是在获取中断向量时,就清除了相应的位,INTx.y的信号清除不是得在中断服务程序中吗

  • 在CPU响应中断后,会自动清除IFR bit,同时将INTM bit 置位,以防止其它中断的发生;此外,CPU还会向PIE发送ACK信号,确认对中断进行了响应;当PIE收到ACK信号后会将PIEIFRx.y清除;而在中断响应程序中,需要用户将INTx.y、PIEACKx以及INTM手动清除,以便后续中断可以正常被响应。当INTx.y不被清除时,后续发生在此引脚上的中断将无法被识别。

  • 在CPU响应一个中断后,在进入ISR的时候,默认会关断全局中断,即在执行中断服务程序时,不会有其他中断来打断CPU,包括本次的中断事件。另外,如果外设的中断标志位不清除,不会循环进入这个中断服务函数,这个外设中断被阻断了。所以只有清除外设的中断服务程序,才能响应下一次的外设中断。PIEACK同理,如果没有PIEACK,这组所有中断都被阻断。

  • 请问PIE对PIEIFRx.y的清除是只有一次还是持续性的,在清除PIEIFR后,进入中断服务时是否会屏蔽INTx.y信号,如果是这样,请问在手册什么地方有讲。最后一句不太清楚,是指如果INTx.y不被清除一次,无法再向PIEIFR发送信号吗,还是指PIEIFR是在下降沿触发而非电平触发。但以其他单片机的经验,一般应是电平触发吧。如果不明白我意思,请看我底下的回贴。

  • 我对于中断理解如同多米诺骨牌,外设是第一块,PIEIFRx.y是第二块,IFR是第三块。置位相当于骨牌倒下,屏蔽信号相当于加上了档板。ACK相当于在第二块后加上了档板,清除相当于扶起第二块,但如果第一块不先扶起,第二块还是会倒,第二块的扶起在进中断服务前,第一块的扶起在进中断服务后。如果我理解的不对,请指出,最好有手册的原文出处。

  • 可以这么理解。相当于一个个的标志和开关了。

  • 如果可以这样理解,那么第一块不扶起,第二块扶起不用档板隔开也是没用啊,它还是倒下,这样当中断服务束时,PIEIFRx.y应还是标记状态,它会把这个信号传给CPU,再次触发中断

  • 你好,我在学习28335时遇到了和你一样的问题,想了很长时间一直搞不懂,不明白PIE中断标志位是什么时候清除的,疑惑的地方和你的一模一样,请问你现在解决这个问题了吗?看帖子好久了,希望我的问题你能看到

  • 仿真过程中,进入中断服务程序后,PIEIFRx.y对应位自动清除。但在中断服务程序中一开始就调用EINT,发现PIEIFRx.y又会被置位,在出中断服务程序后又调用DINT,这样做的目的何在?
  • 仿真过程中,进入中断服务程序后,PIEIFRx.y对应位自动清除。但在中断服务程序中一开始就调用EINT,发现PIEIFRx.y又会被置位,在出中断服务程序后又调用DINT,这样做的目的何在?