中断 LPC 微控制器上的寄存器写入操作
Interrupting register write operation on LPC microcontroller
这几天解决了偶尔写错寄存器的问题。问题是,我在主循环中的 GPIO 输出寄存器 (LPC_GPIO_PORT->SET[1]) 中写了很多东西。在中断例程中,我在这些相同的寄存器中编写,当中断发生在主循环中写入这些寄存器时,在 return 中断时,对这些寄存器的更改被丢弃并替换为那些进入中断前写入寄存器。
我正在使用 LPC1549 微控制器。寄存器写入中断用于 BLDC 电机控制,因此您可以每隔 10-30 秒听到电机发出的巨响。通过减少主循环中的写入寄存器,我已经完全消除了这个问题。问题是,微控制器中的所有寄存器都一样吗?我找不到任何描述此问题的内容,这可能是一个严重的问题,而且一旦开始引起麻烦,也很难找到。
听起来是 "The Critical Section Problem"。该主题在有关操作系统的文献中出现得更多,但存在于任何具有共享资源的中断驱动平台中。这可能有助于您搜索查看此问题。
在您的例子中,您有 2 个数据访问器:中断处理程序和主循环。两者都访问相同的共享资源(内存映射 I/O)。这可能会导致根据您上面描述的两个事件的时间立即覆盖更新。
关于你的第二个问题,这会影响并发系统中的任何共享资源。
这几天解决了偶尔写错寄存器的问题。问题是,我在主循环中的 GPIO 输出寄存器 (LPC_GPIO_PORT->SET[1]) 中写了很多东西。在中断例程中,我在这些相同的寄存器中编写,当中断发生在主循环中写入这些寄存器时,在 return 中断时,对这些寄存器的更改被丢弃并替换为那些进入中断前写入寄存器。
我正在使用 LPC1549 微控制器。寄存器写入中断用于 BLDC 电机控制,因此您可以每隔 10-30 秒听到电机发出的巨响。通过减少主循环中的写入寄存器,我已经完全消除了这个问题。问题是,微控制器中的所有寄存器都一样吗?我找不到任何描述此问题的内容,这可能是一个严重的问题,而且一旦开始引起麻烦,也很难找到。
听起来是 "The Critical Section Problem"。该主题在有关操作系统的文献中出现得更多,但存在于任何具有共享资源的中断驱动平台中。这可能有助于您搜索查看此问题。
在您的例子中,您有 2 个数据访问器:中断处理程序和主循环。两者都访问相同的共享资源(内存映射 I/O)。这可能会导致根据您上面描述的两个事件的时间立即覆盖更新。
关于你的第二个问题,这会影响并发系统中的任何共享资源。