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.

执行“PieCtrlRegs.PIEACK.all = PIEACK_GROUP1”后为什么PIEACK寄存器不等于零?

我在外设中断中最后执行写PIEACK语句(如下):

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;           // PIEACK_GROUP1=0x0001;

但执行后却发现有时候PIEACK=0x0001,而不是0。所以该中断又再次被触发,再被执行。但第二次执行上面这句以后,PIEACK的值就变为0了。请问这是为什么?谢谢热心人帮忙解答!

  • PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;           // PIEACK_GROUP1=0x0001;

    PIEACK_GROUP1的值是0x1,执行完这句赋值PieCtrlRegs.PIEACK.all的值是0x1,对中断1组中断标志位清零。 此时下一次中断尚未开始。

    当中断标志位被清零,下一次中断被触发开始执行时,PieCtrlRegs.PIEACK.all 的值会被清零。

  • Hi, Joey:

    多谢你的回复!那我如何能实现每次中断触发都只进一次中断,而不是两次呢?谢谢!

  • 中断是需要重复执行的,只执行一次就没有必要用中断了,在循环中通过条件判断将代码执行一遍即可。

    或者你在中断中执行禁止该中断测试一下。