存储器映射和存储器重映射概念

合集下载

单片机--关于ARM的22个常用概念--的确经典

单片机--关于ARM的22个常用概念--的确经典
对于低于 20MHz 的系统时钟,MAMTIM 设定为 001。对于 20MHz 到 40MHz 之间的系统时钟,建议将Flash访问时间设定为2cclk,而在高于40MHz的系统时钟下,建议使用3cclk。
3.VIC 使用注意事项
答:如果在片内RAM当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0。这样做是因为所有的异常向量都位于地址0x0及以上。通过将寄存器MEMMAP(位于系统控制模块当中)配置为用户RAM模式来实现这一点。用户代码被连接以便使中断向量表装载到0x4000 0000。
一些寄存器(r13,r14)在异常发生时会产生新的instances,比如IRQ处理器模式,这时处理器使用r13_irq和r14_irq
ARM的子程序调用是很快的,因为子程序的返回地址不需要存放在堆栈中。
14.存储器重新映射(Remap)的原因:
使Flash存储器中的FIQ处理程序不必考虑因为重新映射所导致的存储器边界问题;
18.VIC的基本操作如下:
答:设置IRQ/FIQ中断,若是IRQ中断则可以设置为向量中断并分配中断优先级,否则为非向量IRQ。然后可以设置中断允许,以及向量中断对应地址或非向量中断默认地址。当有中断后,若是IRQ中断,则可以读取向量地址寄存器,然后跳转到相应的代码。当要退出中断时,对向量地址寄存器写0,通知VIC中断结束。当发生中断时,处理器将会切换处理器模式,同时相关的寄存器也将会映射。
PLL只能通过软件使能;
PLL在激活后必须等待其锁定,然后才能连接;
PLL如果设置不当将会导致芯片的错误操作。
17.ARM7与ARM9的区别:
ARM7内核是0.9MIPS/MHz的三级流水线和冯&S226;诺伊曼结构;ARM9内核是五级流水线,提供1.1MIPS/MHz的哈佛结构。

嵌入式系统基础-复习提纲

嵌入式系统基础-复习提纲

嵌入式系统基础复习题第1章嵌入式系统概论1、什么是嵌入式系统?嵌入到对象体系中的专用计算机应用系统。

2、嵌入式系统的3个基本特点?嵌入性、专用性、计算机3、什么是嵌入式处理器,嵌入式处理器可以分为几大类?嵌入式处理器是为了完成特殊的应用而设计的特殊目的的处理器。

分为嵌入式微处理器、嵌入式微控制器、嵌入式DSP处理器、嵌入式片上系统(SOC)。

4、什么是嵌入式操作系统和?有何特点?列出常见的几种嵌入式操作系统及特点。

5、试比较说明JA TG工具和ISP工具的异同点?6、从硬件系统来看,嵌入式系统由哪几部分组成?画出简图。

第2章ARM7体系结构1、什么是RISC指令系统?什么是CISC指令系统?RISC是精简指令集计算机的缩写。

CISC是复杂指令集计算机的缩写。

2、ARM与ARM公司有什么区别?举出2个以上的ARM公司当前应用比较多的ARM处理器核?ARM7系列、ARM9系列、ARM10系列、ARM11系列、intel的Xscale系列和MPCore系列。

3、ARM7TDMI中的T、D、S、I分别表示什么含义?T:支持高密度16位的Thumb指令集D:支持片上调试S:ARM7TDMI 的可综合(synthesizable)版本(软核)I:支持EmbededICE观察硬件M:支持64位乘法4、ARM7TDMI处理器采用什么样的体系结构,其可寻址地址空间多大?ARM处理器使用冯.诺依曼结构使用单个平面的232个8位字节地址空间。

地址空间可以看作是包含230个32位字,或231个16位半字。

5、ARM7TDMI与ARM9处理器采用几级流水线处理,使用何种存储器编址方式?ARM7TDMI处理器采用三级流水线。

ARM处理器将存储器看做是一个从0开始的线性递增的字节集合。

6、ARM处理器有几种模式和ARM处理器状态有什么区别?各种工作模式下分别有什么特点?R M处理器模式指用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。

中微半导体 CMS32M57xx 32位电机微控制器 数据手册说明书

中微半导体  CMS32M57xx 32位电机微控制器 数据手册说明书

CMS32M57xx数据手册ARM® Cortex® -M0 32位电机微控制器Rev. 1.04请注意以下有关CMS知识产权政策*中微半导体(深圳)股份有限公司(以下简称本公司)已申请了专利,享有绝对的合法权益。

