我要开店

DSP引导功能的使用

作者:刘飞 周伟 来源:今日电子

引言TI公司的高速数字信号处理器TMS320C6000系列DSP支持并行处理,采用甚长指令字 (VLIW)体系结构,内部设置有8个功能单元(两个乘法器和6个ALU),8个功能单元可并行操作,最多可以在一个周期内同时执行八条32位指令。指令操作为“流水线”工作方式。应用高性能DSP可以大大提高数据密集型应用系统的性能,能快速完成滤波、卷积、FFT等数字信号处理或进行更复杂的运算,在现代信号数字化处理中有很好的应用前景。由于内部结构上的差异,TMS320C6000系列与TMS320C54系列的引导方式有很大差别。在开发应用TMS320C6000系列DSP时,许多开发者,尤其是初涉及者对DSP ROM引导的实现有些困难,花费许多时间和精力摸索。笔者结合开发实例,介绍了实现外部存储器引导的具体方法。

DSP的引导过程DSP系统的引导(BOOT)是指系统加电或复位时,DSP将一段存储在外部的非易失性存储器的程序代码通过DMA方式拷贝到内部的高速内存中运行。这样既能扩展DSP有限的存储空间,又能充分发挥DSP内部资源的效能。用户的代码也可以通过掩膜方式写入到DSP内部ROM中,但这样受容量和价格的限制,且不便于扩展和升级。DSP的引导过程如下:1) DSP复位后,通过DMA方式将外部CE1空间的数据读入到内部程序空间地址0处,读入数据的多少因芯片而异(TMS320C6712一次只拷贝1KB)。2) DSP推出复位状态,开始执行内部程序空间地址0处的程序,这段程序先将外部主程序数据读入到DSP内部程序空间相应地址,然后跳转到主程序运行。第一步是由芯片自动完成,关键是第二步:用户需要编写相应的汇编程序,实现二次引导,即用户主程序的装载。

引导失败的原因分析(1)链接命令文件(.cmd)文件链接命令文件定义了链接的参数,描述系统生成的可执行代码各段的段名及映射到目标板的物理空间。当这些段的起始地址或段的长度编写错误时,引导程序就可能发生错误。(2)可执行代码的二进制文件格式用户的程序在CCS开发环境下编译生成COFF文件格式,仿真过程中可以直接加载COFF文件运行。但当调试仿真通过后,目标板要脱离CCS环境独立运行时,可执行代码就需要转换为二进制文件格式,保存在目标板的外部存储器上。转换时需要使用正确的配置文件。(3)目标板的硬件电路(引导模式,系统时钟)目标板的硬件电路也会影响引导程序的正常运行,如设置的引导模式与实际的外部存储器不符,系统时钟电路不工作,复位信号恒有效等。下面结合TMS320C6212的开发实例,具体介绍外部存储器引导的实现。

ROM引导实例TMS320C6212是TMS320C6201的简化版芯片,内部资源相对较少,工作频率相对较低,但其价格低廉,具有很高的性能价格比。TMS320C6212的工作频率可达150MHz,最高处理能力为900MIPS,很适合中小型系统开发。由于FLASH是一种高密度、非易失的电擦写存储器,系统采用FLASH作为外部存储器。除了专用的硬件编程器可以把二进制代码写入FLASH中,还可以利用DSP的调试系统,通过软件编程写入。DSP与FLASH的接口连接如图1所示。

系统工程在CCS开发环境下使用C语言编程,这样可以缩短开发周期,提高工作效率,并具有移植性好的优点。引导工程的文件流程如图2所示。

