最近在调试中发现,当中断与外部函数都操作同一port下的IO口时,有可能出现中断中的操作没有起到作用的情况。因为这个问题困扰了一两天,记录一下分析过程。
下图是一个对PB2取反的操作,从汇编代码中分析,包括以下步骤,①将GPIOB->DATA的数据取出来放进r0中,②将r0与r1(0x04)异或并将值放入r0中,③对寄存器寻址,将r0的数据写入寄存器。在步骤①时已经将寄存器数据取出并保存至r0,如果在步骤②时,进入中断并修改了GPIOB->DATA的数据,退出中断后依旧会采用之前的r0数据进行异或并写入寄存器。这就会导致中断修改的数据失效。