よくある質問

常见问答

在中断程序操作寄存器的时候,需要注意什么问题?  日期:2016-12-22

如果在进入中断程序前后,都要操作同一个寄存器的话,此时会有操作的先后问题。

以操作寄存器GPIOA_OUT为例:

GPIOA_OUT的不同bit控制不同的管脚输出,如GPIOA_OUT[0]控制PA.0的输出、GPIOA_OUT[1]控制PA.1的输出。如果在主程序要写0x1到GPIOA_OUT控制PA.0输出高电平时,进入中断程序。而在中断程序也要写0x2到GPIOA_OUT,控制PA.1输出高电平,此时GPIOA_OUT = 0x2。当退出中断程序回到主程序时,将会完成将0x1写到GPIOA_OUT的动作,使得GPIOA_OUT = 0x1,导致原先在中断程序要控制PA.1输出高电平的动作被覆盖,产生操作寄存器的先后问题。

为了避免中断程序和主程序同时操作寄存器的问题,可以在中断程序中设置一个标志,在主程序中判断这个标志再操作寄存器。 

 

产品: 微控制器 ,8 位 8051 微控制器 ,Arm Cortex-M0 微控制器 ,Arm Cortex-M4 微控制器
应用:
功能: Peripherals,ARM,Interrupt,I/O,GPIO