LPC启动过程和重映射概念

发布者:BeaLaity0170最新更新时间:2016-04-25 来源: eefocus关键字:LPC  启动过程  重映射 手机看文章 扫描二维码
随时随地手机看文章
1.LPC2200的启动过程:

(1) 芯片启动时,是从0地址开始,但是这时引导程序被映射到了地址0,所以这时启动的就是引导程序。

(2) 引导程序检查ISP引脚的状态和BOOT【1】和BOOT【0】,根据不同的状态,将不同的内容映射到地址0,例如
0x80000000或者0x40000000,这个要看你的配置了,从而进行重新映射。

(3) 重新映射后,就跳转到0再运行,这时候实际上运行的是0x80000000或者0x40000000的程序了。

注意:设置RW和RO的目的是为了告诉编译器把生成的代码放在存储器的什么地方。代码实际是存在0x80000000或者0x40000000那里的,只是通过映射的方式,将前面的中断向量表部分映射到地址0去了。、

2.bootLoader 的功能:

(1) 功能: 开启串口下载

(2)过程:首先,是通过检测P0.14口的状态。如果为低电平,则运行ISP的程序,它是BOOTLOADER的一部分,这段程序是引导串口接收数据并放进片内FLASH中;如果P0.14口的状态不为0,那么它就检测你是运行片内FLASH的程序还是外部FLASH的。

先说说片外的FLASH,因为我们下载片外FLASH时是把BIN文件烧进去的,所有的代码都是在一起的,这是什么意思呢,最开始是RO段的程序,紧接着是RW段的程序,但是执行时为了提高执行速度,把RO段放ROM区,RW段放RAM区,这动作是怎么实现的呢,其实就是在进行运行复位程序前就已经重映射了,具体是怎么实现的呢,其实就是一段程序搬运程序,由硬件实现,呵呵。如果是片内的,个人认为应该是一样的过程,只是速度快些而已。

无论怎么样,复位,PC肯定指向0x00000000,但是它从这个地址取出了一个跳转指令,跳到了bootloader区,为什么这么说呢,明明这一区域放的是中断向量表吗?呵呵,不错,但是这个向量表它源于bootloader区,所以相当于执行它的bootloader一样拉,接下来就要检测是否要下载(对P0.14进行检测,看是否是低电平),如果不下载就执行用户程序。

具体的重映射过程,上电复位后,由于ARM里面的FLASH和RAM它是没有地址编码的,所以要经过一次重映射,FLASH映射到0x80000000开始,RAM映射到0x40000000,系统根据BOOT[1:0]这两个脚自动把代码映射,也就是这段时间该怎么映射就怎么映射。不过很短,因为是由硬件实现的。

3.存储器的重映射

(1)存储器映射: 为存储器分配地址的过程称为存储器映射

(2)存储器重映射:为了增加系统的灵活性,系统中有部分地址可以同时出现在不同的地址上,这就叫做存储器重映射。

(3)重映射的内容:主要包括引导块“Boot Block”重映射和异常向量表的重映射。

4.引导块“Boot Block”及其重映射

(1)Boot Block 定义: Boot Block是芯片设计厂商在LPC2000系列ARM内部固化的一段代码,用户无法对其进行修改或者删除;

这段代码在复位时被首先运行。

(2)Boot Block 作用: a. 要用来判断运行哪个存储器上面的程序

b. 检查用户代码是否有效

c. 判断芯片是否被加密

d. 系统的在应用编程(IAP)以及在系统编程功能(ISP)

(3)Boot Block的位置:存在于内部Flash,LPC2200系列大小为8kb,它占用了用户的Flash空间;但也有其他的LPC系列不占

FLash空的, 而部分没有内部Flash空间的ARM处理器仍然存在Boot Block。

(4)Boot Block的重映射原因: Boot Block中有些程序可被用户调用,如擦写片内Flash的IAP代码。为了增加用户代码的可移植性,

所以最好把Boot Block的代码固定的某个地址上。但由于各芯片的片内Flash大小不尽相同,如果把Boot Block的地址安排在内部

Flash结束的位置上,那就无法固定Boot Block的地址。

为了解决上面的问题,于是芯片厂家将Boot Block的地址重映射到片内存储器空间的最高端,即接近2Gb的地方,这样无论片内存储器的大小如何,都不会影响Boot Block的地址。因此当Boot Block中包含可被用户调用的IAP操作的代码时,不用修改IAP的操作地址就可以在不同的LPC系列的ARM上运行了。

