瑞萨RA系列MCU FSP库开发实战指南(09)存储器映射

2025-04-18

3.3

存储器映射

前文所述,寄存器与RAM、FLASH一样都是芯片内部的一种存储设备。那么,当我们需要访问它们的时候,我们需要知道它们的存储地址。

3.3.1

存储器映射表

如下图所示为RA6M5的存储器映射表,可以看到RA6M5芯片内部的存储器被映射到这一整块4G(0 ~0xFFFF FFFF)的地址空间中。我们还可以看到,除了寄存器和SRAM、Flash的地址空间区域以外,还存在着其他类型的地址空间区域,比如QSPI area和OSPI area。Reserved area表示的是保留区域,尚未用到。

瑞萨RA系列MCU FSP库开发实战指南(09)存储器映射 (https://ic.work/) 技术资料 第1张

3.3.2

存储器区域划分

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射。如果给存储器再次分配一个地址就叫存储器重映射。

对于RA6M5(176 pin)芯片,其内部线性地址空间划分为如下区域:

表2:线性地址空间区域划分

瑞萨RA系列MCU FSP库开发实战指南(09)存储器映射 (https://ic.work/) 技术资料 第2张

表格中的“0x4000_0000~0x4018_0000-1”区域,也就是“0x4000_0000~0x4017_FFFF”区域,它映射到了绝大部分外设模块的寄存器。

3.3.3

外设基地址和外设寄存器地址

如下图所示:

瑞萨RA系列MCU FSP库开发实战指南(09)存储器映射 (https://ic.work/) 技术资料 第3张

图中①处为该外设的基地址,也就是IO端口的基地址。因为RA6M5的IO端口不止有一个,而是有16个端口(用PORTm表示,m=0~9,A,B),所以每一个端口都有一个基地址,每个端口的基地址都可以用图中的公式来计算出来。

图中②处为该外设寄存器的地址偏移,图中的寄存器为PCNTR1/PODR/PDR寄存器,而“Offset address:0x000”表示的是该寄存器相对于基地址的偏移量。

举例来说

当我们要读取PORT1的PCNTR1/PODR/PDR寄存器的值时,我们要先计算出该寄存器的地址为:(0x40080000+0x0020*1),然后再把该地址值转换为C语言的指针:(uint32_t*)(0x40080000+0x0020*1),最后再取值即可读出该寄存器的值:*((uint32_t*)(0x40080000+0x0020*1))。

需要注意的是,每一种外设模块下面都会有多个寄存器,每个寄存器都有特定的功能。对于一些功能相对复杂的外设来说,它们的寄存器数量可以达到十几个甚至几十个。以IOPORT1为例,它的基地址为:0x40080020,下表则展示了它部分的寄存器名称、寄存器地址以及相对于基地址的偏移。

表3:IOPORT1寄存器及其地址

瑞萨RA系列MCU FSP库开发实战指南(09)存储器映射 (https://ic.work/) 技术资料 第4张

注解

注:由于基地址不同,上述表格未包含PmnPFS等这些也和IOPORT1有关的寄存器。

3.3.4

外设寄存器

下图所示为外设寄存器的一般格式。

瑞萨RA系列MCU FSP库开发实战指南(09)存储器映射 (https://ic.work/) 技术资料 第5张

说明:

寄存器名称。

外设模块基地址及其寄存器偏移地址。

寄存器位表格。32位MCU的寄存器大小一般为32位(bit),占四个字节。“Bit position”为位号,指示该位处于该寄存器中的位置;“Bit field”为位域,一般不同的位域有不同的作用;“Value after reset”为复位值,指示该位的复位值。

位域功能说明。这部分为对每一个位域的功能的详细说明。

文章推荐

相关推荐