ARM的存储器映射与存储器重映射.
单片机--关于ARM的22个常用概念--的确经典

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的哈佛结构。
实验2.13存储器重映射

第一个循环结束之后,继续点击单步运 行 ,进行第二个循环,将“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上的物理存储单元。
ARM嵌入式系统复习题

嵌入式系统复习题一、简答题1、什么是嵌入式处理器,嵌入式处理器可以分为几大类?嵌入式处理器是为了完成特殊的应用而设计的特殊目的的处理器,分为嵌入式微处理器、嵌入式微控制器、嵌入式DSP处理器、嵌入式片上系统(SOC)。
2、广泛使用的三种类型的操作系统?多道批处理操作系统、分时操作系统以及实时操作系统。
3、什么是RISC?什么是CISC?RISC是精简指令集计算机的缩写。
CISC是复杂指令集计算机的缩写。
4、ARM7TDMI中的T、D、S、I分别表示什么含义?T:支持高密度16位的Thumb指令集;D:支持片上调试;S:ARM7TDMI 的可综合(synthesizable)版本(软核);I:支持EmbededICE观察硬件;M:支持64位乘法5、ARM7TDMI处理器采用什么样的体系结构,其可寻址地址空间多大?ARM处理器使用冯.诺依曼结构;使用单个平面的232个8位字节地址空间。
地址空间可以看作是包含230个32位字,或231个16位半字。
6、ARM7TDMI处理器采用几级流水线处理,使用何种存储器编址方式?ARM7TDMI处理器采用三级流水线;ARM处理器将存储器看做是一个从0开始的线性递增的字节集合。
7、ARM处理器模式和ARM处理器状态有什么区别?ARM处理器模式指用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。
ARM处理器状态指ARM状态和Thumb状态ARM两种处理器状态下均有上述7种模式。
8、ARM7TDMI内部寄存器特点?分别为31个通用32位寄存器和6个状态寄存器。
它们不能在同一使劲同时被访问,对其的访问取决于处理器状态和处理器模式。
9、ARM7TDMI有几种寻址方式?寄存器寻址、立即寻址、寄存器移位寻址、寄存器间接寻址、基址寻址、多寄存器寻址、堆栈寻址、相对寻址。
10、ARM7的内部寄存器R13、R14、R15的主要功能和作用?R13:堆栈指针,用于保存堆栈的出入口处地址、保存待使用寄存器的内容R14:连接寄存器,当使用BL指令调用子程序时,返回地址将自动存入14中;当发生异常时,将R14对应的异常模式版本设置为异常返回地址;其他时候作为通用寄存器。
第5章.LPC2000系列ARM(1)

串口 JTAG
周立功单片机
5.3 存储器寻址
• 片外Flash编程方法(LPC2200):
在CPU上运行一个装载程序(Loader,一般由用 户编写),该程序通过串口接收要烧写的数据,然 后擦除编程Flash。
ARM7 局部总线 SRAM Flash AHB To VPB 桥 ARM7TDMI-S CPU 系统功能
AHB总线
VIC EMC
外部中断
TIMER0/1 ADC
I2C串行接口
SPI串行接口 UART0 & 1 CAN 看门狗定时器
看门狗定时器带有内部分频器, 可以方便设臵溢出时间,在软 件使能看门狗后只有复位可以 禁止(具有调试模式);
LPC2294
LPC2131 LPC2132 LPC2134
144
64 64 64
16KB
8KB 16KB 16KB
256KB
32KB 64KB 128KB
8
8 8 双8路
4
- - -
LPC2136
LPC2138
64
64
16KB
32KB
256KB
512KB
双8路
双8路
-
-
带1路 DAC
周立功单片机
• 芯片内部框图
周立功单片机
5.2 引脚配置
• LPC2000系列芯片外形
LPC2114/2124
LPC2210/2212/2214
周立功单片机
5.2 引脚配置
• 引脚功能选择使用示例
LPC2000系列微控制器的引脚一般是多个功 能复用,但是同一引脚在同一 引脚在同一时刻只 能使用其中一个功能,这可以通过设臵PINSELx寄 存器来选择,详细介绍见“引脚连接模块”小节。
第二章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寄存器映射给已经分配好的地址的⼜特定功能的内存单元取别名的过程就叫寄存器映射。
ARM片外Flash存储器IAP解决办法