与本公司MCU或其他产品有关的专利权并未被同意授权使用,任何经由不当手段侵害本公司专利权的公司、组织或个人,本公司将采取一切可能的法律行动,遏止侵权者不当的侵权行为,并追讨本公司因侵权行为所受的损失、或侵权者所得的不法利益。

*中微半导体(深圳)股份有限公司的名称和标识都是本公司的注册商标。

*本公司保留对规格书中产品在可靠性、功能和设计方面的改进作进一步说明的权利。

然而本公司对于规格内容的使用不负责任。

文中提到的应用其目的仅仅是用来做说明,本公司不保证和不表示这些应用没有更深入的修改就能适用,也不推荐它的产品使用在会由于故障或其它原因可能会对人身造成危害的地方。

本公司的产品不授权适用于救生、维生器件或系统中作为关键器件。

本公司拥有不事先通知而修改产品的权利,对于最新的信息,请参考官方网站。

1. 产品特性1.1 MCU功能特性◆内核ARM Cortex™-M0,**********~5.5V- 单周期32位硬件乘法器◆32位硬件除法器(HWDIV)- 有/无符号模式,6个HCLK完成运算◆存储器- 最大64KB程序FLASH(APROM+BOOT)- 1KB的FLASH数据区(独立空间)- 最大8KB SRAM(支持分区写保护功能)- 支持BOOT功能,BOOT区可设置大小0-4KB- 支持硬件CRC校验FLASH空间代码- 支持FLASH分区保护(最小单位为2KB)◆系统时钟- 内部高速振荡48MHz/64MHz(HSI)- 内部低速振荡40KHz(LSI)◆GPIO(最多46 I/Os)◆LVR(1.8V/2.0V/2.5V/3.5V)◆LVD(2.0V/2.2V/2.4V/2.7V/3.0V/3.7V/4.0V/4.2V)◆内置温度传感器(TS)◆系统定时器- 24位SysTick定时器- 看门狗定时器(WDT)- 窗口看门狗定时器(WWDT)◆正常模式/睡眠模式/深度睡眠模式/停止模式◆通用循环冗余校验单元(CRC)◆定时器(32bit/16bit-TIMER0/1/2/3)◆捕获/比较/脉宽调制(CCP0/1)- 支持4通道同时捕捉可连接到霍尔传感器接口◆通信接口- 1个I2C模块(通信速度最快可达1Mb/s)- 1个SSP/SPI模块(4-16位数据格式可调)- 最多2个UART:UART0/1(共32个收/发FIFO)◆串行调试接口SWD(2-Wire)◆96bit唯一ID(UID)◆128bit用户UID(USRUID)- 用户可设置,可加密(可作为安全密钥)◆增强型PWM(EPWM)- 6路通道且通道可重映射- 支持独立/互补/同步/成组输出模式- 支持边沿/中心对齐计数模式- 支持单次/连续/间隔加载更新模式- 支持互补模式插入死区延时- 支持掩码及掩码预设(共8个掩码状态缓存)- 支持霍尔传感器接口(硬件控制PWM输出)- 支持故障保护及6种刹车信号源- 支持4种软/硬件故障恢复模式◆ADC0(12bit,100Ksps)- 最多20个通道- 每个转换通道有独立的结果寄存器- 支持单次/连续模式- 支持2种硬件触发方式共9个触发源- 1个转换结果比较器,可产生中断◆ADCB(12bit,1.2Msps)- 最多20个通道- 每个转换通道有独立的结果寄存器- 支持单次/连续模式、插入模式- 支持5种硬件触发方式共17个触发源- 1个转换结果比较器,可产生中断◆模拟比较器(ACMP0/1)- 正端4路选择,负端可选内部1.2V/VDD分压- 支持单/双边迟滞电压选择:10mV/20mV/60mV - 支持比较器输出触发EPWM刹车◆可编程增益放大器(PGA0/1)- 正端2路选择- 输出可接内部ADC通道与模拟比较器的输入- 内部增益可选择:4倍~32倍◆运算放大器(OP0/1)- 输入可接内部1.2V基准- 输出可接内部ADC通道与模拟比较器的输入- 可设置为比较器模式◆支持安全相关的功能与应用- 满足IEC60730 CLASS B 标准1.2 产品对比注:(1) 通过系统配置寄存器设置APROM和BOOT空间大小,APROM与BOOT空间总共最大为64KB。

