当数据写入 LATCH 时会发生什么?

电器工程 微控制器 图片
2022-02-01 19:32:24

这是我在 PIC16F1947 数据表中找到的:

读取 PORTB 寄存器会读取引脚的状态,而写入它会写入 PORT 锁存器。所有的写操作都是读-修改-写操作。因此,写入端口意味着读取端口引脚,修改此值,然后写入端口数据锁存器 (LATB)。

我是一名固件开发人员,我的背景是计算机科学。我仍然很难理解硬件级别的电子和逻辑。我只有基础知识。

所以,我想了解当数据被写入硬件级别时会发生什么。

谢谢你。

2个回答

锁存器是一种位的存储器。

让我们使用手册中的图片:

通用 I/O 端口操作

当您在 I/O 引脚中写入一个位时,您正在将该位从数据总线存储到数据寄存器 ( D-FlipFlop )。如果该位的 TRISx 为 0,则来自数据寄存器 Q 的数据将在 I/O 引脚中。写入 LATx 或 PORTx 是一样的。见下图红色:

通用 I/O 端口操作写入

另一方面,从 LATx 读取不同于从 PORTx 读取。

当您从 LATx 读取数据时,您正在读取数据寄存器 ( D-FlipFlop ) 中的内容。见下图绿色:

通用 I/O 端口操作读取 LATx

当您从 PORTx 读取数据时,您正在读取实际的 I/O 引脚值。见下图蓝色:

通用 I/O 端口操作 读取 PORTx

PIC 使用 read-modify-write 来写操作,这可能是个问题,所以他们使用这个影子寄存器来避免它。

为避免读取-修改-写入问题,您应该将端口作为一个整体写入,而不是设置或重置端口中的各个位。RMW 问题可能会导致未设置位,或另一个输出变高,尤其是在输出引脚提供或吸收大量电流的情况下。

通常使用“影子寄存器”。设置或重置其中的位,并将其输出到端口,以避免 RMW 问题。

通过使用单独的锁存器可以避免 18F PIC 的问题,其中的各个位可以不受惩罚地设置和重置。