ARM片外Flash存储器IAP解决办法0 引言以ARM芯片为处理器核的嵌入式应用系统,以其小体积、低功耗、低成本、高性能、丰富的片内资源以及对操作系统的广泛支持,得到了人们越来越多的青睐。
在应用编程IAP (InApplicatAiONProgram)就是这样的自修改程序。
它先在RAM存储器中写人数据值,然后使PC指向该存储段,把该段作为程序段来执行。
很多ARM7芯片自带IAP处理器,应用其自带的IAP处理器可以方便地对其片内集成的Flash存储器进行在应用编程,但几乎所有的ARM 核芯片均不支持片外IAP处理,因为片外Flash存储器是用户选型的,芯片生产厂家无法先知先觉,而不同Flash存储器其编程时序也不尽相同,导致芯片生产厂家无法提供通用的IAP 代码。
那么,如何对嵌入式系统的片外Flash存储器进行在应用编程呢?这里分两种情况:一是普通代码存放在片外单独1片Flash中,IAP代码在另一片Flash中完成,此时只要依据Flash的操作时序执行IAP代码,完成擦除或写入操作即可。
这种情况虽然简单,但应用了2片Flash;而IAP代码很小,一般完全可以集成到1片中,所以这里对这种情况不予考虑。
另一种情况是1片Flash中既要存储普通代码,又要实现IAP。
针对嵌入式应用系统片外Flash存储器IAP无现成方案的问题,介绍一种基于代码重入思想的片外存储器IAP解决方案。
结合LPC2210及SST39VFl60芯片,简介两款芯片特点,给出应用连接框图;分析IAP实现要点,并给出IAP的实现代码。
下面以Phnips公司的LPC2210 和 Silicon storageTechnology 公司的SST39VFl60为例,详细讨论这种情况IAP的解决方案。
1 硬件结构1.1 LPC2210介绍Philips公司的LPC22lO是一款基于支持实时仿真和嵌入式跟踪的16/32位ARM7TDMI-SCPU的微控制器。
基于ARM处理器的内存Remap机制研究

