ST-ARM理论(1):系统架构,地址映射

这篇具有很好参考价值的文章主要介绍了ST-ARM理论(1):系统架构,地址映射。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ST-ARM理论(1):系统架构,地址映射

前提摘要

  1. 个人说明:

    限于时间紧迫以及作者水平有限,本文错误、疏漏之处恐不在少数,恳请读者批评指正。意见请留言或者发送邮件至:“noahpanzzz@gmail.com”

  2. 参考


正文

系统架构

CPU的核心主要功能为运算器和控制器,但是CPU并不具备数据存储的功能。CPU与外界存储器建立数据通道分为“哈佛结构”和“冯诺伊曼结构”两种不同思路。

ST-ARM理论(1):系统架构,地址映射,# ST-ARM理论,ST-ARM

冯诺伊曼结构的优点是总线资源占用少,缺点是执行效率较低,冯诺伊曼结构执行程序的同时不能读取数据。而相反的是哈佛结构的优点是执行效率较高,缺点是总线资源占用多,哈佛结构执行程序的同时能够读取数据。

如今半导体技术发展迅速,对于资源限制已经没有那么严重了。

ST-ARM

ST公司设计的ARM架构芯片,采用的是“哈佛结构”,ICode总线直接连接到Flash,而不需要经过经过总线矩阵。

ST-ARM理论(1):系统架构,地址映射,# ST-ARM理论,ST-ARM

上图为STM32F1系列系统架构图。

地址映射

Cortex-M3
  1. ARM Cortex-M3架构,32位CPU,所以就有32位地址线和数据线。
  2. 32位地址线决定了CPU的地址空间为4G(2^32 = 4G,按字节寻址)。

地址映射规则

  1. 芯片外接外部RAM和外部ROM的时候,RAM和ROM器件都是独立器件,并没有地址一说,或者说都只有自己的绝对地址,且从0x00开始。而对于CPU来说,0x00地址只能有1个,所以外接器件挂到CPU上时只能做地址映射,如RAM的地址为0x3000 0000, ROM地址为0x4000 0000, 这样CPU就做了统一编址。
  2. 32位地址线决定了CPU的地址空间为4G,这些地址要统一分配使用,所以说内存(RAM)、外设(寄存器)和存储器(RAM)都需要被映射到这个4G空间里面,但是哪些占用低地址,哪些占用高地址?
  3. 这些问题已经被ARM的设计者给设计好了的,地址从高到低如何使用,已经被规定好,而我们只需要学习这些规则就好了。掌握规则,并使用规则。
  4. 因此可以想象到:ARM体系结构中,系统上电或复位后,处理器将从地址0x00处取第一条指令,因此,上电的时候,地址0x00处必须是非易失性的ROM或FLASH。
  5. CPU地址总线的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、BIOS等)。就生成了物理地址,这个物理地址被放到CPU的地址线上。
  6. 物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,但物理RAM一般不能上到4G,因为还有一部分要给总线用(总线上还挂着别的许多设备)。一般是把低端物理地址给RAM用,高端物理地址给总线用。

总结:地址映射就是给地址进行命名的过程。

存储器映射
  1. 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配的,给存储器分配地址的过程就称为存储器映射。
  2. 在这 4G 的地址空间中,ARM 平均分成了 8 个块,每块 512MB,每个块也都规定了用途。每个块的大小都有 512MB,显然这是非常大的,芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,都是只用了其中的一部分而已。
序号 用途 地址范围
Block 0 Code 0x0000 0000 ~ 0x1FFF FFFF(512MB)
Block 1 SRAM 0x2000 0000 ~ 0x3FFF FFFF(512MB)
Block 2 片上外设 0x4000 0000 ~ 0x5FFF FFFF(512MB)
Block 3 FSMC 的 bank1 ~ bank2 0x6000 0000 ~ 0x7FFF FFFF(512MB)
Block 4 FSMC 的 bank3 ~ bank4 0x8000 0000 ~ 0x9FFF FFFF(512MB)
Block 5 FSMC 寄存器 0xA000 0000 ~ 0xCFFF FFFF(512MB)
Block 6 没有使用 0xD000 0000 ~ 0xDFFF FFFF(512MB)
Block 7 Cortex-M3 内部外设 0xE000 0000 ~ 0xFFFF FFFF(512MB)

ST-ARM理论(1):系统架构,地址映射,# ST-ARM理论,ST-ARM

上图为STM32F1系列存储器映射列表。

寄存器映射
  1. 寄存器是单片机内部一种特殊的内存,可以实现对单片机各个功能的控制,给寄存器分配地址的过程称为寄存器映射。
大类 小类 说明
内存寄存器 内核相关寄存器 包含R0~R15、xPSR、特殊功能寄存器等
内存寄存器 中断控制寄存器 包含NVIC和SCB相关寄存器,NVIC有:ISER、ICER、ISPR、IP等;SCB有:VTOR、AIRCR、SCR等
内存寄存器 SysTick寄存器 包含CTRL、LOAD、VAL和CALIB四个寄存器
内存寄存器 内存保护寄存器 可选功能,STM32F103没有
内存寄存器 调试系统寄存器 ETM、ITM、DWT、IPIU等相关寄存器
外设寄存器 包含GPIO、UART、IIC、SPI、TIM、DMA等各种外设

如果没有给寄存器映射,那么操作寄存器就会变得特别复杂。