5. 中断异常向量表的重映射

ARM内核在发生异常后,会使程序跳转到位于0x0000~0x001C的异常向量表处,再经过向量跳转到异常服务程序。但ARM单条指令的寻址范围有限,无法用一条指令实现4G范围的跳转,所以应在其后面的0x0020~0x003F地址上放置跳转目标,这样就可以实现4G范围内的任意跳转,因此一个异常向量表实际上占用了16个字的存储单元。以下为一张中断向量表:
LDR PC, ResetAddr
LDR 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 SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD 0
FIQ_Addr DCD FIQ_Handler

重映射的原因:

由于ARM处理器的存储器结构比较复杂,可能同时存在片内存储器和片外存储器等,他们在存储器映射上的起始地址都不一样,因此ARM内核要访问的中断向量表可能不在0x0000~0x003F地址上,因此采用了存储器重映射来实现将存在与不同地方的中断向量表都映射到0x0000~0x003F地址上。

注意:Boot Block 也存在中断向量表,而且复位后这段代码首先映射到 0x0000~0x003F地址上,也就是说复位后首先运行的是Boot Block程序。各个存储区域的中断向量表也不尽相同。

从上面可以看出中断向量表可以来自4个不同的存储区域。通过下图的激活方式,可以在0x0000~0x003F地址处访问到从其他存储区域重映射过来的中断向量表。

注意:除了“用户片内FLASH模式”外,其他模式下都无法访问片内FLASH的0x0000~0x003F区域。


6.系统启动代码

从系统上电到正式运行用户的main函数之前,要运行一段代码,这段代码称为“启动代码”。

启动代码大部分是由汇编指令构成,它可以实现向量表定义,堆栈的初始化,系统变量初始化,中断系统初始化,I/O初始化,外围初始

化,地址重映射等操作。

启动代码与ARM的Boot Block不同,Boot Block是芯片厂家固化在芯片中的,不能对其进行修改,而启动代码是用户添加的。系统上

电后首先运行的是Boot Block,然后才运行启动代码。


关键字:LPC  启动过程  重映射 引用地址:LPC启动过程和重映射概念

上一篇:LPC中的中断处理小结
下一篇:6410平台上配置Linux的DDR参数

推荐阅读最新更新时间:2024-03-16 14:51

基于LPC2294和ENC28J60的嵌入式网关软硬件设计
随着Internet的普及,实现智能家居远程控制不再是人们的梦想,所谓远程控制,是指管理人员在异地通过计算机网络异地拨号或双方都接入Internet等手段,联通需被控制的计算机,将被控计算机的桌面环境显示到自己的计算机上,通过本地计算机对远方计算机进行配置、软件安装程序、修改等工作。远程唤醒(WOL),即通过局域网络实现远程开机。CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品着称的德国BOSCH公司开发了的,并最终成为国际标准(ISO118?8)。是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标
[单片机]
基于<font color='red'>LPC</font>2294和ENC28J60的嵌入式网关软硬件设计
LPC2103之中断向量控制器
LPC2103的PWM编程 1. 在PINSEL0/1寄存器中设置好需要输出PWM波的管脚功能; 2. CTCR寄存器设置为定时器模式(默认复位值即可); 3. 开启PWMCON中相应的MAT位输出PWM功能; 4. 设置PWM定时时间和占空比等参数: 1) 设置PR寄存器值,即PCLK分频系数,分频后时钟作为TC的计数时钟; 2) 设置匹配寄存器值,需要设置两个匹配寄存器值,假设MR0为PWM输出匹配寄存器,那么需要设置该寄存器计数值,其次,还需要在MR1/2/3中任选一个作为匹配后复位,也就是说,MR1/2/3的值要大于MR0的值。在PWM运行时,初始PWM输出为0,当TC和MR0匹配则PWM输出1,
[单片机]
基于LPC2210的LED显示屏控制系统设计
   当LED显示器采用8位/16位微处理器时,存在运行速度慢、寻址能力弱和功耗大等问题。文中采用32位ARM7微处理器LPC2210为核心控制器件,完成LED显示屏控制系统的设计。系统采用可扩展、模块化设计。以LED显示屏的显示电路和ARM微处理器控制电路为核心,并通过LPC2210微处理器自带的锁相环(PLL),对系统进行倍频设计,有效提高了系统的可扩展性。通过对各模块的调度可方便实现点阵LED屏以双色、多样化方式显示各种信息,也可通过简单的级联实现屏的扩展。   随着计算机和半导体技术的发展,使LED大屏幕显示系统成为集计算机控制、视频、光电子、微电子、通信、数字图像处理技术为一体的显示设备。随着大屏幕显示技术的发展进步,
