首页 > 解决方案 > 中断 LPC 微控制器上的寄存器写操作

问题描述

这些天我已经解决了偶尔错误寄存器写入的问题。问题是,我在主循环的 GPIO 输出寄存器 (LPC_GPIO_PORT->SET[1]) 中写了很多东西。在中断例程中,我正在写入这些相同的寄存器,并且当在主循环中写入这些寄存器时恰好发生中断时,从中断返回时,对这些寄存器的更改被丢弃并替换为之前写入寄存器的更改进入中断。

我正在使用 LPC1549 微控制器。中断中的寄存器写入用于 BLDC 电机控制,因此您可以每 10-30 秒听到电机发出一声巨响。通过减少主循环中的写寄存器,我完全消除了这个问题。问题是,微控制器中的所有寄存器都一样吗?我找不到任何描述这个问题的东西,这可能是一个严重的问题,而且一旦开始造成麻烦,也很难找到。

标签: returninterruptcpu-registerslpcnxp-microcontroller

解决方案


听起来是“关键部分问题”。这个主题在有关操作系统的文献中出现了很多,但存在于任何具有共享资源的中断驱动平台中。看看这个问题可能会帮助您搜索。

在您的情况下,您有 2 个数据访问器:中断处理程序和主循环。两者都访问相同的共享资源(内存映射 I/O)。这可能会导致根据您上面描述的两个事件的时间立即覆盖更新。

至于您的第二个问题,这可能会影响并发系统中的任何共享资源。


推荐阅读