很多人对总线和地址映射的概念都是一头雾水,但是我们如果知道为何需要总线和地址映射,他们是在什么背景下被衍化出来的,自然而然对此概念就清清楚楚了。
我们知道CPU都是通过总线访问外设,例如STM32使用AMBA规范的总线和外设进行交互,那么在总线的概念没有被提出来的时候,外设是怎样被访问的呢?
其实在最早期还没有总线概念的时候,CPU设计者会直接把CPU内核和各种接口控制器设计到一起,如果要访问一个硬件,直接在内核里面对各种接口控制器进行操作,从而操作相应的硬件。我们看下图。
后来设计者发现如果每添加一个外设都要修改CPU内核,这样不具有很好的扩展性,为了使得外设的改变(增加、删除、修改)不影响CPU内核架构,衍化出了总线的概念,CPU内核可以通过总线访问各种各样外设,新的外设只需要挂接到总线上,就可被CPU内核访问控制。有了总线,CPU可以用统一的访问方式访问任何外设,实现了CPU内核和外设分开设计和维护。
如下图所示,下图和CPU内核交互的只有地址总线接口、数据总线接口、控制总线接口,这三个接口一个提供地址、一个提供数据,一个提供控制信息(读、写、其他控制信息),所有的外设连接到总线矩阵上。
2 STM32/CPU地址映射
外设怎么知道CPU内核发出的操作是给自己的呢?
其实每一个外设都具有自己的地址空间,当CPU内核通过总线访问外设时,对应地址空间的外设就知道CPU内核是在操作自己(外设被命中),然后外设去操作连接的硬件,如上图ROM控制器操作Flash设备。
外设的地址控制怎么分配呢?
答案就是地址映射,地址映射这个过程是在设计芯片的时候就要进行考虑的,地址总线接口如果是32位,则内核可访问的外设空间最大就是4Gbit,芯片设计者为每一个外设会映射一段地址空间,比如GPIOA映射到0x0000000-0x0000FFFF,则CPU在访问0x0000000-0x0000FFFF地址空间时会被GPIOA外设捕获到,至于外设想做什么由外设的硬件设计者来决定。地址总线接口如果是64位,则内核可访问外设的地址空间为2^64bit。
3 STM32的外设地址映射表
STM32地址总线接口为32位,则可以访问4Gbit的外设空间,下面为STM32F10X外设地址映射表。有很多还没有被映射的地址空间,ST公司后期可能用来扩展新外设,而扩展过程Cortex内核是不需要进行任何修改的。
关键字:STM32 CPU 地址映射
引用地址:
STM32/CPU地址映射的概念
推荐阅读最新更新时间:2024-11-09 18:22
试图替换西方技术,俄罗斯CPU公司宣布破产
T-Platforms 是一家俄罗斯公司,该公司曾计划建造一台 Exascale 超级计算机和国产 CPU,但由于该公司的资产成本低于其债务,于是他们在本周宣布破产。T-Platforms 是俄罗斯为数不多的可以制造世界级高性能超级计算机的公司之一。破产的主要原因不是西方国家的制裁,而是俄罗斯试图用自己的技术取代西方技术。 T-Platforms 成立于 2002 年,旨在构建能够与 IBM 和 HP 等公司的产品竞争的服务器和超级计算机。多年来,T-Platforms 基于 AMD Opteron、Intel Xeon 和 Nvidia Tesla 处理器开发了一些俄罗斯性能最高的超级计算机。例如,该公司的 Lomonoso
[半导体设计/制造]
STM32 Contex-M的位带操作
位带操作的思想在30年前就已经有了,还是8051开创的先河。如今,Contex-M3将此能力进化,这里的位带操作位寻址区威力大幅度增强。 有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB 范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。 上图为位带区和位带别名区的膨胀对应关系 在位带区中,每个比特都映射到别名地址区的一个字——这是只有 LSB 有效的字。当一 个别名地址被访问时,会先把该地址变换成位带地址。对于读
[单片机]
STM32 IO寄存器操作
STM32的IO端口有八种模式: 1、输入浮空 5、开漏输出 2、输入上拉 6、推挽输出 3、输入下拉 7、推挽复用 4、模拟输入 8、开漏复用 每个IO口都有七个寄存器来控制: CHL、CHR :端口配置寄存器(32位) IDR、ODR :数据寄存器(32位) BSRR :置位/复位寄存器(32位) BRR :复位寄存器(16位) LCKR :所存寄存器(32位) 其中,比较常用的IO端口寄存器为CRL,CRH,IDR,ODR 低配置寄存器CRL: 该寄存器复位值为0x4444 4444。即
[单片机]
stm32校验和计算的问题
常用的通信中,经常会有一些校验方法,比如DHT22的单总线协议。 根据参考手册,只需要计算 if((buf +buf +buf +buf )==buf ) 就可以了,但是!!! 对于stm32来说,其计算结果可能不是想象中的那样,举个例子,buf0-4的值都为0x80,那么和就是0x200,至少对于stm32来说,结果是0x00000200,而buf 的值是0,那么0x200和0相等吗? 所以这个判断不成立,就得不到我们想要的值。 只需要在判断计算的时候加一个变量强制转换,或者对256取模就可以了。 if((u8)(buf +buf +buf +buf )==buf ) { *humi=(buf
[单片机]
MathWorks专访:如何用STM32设计出超越AI的智能应用
业界应如何看待边缘人工智能?ST授权合作伙伴 MathWorks 公司的合作伙伴团队与ST 共同讨论了对边缘机器学习的看法,并与 STM32 社区分享了他们的设计经验。 MathWorks的 MATLAB® 和 Simulink® 软件闻名业界。MATLAB®软件工具可让科学家分析数据,开发算法,创建模型;Simulink®软件可以创建模型化设计,仿真测试动态系统,支持 STM32 MCU,开发、部署和优化在 STM32 MCU上运行的应用。MathWorks 为开发者提供MCU AI开发部署工具,业务范围涵盖许多领域,包括控制设计、信号处理和嵌入式系统设计,以及许多专用附加产品。公司不仅在学术界享有盛誉,在航空航天、
[单片机]
STM32的IO口灌入电流和输出驱动电流最大是多少?
刚开始学习一款单片机的时候一般都是从操作IO口开始的,所以我也一样,先是弄个流水灯。 刚开始我对STM32的认识不够,以为是跟51单片机类似,可以直接操作端口,可是LED灯却没反应,于是乎,仔细查看资料发现,原来对于ARM,不管你要操作哪个IO口,都要先配置IO口。 不过对于普通的IO口的应用,配置会比较简单,主要就以下几个步骤: 1.打开相应IO口的时钟; 2.打开IO口相应引脚位; 3.配置IO口的模式; 4.初始化IO端口。 对于STM32的IO口可以根据需要由软件配置成8种模式: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮
[单片机]
STM32文档中关于NVIC寄存器说明的位置
要使用STM32,需要各种文档,其中有(以STM32F103RBT6为例): st官方资源地址:http://www.st.com/internet/mcu/product/164487.jsp 1、datasheet: http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00161566.pdf 2、REFERENCE MANUALS: http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/
[单片机]