GPIO电平被篡改的问题

一、简介

应用场景是某个IO在中断里会被拉高,在任务里会拉低。而出现问题的时候是IO被拉高过一会儿马上就被拉低且不是因为进任务里的拉低流程。

二、原因

原因是因为在任务里有与这个IO同port口的模拟I2C在频繁的操作造成的。当操作模拟I2C IO口控制其电平时对于汇编来说并不是一条指令完成而是多条指令,第一步是先回读port口寄存器的值存于工作寄存器中,再去或上对应位,假设在回读前中断控制的IO口电平为低,此时保存到工作寄存器的IO对应bit位即为0。在这时候被中断打断拉高IO此时回到任务里还是会将先前工作寄存器的值设置到port寄存器里,造成GPIO一拉高随即马上变成低电平。

三、总结

这是常见的寄存器在读改写时被打断造成的意外篡改。一般操作GPIO时最好还是不要放在中断倘若得放在中断则得对任务里的操作进行关中断保护避免操作寄存器时被打断。

 

你可能感兴趣的:(GPIO电平被篡改的问题)