资源描述:
《C6000DSP的引导方式和bootloader.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C6000DSP的引导方式和bootloaderC6000是TI的高端DSP,它有3种引导方式:㈠无引导;㈡ROM引导;㈢主机引导㈠–无引导:CPU直接从地址0处开始执行代码.㈡– ROM引导,加载过程:①当CPU的Reset引脚处于低电平状态时,BOOTMODE的引脚状态根据预设设定,RESET信号处于上升沿的时候,相应加载方式启动.②ROM加载方式是通过DMA控制器,将外部ROM的一段固定大小的代码复制到内部RAM中(加载时CPU处于stall状态),对于不同型号芯片,复制的代码大小不同。对于C620x/C670x,DMA从CE1空间拷贝64K数据到地址0处ﻫ对于C621x/C671
2、x/C64x,EDMA从CE1空间拷贝1K数据到地址0处。③加载完毕后,CPU开始从0地址执行。ﻫ对于上述步骤②的第二种(C621x/C671x/C64x),1K是不能解决问题的,所以,一般在0地址处建立一个叫做“bootloader”的段(代码小于1KB),这一小段程序也叫“引导程序”,上电或者重启后首先执行它,完成将其余程序(真正完成用户要求算法的程序)加载,然后跳转到主程序入口地址运行.㈢– 主机引导:对具有不同接口的芯片,分别有以下三种渠道连接:HPIﻫXBUSﻫPCI介绍了TMS320C6xDSP的几种FLASH引导方法,比较了引导过程中基于软件流水的数据搬移方法和QDMA方式
3、的数据搬移方法,并介绍了如何利用在系统编程(ISP)对上电引导程序进行FLASH编程。通过对实际的TMS32C6711 DSP电路调试实验,证明了以上方法简单易行。ﻫ 关键词:FLASH存储器上电引导COFF文件格式DSPFLASH存储器是在EPROM和EEPROM的基础上发展起来的一种非易失性存储器,在掉电情况下仍能保证数据不丢失,并能够在不离开电路板或据设备的情况下实施擦除和再编程操作。由于其具有结构简单、维护便利、存取速度快、对环境适应能力强、抗振性能好等优点十分适合于嵌入式系统的设计和开发,并且已成为目前流行的数字信号处理系统的一个基本配置。在许多DSP的应用中,系统上电后需要
4、将用户程序从FLASH存储器引导到高速数据存储器中运行.这就需要给用JTAG接口调试通过的应用程序添加启动代码,将生成的目标文件进行格式转换使其能在线烧写,将转换过的文件利用FLASH烧写程序在线烧写到FLASH中。 本文将介绍引导过程中数据搬移的几种方法,包括QDMA方式的数据搬移方法、CPU直接数据搬移方法以及基于软件流水的数据搬移方法.经过比较测试,证明了QDMA方式和基于软件流水的数据搬移方法具有优越性。并且,根据COFF文件格式,编写了比TI公司的HEX60更为直接的转换工具,从而简化了文件的转换步骤。 1应用程序的FLASHROM引导 当DSP的应用程序从FLASHROM引
5、导时,目标板都有一个自动的引导程序.例如,对于TMS320C6x1x系列,目标板的自动引导程序会在系统上电时将FLASH ROM的前1K空间的内容复制以片内内存自0x00开始的地址空间,并从0x00地址处开始运行.因为需要搬到内存中运行的应用程序的向量表、初始化段等往往超过1K大小,为了能在系统上电时自动引导应用程序运行,就需要在引导的1K代码中包括自定义的引导代码,以将额外需要的初始化代码段和数据段复制到内存中运行。 将FLASH ROM的数据复制到IRAM(内部RAM)中,有两种方式:一种是直接存储器访问(DMA),它是在没有CPU参与的情况下完成映射存储空间的数据搬移;另一种是利
6、用CPU直接搬移数据。QDMA是快速的DMA,不需要CPU参与数据传输,只需根据要传递内容的信息设置QDMA的相应寄存器即可。用CPU直接搬移数据也有两种方式:一种是是不用流水方式,另一种是采用软件流水方式. 在C6000的汇编中,不同类型指令有不同数目的执行节拍。执行节拍在数量上等于该指令在执行级所需要的时钟周期。对于所用到的读取指令ldw的存储指令stw,分别完成从存储到通用寄存器的数据搬移和从通用寄存器到存储器的数据搬移。读取指令ldw需要执行的步骤为:计算地址、地址送内存、访问内存、数据送CPU、数据写寄存器,即执行节拍数为5;而存储指令stw,执行节拍数为3,需要执行的步骤为l
7、dw的前三步。表1给出了软件流水前后数据搬移间隔编排的比较表。 由表1可见,要将FLASHROM中的一个数据搬移到IRAM中,需要从FLASH ROM中读取该数据到通用寄存器(ldw),再从通用寄存器中将其读到IRAM(指令stw)。在软件流水优化以前,需要至少8个指令周期。采用软件流水优化以后,根据指令的特点,第0到第4这5个指令周期可连续续5个数到通用寄存器,从第5到第9这5个指令周期再顺序地将读入通用寄存器的上述5个数读出到