实验2.13存储器重映射

实验2.13存储器重映射
据重映射到片内RAM0x40000000~0x4000003F 这段地 址上。 实验程序中,更改了RAM 上0x40000000~0x400000 3F 这段地址所对应的数据,由于重映射机制的原因,以上 两段地址都同时指向这段数据,因此, 0x40000000~0x4 000003F 上的数据被更改, 0x00000000~0x0000003F上 所显示的数据也自然有同样的变化。
第一个循环结束之后,继续点击单步运 行 ,进行第二个循环,将“55”改成了“AA”。
依次点击单步运行,可以清楚看到,观 察窗中表内数据“55”依次被更改为“AA”。
第二个循环结束后,进入MEMMAP=0(二进 制00)模式,即Boot Block(引导块)模式。如图 所示是观察窗Tab1中的数据。
如上图所示为Tab2中的数据,是0x7fffe000之后一段地 址的上的数据,对比Tab1中的数据,不难发现0x7FFFE000
~0x7FFFE030与0x00000000~0x00000030上的数据是相同
的。
对实验结果的分析
实验开始执行程序,首先进入的是用户片内RAM模式, 即MEMMAP=2(二进制10),此模式下,将存储器重映 射到片内RAM 上。 即将0x00000000~0x0000003F中的数
ARM比较复杂。ARM芯片与普通单片机在存储器地址方面的 不同在于:ARM芯片中有些物理存储单元的地址可以根据设置变换。 就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存
储单元就对应了另外一个地址了。下图是随意举了个例子(不要与 ARM芯片对应),旨在说明地址重映射的过程。下图表示把 0x00000000地址上的存储单元映射到新的地址0x00000007上。 CPU存取0x00000007就是存取0x00000000上的物理存储单元。

第二章STM32的结构和组成

第二章STM32的结构和组成

第⼆章STM32的结构和组成2.5 芯⽚⾥⾯有什么STM32F103采⽤的是Cortex-M3内核,内核即CPU,由ARM公司设计。

ARM公司并不⽣产芯⽚,⽽是出售其芯⽚技术授权。

芯⽚⽣产⼚商(SOC)如ST、TI、Freescale,负责在内核之外设计部件并⽣产整个芯⽚,这些内核之外的部件被称为核外外设或⽚上外设。

如:GPIO、USART(串⼝)、I2C、SPI等都在做⽚上外设。

ICode总线ICode中的I表⽰Instruction,及指令。

我们写好的程序编译之后都是⼀条条指令,存放在FLASH中,内核要读取这些指令来执⾏程序就必须通过ICode总线。

驱动单元DCode总线D表⽰Data,即数据,这要总线是⽤来取数的。

DMA系统总线⽤来传输数据,这个数据可以是在某个外设的数据寄存器。

被动单元内部的闪存存储器:即FLASH,我们编写好的程序就放在这个地⽅。

内核通过ICode总线来取⾥⾯的指令。

内部的SRAM:通常说的RAM,程序的变量开销都是基于内部的SRAM。

内核通过DCode总线访问。

FSMC:灵活的静态的存储器控制器。

AHB到APB的桥从AHB总线延伸出来的两条APB2和APB1总线,上⾯挂载着STM32各种各样的特⾊外设。

我们经常说的GPIO、串⼝、I2C、SPI这些外设在这条总线上,这是我们学习STM32的重点,重点、重点。

2.6存储器映射存储器映射:给存储器分配地址的过程。

存储器重映射:给存储器在分配⼀个地址就叫存储器重映射。

2.7寄存器映射给已经分配好的地址的⼜特定功能的内存单元取别名的过程就叫寄存器映射。

gd32f407的重映射函数

gd32f407的重映射函数

gd32f407的重映射函数(原创实用版)目录1.gd32f407 简介2.重映射函数的概念和作用3.gd32f407 的重映射函数实现4.gd32f407 重映射函数的应用5.总结正文一、gd32f407 简介gd32f407 是一款由 GD 公司推出的 32 位 MCU(微控制器单元),广泛应用于各种嵌入式系统中,如智能家居、工业自动化、消费电子等领域。

这款 MCU 具有高性能、低功耗、丰富的外设接口等特点,受到了广大开发者的青睐。

二、重映射函数的概念和作用在 gd32f407 中,重映射函数(Remap Function)是一种将外部设备地址映射到内部存储器地址的功能。

