首页 > 解决方案 > 当我写入内存映射寄存器时会发生什么?

问题描述

我正在尝试熟悉 AVR 微控制器。我对内存映射寄存器的实际功能有点困惑。

我正在使用 avr-libc 并在 C 中编程。查看 avr-libc 源代码,有许多内部寄存器可以通过写入/读取 SRAM 位置来访问。当我写入寄存器的内存位置时,SRAM 中的那个字节是否真的被覆盖,然后异步复制到寄存器中?

谢谢!

标签: microcontrolleravr

解决方案


简短的回答:这取决于。

长答案:当您在 C 中写入内存映射寄存器时,编译器会发出与任何其他内存访问(加载/存储/移动/等)相同的指令。处理器将像往常一样执行对该地址的内存访问,在写入的情况下,它将寄存器的地址写入内部总线,启用写选通,然后在数据线上输出所需的数据公共汽车的。

这就是复杂的地方。输出数据可以路由到 MCU 中的任何其他电路:它确实可以存储在 SRAM 结构或 FIFO 中,但它可以简单地由锁存器和触发器锁存或“注册”,甚至可以简单地路由没有被存储的地方。在大多数情况下,写入可能是同步注册的(可能是也可能不是 SRAM),但这并不能保证,最好在您感兴趣的特定寄存器上查看特定芯片的数据表或参考手册。


推荐阅读