ARM启动与调试基础_第1页
ARM启动与调试基础_第2页
ARM启动与调试基础_第3页
ARM启动与调试基础_第4页
ARM启动与调试基础_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM基础

——启动和调试LPC2220的启动过程Boot引脚与存储器引导方式的关系当复位引脚为低时Boot引脚状态控制着引导方式和初始操作Boot[1:0]=00:8位存储器01:16位存储器10:32位存储器11:内部Flash存储器启动程序中断向量表初始化外部总线控制器初始化堆栈CPSR:程序状态寄存器CPSR有4个8位区域:标志域(F)、状态域(S)、扩展域(X)、控制域(C)MSR:写状态寄存器指令(只有它能对cpsr写)存储器地址映射与重新映射存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。地址映射示意图AHB:先进的高性能总线;VPB:连接片内外设功能的VLSI外设总线;

存储器重新映射是指将复位后用户所见的存储器中的部分区域再次映射到其他地址上。对于飞利浦的LPC系列arm微控器,存储器重新映射区域一共为64字节:0x00000000~0x0000003FMEMMAP与存储器映射的关系MEMMAP存储器映射控制寄存器MEMMAP[1:0]=00:BOOT装载模式01:用户flash模式10:用户ram模式11:用户外部存储器模式芯片复位时MEMMAP=0,启动BOOT装载程序存储器重新映射的原因使flash中的FIQ处理程序不必考虑由于重新映射导致的存储器边界问题;用来处理代码空间中段边界仲裁的SRAM和BootBlock向量的使用大大减少;为超过单字转移指令范围的跳转提供空间来保存常量。初始化目标板

voidTargetResetInit(void){#ifdef__DEBUGMEMMAP=0x3;//remap#endif

#ifdef__OUT_CHIPMEMMAP=0x3;//remap#endif#ifdef__IN_CHIPMEMMAP=0x1;//remap#endifMEMMAP[1:0]=00:BOOT装载模式01:用户flash模式10:用户ram模式11:用户外部存储器模式芯片复位时MEMMAP=0,启动BOOT装载程序存储器重新映射初始化目标板设置系统各部分时钟(程序略去)设置存储器加速模块(程序略去)初始化中断向量控制初始化中断向量控制(VIC)

VICIntEnClr=0xffffffff;

禁止相应的中断使能

VICVectAddr=0;

向量地址寄存器默认为零

VICIntSelect=0;

不分配快速中断ADS+H-JTAG的使用ADS的基本使用H-JTAG及其软件的使用说明分散加载文件的程序分析使用ADS新建工程生成工程文件H-JTAG及其软件的使用H-JTAG及其软件的使用分散加载文件men_c.scf(片内FLASH)men_a.scf(片外FLASH)men_b.scf(片外RAM)分散加载文件在ADS中的作用几个概念RO(readonly):程序中的指令和常量RW(read/write):程序中的已初始化变量ZI(zeroinit):程序中的未初始化的变量(默认为0)

堆和栈的区别堆区(heap)—由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统)回收。栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。分散加载文件分析ROM_LOAD0x80000000{ROM_EXEC0x80000000{

Startup.o(vectors,+First)*(+RO)}存放模块Startup.o中vectors段和绝大多数的RO代码,+First表示将模块Startup.o放在开头。.O表示编译器输出的ELF格式的目标文件IRAM0x40000000{

Startup.o(MyStacks)}STACKS_BOTTOM+0UNINIT{

Startup.o(StackBottom)}STACKS0x40004000UNINIT{

Startup.o(Stacks)}ERAM0x80040000{*(+RW,+ZI)}HEAP+0UNINIT{

Startup.o(Heap)}HEAP_BOTTOM0x80080000UNINIT{

Startup.o(HeapTop)}}bootblock(引导模块),是设计厂家在ARM内部固化的一段代码,用户无法修改或删除,其主要功能为:

判断运行那个存储器上的程序。

检查用户代码是否有效。(主要检测异常向量表的机器码值之和是否为0)

判断芯片是否被加密。

芯片的在应用编程(IAP)和在系统编程(ISP)芯片上电复位后,memoryremapcontrol寄存器memmap的初始值是0x00,bootblock被映射到pc0x00000000位置上,处理器开始执行bootleader代码

复位后Boot运作就是从0x0处起始字中取出跳转指令,开始程序的执行。由于BootBlock中断向量映射到0x0,CPU实际执行的是BootBlock内的程序。然后,程序首先检查看门狗溢出标志,置位表明系统内部软复位。再检查BOOT1和BOOT0是不是都为1,如果不是,则CPU从片外BANK0(0x80000000)执行用户代码,如果BOOT1和BOOT0是都为1,则CPU将对内部Flash中的中断向量表进行加和校验,检查用户代码是否有效,如果结果为0,Bootload程序将撤消BootBlock中断向量表在0x0~0x3f地址空间的映射,恢复Flash中断向量表(用户的中断向量表)在这64字节地址空间的映射,若不为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论