通过重映射,可以将外部设备(如 SD 卡、SPI 设备等)的地址映射到 MCU 内部的 SRAM 或 Flash 存储器中,从而实现外部设备与 MCU 内部存储器的高效数据交换。

三、gd32f407 的重映射函数实现在 gd32f407 中,重映射函数的实现主要依赖于其内置的硬件重映射控制器(Remap Controller)和软件配置。

具体实现步骤如下:1.配置重映射控制器:首先,需要对重映射控制器进行配置,包括设置重映射区域、重映射方式(如静态重映射、动态重映射)等。

2.设置重映射参数:根据实际需求,设置重映射参数,如外部设备地址、内部存储器地址、重映射长度等。

3.启动重映射控制器:配置完成后,启动重映射控制器,使其开始执行重映射操作。

4.软件操作:在软件层面,可以编写相应的程序,实现对外部设备的访问和数据传输。

此时,外部设备的地址将自动映射到内部存储器地址,从而简化了程序编写。

四、gd32f407 重映射函数的应用gd32f407 的重映射函数在实际应用中具有很高的价值。

例如,在嵌入式系统中,常常需要对外部设备进行数据读写操作。

通过使用重映射函数,可以简化程序编写,提高数据传输效率,降低系统功耗。

五、总结gd32f407 的重映射函数为开发者提供了一种便捷的方式,将外部设备的地址映射到内部存储器地址,实现了外部设备与 MCU 内部存储器的高效数据交换。

ARM处理器系统初始化过程程序

ARM处理器系统初始化过程程序

ARM处理器系统初始化过程1 禁止MMU,关闭中断,禁止cache;2 根据硬件设计配制好处理器时钟、DRAM时钟、定时器时钟;3 根据系统中所用的flash和DRAM芯片容量和电气参数设置它们的起始地址、容量、刷新频率等;4 将固化在flash芯片中的程序搬移到DRAM内存中;5 使能cache,使能MMU,跳转到DRAM内存中运行继续初始化,包括根据具体应用以及系统中的硬件配置初始化各个功能模块、安装好异常中断处理程序、使能中断等;6 进行操作系统相关初始化;禁止MMU,关闭中断,禁止cache通过写系统控制协处理器的寄存器1 的第0 位可以允许和禁止MMU。

在复位后这位是0,MMU 被禁止。

关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个程序输出打印内容,这样在打印机上就会乱得不得了,同时有两份以上的文件交错地打印在一张纸上。

像不可剥夺的资源,就一定要关闭中断,让它占有这个资源。

在ARM里,没有像x86那样有清除中断指令CLI。

那么在ARM里是怎么样实现关中断和开中断的呢?下面就来看看ARM的关中断和开中断实现。

