u-boot如何映射外设内存?

时间:2013-07-31 16:19:47

标签: u-boot

我很困惑如何在u-boot中映射寄存器(例如:用于uart控制器)? 他们的内存映射在DDR中吗?如果是的如何? 如果没有,那么U-Boot中的“​​外围地址是内存映射”是什么意思?

1 个答案:

答案 0 :(得分:1)

欢迎使用Stackoverflow。

寄存器在硬件级使用SoC中的不同类型的互连映射到 RAM 存储器地址空间。例如,让我们以OMAP 35x系列为例,看看UART寄存器如何映射到SoC的 RAM 存储器地址空间,以及我们如何在U-Boot中访问它们。

Technical Reference Manual for OMAP 35x表2-3中。 L4核心内存空间映射,我们看到UART1的基地址为0x4806A000,其占用的RAM大小为4KB。

这意味着UART1的寄存器映射到 RAM 从该地址开始的4KB区域的存储空间。

要访问UART1的寄存器,我们需要知道它与基地址的偏移量,以获得其实际地址。这些偏移可在表17-39 UART IrDA CIR寄存器汇总中找到。

一旦我们知道实际地址,我们就会使用

指向该寄存器
unsigned int * (base_address + offset)

一旦我们有了指针,我们可以取消引用它来读/写寄存器。 e.g

要读取变量'x'中的寄存器,我们使用:

unsigned int x;
x = *(unsigned int * (base_address + offset));

写一个寄存器也是类似的

*(unsigned int *(base_address + offset)) = some_value;

为了更好地理解如何在硬件级别实现内存映射,请浏览TRM的第2章“内存映射”。