Dm642启动制作与映像.doc_第1页
Dm642启动制作与映像.doc_第2页
Dm642启动制作与映像.doc_第3页
Dm642启动制作与映像.doc_第4页
Dm642启动制作与映像.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

Dm642启动制作与映像一、原理与概述二、复位启动与引导说明Cpu 引导1K 三、引导代码与说明1K引导4K四、内存初始化以及简单文件启动4K五、启动结构与配置说明六、启动1K代码说明七、启动4K代码说明八、sram运行说明九、SDram运行说明十、制作向导与应用一、原理与概述配置Dm642为EMIF启动,即设置 A22,A21 为有效,即1K拉高 。Cpu 上电复位后,默认配置Emif Ce0 Ce1 Ce2 Ce3 均为 8位同步存储,内部sram为地址模式0X000000000X3FFFF, 然后开始自动读取 0X90000000 处 1Kbyte 的代码到 内部Sram 0X00000000 ,然后跳转到 内部Sram 0X00000000处开始执行代码。0x00000000的1K代码 (简称Boot_1K)主要任务是继续读取0X90000000,的引导代码,并且跳转执行。本设计中我们引导了0X90000000处 4K代码到 0X0003F000,并且调转到0X0003F100处。0X0003F000的4K代码 (简称Boot_4K),则负责将 SDRAM初始化,IO初始化,并且再次引导启动代码到指定地址。其中我们使用了BootConfig结构体存放了启动初始化配置参数以及启动引导的代码与目标地址。至此引导过程全部完成。Boot4K为 Boot1K+Boot4K源代码。BootLoadVersionMgr为VC项目, 产生Boot4K的映像(8,bin格式)FlashTool为执行烧写的PC程序注意问题:1、 读写速率a) 启动时外部存储使用 EMIF的时钟(设计中采用150M有效时钟, A20 ,A19),读取操作速度为外部时钟 频率/ (RDSETUP * RDSTRB) , 本设计中EMIF采用150M, 所以Flash操作速率150M / (1111 11 1111 ) = 150K ,Flash读写速度一般都大于1M,因此CPU的启动基本不会有问题。CE2 (0X100 ) ,对应地址0X90000000 , 8 bit WRSETUPWRSTRBWRHLDRDSETUPTARDSTRBMTYEWRHLDMSBRDHLD111111 11111111111111 1111000000112、 上电复位由于CPU启动需要约200CLOCK时钟周期, 因此在时钟同步完成 时候持续200*mms 即可复位处理器(Reset置高)约为1ms。实际中考虑按键等因素,复位匹配 为 4.7K上拉, 1K下拉 , 1uf 复位电容即可。 3、启动默认配置 为 Ce2 0X90000000 为8 bit 同步存储,内部Cache 禁用 ,地址0X0000000 0X3FFFF 为可写可读 高速Sram.本设计为 300M CPU引导完成后交付程序执行3、 引导失败可能由于 Flash的地址、数据线连接失败,可以采用示波器查看以下信号1、 CE2 是否有一个有效(-_-)2、 ADDR10.0是否出现波形 -3、 DATA7.0是否出现波形4、 FLASH_R是否有一个有效(-_-),要同步CE25、 通过仿真器察看 0X90000000地址的数据是否正确(确保数据线正确)6、 通过仿真器察看 0X900000000X90000400数据是否正确(确保地址线正确)二、复位启动与引导说明Boot_1K 主要功能 将Boot_4K调入到Sram以下参看代码(main.c):void Init() ;#pragma CODE_SECTION( c_int00,.BOOT_ENTRY_00000) /将代码c_int00定位在初始位置/ BOOT_ENTRY_00000 : origin = 0x03F000, len = 0x000040/.BOOT_ENTRY_00000 : BOOT_ENTRY_00000void c_int00() asm( MVKL .S2 0X04C0 , SP); asm( MVKH .S2 0X04C0 , SP); /Init();asm( MVKL .S2 0X000040 , B3);/asm( MVKH .S2 0X0003F100 , B3);asm( B B3 );asm( NOP 8 );asm( NOP 8 );asm( NOP 8 );asm( NOP 8 );asm( NOP 8 ); #define BOOT_LOAD_ADDR 0X90000000#define BOOT_LOAD_ENTRY 0X0003F000#define BOOT_LOAD_SIZE 0X00001000#pragma CODE_SECTION( Init,.BOOT_ENTRY_00040) /将代码c_ Init定位在有效位置/ .BOOT_ENTRY_00040 : BOOT_ENTRY_00040 / BOOT_ENTRY_00040: origin = 0x03F040, len = 0x0000C0void Init() int i=0; unsigned char *pCode =(unsigned char *)BOOT_LOAD_ADDR ;unsigned char *pEntry =(unsigned char *)BOOT_LOAD_ENTRY ;WaitMs(1000);for(i=0; iBOOT_LOAD_SIZE; i+)pEntryi=pCodei;/if(pEntry0=0XFF)while(1);/asm( MVKL .S2 0X0003FFF0 , SP);/asm( MVKH .S2 0X0003FFF0 , SP);asm( MVKL .S2 0X0003F100 , B3);asm( MVKH .S2 0X0003F100 , B3);asm( B B3 );asm( NOP 8 );asm( NOP 8 );asm( NOP 8 );asm( NOP 8 );asm( NOP 8 );1、 采用c_int00能让编译器直接使用本函数,而不是使用类库的默认函数将c_int00定位在0X3F000:1、 由于实际烧写的时候为 内部Sram 0X3F0000X3FFFF 所处的代码或者数据 Flash 0X900000000X90000FFF (烧写器实际从Flash 0x00000开始烧写); 而CPU启动 Flash 0X900000000X90000FFF -Sram 0X0000,所以该代码实际出现在 CPU 0X00000处2、 Init 将代码Flash 0X900000000X90000FFF 拷贝到 0X3F000a) 为了保证Flash初始化完成,可以考虑稍微等待一会b) 代码可以直接跳转,但是注意设置好堆栈 SP, 因为0X3F000处的0X100字节包含了c_int00 与 Init 的代码, 而该代码已经无效,所以充当堆栈使用c) WaitMs代码不应该过大,确保 BOOT_ENTRY_0000 + BOOT_ENTRY_00040 小于256字节三、引导代码与说明Boot_4K代码本身占用了地址:0X3F0000X3FFFF,所以预留为执行程序空间为0X00000X3EFFF共 252K连续Sram空间;另外采用结构配置函数将Sdram初始化,可以使用 0X80000000处地址为程序所用; 0X9000000处也被初始化为Flash,也可以作代码地址使用。Boot_4K开始执行有效的引导代码 ,配置地址空间。为了灵活起见,使用了配置结构:typedef struct /Emif 160X00 u32GBLCTL;/ EMIF global control registeru32CE0CTL;/ EMIF CE space control registersu32CE1CTL;/ EMIF CE space control registersu32CE2CTL;/ EMIF CE space control registersu32CE3CTL;/ EMIF CE space control registersu32CE0SEC;/ EMIF CE space secondary control registersu32CE1SEC;/ EMIF CE space secondary control registersu32CE2SEC;/ EMIF CE space secondary control registersu32CE3SEC;/ EMIF CE space secondary control registersu32SDCTL;/ EMIF SDRAM control registeru32SDTIM;/ EMIF SDRAM refresh control registeru32SDEXT;/ EMIF SDRAM extension registeru32PDTCTL;/ EMIF peripheral device transfer control register/u32CE0SIZE;/u32CE1SIZE;/u32CE2SIZE;/u32EmifNull3;/code16 0X40u32CodeSrcAddr ;u32CodeSrcLen ;u32CodeDestAddr;u32LoadNull;u32CodeSrcAddr1 ;u32CodeSrcLen1 ;u32CodeDestAddr1;u32LoadNull1;u32CodeSrcAddr2 ;u32CodeSrcLen2 ;u32CodeDestAddr2;u32LoadNull2;u32CodeSrcAddr3 ;u32CodeSrcLen3 ;u32CodeDestAddr3;u32LoadNull3;/entry 4 0X80u32 entry;u32 cpuRunClock;/khzu32 entryNull;u32 configFlag;/Gpio4 0X90u32 gpioEn;u32 gpioDir;u32 gpioValue;u32 ledFlag;/Cache 4 0XA0u32CCFG ;u32MAR_60_7F;u32MAR_80_9F;u32MAR_A0_BF;/0XB0u32bootLoadNull4;/0XC0/u32bootLoadNull216;u32 sramAddr ;u32 sramSize ;u32 flashAddr ;u32 flashSize ;u32 sdramAddr ;u32 sdramSize ;u32 cacheAddr ;u32 cacheSize ;/0XE0u32bootLoadNull28;BootLoadStruct;该结构共占用了256字节,放置在Flash0X9003FF00处,即占用Boot_4K的最后0X100字节。由于Boot1K引导 0X900000000X90000FFF 到 Sram 0X0003F0000X0003FFFF,所以程序将结构体直接指到CONFIG_BASE_ADDR:#define CONFIG_BASE_ADDR (0X3F000+0X00F00 ) BootLoadStructConfig = (BootLoadStruct *)CONFIG_BASE_ADDR ;1、 程序将 根据 EMIF参数将配置内存以及Flash a) 设计中采用了256M 150M SDram 配置参看 BootloadVersiomMgrb) Flash使用了 缺省的8Bit配置 容量为512K 地址为0X90000000c) CE2/Ce3 使用了缺省配置 2、口设置为输入、根据CodeSrcAddr(的执行代码),CodeSrcLe

温馨提示

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

评论

0/150

提交评论