TI中文支持网
TI专业的中文技术问题搜集分享网站

关于MSP430F5418A中断问题

Hi all,

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

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

Thanks

Nick

Young Hu:

Nick

您好!

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

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

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

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

Peter_Zheng:

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

Nick wang:

回复 Young Hu:

Hi 鸵鸟蝈蝈,

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

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

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

Thanks

Best regards,

Nick

Nick wang:

回复 Peter_Zheng:

Hi Peter,

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

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

Thanks

Best regards,

Nick

Peter_Zheng:

回复 Nick wang:

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

赞(0)
未经允许不得转载:TI中文支持网 » 关于MSP430F5418A中断问题
分享到: 更多 (0)