标题 | 基于TMS320F28335的DSP/BIOS系统从FLASH到RAM运行 |
范文 | 陈惠纲+黎驱 摘 ?要: DSP/BIOS是TMS320F28xxx系列DSP上的一个实时操作系统内核。由于TMS320F28335内部FLASH性能的限制,当DSP/BIOS系统直接在芯片内FLASH上运行时,程序运行的速度往往比在RAM上运行时慢得多,严重影响了DSP/BIOS的实时性。为了解决这个问题,通过分析TMS320F28335的启动过程和程序从FLASH搬移到RAM上运行的一般流程,以及DSP/BIOS与非DSP/BIOS工程的Memory Sections特点,提出一种通过在c_int00之前增加Copy_Sections等一系列操作对DSP/BIOS系统及用户程序进行搬移的方法。由此实现在芯片启动后自动把DSP/BIOS系统从片内FLASH搬移到RAM上运行的功能,从而提高DSP/BIOS系统的运行效率和实时性。该方法已经通过实验验证并在实际的工程项目中应用,获得良好的效果,因此值得推广。 关键词:TMS320F28335; DSP/BIOS; FLASH; RAM; 程序搬移 中图分类号: TN919?34; TP311.1 ? ? ? ? ? ? ? ? 文献标识码: A ? ? ? ? ? ? ? ? ? ?文章编号: 1004?373X(2015)02?0065?04 TMS320F28335?based DSP/BIOS system running from FLASH to RAM CHEN Hui?gang, LI Qu (Guangdong Co., Ltd., HM Power, Foshan 528300, China) Abstract: DSP/BIOS is a Real?time operating system kernel on DSP of TMS320F28xxx series. When DSP/BIOS system runs directly in the on?chip FLASH, the DSP/BIOS system would be much slower than it runs in RAM because of the performance limitation of FLASH in TMS320F28335, which affects the DSP/BIOSs real?time performance seriously. To solve the problem, By analyzing the start?up procedure of TMS320F28335 and the procedure of moving a program from FLASH to RAM, and the Memory Sections features of DSP/BIOS and none DSP/BIOS, a method to add a function named Copy_Sections before c_int00 to copy DSP/BIOS system and user program from FLASH to RAM is proposed in this paper. By doing this, the Function that DSP/BIOS system is automatically copied from on?chip FLASH to RAM after reset or power on the DSP is realized, which improves the efficiency of DSP/BIOS system and its real?time performance. This method was validated by experiment and used in practical project. Keywords: TMS320F28335; DSP/BIOS; FLASH; RAM; program copy 0 ?引 ?言 TMS320F28335基于C28x+FPU 的控制器和 TI 现有的 C28xDSC具有相同的 32 位定点架构,还包括一个单精度(32 位)的 IEEE 754 浮点单元(FPU)[1]。其内部包含512 KB的FLASH和68 KB的RAM,并支持20 b地址、32 b数据的外部扩展。当代码运行在片上RAM时,其MIPS与跟芯片运行的频率是一致的,即芯片运行在150 MHz时,其性能为150 MIPS。然而,由于芯片内部FLASH的读取等待时间比RAM长,当代码在芯片内部FLASH运行时,其运行性能[2]在150 MHz下最多只有95 MIPS。 DSP/BIOS是TI公司为其C28x、55x、C6000系列所设计开发的一个用户可裁剪的实时多任务的操作系统内核[3]。其以模块化方式提供给用户对线程、中断、定时器、内存资源、所有外设资源的管理能力都可以根据需要剪裁。实际应用中需要的定制算法作为一个线程插入DSP/BIOS的调度队列,由DSP/BIOS进行调度。作为TI公司的操作系统,DSP/BIOS与开发环境紧密结合,能够给开发者提供多种丰富的可视化调试手段,为工程的开发提供极大的便利,这是其他实时系统所不能比拟的。 当DSP/BIOS运行在芯片内部FLASH时,由于FLASH读取时间比RAM的读取时间长,导致DSP/BIOS系统往往达不到在RAM运行时的效果,严重影响其实时效果。为了发挥芯片的最大性能,提高DSP/BIOS系统的实时性及运行效率,有必要将DSP/BIOS从FLASH搬移到RAM上运行。本文通过分析TMSF320F28335的启动流程以及DSP/BIOS中Memory Sections特点,实现了芯片复位、上电后自动把DSP/BIOS系统及相关程序从芯片内部FLASH搬移到RAM上,并在RAM中运行的方法。 1 ?TMF320F28335的启动流程 在TMS320F28335芯片上电/复位后,程序首先到复位向量的地址0x3FFFC0进入初始化引导函数InitBoot[4]。在InitBoot中,首先程序对芯片进行初始化,然后读取与芯片引导方式相关引脚的状态,调用SelectBootmode确认引导模式,调用ADC_CAL来校正芯片的采样数据。在退出InitBoot(即执行ExitBoot)后,芯片根据之前确认的引导路径跳转到相应的程序入口。对于一般的产品来说,程序上电复位后都是从内部FLASH启动的,因此,程序在退出InitBoot后会跳转到FLASH的0x33FFF6执行代码。相应启动流程如图1所示。 <E:\王芳\现代电子技术201502\Image\23t1.tif> 图1 启动流程图 以上是芯片在上电/复位以后的流程,由芯片自动完成,接下来到了FLASH的0x33FFF6处就是用户自己实现的代码,该入口的名字是code_start。对DSP/BIOS系统,如果用户的程序代码是直接运行在FLASH中,那么程序执行的流程如图2所示。其中,wd_disable表示屏蔽硬件看门狗,c_ini00为初始化C运行环境,BIOS_init为DSP/BIOS的初始化函数,BIOS_start为DSP/BIOS的启动函数,而main则是用户程序的入口。图2中的各个流程的程序均运行在芯片内FLASH中。 <E:\王芳\现代电子技术201502\Image\23t2.tif> 图2 程序执行流程图 由图2可以看出,如果DSP/BIOS系统和用户的程序代码要实现从内部FLASH搬运到RAM中运行,则需要从图2的流程中增加一个过程实现对部分核心Memory Sections及相关代码的搬移,该过程命名为copy_sections。该过程应该在wd_disable与c_int00之间,因此实现从FLASH到RAM程序搬移的流程如图3所示。其中,在copy_sections及之前的过程均运行在片上FLASH,copy_sections后面的程序根据copy_sections的具体进行的操作有可能运行在FLASH或者RAM上。同时,也需要在用户代码的开始阶段,对其他Memory Sections及用户定义的存储段进行搬移。 对于我们具体的工程,由于把整个DSP/BIOS系统和用户程序都搬移到RAM上,因此在copy_sections之后的过程都是直接在RAM上运行的。 <E:\王芳\现代电子技术201502\Image\23t3.tif> 图3 程序搬移流程图 2 ?DSP/BIOS的Memory Sections特点 在一般的非DSP/BIOS工程中,其Memory Sections一般如表1所示。对于一般的DSP/BIOS工程,其Memory Sections如表2所示[5]。 表1 非DSP/BIOS中Memory Section表 表2 DSP/BIOS中Memory Section表 表1,表2中显示为RAM的Memory Sections表示该段位于RAM上,该段的数据为变量。而显示为FLASH的Memory Sections则表示该段位于FLASH上,该段的数据为代码或常量。 由上述表格可以得出,不管是DSP/BIOS工程还是非DSP/BIOS工程,在程序搬移的时候,为了提高运行的效率,表格2中凡是显示FLASH的段都要搬移到RAM中运行。这里有几个地方要注意,首先,Stack Section(.Stack)要求只能搬移到内存低于64 KB的地方运行。而对DSP/BIOS工程来说,一个值得注意的地方是.hwi_vec(Interrupt Service Table Memory)段只能搬移到PIEVECT RAM。PIEVECT RAM是与PIE有关的特殊部分[6],其位于数据空间,地址从0x000D00开始,大小为256×16。另外一个值得注意的地方,根据TI的文档[2],DSP/BIOS系统中各个Memroy Sections并不是全部在copy_sections中实现搬移的,而是分别在DSP/BIOS系统选项以及用户代码中进行搬移。这是与一般非DSP/BIOS工程最大的不同。 3 ?DSP/BIOS系统搬移实现 结合以上对TMS320F28335芯片复位、上电后的启动流程以及DSP/BIOS系统的Memory Sections的分析,我们知道DSP/BIOS工程与非DSP/BIOS工程在程序搬移的原理是一致的,但是实现的流程有所不一样。对于DSP/BIOS工程,具体的流程如下: 3.1 ?增加/修改搬移代码 (1) 修改CodeStartBranch.asm。把原来LB _c_int00改为LB copy_sections。 (2) 增加SectionCopy_BIOS.asm[7]。为了提高DSP/BIOS的运行效率,把DSP/BIOS与FLASH有关的除了.hwi_vec以及.Trcdata外的全部Memory Sections搬移到RAM中,这些操作在copy_section里面实现。 (3) 在ccs[8]工程的DSP/BIOS系统选项中,增加_UserInit函数,并在UserInit函数内搬移.Trcdata段到RAM中。 (4) 在main函数里,增加.hwi_vec段搬移的代码。 (5) 在main函数里,把其他相关的段,如用户数据等搬移到RAM中。 (6) 在main函数里,把.secureRAMFuncs段搬移到RAM中,然后执行InitFLASH。 (7) 把用户代码所在的Memory Sections搬移到RAM中。 3.2 ?修改CMD文件 对需要搬移的Memory Sections修改为以下代码(以.bios段为例): .bios: LOAD = FLASH, ? PAGE = 0 ?/* Used by file FLASH.c */ ① RUN = L47SARAM, ?PAGE = 0 ?/* Load to flash, run from CSM secure RAM */ ② LOAD_START(_bios_loadstart) ③ LOAD_SIZE(_bios_loadsize) ? ? ④ RUN_START(_bios_runstart) ? ⑤ 上述代码中,①表示.bios段的代码位于FLASH;②表示.bios段代码执行位置在L47SARAM中;③表示.bios段装载的起始地址;④表示.bios段装载的长度;⑤.bios段运行的起始地址 3.3 ?结果分析 当把DSP/BIOS系统从FLASH搬移到RAM运行后,打开工程的内存分配文件(.map),看到里面有这么一行: .bios ?0 ? 00339558 ? ?00000d91 ? ? RUN ADDR = 0000d558 ?⑥ 从⑥中可以看出,.bios位于page 0,代码装载的起始位置是0x00339558, 代码长度是 0x00000d91,而代码运行的起始位置是0x0000d558。根据TMS320F28335的内存分配可知,.bios段代码的原始位置在FLASH中,而运行的位置在RAM,这个说明了DSP/BIOS已经实现了从FLASH搬移到RAM运行。查看其他相关的Memory Sections也能发现类似的情况,因此可以认为,DSP/BIOS系统的搬移操作是成功的。为了量化程序搬移对程序运行的影响,在本工程的采样任务中,利用分频在TMS320F28335的一个GPIO管脚上输出一个固定频率的方波,通过示波器观察如图4、图5所示。 <E:\王芳\现代电子技术201502\Image\23t4.tif> 图4 方波显示图(一) 图4中是表示工程通过JTAG调试在RAM中运行时芯片管脚输出的频率,其输出频率是110.33 Hz。图5表示工程在FLASH中运行时芯片管脚输出的频率,其输出频率为55.148 Hz。 <E:\王芳\现代电子技术201502\Image\23t5.tif> 图5 方波显示图(二) 图6为工程经过搬移在RAM中运行时芯片管脚输出的频率,为110.34 Hz。通过对比以上3种情况可以发现,如果程序单纯的在FLASH中运行,其对程序的影响比较大,从性能上来说只有在RAM中运行时的一半。而程序通过搬移到RAM运行后,能够得到跟调试状态下一致的运行性能。由此可以看出,在TMS320F28335芯片上使用DSP/BIOS实时系统时对其从FLASH搬移到RAM运行的必要性及其重要意义。 <E:\王芳\现代电子技术201502\Image\23t6.tif> 图6 方波显示图(三) 4 ?结 ?论 本文给出TMS320F28335上运行的DSP/BIOS系统从片内FLASH搬移到RAM运行的方法,并实际的项目开发中得到验证和应用,具有非常实用的意义。在项目开发的过程中也发现,由于片内RAM的空间有限,当项目工程的程序较大时,有可能导致DSP/BIOS系统不能全部搬移到片内RAM中运行,此时可有两种解决方案,或者把工程和DSP/BIOS中对时间要求比较高的部分和部分对时间要求比较高的代码搬移到片内RAM,其余的代码还是在FLASH上运行;或者外扩片外RAM,把DSP/BIOS核心部分放到片内RAM,把对时间要求相对较低的代码放到片外RAM,通过这种区分优先顺序的方式来提高整个DSP/BIOS系统程序的运行效率。 参考文献 [1] ?Texas Instruments. TMS320F28335, TMS320F28334, TMS320 F28332, TMS320F28235, TMS320F28234, TMS320F28232 digital signal controllers (DSCs) [EB]. USA: Texas Instruments, 2012. [2] Texas Instruments. Running an application from internal flash memory on the TMS320F28xxx DSP [EB]. USA: Texas Instruments, 2013. [3] Texas Instruments. TMS320 DSP/BIOS v5.41 users guide [EB]. USA: Texas Instruments, 2009. [4] Texas Instruments. TMS320x2833x, 2823x Boot ROM [EB]. USA: Texas Instruments, 2008. [5] Texas Instruments. Running an application from internal flash memory on the TMS320F28xxx DSP [EB]. USA: Texas Instruments, 2013. [6] Texas Instruments. TMS320x2833x, 2823x system control and interrupts [EB]. USA: Texas Instruments, 2010. [7] Texas Instruments. SPRA958K [EB]. USA: Texas Instruments, 2012. [8] Texas Instruments. TMS320C28x optimizing C/C++ Compiler v6.0 user's guide [EB]. USA: Texas Instruments, 2011. (6) 在main函数里,把.secureRAMFuncs段搬移到RAM中,然后执行InitFLASH。 (7) 把用户代码所在的Memory Sections搬移到RAM中。 3.2 ?修改CMD文件 对需要搬移的Memory Sections修改为以下代码(以.bios段为例): .bios: LOAD = FLASH, ? PAGE = 0 ?/* Used by file FLASH.c */ ① RUN = L47SARAM, ?PAGE = 0 ?/* Load to flash, run from CSM secure RAM */ ② LOAD_START(_bios_loadstart) ③ LOAD_SIZE(_bios_loadsize) ? ? ④ RUN_START(_bios_runstart) ? ⑤ 上述代码中,①表示.bios段的代码位于FLASH;②表示.bios段代码执行位置在L47SARAM中;③表示.bios段装载的起始地址;④表示.bios段装载的长度;⑤.bios段运行的起始地址 3.3 ?结果分析 当把DSP/BIOS系统从FLASH搬移到RAM运行后,打开工程的内存分配文件(.map),看到里面有这么一行: .bios ?0 ? 00339558 ? ?00000d91 ? ? RUN ADDR = 0000d558 ?⑥ 从⑥中可以看出,.bios位于page 0,代码装载的起始位置是0x00339558, 代码长度是 0x00000d91,而代码运行的起始位置是0x0000d558。根据TMS320F28335的内存分配可知,.bios段代码的原始位置在FLASH中,而运行的位置在RAM,这个说明了DSP/BIOS已经实现了从FLASH搬移到RAM运行。查看其他相关的Memory Sections也能发现类似的情况,因此可以认为,DSP/BIOS系统的搬移操作是成功的。为了量化程序搬移对程序运行的影响,在本工程的采样任务中,利用分频在TMS320F28335的一个GPIO管脚上输出一个固定频率的方波,通过示波器观察如图4、图5所示。 <E:\王芳\现代电子技术201502\Image\23t4.tif> 图4 方波显示图(一) 图4中是表示工程通过JTAG调试在RAM中运行时芯片管脚输出的频率,其输出频率是110.33 Hz。图5表示工程在FLASH中运行时芯片管脚输出的频率,其输出频率为55.148 Hz。 <E:\王芳\现代电子技术201502\Image\23t5.tif> 图5 方波显示图(二) 图6为工程经过搬移在RAM中运行时芯片管脚输出的频率,为110.34 Hz。通过对比以上3种情况可以发现,如果程序单纯的在FLASH中运行,其对程序的影响比较大,从性能上来说只有在RAM中运行时的一半。而程序通过搬移到RAM运行后,能够得到跟调试状态下一致的运行性能。由此可以看出,在TMS320F28335芯片上使用DSP/BIOS实时系统时对其从FLASH搬移到RAM运行的必要性及其重要意义。 <E:\王芳\现代电子技术201502\Image\23t6.tif> 图6 方波显示图(三) 4 ?结 ?论 本文给出TMS320F28335上运行的DSP/BIOS系统从片内FLASH搬移到RAM运行的方法,并实际的项目开发中得到验证和应用,具有非常实用的意义。在项目开发的过程中也发现,由于片内RAM的空间有限,当项目工程的程序较大时,有可能导致DSP/BIOS系统不能全部搬移到片内RAM中运行,此时可有两种解决方案,或者把工程和DSP/BIOS中对时间要求比较高的部分和部分对时间要求比较高的代码搬移到片内RAM,其余的代码还是在FLASH上运行;或者外扩片外RAM,把DSP/BIOS核心部分放到片内RAM,把对时间要求相对较低的代码放到片外RAM,通过这种区分优先顺序的方式来提高整个DSP/BIOS系统程序的运行效率。 参考文献 [1] ?Texas Instruments. TMS320F28335, TMS320F28334, TMS320 F28332, TMS320F28235, TMS320F28234, TMS320F28232 digital signal controllers (DSCs) [EB]. USA: Texas Instruments, 2012. [2] Texas Instruments. Running an application from internal flash memory on the TMS320F28xxx DSP [EB]. USA: Texas Instruments, 2013. [3] Texas Instruments. TMS320 DSP/BIOS v5.41 users guide [EB]. USA: Texas Instruments, 2009. [4] Texas Instruments. TMS320x2833x, 2823x Boot ROM [EB]. USA: Texas Instruments, 2008. [5] Texas Instruments. Running an application from internal flash memory on the TMS320F28xxx DSP [EB]. USA: Texas Instruments, 2013. [6] Texas Instruments. TMS320x2833x, 2823x system control and interrupts [EB]. USA: Texas Instruments, 2010. [7] Texas Instruments. SPRA958K [EB]. USA: Texas Instruments, 2012. [8] Texas Instruments. TMS320C28x optimizing C/C++ Compiler v6.0 user's guide [EB]. USA: Texas Instruments, 2011. (6) 在main函数里,把.secureRAMFuncs段搬移到RAM中,然后执行InitFLASH。 (7) 把用户代码所在的Memory Sections搬移到RAM中。 3.2 ?修改CMD文件 对需要搬移的Memory Sections修改为以下代码(以.bios段为例): .bios: LOAD = FLASH, ? PAGE = 0 ?/* Used by file FLASH.c */ ① RUN = L47SARAM, ?PAGE = 0 ?/* Load to flash, run from CSM secure RAM */ ② LOAD_START(_bios_loadstart) ③ LOAD_SIZE(_bios_loadsize) ? ? ④ RUN_START(_bios_runstart) ? ⑤ 上述代码中,①表示.bios段的代码位于FLASH;②表示.bios段代码执行位置在L47SARAM中;③表示.bios段装载的起始地址;④表示.bios段装载的长度;⑤.bios段运行的起始地址 3.3 ?结果分析 当把DSP/BIOS系统从FLASH搬移到RAM运行后,打开工程的内存分配文件(.map),看到里面有这么一行: .bios ?0 ? 00339558 ? ?00000d91 ? ? RUN ADDR = 0000d558 ?⑥ 从⑥中可以看出,.bios位于page 0,代码装载的起始位置是0x00339558, 代码长度是 0x00000d91,而代码运行的起始位置是0x0000d558。根据TMS320F28335的内存分配可知,.bios段代码的原始位置在FLASH中,而运行的位置在RAM,这个说明了DSP/BIOS已经实现了从FLASH搬移到RAM运行。查看其他相关的Memory Sections也能发现类似的情况,因此可以认为,DSP/BIOS系统的搬移操作是成功的。为了量化程序搬移对程序运行的影响,在本工程的采样任务中,利用分频在TMS320F28335的一个GPIO管脚上输出一个固定频率的方波,通过示波器观察如图4、图5所示。 <E:\王芳\现代电子技术201502\Image\23t4.tif> 图4 方波显示图(一) 图4中是表示工程通过JTAG调试在RAM中运行时芯片管脚输出的频率,其输出频率是110.33 Hz。图5表示工程在FLASH中运行时芯片管脚输出的频率,其输出频率为55.148 Hz。 <E:\王芳\现代电子技术201502\Image\23t5.tif> 图5 方波显示图(二) 图6为工程经过搬移在RAM中运行时芯片管脚输出的频率,为110.34 Hz。通过对比以上3种情况可以发现,如果程序单纯的在FLASH中运行,其对程序的影响比较大,从性能上来说只有在RAM中运行时的一半。而程序通过搬移到RAM运行后,能够得到跟调试状态下一致的运行性能。由此可以看出,在TMS320F28335芯片上使用DSP/BIOS实时系统时对其从FLASH搬移到RAM运行的必要性及其重要意义。 <E:\王芳\现代电子技术201502\Image\23t6.tif> 图6 方波显示图(三) 4 ?结 ?论 本文给出TMS320F28335上运行的DSP/BIOS系统从片内FLASH搬移到RAM运行的方法,并实际的项目开发中得到验证和应用,具有非常实用的意义。在项目开发的过程中也发现,由于片内RAM的空间有限,当项目工程的程序较大时,有可能导致DSP/BIOS系统不能全部搬移到片内RAM中运行,此时可有两种解决方案,或者把工程和DSP/BIOS中对时间要求比较高的部分和部分对时间要求比较高的代码搬移到片内RAM,其余的代码还是在FLASH上运行;或者外扩片外RAM,把DSP/BIOS核心部分放到片内RAM,把对时间要求相对较低的代码放到片外RAM,通过这种区分优先顺序的方式来提高整个DSP/BIOS系统程序的运行效率。 参考文献 [1] ?Texas Instruments. TMS320F28335, TMS320F28334, TMS320 F28332, TMS320F28235, TMS320F28234, TMS320F28232 digital signal controllers (DSCs) [EB]. USA: Texas Instruments, 2012. [2] Texas Instruments. Running an application from internal flash memory on the TMS320F28xxx DSP [EB]. USA: Texas Instruments, 2013. [3] Texas Instruments. TMS320 DSP/BIOS v5.41 users guide [EB]. USA: Texas Instruments, 2009. [4] Texas Instruments. TMS320x2833x, 2823x Boot ROM [EB]. USA: Texas Instruments, 2008. [5] Texas Instruments. Running an application from internal flash memory on the TMS320F28xxx DSP [EB]. USA: Texas Instruments, 2013. [6] Texas Instruments. TMS320x2833x, 2823x system control and interrupts [EB]. USA: Texas Instruments, 2010. [7] Texas Instruments. SPRA958K [EB]. USA: Texas Instruments, 2012. [8] Texas Instruments. TMS320C28x optimizing C/C++ Compiler v6.0 user's guide [EB]. USA: Texas Instruments, 2011. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。