以GPIOA ODR寄存器为例,GPIOA ODR的地址为0x4001 080C(寄存器地址=总线基地址+外设偏移地址+寄存器偏移量,以GPIOA_ODR为例,GPIOA_ODR=0x4001 0000 + 0x800 + 0x0C = 0x4001 080C。需要注意的是AHB总线基地址是从0x4001 8000开始的,但是在程序中定义是从0x4002 0000开始,将SDIO的地址单独独立出来)。

那么直接操作寄存器地址:

*(unsigned int *)(0x4001 080C)=0xFFFF;

定义一个名字之后再操作:

#define GPIOA_ODR *(unsigned int *)(0x4001 080C)
GPIOA_ODR =0xFFFF;

但是这样直接操作寄存器还是很复杂,因为寄存器的数量是非常多的。

结构体映射

由于寄存器都是连续排列的,所以可以使用结构体进行映射(以GPIOA寄存器为例)。

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;

#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

那么GPIOA中CRL、CRH、IDR、ODR、BSRR、BRR、LCKR各个地址:

&GPIOA->CRL:0x40010800
&GPIOA->CRH:0x40010804
&GPIOA->IDR:0x40010808
&GPIOA->ODR:0x4001080c
&GPIOA->BSRR:0x40010810
&GPIOA->BRR:0x40010814
&GPIOA->LCKR:0x40010818

注:关于__IO

#ifdef __cplusplus
  #define     __I     volatile                /*!< defines 'read only' permissions      */
#else
  #define     __I     volatile const          /*!< defines 'read only' permissions      */
#endif
#define     __O     volatile                  /*!< defines 'write only' permissions     */
#define     __IO    volatile                  /*!< defines 'read / write' permissions   */

volatile的英文解释是易变化的,不稳定的。所以在变量的前面加这个修饰符目的是让CPU去内存中读取数据,而不是CPU去寄存器读取数据。

由于外部因素使得内存中存放该变量的值发生了改变,如果CPU不访问内存,而是直接读取寄存器的旧值,则读取的是错误的,导致程序失败。

总结

本文均为原创,欢迎转载,请注明文章出处:。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。本人能力有限,如果你有好的想法,还望不吝赐教!文章来源地址https://www.toymoban.com/news/detail-801871.html

到了这里,关于ST-ARM理论(1):系统架构,地址映射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【新版系统架构】第十二章-信息系统架构设计理论和实践

    软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版) 第一章-绪论 第二章-计算机系统基础知识(一) 第二章-计算机系统基础知识(二) 第三章-信息系统基础知识 第四章-信息安全技术基础知识 第五章-软件工程基础知识(一) 第五章-软件工程基础知识(需求工

    2024年02月15日
    浏览(44)
  • 系统架构设计高级技能 · 安全架构设计理论与实践

    点击进入系列文章目录 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 威胁可以来源于物理环境、通信链路、网络系统、操作系统、应用系统、管理系统。 网络与信息安全风险类别可分为

    2024年02月11日
    浏览(47)
  • 系统架构设计高级技能 · 面向服务架构设计理论与实践

    点击进入系列文章目录 从软件的基本原理定义,可以认为SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的 需接口和契约 联系起来。接口是采用中立的方式进行定义的,它应该独立与实现服务的硬件平台、操作系统和编程语言。这

    2024年02月11日
    浏览(52)
  • 系统架构设计高级技能 · 大数据架构设计理论与实践

    系统架构设计高级技能 · 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 · 软件可靠性分析与设计(三)【系统架构设计师】 现在的一切都是为

    2024年02月11日
    浏览(46)
  • 系统架构设计高级技能 · 云原生架构设计理论与实践

    系统架构设计高级技能 · 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 · 软件可靠性分析与设计(三)【系统架构设计师】 现在的一切都是为

    2024年02月11日
    浏览(50)
  • 【新版系统架构】第十八章-安全架构设计理论与实践

    信息系统安全设计重点考虑:系统安全保障体系,信息安全体系架构 系统安全保障体系: 安全区域策略的确定,根据安全区域的划分,主管部门应制定针对性的安全策略 统一配置和管理防病毒系统,主管部门应当建立整体防御策略,以实现统一的配置和管理 网络安全管理,

    2024年02月13日
    浏览(50)
  • 系统架构设计高级技能 · 层次式架构设计理论与实践

    现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 软件体系结构可定义为:软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述、这

    2024年02月10日
    浏览(52)
  • 【操作系统基础】【CPU访存原理】:寄存 缓存 内存 外存、内存空间分区、虚拟地址转换、虚拟地址的映射

    存储器怎么存储数据、内存空间分区、虚拟地址转换 计算机的存储器:寄存 缓存 内存 外存(按功能划分) 计算机的处理器需要一个存储器来存储大量的指令和数据以便自己不断取指执行和访问数据。 内存 (内存就是运行内存,如手机的8G运行内存,电脑的16G运行内存)就

    2024年01月25日
    浏览(59)
  • 分布式系统架构理论与组件

    在计算机发展的早期,一直都是集中式计算,计算能力依赖大型计算机。随着互联网的发展,繁重的业务需要巨大的计算能力才能完成,而集中式计算无法满足要求,大型计算机的价格也非常昂贵。分布式计算将任务分解成更小的部分,分配给多台计算机处理,这样可以节约

    2024年02月04日
    浏览(42)
  • 【新版系统架构】第十三章-层次式架构设计理论与实践

    软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版) 第一章-绪论 第二章-计算机系统基础知识(一) 第二章-计算机系统基础知识(二) 第三章-信息系统基础知识 第四章-信息安全技术基础知识 第五章-软件工程基础知识(一) 第五章-软件工程基础知识(需求工

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包