内存映射寄存器是总线上的独立寄存器吗?

Are memory mapped registers separate registers on the bus?

我将以TM4C123手臂Microcontroller/Board为例。

它的大部分 I/O 寄存器都是内存映射的,因此您可以 get/set 它们的值使用 常规记忆 load/store 条指令。

我的问题是,在映射到内存的总线上某处 cpu 之外是否有某种类型的寄存器被映射到内存,而您 read/write 使用基本上具有重复值的内存区域来访问它寄存器和内存,或者内存是寄存器本身?

即使在MCU中也有很多总线。一辆接一辆的公共汽车像树枝一样分裂。 (有时甚至不像树那样合并)。

它可能早​​于 intel/motorola 之战,但肯定在那个时间段内你有分段与平面寻址,你有 I/O 映射 I/O 与内存映射 I/O,因为摩托罗拉(和其他公司)没有单独的 I/O 总线(一个额外的...地址...信号)。

看arm架构文档和芯片文档(arm做IP不做芯片)。您有对地址进行操作的加载和存储指令。芯片的文档(在某种程度上,ARM 提供了 cortex-m 地址的规则 space)提供了一长串地址列表。作为一名程序员,您只需将执行加载和存储操作的地址与正确的指令对齐即可。

某些营销人员可能仍然使用内存映射等术语 I/O,因为英特尔 x86 仍然存在(如何????),一些人将继续使用这些术语。作为一名程序员,它们是进入寄存器的第一位,对于这里和那里的单个指令,这些位是地址。如果你想给它加上形容词,那就去吧。

如果您根据芯片和核心文档使用的地址指向一个 sram,那么这是对内存的读取或写入。如果是flash地址,那就是flash。 UART,UART。定时器 5,然后是定时器 5 控制和状态寄存器。等等...

这些 mcus 中的地址指向两三个东西,但不是同时指向。 (地址 0x00000000 和之后的一些字节数)。但是,同样,不是在同一时间。并且这种重叠至少在许多这些 cortex-m mcus 中,这些特殊地址 space 不会与“内存”和外围设备 (I/O) 重叠。而是放在可以启动芯片和 运行 一些代码的地方。对于这些 cortex-ms,我认为您甚至不能使用那种 mmu 来混合这些 spaces。是的,在全尺寸手臂和其他架构中,您可以使用完全打击的 mcu 来混合地址 spaces 并有一个虚拟地址 space 落在一个物理地址 space 上不同类型。