您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 基于TMS320C6455的DSbootloader研究
基于TMS320C6455的DSPbootloader研究引言数字信号处理技术广泛应用于雷达、通信、图像处理等领域,其中有些信号处理运算量很大、算法结构复杂,且要求高速实时、高性能、灵活地完成各种处理任务。近年来,以数字信号处理器(DSP)为基础的通用信号处理模块[1~5]的研制受到人们的重视,它的研制成功满足了信号处理系统实时性和通用性的要求。由于在DSP程序运行前,都有程序加载的问题,尤其当信号处理模块由多DSP构成时,要充分考虑到上位机与DSP间、主DSP与从DSP间的加载关系,DSP也提供了多种灵活的加载方式以满足应用要求。因此在设计通用信号处理模块前,有必要研究DSP的多种加载方式[6~8]。TMS320C6455是世界上最大的DSP(数字信号处理)芯片商—TI(德州仪器)新推出的高端DSP芯片,也是目前单片处理能力最强的定点DSP。与另一DSP芯片商ADI的高端产品TigerSHARC系列TS201相比:TS201时钟频率为600MHz,16位定点处理能力为4800MMAC/s;TMS320C6455时钟频率为1.2GHz,16位定点处理能力为9600MMAC/s。可见,单片DSP的定点处理能力,TMS320C6455强于TS201。另外,ADI逐渐把精力投入到Blackfin系列DSP[9],TigerSHARC系列DSP不再升级;TI却仍在不断打造自己的高端市场,TMS320C6455后续产品也在不断跟进。ADI的TigerSHARC系列DSP拥有独特的link口,适合于构建多处理器平台。在推出TMS320C6455以前,TI的DSP单片处理能力较强,但是芯片间的数据传输问题没有解决,构建多处理器平台比较复杂[10]。但是新推出的TMS320C6455,采用了SerialRapidIO接口技术,互连速率每秒高达25Gbits,很好的解决了芯片间的数据传输问题,搭建多处理器平台变得简单方便。RapidIO互连规范已成为ISO/IECDIS18372标准,RapidIOTradeAssociation已经囊括了世界主要半导体芯片供应商、通信系统OEM和计算机系统制造商。link口虽然也可以实现高速数据传输,但link口是ADI自定义总线。所以link口应用范围狭窄,而RapidIO技术将有广阔的发展前景。可以预见,TMS320C6455(以下简称C6455)将在雷达、通信、图像处理等领域得到广泛应用。基于C6455的通用信号处理模块也在研制之中。本文在完成C6455评估板的基础上,深入研究并实现了C6455的多种加载(引导)模式。这些模式几乎囊括了目前DSP的所有加载方式,也可作为实现其他DSP加载的参考。1、加载模式分类在TMS320C6455的地址空间0x00100000到0x00107FFF间集成了32K的内部ROM。此ROM中固化了一段叫作“bootloader”的引导代码,它的主要作用是在DSP上电时,对DSP进行必要的配置,以便辅助HPI/PCI/SRIO等接口进行加载;另外,它还可以将代码从外部存储器读到内部L2SRAM,以完成代码加载。TMS320C6455复位和上电时的引导模式主要有:NOBOOT模式、主机(HPI/PCI接口)引导模式、FLASH引导模式、主I2C引导模式、从I2C引导模式、SRIO引导模式。采用哪种引导模式,由复位或上电时采样管脚来决定。2数据格式转换及boottable用TI的编程工具CCS(CodeComposerStudio)编译连接生成后缀为.out可执行文件,此目标文件格式被称作通用目标文件格式(COFF)。COFF按照模块化思想对程序进行管理,它的最小单位称为段(section)。段是占据一个连续空间的代码块或者数据块,与其他段一起在存储器映射图内。但各个段是分开的,各有特色。对于C语言文件,编译器生成的代码段分配在.text段中,全局变量和静态变量分配在.bss段中,而局部变量或寄存器变量分配到.stack段,还有其他段和自定义段,可以查询TI的有关文档。连接器生成的可执行COFF文件(后缀为.out),含有一些定位符号和文件头等信息,这些信息能够被仿真器识别,仿真器可以从COFF文件中提取有用的程序,并把提取的程序加载到DSP的L2SRAM。但是,如果我们采用FLASH、PCI或SRIO等加载时,COFF文件中的一些信息不能被识别,而且由于含有的无效信息较多,COFF文件比较大,因此,我们首先应该对COFF文件进行提取和精简处理。这就需要用到TI提供的十六进制转换工具(Hex6x.exe)。十六进制转换工具可以把COFF文件转换成以下文件格式:ASCII-HEX格式、扩展的Tektronix(泰克)格式、IntelMCS-86(英特尔)格式、MotorolaExorciser(摩托罗拉-S)格式、TexasInstrumentsSDSMAC(TI-Tagged)格式。Boottable主要由三部分构成,如图1所示。第一个32位数据是程序的入口地址;最后一个32位数据0x00000000,它是boottable的结束标志;中间部分是主体部分,由程序中的若干section构成。所有的section都有一个统一的结构,以sectioni为例,第一个32位数据是此section的大小,以字节为单位;第二个32位数据是此section在L2SRAM中的存放首地址;剩下部分是此section的数据内容。图1boottable3、FLASH加载对于TMS320C6455来说,固化在DSP内部ROM中的“bootloader”会在系统上电时将FLASHROM的前1K空间的内容复制到片内L2SRAM的0x800000到x8003FF地址空间,复制完成后DSP会从0x800000地址处开始运行。因为需要搬到内存中运行的应用程序的向量表、初始化段等往往超过1K大小,为了能在系统上电时自动引导应用程序运行,就需要在引导的1K代码中编写引导代码,此引导代码的工作就是把待加载的代码复制到L2SRAM中,复制完成后跳转到程序初始化入口处(_c_int00),从而实现二次加载。FLASH引导模式需要进行二次引导,因此需要编写二次引导代码。此二次引导代码实现三个功能:配置EMIFA端口为异步读模式,总线宽度为8-bit;将FLASH空间起始地址0xB0020000的代码装载到L2SRAM中;拷贝完成后,程序跳转到程序初始化入口处(_c_int00)。假设待加载程序为跑马灯测试程序。在开发板上通过DSP的GPIO控制小灯的熄灭,当GPIO输出电平为高时,小灯被点亮,当GPIO输出电平为低时,小灯熄灭。此测试程序控制多个小灯,让其轮流熄灭。测试通过后,生成了myled.out文件,此程序就是待加载到DSP中的程序,首先必须对myled.out文件按照上节所述过程进行格式转换,生成小段模式、二进制形式的boottable。因为需要进行二次引导,在上面编写点灯程序时需要把二次引导代码链接进去。此二次引导代码在编译链接时需要被分配到L2SRAM的0x800000到0x8003FF地址空间。经过转换后,二次引导代码被转换成boottable中的section1,在此称它为bootsection。为了便于在线烧写,将此boottable做进一步的转换,生成一个新boottable和二次引导代码段。将此二次引导代码段烧写到0xB0000000到0xB00003FFFLASH地址空间,将新的boottable烧写到起始地址为0xB0020000的FLASH地址空间。图2详细阐述了格式转换和烧写流程。图2FLASH引导模式下格式转换上电后,固化在DSP内部ROM中的“bootloader”将FLASHROM的前1K空间的二次引导代码复制到片内L2SRAM的0x8000000到x8003FF地址空间。复制完成后DSP从0x800000地址处开始运行,也就是说DSP运行二次引导,此时,DSP将FLASH空间起始地址为0xB0020000的数据按照section指定的地址复制到片内L2SRAM,复制完成后,二次引导代码跳转到程序初始化入口处(_c_int00),加载过程结束。4、主机加载主机加载包括HPI和PCI接口的加载。在主机加载模式下,DSP处于等待状态,上位机直接将代码和数据写入DSP内部存储空间,此时不使用boottable。当上位机完成所有代码和数据的写入后,将产生一个主机中断(HPI/PCI),DSP将开始执行加载入的程序。HPI接口的加载很简单,DSP被当作存储器。PCI接口的加载需要考虑地址映射,复杂一些。下面就以PCI接口的加载来说明主机加载模式。4.1DSP地址空间到PCI空间的映射PCI模块支持主从模式,DSP工作在从模式,上位机对DSP进行读写访问。DSP拥有自己的地址空间,上位机要通过PCI总线访问DSP,必须将DSP空间映射到PCI空间。将DSP地址空间映射到主机空间的过程由以下寄存器来完成:PCIBARMSK(PCIbaseaddressmaskregister)指示DSP向上位机申请的窗的大小。上位机上电时,BIOS根据PCIBARMSK的值为DSP分配相应大小的存储块,此存储块相当于一个移动的窗,上位机就是通过移动这个窗来访问DSP的地址空间。PCIBAR(PCIbaseaddressregister)指示窗在PCI空间的起始地址,此处由上位机上电后自动分配。PCIBARTRL(PCIbaseaddresstranslationregister)指示窗在DSP空间的起始地址,此处的值可以实时修改,从而使窗进行移动。DSP有6组这样的寄存器,因此,一次可以向上位机申请6个窗。图3是DSP地址空间向PCI空间的映射图,为了便于理解,假设PCIBAR0MSK申请了1M的窗,PCIBAR0=0xD0000000,PCIBAR0TRL=0x00800000,此时将DSP的地址空间0x00800000到0x008FFFFF映射到PCI空间的0xD0000000到0xD00FFFFF。当上位机对PCI地址空间0xD0000000到0xD00FFFFF进行访问时,相当于访问了DSP地址空间0x00800000到0x008FFFFF。图3DSP地址空间到PCI地址空间映射4.2PCI引导过程图4PCI引导过程BOOTMODE[3:0]=0111时,为主机引导模式,并且PCI_EN=1时,主机通过PCI接口加载DSP,此时必须使CFGGP[2:0]=0。图4便是PCI引导过程,上电后,固化在DSP内部ROM的“bootloader”对DSP进行一些必要的初始化配置。首先,使能全局中断并且使能PCI的中断管脚,使DSP可以接收来自主机的中断。其次,bootloader配置PLL1模块为15倍频,也就是使内核工作在750MHz。而其他引导模式下,没有使能PLL1模块,也就意味着PLL1模块工作在50MHz。上位机访问PCIBAR0,把待加载代码通过PCI总线装载到L2SRAM中,装载完成之后,上位机访问PCIBAR2,对PCIBINTSET寄存器的DSPINT位写1,向DSP发送DSPINT中断,从而使DSP脱离“挂起(stall)”状态,DSP从地址0x800000处开始执行程序。由于基于C程序或基于C语言框架的混和语言程序,系统复位和数据初始化都必须基于C的运行环境,而C运行环境的建立必须由c_int00()函数来完成,所以在DSP复位后从0x800000处执行指令时,必须首先跳转到C环境的入口点_c_int00(该点在rts64plus.lib库中定义),从而能够调用c_int00()函数完成建立堆栈,变量初始化和调用Main函数等工作。所以在“加载代码”之后,为了使DSP能够响应DSPINTRESET中断并跳转至_c_int00处“执行代码”,需要编写中断向量表,把中断向量表分配到起始地址为0x800000的空间,并使硬件复位中断的服务程序的内容,是执行跳转到_c_int00。从而当
本文标题:基于TMS320C6455的DSbootloader研究
链接地址:https://www.777doc.com/doc-2535189 .html