R MC N O O 0一R MC N 寄 存 器 : 置 系统 片外 扩展 R M s A / ls ak0一B k5的起 始 和终 止 地 O O5 设 O / R M FahB L n n a
址 . 中 D 0 D 9 是 B k基 指针 , 设置 值左 移 1 即为 该 B k的起 始 物理 地 址 . 2 其 1 1 位 n a 该 6位 n a D 0一D 9位 用 于 2
第 2 卷 第 8期 6
20 0 6年 6 月
绍
兴
文
理
学
院
学
报
Vo . 6 No. 12 8
J R L OF S AO N N VE S OU NA H XI G U I R nY
J .o 6 L 2o m
基于 A M处理 器的 内存 R m p R e a 机制研究
马 群 利
( 州 职业 技 术 学 院 , 江 台 浙 台州 370 ) 100
摘
要 : 过 对 各 种 A M 处 理 器 实 现 R m p过 程 的深 人 分 析 , 重 探 讨 了在 不 同 的存 储 体 系 中 , 种 不 同 机 制 的 R m 实 通 R ea 着 各 e印
现 . 时 比较 并 总结 了各 种 R m p机 制 的优 缺点 , 同 ea 为嵌 人 式 系 统 的存 储 体 系 设 计 提 供 参 考 . 关 键 词 : 人 式 系统 , R 处 理 器 , e a , 嵌 AM R m p 存储 系 统
器 , 6 在 4M范 围 内任意设 定 起始 位 置 ( 特殊 功 能 寄存 器 B n 外 ) 以 达 到连 续 的 存储 器 映 射 .3 4 1 B ak除 , ¥C 50 没有 专 门 的内部 R M 及 R M, O A 但可 以将 内部 的 8 C ce 置 为 S M 使 用 , ah 配 K A R 此时 S M 地址 固定 在 特 殊 A R
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,就可接收中断了。
如果在多个任务之间进行共享数据,一般是需要使用关中断和开中断实现数据同步的,其实中这种关中断和开中断,就是进入临界区和退出临界区。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2008For Evaluation Only.
ARM的存储器映射与存储器重映射
当系统上电后,程序将自动从0x00000000地址处开始执行,因此在系统的初始状态,要求0x00000000地址处的存储器是非易性的ROM或Flash等。
但是ROM 或Flash的访问速度相对较慢,每次中断发生后,都要读取ROM或Flash上的向量表开始,影响了中断响应速度。
因此,LPC2200提供一种灵活的地址重映射方法,该方法可以将内部RAM的地址重新映射到0x00000000的位置。
在系统执行重映射命令之前,需要将Flash中的中断向量代码拷贝到内部RAM中。
这样在重映射命令执行之后相当于从内部RAM中0x00000000的位置找到中断向量,而实际上是将RAM的起始地址0x40000000映射为0x00000000了。
这样,中断执行时相当于在RAM中找到对应中断向量,实现异常处理调试。
存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。
即用地址来表示对象。
这个地址绝大多数是由厂家规定好的,用户只能用而不能改。
用户只能在挂外部RAM或FLASH的情况下可进行自定义。
ARM7TDMI的存储器映射可以有0X00000000~0XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。
一般来说,0X00000000依
Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2008For Evaluation Only.
次开始存放FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存储器0X80000000,VPB(低速外设地址,如GPIO,UART)——
0XE0000000,AHB(高速外设:向量中断控制器,外部存储器控制器)——从0XFFFFFFFF回头。
他们都是从固定位置开始编址的,而占用空间又不大,如AHB只占2MB,所以从中间有很大部分是空白区域,用户若使用这些空白区域,或者定义野指针,就可能出现取指令中止或者取数据中止。
由于系统在上电复位时要从0X00000000开始运行,而第一要运行的就是厂家固化在片子里的BOOTBLOCK,这是判断运行哪个存储器上的程序,检查用户代码是否有效,判断芯片是否加密,芯片是否IAP(在应用编程),芯片是否ISP(在系统编程),所以这个BOOTBLOCK要首先执行。
而芯片中的BOOTBLOCK不能放在FLASH的头部,因为那要存放用户的异常向量表的,以便在运行、中断时跳到这来找入口,所以BOOTBLOCK只能放在FLSAH尾部才能好找到,呵呵。
而ARM7的各芯片的FLASH大小又不一致,厂家为了BOOTBLOCK在芯片中的位置固定,就在编址的2G靠前编址的位置虚拟划分一个区域作为BOOTBLOCK区域,这就是重映射,这样访问<2G即<0X80000000的位置时,就可以访问到在FLASH尾部的BOOTBLOCK区了。
BOOTBLOCK运行完就是要运行用户自己写
的启动代码了,而启动代码中最重要的就是异常向量表,这个表是放在FLASH 的头部首先执行的,而异常向量表中要处理多方面的事情,包括复位、未定义指令、软中断、预取指中止、数据中止、IRQ
Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2008For Evaluation Only.
(中断) ,FIQ (快速中断),而这个异常向量表是总表,还包括许多分散的异常向量表,比如在外部存储器,BOOTBLOCK,SRAM中固化的,不可能都由用户直接定义,所以还是需要重映射把那些异常向量表的地址映到总表中。
为存储器分配地址的过程称为存储器映射,那么什么叫存储器重映射呢?为了增加系统的灵活性,系统中有部分地址可以同时出现在不同的地址上,这就叫做存储器重映射。
重映射主要包括引导块“Boot Block”重映射和异常向量表的重映射。
1.引导块“Boot Block”及其重映射Boot Block是芯片设计厂商在LPC2000系列ARM内部固化的一段代码,用户无法对其进行修改或者删除。
这段代码在复位时被首先运行,主要用来判断运行哪个存储器上面的程序,检查用户代码是否有效,判断芯片是否被加密,系统的在应用编程(IAP)以及在系统编程功能(ISP)等。
Boot Block存在于内部Flash,LPC2200系列大小为8kb,它占用了用户的Flash空间,但也有其他的LPC系列不占用FLash空间的,而部分没有内部Flash空间的ARM处理器仍然存在Boot Block。
重映射的原因:Boot Block中有些程序可被用户调用,如擦写片内Flash的IAP代码。
为了增加用户代码的可移植性,所以最好把Boot Block的代码固定的某个地址上。
但由于各芯片的片内Flash大小不尽相同,如果把Boot Block的地址安排在内部Flash结束的位置上,那就无法固定Boot Block的地址。
为了解决上面的问题,于是芯片厂家将Boot Block的地址重映射到片内存储器空间的最高
Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2008For Evaluation Only.
端,即接近2Gb的地方,这样无论片内存储器的大小如何,都不会影响Boot Block的地址。
因此当Boot Block中包含可被用户调用的IAP操作的代码时,不用修改IAP的操作地址就可以在不同的LPC系列的ARM上运行了。
2.异常向量表及其重映射ARM内核在发生异常后,会使程序跳转到位于0x0000~0x001C的异常向量表处,再经过向量跳转到异常服务程序。
但ARM单条指令的寻址范围有限,无法用一条指令实现4G范围的跳转,所以应在其后面的0x0020~0x003F 地址上放置跳转目标,这样就可以实现4G范围内的任意跳转,因此一个异常向量表实际上占用了16个字的存储单元。
以下为一张中断向量表:LDR PC, ResetAddrLDR PC, UndefinedAddr LDR PC, SWI_Addr LDR PC, PrefetchAddr LDR PC, DataAbortAddr DCD 0xb9205f80 LDR PC, [PC,#-0xff0] LDR PC, FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined SWI_Addr DCD
SoftwareInterruptPrefetchAddr DCD PrefetchAbort DataAbortAdd DCD DataAbort Nouse DCD 0 IRQ_Addr DCD 0 FIQ_Addr DCD FIQ_Handler重映射的原因:由于ARM处理器的存储器结构比较复杂,可能同时存在片内存储器和片外存储器等,他们在存储器映射上的起始地址都不一样,因此ARM内核要访问的中断向量表可能不在0x0000~0x003F地址上,因此采用了存储器重映射来实现将存在与不同地方的中断向量表都映射到0x0000~0x003F地址上。
注意:Boot Block也存在中断向量表,而且复位后这段代码首先映射
到0x0000~0x003F地址上,也就是说复位后首先运行的是BootBlock程序。
各个存储区域的中断向量表也不尽相同。