void Lock(void){stmdb sp!, {r0}mrs r0, cpsrorr r0,r0,#0xC0msr cpsr_cxsf,r0ldmia sp!,{r0}}上面这段程序是通过设置CPSR的第6,7位来实现的,因为第6,7位是设置为1时,就不再响应中断。

void UnLock(void){stmdb sp!, {r0}mrs r0, cpsrbic r0,r0,#0xC0msr cpsr_cxsf,r0ldmia sp!,{r0}}上面是重新开中断的命令,同样是设置CPSR的第6,7位,但它的值是0,就可接收中断了。

如果在多个任务之间进行共享数据,一般是需要使用关中断和开中断实现数据同步的,其实中这种关中断和开中断,就是进入临界区和退出临界区。

什么是寄存器

什么是寄存器

什么是寄存器主要内容如何辨别STM32芯⽚的正⽅向STM32芯⽚架构图什么叫存储器映射什么叫寄存器映射⼀:如何辨别STM32芯⽚的正⽅向看丝印左边逆时针为第⼀个引脚在芯⽚表⾯有⼀个⼩圆点逆时针为第⼀引脚⼆:STM32芯⽚架构图(对于这两个图的理解可以参考STM32参考⼿册驱动单元由ARM 粉⾊部分位外设由ST设计,主要学习APB1 APB2 两个总线(两个总线速度不同)中的外设)三:什么叫存储器映射存储器本⾝不具有地址信息,它的地址是由芯⽚⼚商(ST)或⽤户分配,给存储器分配地址的过程就称为存储器映射。

给存储器分配地址的过程叫存储器映射,再分配⼀个地址叫重映射。

下图中的block0-7就相当于是存储器。

ARM的Cortex内核位32位,共有2^32=4GB的内存,ARM将4GB的内存分为8块,每块512Mb,分别位block0-7,如图其中ARM规定block0中,规定ST等这类公司只能将flash(程序)在其中,虽然由很多剩余,但仍要这么放置,为以后着想。

其他的block也规定。

下⾯我给出ARM规定block规定的block0-7放的相应外设图以及相应的地址(结合第⼆个图):我们在学习的时候主要学习block中的外设。

我们编程的时候主要是对block2中的外设对应的地址进⾏编程,然后通过GPIO输出相应的⾼低电平四:什么叫寄存器映射给有特定功能的内存单元取⼀个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

例如我们在51单⽚机中为什么可以⽤ P0=0xFF 点亮⼩灯;这是因为在其头⽂件中reg52.h中利⽤sfr这个关键字定义了 sfr P0=0x80;这就意味这我们可以⽤P0代表80这个地址单元。

但是在STM32中没有这个关键字。

那它是如何实现的呢,在STM32参考⼿册中GPIOx-ODR的低⼗六位全位1即可点亮16个⼩灯,我们取x位B端⼝,GPIOB的起始地址位0x4001 0C00-0x4001 0FFF在这段地址中有很多的寄存器包括ODR(偏移地址位0Ch),这ODR这个寄存的地址为0x4001 0c0c(绝对地址)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储器映射和存储器重映射
1.1 什么是存储器映射?
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配的,给存储器分配地址的过程就称为存储器映射。

如图 1.所示。

图 1.1 映射原理图
在完成了存储器映射后,用户就可以按地址去访问对应的存储单元。

1.2 什么是存储器重新映射?
顾名思义,存储器重映射就是给存储单元再分配1个地址。

此时,该存储单元就有了两个地址。

用户可以通过这两个地址来访问该存储单元。

如图 1.1所示。

图 1.1 存储器重映射
1.3 为什么要进行存储器重映射?
在实际应用中,我们需要对某些存储单元再分配地址;此时,就要进行存储器重映射。

例如,异常向量表所在存储单元和Boot ROM都须进行重映射。

下面以异常向量表所在存储单元的重映射为例说明如下:
(1)用户程序总是从异常向量表开始执行
在ARM7编程中,异常向量表是用户程序的必备部分,程序流总是从异常向量表开始的。

(2)发生异常时,只能通过规定地址访问异常向量表
由ARM7体系结构可知,ARM7的异常向量地址始终是0x0000 0000~0x0000 001c 。

例如,复位时,CPU 会自动跳转到复位异常向量地址0x0处读取该处指令。

(3) 异常向量表所在的存储单元地址不固定
用户程序可以存储在片内RAM 、片内Flash 、片外存储器,随着存储位置的不同,用户程序的存储地址显然也不同;因此,作为用户程序一部分的异常向量表的存储地址也是不固定的。

如图 1.2所示。

0x0000 00000x0000 001C
0x4000 0000
0x4000 001C 0x8000 00000xE000 0000
0xFFF FFFF 0x8000 001C 不定
图 1.2 各异常向量表的实际位置
(4) 问题的提出
当异常向量表的实际存储地址并不在要求的0x0000 0000~0x0000 001c 范围时,那么发生异常时,CPU 怎样才能访问到异常向量表呢?
(5) 解决办法――存储器重映射
存储器重映射机制就是为了解决(4)所提的问题而设计的。

用户可通过存储器重映射,把地址0x0000 0000~0x0000 001c 再分配给异常向量表所在存储单元。

至此,CPU 内核既可以通过0x0000 0000~0x0000 001c 访问异常向量表,也可以通过异常向量表所在存储单元的实际地址来访问异常向量表。

例如:用户程序现存放在片外Flash ,该程序的异常向量表实际存储地址位于0x80000000~0x8000003C ;但通过存储器重映射,可将地址0x00000000~0x0000003C 分配给0x80000000~0x8000003C 的存储单元。

于是,用户既可以通过0x80000000~0x8000003C ,也可以通过0x00000000~0x0000003C 来访问异常向量表。

所以,发生异常时,CPU 虽然仍是访问0x00000000~0x0000003C 处,但仍可通过该地址访问到实际位于片外Flash 的异常向量表。

1.4 小结
由上述可知,存储器重映射的用途就是给存储器单元再分配1个地址,以解决一些实际需要。

应用存储器重映射机制的例子,除异常向量表以外还有Boot ROM 。

若您有兴趣,可参考我们的《深入浅出ARM7――LPC2300(上册)》中的“存储器重映射及引导块”小节。

相关文档
最新文档