Hi all,
请问在使用5418a的各个模块时,由于要响应中断,所以就要打开相应模块的中断位。比如,UART模块,需要打开收发中断,UCTXIE、UCRXIE。但是Status Register
中还有一个GIE位,请问我在响应中断的时候,是不是要将GIE置位呢?还是有中断到来时,GIE会自动置位呢?在离开中断函数时,需不需要清除GIE位呢?
Thanks
Nick
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.
Hi all,
请问在使用5418a的各个模块时,由于要响应中断,所以就要打开相应模块的中断位。比如,UART模块,需要打开收发中断,UCTXIE、UCRXIE。但是Status Register
中还有一个GIE位,请问我在响应中断的时候,是不是要将GIE置位呢?还是有中断到来时,GIE会自动置位呢?在离开中断函数时,需不需要清除GIE位呢?
Thanks
Nick
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置位既可。后面的操作都能够自动置位和复位,即入栈和出栈的过程。当同时来多个中断时,按中断优先级来操作。当在中断过程中,又来一中断,则在执行完该中断后进入下一中断。因为每一个中断都有自己的中断标志位。