摘要:为完结DSP嵌入式体系的运用程序主动加载功用,提出了依据TI公司的TMS320DM648的NOR Flash主动加载完结办法。首要对发动进程进行了剖析,给出了用户加载程序的编写办法。在此基础上,依据公共方针文件格局和运用镜像脚本两种文件格局的阐明,规划出公共方针文件格局到运用镜像脚本转化程序,生成可用于FLASH烧写的文件。最终在TMS320DM648中心板上完结了在CCS环境下对Flah编程和程序主动加载,证明该办法有用可行。
TMS320DM648(以下简称DM648)归于TI公司的DaVinci系列DSP芯片,首要运用于智能视频监控、网络视频服务器、机器视觉等范畴。DM648选用C64x+内核,主频最高可达1.1GHz,而且代码与C64x彻底兼容。DM648从FLASH中加载引导程序的办法和之前C6x和C5000系列DSP芯片有很大的不同。榜首,之前C6x和C5000系列DSP都是在上电后直接将FLASH的前1K空间的用户引导程序仿制到片内内存运转,程序代码量不能超过1KB,程序功用有限,而且只能用汇编言语完结,编写难度大且可读性较差,而针对DM648,用户引导程序能够直接运用C言语完结,代码量不受1KB约束。第二,C6x和C5000系列DSP的运用程序运用CCS环境编译,生成的.out格局可履行文件需求运用TI供给的转化程序将格局转化成后缀为.hex的二进制文件才能够完结烧写。而DM648需求将.out格局可履行文件转化为.ais格局后才能够烧写到FLASH中,运用者编写程序完结文件格局的转化。
1 FLASH发动流程剖析
DM648有多种发动办法,本次规划选用从外部存储器接门(EMIF)上的NOR FLASH发动。硬件电路需求在芯片复位前将DM648引脚BOOTMODE[0:3]的电平状况装备为0100,FASTBOOT引脚装备为高电平,由引脚外接1K电阻上拉到3.3 V来完结。DM648的其他发动办法及装备办法,能够参考文献。
复位之后,DM648从内部的ROM空间开端运转程序,地址为0x00800000。这部分程序称为ROM Boot Loader(简称RBL),是TI公司直接烧写到内部ROM的,用户无法更改。RBL首要修正DSP内部锁相环电路倍频系数为20,即CPU的作业时钟为外部输入时钟频率的20倍。这样能够缩短程序运转的时刻;RBL读取EMIFA接口中地址为0xA0000000的代码和数据,该地址为NOR FLASH的榜首扇区开端地址,寄存在这个地址空间的代码称为用户仿制程序UBL,而且UBL程序有必要以AIS格局来寄存。RBL会履行AIS指令字,将UBL程序各个数据段都仿制到RAM中的运转空间,并将控制权转到UBL。UBL首要完结DM648的初始化作业,装备EMIF接口、DDR2控制器和UART接口,并查找运用程序的AIS镜像文件,UBL解析AIS镜像文件,依照镜像文件的地址将程序仿制到运转地址空间中。之后,UBL完结硬件环境的开端装备,跳转到运用程序开端运转。运用UBL进行二次引导能够将引导程序与运用程序功用相脱离,运用程序能够专心于功用的完结,而且同一个UBL程序能够适用于不同的运用程序。完结DM648芯片自发动的操作进程如图1所示,以下将别离介绍用户程序和格局转化程序的编写办法,最终介绍一个完好的主动加载完结进程。
2 用户引导程序规划
用户引导程序UBL完结的首要作业是解析运用程序AIS镜像,并将各段数据仿制到RAM中对应的运转地址。运用C言语在CCS环境下编写。内存分配方面本次规划的UBL程序运转空间在16K字节之内,因而能够独立界说其运转空间为片内的RAM空间的开始16K字节,即在UBL工程的CMD文件中添加如下代码,程序分配到RAMUBL空间中运转。
MEMORY
{
RAMUBL org=0x00A00000 len=0x00004000
}
需求留意的是运用程序中需求进行初始化的段不能够分配到上述空间运转,不然UBL在仿制运用程序的进程中就会掩盖UBL运转中的程序或许数据,然后形成UBL运转溃散。
UBL程序的作业流程为:
1)DEVICE_UARTOInit()初始化串行接口,装备串口通讯的速率、数据位、校验位等内容,在履行下述每个进程中经过串行接口将调试信息发送给PC机,便于调查发动进程和确认毛病原因。
2)DEVICE_EMIFInit()装备EMIF寄存器,使DSP能够拜访EMIF接口外接的FLASH芯片。本次规划选用16bit异步方式来拜访外部NOR FLASH芯片。
3)DEV%&&&&&%E_DDR2Init()装备DDR2控制器寄存器,使得DSP能够拜访DDR2寄存器,实践工程中数据需求仿制到DDR2 RAM存储器中。此刻需求装备DDR2的总线宽度和读写时刻参数等寄存器。
4)从FLASH芯片中保存的UBL镜像文件完毕的下一个扇区开端查找运用程序的AIS镜像文件魔幻数。当一个有用的魔幻数被找到后,UBL会次序读取之后的32位AIS指令并履行,将一切数据段仿制到意图地址中。之后,UBL程序将Jump_Close指令的数据部分,即运用程序进口地址保存到变量gEntryPoint中。
5)UBL程序会完结硬件环境的开端装备,包含装备锁相环电路的倍频系数然后修正DM648的作业频率,装备DM648的PSC寄存器封闭不运用的片上外设下降芯片功率,装备引脚复用功用满意运用程序要求等。之后跳转到运用程序的入门地址gEntryPoint运转程序。
3 烧写文件格局转化程序规划
本次规划选用FLASH快速发动办法时,RBL只能解析AIS格局的镜像文件,而UBL和运用程序都在CCS环境中运用C言语完结,二者独立编译链接后会生成格局为COFF(公共方针文件格局)的.out文件。因而需求编写程序完结COFF文件到AIS文件的转化,本次规划中整个转化进程运用C言语在VC6.0环境完结。
3.1 COFF文件格局剖析
COFF文件以段的方式将程序中的代码和数据进行安排,默许情况下COFF文件包含3个段:.text为可履行代码段;.data为初始化数据段;.bss为未初始化数据段。一个完好的COFF文件如图2所示,包含以下几部分,依次为文件头、可选文件头、段信息表、段数据、重定位信息、行号进口表、符号表和字符串表。