(1) 中断向量表 vectors.asm中断向量表缺省保存在DSP芯片内部RAM的0地址开始的0x200字节空间,上电或复位后,芯片自动运行复位中断。因此,复位中断向量设置为引导程序(_boot)的入口地址,引导程序的主体在boot.asm中定义。部分程序如下:.ref _boot ;调用引导程序.sect “.vectors” ;段声明RESET_RST: ;复位中断向量mvkl .S2 _boot, B0 ;装载引导程序地址mvkh .S2 _boot, B0B .S2 B0 ;跳转到引导程序执行NOP 5(2) 自引导的汇编程序 boot.asm自引导汇编程序主要是配置基本的寄存器,并将保存在外部FLASH中的二进制程序拷贝到DSP内部的RAM中再执行。由于TMS320C6712自动拷贝1KB,因此起始地址是从0x400开始,汇编程序如下:.sect “.boot_load” ;定义数据段.ref _c_int00 ;声明外部函数.global _boot ;定义全局函数_boot:;先设置控制寄存器,如EMIF_GCR等,(略);拷贝FLASH中的程序到DSP内部RAMmvkl 0x00000400, A4 ;A4为RAM地址指针mvkl 0x90000400, B4 ;B4为FLASH地址指针mvkh 0x00000400, A4mvkh 0x90000400, B4zero A1 ;A1用作计数器 _boot_loop: ;DSP开始读取FLASH中程序ldb *B4++, B5mvkl 0x0000F200, B6 ;B6为需要拷贝的字节数add 1, A1, A1mvkh 0x0000F200, B6cmplt A1, B6, A0nopstb B5, *A4++[B0] b _boot_loopnop 5mvkl .S2 _c_int00, B0 ;循环结束后,跳转到主函数main执行mvkh .S2 _c_int00, B0B .S2 B0Nop 5(3) 主程序 main.c主程序是DSP要实现具体功能的主体,其定义的主函数main()经编译后在函数_c_int00中调用,因此在上面的引导程序结束时,将跳转到函数_c_int00,即主函数main执行。(4) 链接命令程序 link.cmd链接命令程序用于定义系统各存储器的地址及大小,并分配编译后各段到相应的存储空间,link.cmd内容如下:-c-lrts6201.libMEMORY{vecs: o = 00000000h =00000200hBOOT_RAM: o = 00000200h l = 00000200hIRAM: o = 00000400h l = 0000c400hCE0: o = 80000000h l = 01000000hCE1: o = 90000000h l = 00100000h}SECTIONS{.vectors > vecs fill = 0.boot_load > BOOT_RAM fill = 0.text > IRAM fill = 0.stack > IRAM fill = 0.bss > IRAM fill = 0.cinit > IRAM fill = 0.far > IRAM fill = 0.sysmem > IRAM fill = 0.cio > IRAM fill = 0}(5) 转换命令程序 convert.cmd上面的工程文件经CCS系统编译、汇编后生成可执行COFF文件(.out),它需要转换为二进制文件,再写入到FLASH中。CCS开发系统带有转换程序:hex6x.exe 将可执行COFF文件(.out)转换为十六进制文件(.hex)hex2bin.exe将十六进制文件(.hex)转换为二进制文件(.bin)命令行的格式为:hex6x.exe convert.cmdhex2bin.exe mboot其中convert.cmd内容如下:mboot.out ;输入文件名 .out 格式-x-map mboot.map ;生成映射文件-image-memwidth 8 ;内存的位宽-o mboot.hex ;输出文件名 .hex格式ROMS{FLASH: org = 0, len = 0x10000, romwidth = 8}

结束语综上所述,实现TMS320C6712的外部内存自引导并不复杂,关键是要理解芯片的自引导过程和程序汇编后各部分的作用,配置好引导代码段和程序代码段的实际物理地址,并且正确地初始化相应的寄存器和变量。

参考文献1 任丽香,马淑芬,李方慧. TMS320C6000系列DSP的原理与应用. 电子工业出版社, 20002 Texas Instrument. TMS320C6x Assembly Language Tools User's Guide. Texas Instrument, 20003 Texas Instrument. TMS320C6000 Code Composer Studio Tutorial. Texas Instrument, 20004 Texas Instrument. TMS320C62xx Peripherals Reference Guide. Texas Instrument, 20005 Texas Instrument. TMS320C62xx Programmer's Guide. Texas Instrument, 2000

——此文章转载于互联网,文中观点与本网站无关,如有侵权请联系删除

关于阿里巴巴国际站

阿里巴巴国际站成立于1999年,是阿里巴巴集团的第一个业务板块,现已成为全球数字化出海服务平台。阿里巴巴国际站累计服务200余个国家和地区的超过2600万活跃企业买家,近三年支付买家的复合增长超过100%。

阿里巴巴国际站致力于让所有的中小企业成为跨国公司。打造更公平、绿色、可持续的贸易规则。提供更简单、可信、有保障的生意平台。它始终以创新技术为内核,高效链接生意全链路,用数字能力普惠广大外贸中小企业,加速全球贸易行业数字化转型升级。

未来三年,阿里巴巴国际站将赋能全球3000万活跃中小企业,实现全面无纸化出口、货通全球。

  • 我要开店
  • 在线咨询
  • 活动日历
  • 获取报告