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.

关于MSP430F5418A中断问题



Hi all,

请问在使用5418a的各个模块时,由于要响应中断,所以就要打开相应模块的中断位。比如,UART模块,需要打开收发中断,UCTXIE、UCRXIE。但是Status Register

中还有一个GIE位,请问我在响应中断的时候,是不是要将GIE置位呢?还是有中断到来时,GIE会自动置位呢?在离开中断函数时,需不需要清除GIE位呢?

Thanks

Nick

  • Nick

    您好!

    可以参考一下TI的5418a的例程。

    在初始化的时候要将GIE置位,必须手动置位,不然不把全局中断使能的话,中断不会响应。

    在执行中断ISR的时候,首先SR寄存器会被压入堆栈,然后中断ISR中,GIE清零,不会再响应中断。在中断ISR退出的时候,SR寄存器出栈,恢复之前的状态。

    所以在中断ISR中不用对GIE有任何操作,除非您想中断嵌套。

  • GIE: General interrupt enable. When set, enables maskable interrupts. When reset, all maskable interrupts are disabled. GIE是SR这个寄存器的第四位。进入中断时,SR会入栈,GIE reset,出中断时,SR出栈,GIE set。

  • Hi 鸵鸟蝈蝈,

    你所说的 “在执行中断ISR的时候,首先SR寄存器会被压入堆栈,然后中断ISR中,GIE清零,不会再响应中断。在中断ISR退出的时候,SR寄存器出栈,恢复之前的状态” 这句话中的GIE清零,是手动清零还是MCU会自动清零?

    还有个问题,你说进中断后将GIE清零,那么如果我是UART中断,要发送多个字节的数据,由于每次中断只能发送一个

    字节,所以需要多次进入中断,但是此时GIE已经复位了,如何再响应中断呢?

    Thanks

    Best regards,

    Nick

  • Hi Peter,

    GIE reset 和GIE set 的动作是手动实现的还是MCU自己实现的?而且,要发送多个数据,就需要多次中断,如果GIE复

    位了,如何响应下次中断呢?

    Thanks

    Best regards,

    Nick

  • 在代码初始化的时候将GIE置位既可。后面的操作都能够自动置位和复位,即入栈和出栈的过程。当同时来多个中断时,按中断优先级来操作。当在中断过程中,又来一中断,则在执行完该中断后进入下一中断。因为每一个中断都有自己的中断标志位。