microcontroller - 当我写入内存映射寄存器时会发生什么?
问题描述
我正在尝试熟悉 AVR 微控制器。我对内存映射寄存器的实际功能有点困惑。
我正在使用 avr-libc 并在 C 中编程。查看 avr-libc 源代码,有许多内部寄存器可以通过写入/读取 SRAM 位置来访问。当我写入寄存器的内存位置时,SRAM 中的那个字节是否真的被覆盖,然后异步复制到寄存器中?
谢谢!
解决方案
简短的回答:这取决于。
长答案:当您在 C 中写入内存映射寄存器时,编译器会发出与任何其他内存访问(加载/存储/移动/等)相同的指令。处理器将像往常一样执行对该地址的内存访问,在写入的情况下,它将寄存器的地址写入内部总线,启用写选通,然后在数据线上输出所需的数据公共汽车的。
这就是复杂的地方。输出数据可以路由到 MCU 中的任何其他电路:它确实可以存储在 SRAM 结构或 FIFO 中,但它可以简单地由锁存器和触发器锁存或“注册”,甚至可以简单地路由没有被存储的地方。在大多数情况下,写入可能是同步注册的(可能是也可能不是 SRAM),但这并不能保证,最好在您感兴趣的特定寄存器上查看特定芯片的数据表或参考手册。
推荐阅读
- python - 如何使用 loc 函数为每个索引赋予单独的值?
- java - 无法使用带有 jar 文件的 javac 类路径进行编译
- apache-kafka-streams - 带有 Jaeger 跟踪的 Kafka Streams:headers() 仅应在处理记录时调用
- oracle - 当我们的条件在 oracle 中的表上匹配时,如何从触发器发送电子邮件?
- csv - 具有大量列的数据框 - 导入时会在没有数据的列中创建 NA
- go - 在发出 HTTP 请求时,Go 是否有某种方式使用 DefaultNetworkCredentials 和代理?
- php - 如何将 alt 属性放在循环内的 img cmb2 中?
- delphi - 数值返回与实际不同
- python - 在实现 CountVectorizer() 时出现错误“空词汇;也许文档仅包含停用词”
- javascript - Matter.js — 如何防止 mouseConstraint 捕获滚动事件?