[单片机]
基于NXP LPC2148的微型尿液分析仪
项目概述    我们设计的微型尿液分析仪可以检测尿液的十种参数,包括白细胞、亚硝酸盐、尿胆原、蛋白质、PH值、潜血、比重、酮体、胆红素和葡萄糖。   在用户把浸没了尿液的试纸条放入仪器后,通过LPC2148控制LED光源进行分时发光,然后反射光通过光纤照射到CCD上,经过信号的采集和模数转换,并在微处理器中经过归一化的算法,将结果输出至LCD进行显示,或者根据需要传输至PC。并可以利用以太网接口连接Internet,方便建设一个健康检测网络。不用复杂的操作便可以得到医生的诊断,十分适合家庭用户的使用。    通过设计新的仪器结构和检测方法,使仪器精度达到或超过国内医院使用较多的尿液分析仪的水平,把体积减小到170×110×12
[医疗电子]
基于NXP <font color='red'>LPC</font>2148的微型尿液分析仪
LPC824-引脚配置IOCON
通过前面的例子我们知道,输入/输出端口(即I/O口)是LPC824所能依赖进行控制的唯一通道,如果把芯片的CPU内核比作人的大脑,那芯片的I/O口就相当于人的五官和四肢,负责信息的获取和动作的执行,如果芯片没有I/O口那CPU本身会变得毫无意义,因此很有必要了解它们的内部结构及其详细配置。LPC824标准I/O引脚的内部结构如下图所示。 在内部结构图中,PIN是输入/输出端口中的一位,也就是GPIO的某个引脚,其上连接的ESD为静电阻抗器,用于释放引脚上的静电干扰。上半部分的逻辑门及MOS管用于控制数字输出,其中的MOS管受控于开漏使能、输出使能及CPU输出等三个信号,用来确定引脚的强上拉、强下拉及输出电平。中间部分的逻辑
[单片机]
<font color='red'>LPC</font>824-引脚配置IOCON
解决mdk生成bin烧录lpc1343无法运行问题
最近拿到了lpc1343的最小系统板,arm cortex-M3,好东西啊。 拿起手册赶紧看起,看完系统时钟跟GPIO部分就忍不住要跑程序了。呵呵 具体的配置就不说了。写好程序就开始编译。 通过LPC1343 芯片本身自带的USB BootLoader 来更新我自己的程序,这个功能太爽了。 首先mdk生成的是hex文件,需要转化为bin文件,用keil自带的工具可以实现 使用FROMELF命令行生成BIN的文件, 使用方法如下: keil-project-options for target-user-run user programs after build - run #1 C:/Keil/ARM/
[单片机]
LPC1768之系统滴答定时器
滴答定时器可作为实时系统的滴答时钟。MDK新建工程完成后,添加core_me.h到工程,static __INLINE uint32_t SysTick_Config(uint32_t ticks),在core_m3.h文件中。初始化时候调用即可。然后直接添加定时器中断处理函数即可。 /* * main.c: the main file * NXP -- LPC1768 * * * Author : light * Date : 2012-4-16 * */ #include LPC17XX.h volatile uint32_t msTicks; /* counts 1ms t
[单片机]
LPC2000系列的CAN总线验收滤波器应用
CAN(Controller Area NetWork)总线,即控制器局域网总线,是由德国Bosch公司于1982年开发和推出的最早用于汽车内部测量与执行部件之间的数据通信协议。在20多年的历史中,CAN总线在许多领域得到了应用,是到目前为止唯一有国际标准的现场总线。 CAN现场总线按照国际标准化组织ISO提出的"开放系统互联(OSI)"参考模式,实现其中的物理层、数据链路层和应用层。CAN控制器用来实现CAN总线协议。CAN控制器芯片分为两类:一类是独立的控制器芯片,如SJA1000;另一类是和微控制器做在一起,如Philips公司的LPC2000系列32位ARM微控制器。两类控制器都提供了报文标识过滤的验收滤波器。但
[单片机]
<font color='red'>LPC</font>2000系列的CAN总线验收滤波器应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved