- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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字节:0 0x0000003F MEMMAP与存储器映射的关系 MEMMAP存储器映射控制寄存器 MEMMAP [1:0]= 00:BOOT装载模式 01:用户flash模式 10:用户ram模式 11:用户外部存储器模式 芯片复位时MEMMAP=0,启动BOOT装载程序 存储器重新映射的原因 使flash中的FIQ处理程序不必考虑由于重新映射导致的存储器边界问题; 用来处理代码空间中段边界仲裁的SRAM和Boot Block向量的使用大大减少; 为超过单字转移指令范围的跳转提供空间来保存常量。 初始化目标板 void TargetResetInit(void) { #ifdef __DEBUG MEMMAP = 0x3; //remap #endif #ifdef __OUT_CHIP MEMMAP = 0x3; //remap #endif #ifdef __IN_CHIP MEMMAP = 0x1; //remap #endif MEMMAP[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(read only):程序中的指令和常量 RW(read/write):程序中的已初始化变量 ZI(zero init):程序中的未初始化的变量(默认为0) 堆和栈的区别 堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS(操作系统)回收。 栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 分散加载文件分析 ROM_LOAD 0{ ROM_EXEC 0 { Startup.o (vectors, +First) * (+RO) } 存放模块Startup.o中vectors段和绝大多数的RO代码, +First表示将模块Startup.o放在开头。.O表示编译器输出的ELF格式的目标文件 IRAM 0 { Startup.o (MyStacks) } STACKS_BOTTOM +0 UNINIT { Startup.o (StackBottom) } STACKS 0x400
文档评论(0)