摘 "要: DSP/BIOS是TMS320F28xxx系列DSP上的一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核。由于TMS320F28335內(nèi)部FLASH性能的限制,當(dāng)DSP/BIOS系統(tǒng)直接在芯片內(nèi)FLASH上運(yùn)行時(shí),程序運(yùn)行的速度往往比在RAM上運(yùn)行時(shí)慢得多,嚴(yán)重影響了DSP/BIOS的實(shí)時(shí)性。為了解決這個(gè)問(wèn)題,通過(guò)分析TMS320F28335的啟動(dòng)過(guò)程和程序從FLASH搬移到RAM上運(yùn)行的一般流程,以及DSP/BIOS與非DSP/BIOS工程的Memory Sections特點(diǎn),提出一種通過(guò)在c_int00之前增加Copy_Sections等一系列操作對(duì)DSP/BIOS系統(tǒng)及用戶程序進(jìn)行搬移的方法。由此實(shí)現(xiàn)在芯片啟動(dòng)后自動(dòng)把DSP/BIOS系統(tǒng)從片內(nèi)FLASH搬移到RAM上運(yùn)行的功能,從而提高DSP/BIOS系統(tǒng)的運(yùn)行效率和實(shí)時(shí)性。該方法已經(jīng)通過(guò)實(shí)驗(yàn)驗(yàn)證并在實(shí)際的工程項(xiàng)目中應(yīng)用,獲得良好的效果,因此值得推廣。
關(guān)鍵詞:TMS320F28335; DSP/BIOS; FLASH; RAM; 程序搬移
中圖分類號(hào): TN919?34; TP311.1 " " " " " " " " 文獻(xiàn)標(biāo)識(shí)碼: A " " " " " " " " " "文章編號(hào): 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/BIOS’s 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 現(xiàn)有的 C28xDSC具有相同的 32 位定點(diǎn)架構(gòu),還包括一個(gè)單精度(32 位)的 IEEE 754 浮點(diǎn)單元(FPU)[1]。其內(nèi)部包含512 KB的FLASH和68 KB的RAM,并支持20 b地址、32 b數(shù)據(jù)的外部擴(kuò)展。當(dāng)代碼運(yùn)行在片上RAM時(shí),其MIPS與跟芯片運(yùn)行的頻率是一致的,即芯片運(yùn)行在150 MHz時(shí),其性能為150 MIPS。然而,由于芯片內(nèi)部FLASH的讀取等待時(shí)間比RAM長(zhǎng),當(dāng)代碼在芯片內(nèi)部FLASH運(yùn)行時(shí),其運(yùn)行性能[2]在150 MHz下最多只有95 MIPS。
DSP/BIOS是TI公司為其C28x、55x、C6000系列所設(shè)計(jì)開發(fā)的一個(gè)用戶可裁剪的實(shí)時(shí)多任務(wù)的操作系統(tǒng)內(nèi)核[3]。其以模塊化方式提供給用戶對(duì)線程、中斷、定時(shí)器、內(nèi)存資源、所有外設(shè)資源的管理能力都可以根據(jù)需要剪裁。實(shí)際應(yīng)用中需要的定制算法作為一個(gè)線程插入DSP/BIOS的調(diào)度隊(duì)列,由DSP/BIOS進(jìn)行調(diào)度。作為TI公司的操作系統(tǒng),DSP/BIOS與開發(fā)環(huán)境緊密結(jié)合,能夠給開發(fā)者提供多種豐富的可視化調(diào)試手段,為工程的開發(fā)提供極大的便利,這是其他實(shí)時(shí)系統(tǒng)所不能比擬的。
當(dāng)DSP/BIOS運(yùn)行在芯片內(nèi)部FLASH時(shí),由于FLASH讀取時(shí)間比RAM的讀取時(shí)間長(zhǎng),導(dǎo)致DSP/BIOS系統(tǒng)往往達(dá)不到在RAM運(yùn)行時(shí)的效果,嚴(yán)重影響其實(shí)時(shí)效果。為了發(fā)揮芯片的最大性能,提高DSP/BIOS系統(tǒng)的實(shí)時(shí)性及運(yùn)行效率,有必要將DSP/BIOS從FLASH搬移到RAM上運(yùn)行。本文通過(guò)分析TMSF320F28335的啟動(dòng)流程以及DSP/BIOS中Memory Sections特點(diǎn),實(shí)現(xiàn)了芯片復(fù)位、上電后自動(dòng)把DSP/BIOS系統(tǒng)及相關(guān)程序從芯片內(nèi)部FLASH搬移到RAM上,并在RAM中運(yùn)行的方法。
1 "TMF320F28335的啟動(dòng)流程
在TMS320F28335芯片上電/復(fù)位后,程序首先到復(fù)位向量的地址0x3FFFC0進(jìn)入初始化引導(dǎo)函數(shù)InitBoot[4]。在InitBoot中,首先程序?qū)π酒M(jìn)行初始化,然后讀取與芯片引導(dǎo)方式相關(guān)引腳的狀態(tài),調(diào)用SelectBootmode確認(rèn)引導(dǎo)模式,調(diào)用ADC_CAL來(lái)校正芯片的采樣數(shù)據(jù)。在退出InitBoot(即執(zhí)行ExitBoot)后,芯片根據(jù)之前確認(rèn)的引導(dǎo)路徑跳轉(zhuǎn)到相應(yīng)的程序入口。對(duì)于一般的產(chǎn)品來(lái)說(shuō),程序上電復(fù)位后都是從內(nèi)部FLASH啟動(dòng)的,因此,程序在退出InitBoot后會(huì)跳轉(zhuǎn)到FLASH的0x33FFF6執(zhí)行代碼。相應(yīng)啟動(dòng)流程如圖1所示。
lt;E:\王芳\現(xiàn)代電子技術(shù)201502\Image\23t1.tifgt;
圖1 啟動(dòng)流程圖
以上是芯片在上電/復(fù)位以后的流程,由芯片自動(dòng)完成,接下來(lái)到了FLASH的0x33FFF6處就是用戶自己實(shí)現(xiàn)的代碼,該入口的名字是code_start。對(duì)DSP/BIOS系統(tǒng),如果用戶的程序代碼是直接運(yùn)行在FLASH中,那么程序執(zhí)行的流程如圖2所示。其中,wd_disable表示屏蔽硬件看門狗,c_ini00為初始化C運(yùn)行環(huán)境,BIOS_init為DSP/BIOS的初始化函數(shù),BIOS_start為DSP/BIOS的啟動(dòng)函數(shù),而main則是用戶程序的入口。圖2中的各個(gè)流程的程序均運(yùn)行在芯片內(nèi)FLASH中。
lt;E:\王芳\現(xiàn)代電子技術(shù)201502\Image\23t2.tifgt;
圖2 程序執(zhí)行流程圖
由圖2可以看出,如果DSP/BIOS系統(tǒng)和用戶的程序代碼要實(shí)現(xiàn)從內(nèi)部FLASH搬運(yùn)到RAM中運(yùn)行,則需要從圖2的流程中增加一個(gè)過(guò)程實(shí)現(xiàn)對(duì)部分核心Memory Sections及相關(guān)代碼的搬移,該過(guò)程命名為copy_sections。該過(guò)程應(yīng)該在wd_disable與c_int00之間,因此實(shí)現(xiàn)從FLASH到RAM程序搬移的流程如圖3所示。其中,在copy_sections及之前的過(guò)程均運(yùn)行在片上FLASH,copy_sections后面的程序根據(jù)copy_sections的具體進(jìn)行的操作有可能運(yùn)行在FLASH或者RAM上。同時(shí),也需要在用戶代碼的開始階段,對(duì)其他Memory Sections及用戶定義的存儲(chǔ)段進(jìn)行搬移。 對(duì)于我們具體的工程,由于把整個(gè)DSP/BIOS系統(tǒng)和用戶程序都搬移到RAM上,因此在copy_sections之后的過(guò)程都是直接在RAM上運(yùn)行的。
lt;E:\王芳\現(xiàn)代電子技術(shù)201502\Image\23t3.tifgt;
圖3 程序搬移流程圖
2 "DSP/BIOS的Memory Sections特點(diǎn)
在一般的非DSP/BIOS工程中,其Memory Sections一般如表1所示。對(duì)于一般的DSP/BIOS工程,其Memory Sections如表2所示[5]。
表1 非DSP/BIOS中Memory Section表
表2 DSP/BIOS中Memory Section表
表1,表2中顯示為RAM的Memory Sections表示該段位于RAM上,該段的數(shù)據(jù)為變量。而顯示為FLASH的Memory Sections則表示該段位于FLASH上,該段的數(shù)據(jù)為代碼或常量。
由上述表格可以得出,不管是DSP/BIOS工程還是非DSP/BIOS工程,在程序搬移的時(shí)候,為了提高運(yùn)行的效率,表格2中凡是顯示FLASH的段都要搬移到RAM中運(yùn)行。這里有幾個(gè)地方要注意,首先,Stack Section(.Stack)要求只能搬移到內(nèi)存低于64 KB的地方運(yùn)行。而對(duì)DSP/BIOS工程來(lái)說(shuō),一個(gè)值得注意的地方是.hwi_vec(Interrupt Service Table Memory)段只能搬移到PIEVECT RAM。PIEVECT RAM是與PIE有關(guān)的特殊部分[6],其位于數(shù)據(jù)空間,地址從0x000D00開始,大小為256×16。另外一個(gè)值得注意的地方,根據(jù)TI的文檔[2],DSP/BIOS系統(tǒng)中各個(gè)Memroy Sections并不是全部在copy_sections中實(shí)現(xiàn)搬移的,而是分別在DSP/BIOS系統(tǒng)選項(xiàng)以及用戶代碼中進(jìn)行搬移。這是與一般非DSP/BIOS工程最大的不同。
3 "DSP/BIOS系統(tǒng)搬移實(shí)現(xiàn)
結(jié)合以上對(duì)TMS320F28335芯片復(fù)位、上電后的啟動(dòng)流程以及DSP/BIOS系統(tǒng)的Memory Sections的分析,我們知道DSP/BIOS工程與非DSP/BIOS工程在程序搬移的原理是一致的,但是實(shí)現(xiàn)的流程有所不一樣。對(duì)于DSP/BIOS工程,具體的流程如下:
3.1 "增加/修改搬移代碼
(1) 修改CodeStartBranch.asm。把原來(lái)LB _c_int00改為L(zhǎng)B copy_sections。
(2) 增加SectionCopy_BIOS.asm[7]。為了提高DSP/BIOS的運(yùn)行效率,把DSP/BIOS與FLASH有關(guān)的除了.hwi_vec以及.Trcdata外的全部Memory Sections搬移到RAM中,這些操作在copy_section里面實(shí)現(xiàn)。
(3) 在ccs[8]工程的DSP/BIOS系統(tǒng)選項(xiàng)中,增加_UserInit函數(shù),并在UserInit函數(shù)內(nèi)搬移.Trcdata段到RAM中。
(4) 在main函數(shù)里,增加.hwi_vec段搬移的代碼。
(5) 在main函數(shù)里,把其他相關(guān)的段,如用戶數(shù)據(jù)等搬移到RAM中。
(6) 在main函數(shù)里,把.secureRAMFuncs段搬移到RAM中,然后執(zhí)行InitFLASH。
(7) 把用戶代碼所在的Memory Sections搬移到RAM中。
3.2 "修改CMD文件
對(duì)需要搬移的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段代碼執(zhí)行位置在L47SARAM中;③表示.bios段裝載的起始地址;④表示.bios段裝載的長(zhǎng)度;⑤.bios段運(yùn)行的起始地址
3.3 "結(jié)果分析
當(dāng)把DSP/BIOS系統(tǒng)從FLASH搬移到RAM運(yùn)行后,打開工程的內(nèi)存分配文件(.map),看到里面有這么一行:
.bios "0 " 00339558 " "00000d91 " " RUN ADDR = 0000d558 "⑥
從⑥中可以看出,.bios位于page 0,代碼裝載的起始位置是0x00339558, 代碼長(zhǎng)度是 0x00000d91,而代碼運(yùn)行的起始位置是0x0000d558。根據(jù)TMS320F28335的內(nèi)存分配可知,.bios段代碼的原始位置在FLASH中,而運(yùn)行的位置在RAM,這個(gè)說(shuō)明了DSP/BIOS已經(jīng)實(shí)現(xiàn)了從FLASH搬移到RAM運(yùn)行。查看其他相關(guān)的Memory Sections也能發(fā)現(xiàn)類似的情況,因此可以認(rèn)為,DSP/BIOS系統(tǒng)的搬移操作是成功的。為了量化程序搬移對(duì)程序運(yùn)行的影響,在本工程的采樣任務(wù)中,利用分頻在TMS320F28335的一個(gè)GPIO管腳上輸出一個(gè)固定頻率的方波,通過(guò)示波器觀察如圖4、圖5所示。
lt;E:\王芳\現(xiàn)代電子技術(shù)201502\Image\23t4.tifgt;
圖4 方波顯示圖(一)
圖4中是表示工程通過(guò)JTAG調(diào)試在RAM中運(yùn)行時(shí)芯片管腳輸出的頻率,其輸出頻率是110.33 Hz。圖5表示工程在FLASH中運(yùn)行時(shí)芯片管腳輸出的頻率,其輸出頻率為55.148 Hz。
lt;E:\王芳\現(xiàn)代電子技術(shù)201502\Image\23t5.tifgt;
圖5 方波顯示圖(二)
圖6為工程經(jīng)過(guò)搬移在RAM中運(yùn)行時(shí)芯片管腳輸出的頻率,為110.34 Hz。通過(guò)對(duì)比以上3種情況可以發(fā)現(xiàn),如果程序單純的在FLASH中運(yùn)行,其對(duì)程序的影響比較大,從性能上來(lái)說(shuō)只有在RAM中運(yùn)行時(shí)的一半。而程序通過(guò)搬移到RAM運(yùn)行后,能夠得到跟調(diào)試狀態(tài)下一致的運(yùn)行性能。由此可以看出,在TMS320F28335芯片上使用DSP/BIOS實(shí)時(shí)系統(tǒng)時(shí)對(duì)其從FLASH搬移到RAM運(yùn)行的必要性及其重要意義。
lt;E:\王芳\現(xiàn)代電子技術(shù)201502\Image\23t6.tifgt;
圖6 方波顯示圖(三)
4 "結(jié) "論
本文給出TMS320F28335上運(yùn)行的DSP/BIOS系統(tǒng)從片內(nèi)FLASH搬移到RAM運(yùn)行的方法,并實(shí)際的項(xiàng)目開發(fā)中得到驗(yàn)證和應(yīng)用,具有非常實(shí)用的意義。在項(xiàng)目開發(fā)的過(guò)程中也發(fā)現(xiàn),由于片內(nèi)RAM的空間有限,當(dāng)項(xiàng)目工程的程序較大時(shí),有可能導(dǎo)致DSP/BIOS系統(tǒng)不能全部搬移到片內(nèi)RAM中運(yùn)行,此時(shí)可有兩種解決方案,或者把工程和DSP/BIOS中對(duì)時(shí)間要求比較高的部分和部分對(duì)時(shí)間要求比較高的代碼搬移到片內(nèi)RAM,其余的代碼還是在FLASH上運(yùn)行;或者外擴(kuò)片外RAM,把DSP/BIOS核心部分放到片內(nèi)RAM,把對(duì)時(shí)間要求相對(duì)較低的代碼放到片外RAM,通過(guò)這種區(qū)分優(yōu)先順序的方式來(lái)提高整個(gè)DSP/BIOS系統(tǒng)程序的運(yùn)行效率。
參考文獻(xiàn)
[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 user’s 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.