【问题标题】:Register mapping in a ARM based SoC基于 ARM 的 SoC 中的寄存器映射
【发布时间】:2014-10-15 23:47:39
【问题描述】:

我想了解各种外设/IP 的寄存器如何映射到微控制器中的 ARM 处理器内存映射。

说,我有一个用于 UART 块的 CONTROL 寄存器。当我对地址(40005008)进行写访问时,该寄存器被配置。这种映射发生在哪里:在外设块代码本身内或在将此外设集成到 SoC/微控制器时。

【问题讨论】:

  • 我认为这两种情况都会发生,地址位的一些较低端口是由外围模块设计定义的,而地址位的较高部分是由 SoC 设计人员设置的。
  • 通常这也是 SoC 规范提到外围配置的方式。但是我不知道你是否想听更多的细节。在这种情况下,stackexchange 社区的其他部分(如电子产品)可能会对您有所帮助。
  • 感谢 auselen... 在您的回复中保持连续性.. 是外设设计代码中硬编码的低位.. 取决于我们要插入的 SoC 的哪个内存区域我们的外围设备,我们决定桥地址解码器中的高位??
  • 修复可能取决于外围设备 - 可能是为了简化设计,但我对其他部分一无所知。我认为即使是程序员到一定程度也不会关心或了解这一点。

标签: arm microcontroller


【解决方案1】:

对于像 UART 这样的简单外围设备,这很简单 - 以 ARM PL011 UART 为例(因为我知道它的文档所在的位置):

programmer's model 在 4k 块中以字对齐的偏移量定义了一堆寄存器。

the actual hardware 方面,我们看到总线接口与程序员的模型所建议的相匹配 - PADDR[11:2] 表示仅连接地址的第 11:2 位,这意味着它只能理解来自0x000 到 0xffc(同样,注意只连接了 16 位读/写数据,因为没有比这更宽的寄存器了)。

UART 的 12 位地址和 CPU 内核吐出的完整 32 位地址之间的内存映射发生在它们之间的互连硬件中。在设计时,互连地址映射将被配置为“将 0x40005000 处的 4k 区域分配给 UART0 块”等,并为此生成总线电路。

更复杂的事情,例如支持 DMA 的设备通常具有用于配置和数据访问的单独接口,因此可以将寄存器映射到低速外围总线上的一个小型可重定位块中,就像 UART 一样。

【讨论】:

    【解决方案2】:

    最高有效位由您的 ASIC 设计定义,最低有效位由 IP 设计定义。您的 IP 有几个寄存器。寄存器的数量及其顺序由 IP 设计定义。在这里,您的寄存器位于地址 8。然后在设计 ASIC 时,外围设备连接到内存总线,它们的连接方式定义了它们的地址。您的 UART 位于 40005000。您可能在(例如)40006000 处拥有相同 IP 的另一个实例。这两个 UART 将完全相同,您将能够访问地址为 40006008 的第二个 UART 的 CONTROL 寄存器。

    【讨论】:

    • 请添加AMBA作为参考。 AXI/AHB 将是他的顶级总线。通常,高级地址位路由到子总线。例如,CPU 连接到 AXI 或 AHB。某些高级地址位路由到 APB 总线,然后通过解码中间地址位路由到 IP。然后最低地址位选择寄存器。 BUS 是一棵树。 (正如你所说的+1)。另请参阅:MUX/DEMUX 了解路由的低级硬件。
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多