【嵌入式系统】存储器映射与寄存器映射原理

简介: 【嵌入式系统】存储器映射与寄存器映射原理

嵌入式系统】存储器映射与寄存器映射原理

一、存储器映射


image.png

存储器在产家制作完成后是一片没有任何信息的物理存储器,而CPU要进行访存就涉及到内存地址的概念,因此存储器映射就是为物理内存按一定编码规则分配地址的行为。值得注意,存储器映射一般是由产家规定,用户不能随意更改。


image.png

图2 STM32芯片存储器映射

注1

STM32中,I-Code Bus与D-Code Bus默认映射到0x00000000 ~ 0x1FFFFFFF内存地址段;AHB系统总线默认映射到0x20000000 ~ 0xDFFFFFFF和0xE0100000 ~ 0xFFFFFFFF两个内存地址段;APB外设总线默认映射到0xE0040000 ~ 0xE00FFFFF内存地址段,但由于TPIU、ETM以及ROM表占用部分空间,实际可用地址区间为0xE0042000~0xE00FF000

二、寄存器映射

寄存器映射是在存储器映射的基础上进行的。


以STM32为例,操作硬件本质上就是操作寄存器。在存储器片上外设区域,四字节为一个单元,每个单元对应不同的功能。当我们控制这些单元时就可以驱动外设工作,我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元。但若每次都是通过这种方式访问地址,不好记忆且易出错。这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名实质上就是寄存器名字。给已分配好地址(通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射。


image.png

下面以GPIO寄存器CRL为例,先给出CRL定义如下:

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

在实际使用时,会有GPIOA->CRL=0x0000 0000这种写法,表示将16进制数0赋值给GPIOA的CRL寄存器所在的存储单元。而GPIOA->CRL就构造了一个寄存器映射。具体过程如下:

#define PERIPH_BASE      ((uint32_t)0x40000000) 

这里属于存储器级别的映射,将外设基地址映射到0x40000000,可对应图2

#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)

这里对外设基地址进行偏移量为0x10000的地址偏移,偏移到APB2总线对应外设区。

#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)

这里对APB2外设基地址进行偏移量为0x0800的地址偏移,偏移到GPIOA对应区域。

#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

这里将GPIOA宏定义为GPIOA基地址经过强制类型转换为GPIO_TypeDef的指针,这样的作用是使GPIOA结构体内对应的成员按顺序填充内存区域,如图3所示。因此GPIOA的CRL寄存器就是作为GPIOA基地址后的第一个内存块,GPIOA->CRL的本质就是这个内存块的地址,或者说是用GPIOA->CRL给这个地址取了个形象的别名,即寄存器映射。


目录
相关文章
|
供应链 架构师 BI
数仓实践:总线矩阵架构设计1
数仓实践:总线矩阵架构设计1
2527 0
数仓实践:总线矩阵架构设计1
|
9月前
|
Linux 开发工具 git
【Git】Git 完全指南:从入门到精通
Git 是一种强大的版本控制工具,掌握了其基本命令和高级特性后,可以大大提高开发效率并方便团队协作。通过本篇文章,你已经学会了 Git 的核心命令及其使用方法,希望你能够灵活运用 Git 在实际项目中进行版本管理。
2679 4
|
6月前
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
47841 65
|
10月前
|
数据处理
《原子操作:程序世界里的“最小魔法单位”解析》
在计算机编程中,原子操作是解决并发和多线程问题的关键。它指在执行过程中不会被其他操作中断的操作,确保数据处理的完整性和一致性。本文深入探讨了原子操作的概念、重要性、与普通操作的区别、应用场景及局限性,帮助读者更好地理解和应用这一核心技术。
293 3
|
11月前
|
安全 网络安全 开发者
OpenScManager failed , error code = 5
【10月更文挑战第7天】OpenScManager failed , error code = 5
570 3
|
XML 传感器 测试技术
GIGE 协议摘录 —— 照相机的标准特征列表(五)
GIGE 协议摘录 —— 照相机的标准特征列表(五)
222 2
|
C语言
C语言中的无参函数
C语言中的无参函数
784 1
|
监控 Linux Shell
|
机器学习/深度学习 自然语言处理 数据可视化
时序预测的三种方式:统计学模型、机器学习、循环神经网络
时序预测是一类经典的问题,在学术界和工业界都有着广泛的研究和应用。甚至说,世间万物加上时间维度后都可抽象为时间序列问题,例如股票价格、天气变化等等。关于时序预测问题的相关理论也极为广泛,除了经典的各种统计学模型外,当下火热的机器学习以及深度学习中的循环神经网络也都可以用于时序预测问题的建模。今天,本文就来介绍三种方式的简单应用,并在一个真实的时序数据集上加以验证。
723 0
时序预测的三种方式:统计学模型、机器学习、循环神经网络
|
安全 Unix Linux
【ARM】在NUC977上搭建基于boa的嵌入式web服务器
【ARM】在NUC977上搭建基于boa的嵌入式web服务器
384 0