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