TMS320F28xxx DSP:從內(nèi)部閃存運行應用程序的全面指南
在嵌入式系統(tǒng)設計中,讓應用程序在TMS320F28xxx DSP的內(nèi)部閃存上運行是一個常見需求。本文將深入探討從內(nèi)部閃存運行應用程序所需的特殊要求、軟件修改以及性能優(yōu)化技巧。
文件下載:TMDSC2KWRKSHPKIT.pdf
1. 引言
TMS320F28xxx DSP系列專為嵌入式控制器應用的獨立運行而設計。片上閃存通??上龑ν獠糠且资源鎯ζ骱椭鳈C處理器的需求。要配置應用程序從閃存運行,只需遵循幾個簡單步驟。本文涵蓋了正確配置應用程序軟件以從內(nèi)部閃存執(zhí)行所需的主要問題和步驟,同時介紹了DSP/BIOS和非DSP/BIOS項目的要求,并討論了一些性能考慮因素和技術。
適用設備與工具版本
本文討論的問題適用于TMS320F28xxx設備家族的當前成員,包括F281x、F280x/2801x/28044、F2823x/2833x、F2802x、F2803x、F2805x和F2806x等系列。代碼和方法適用于特定的開發(fā)工具版本,如CCS v5.3.0、Code Generation Tools v6.1.1和DSP/BIOS v5.42.0.07。雖然未來工具版本可能存在差異,但通常會保持向后兼容性。
示例項目
為F2812、F2808、F28335、F28027、F28035、F28055和F28069提供了示例CCS v5項目,可從http://www-s.ti.com/sc/techlit/spra958.zip下載,為代碼開發(fā)提供起點。
2. 創(chuàng)建用戶鏈接器命令文件
2.1 非DSP/BIOS項目
在非DSP/BIOS應用中,用戶鏈接器命令文件用于定義大部分內(nèi)存并指定大部分段的鏈接位置。其格式與從RAM運行應用程序時使用的鏈接器命令文件相同,區(qū)別在于段的鏈接位置。相關外設頭文件包含用于鏈接外設寄存器結(jié)構的鏈接器命令文件,可將其添加到代碼項目中。一般來說,鏈接器命令文件的順序不重要,但在某些罕見情況下,高級用戶可能需要手動控制其評估順序。
2.2 DSP/BIOS項目
DSP/BIOS配置工具會生成一個鏈接器命令文件,指定如何鏈接所有DSP/BIOS生成的段以及默認情況下所有C編譯器生成的段。從閃存執(zhí)行時,可能需要生成并鏈接一個或多個用戶定義的段。同樣,外設頭文件包含用于鏈接外設寄存器結(jié)構的鏈接器命令文件,需將其添加到項目中。在某些情況下,高級用戶可能需要手動控制鏈接器命令文件的評估順序。
3. 段的鏈接位置
3.1 段類型
存在兩種基本段類型:初始化段和未初始化段。初始化段在設備上電時必須包含有效值,如代碼和常量;未初始化段在設備上電時不包含有效值,如變量。因此,初始化段應鏈接到非易失性內(nèi)存(如片上閃存),未初始化段應鏈接到易失性內(nèi)存(如RAM)。
3.2 鏈接選項
建議使用 -w 鏈接器選項,該選項會在鏈接器遇到項目中未在鏈接器命令文件中明確指定鏈接的段時發(fā)出警告。同時,應使用大內(nèi)存模型,避免使用小內(nèi)存模型,因為小內(nèi)存模型要求某些初始化段鏈接到可尋址空間的低64Kw非易失性內(nèi)存,而F28xxx設備在此區(qū)域沒有閃存。
3.3 不同項目的段鏈接
- 非DSP/BIOS項目:編譯器使用的特定段在從RAM或閃存運行時相同,但從閃存運行時,所有初始化段必須鏈接到非易失性內(nèi)存,未初始化段必須鏈接到易失性內(nèi)存。具體段的鏈接位置可參考表1。
- DSP/BIOS項目:DSP/BIOS配置工具的內(nèi)存段管理器允許指定各種DSP/BIOS和C編譯器生成段的鏈接位置。具體鏈接信息可參考表2。
4. 從閃存復制段到RAM
4.1 復制中斷向量(僅非DSP/BIOS項目)
F28xxx設備的外設中斷擴展(PIE)模塊管理中斷請求。上電時,所有中斷向量必須位于非易失性內(nèi)存(即閃存),并在代碼的設備初始化過程中復制到PIE VECT RAM。可使用常量C結(jié)構包含所有128個32位向量,并使用 memcpy() 函數(shù)進行復制。對于某些設備,需避免覆蓋前三個32位PIE向量位置。
4.2 復制 .hwi_vec 段(僅DSP/BIOS項目)
DSP/BIOS的 .hwi_vec 段包含中斷向量,必須加載到閃存但從RAM運行。用戶負責將該段從其加載地址復制到運行地址,通常在 main() 中完成??墒褂肈SP/BIOS配置工具生成的全局符號確定加載地址、運行地址和段長度,并使用 memcpy() 函數(shù)進行復制。對于某些設備,需避免覆蓋前三個32位PIE向量位置。
4.3 復制 .trcdata 段(僅DSP/BIOS項目)
DSP/BIOS的 .trcdata 段必須加載到閃存但從RAM運行,且復制必須在 main() 之前進行。可使用DSP/BIOS配置工具提供的用戶初始化函數(shù)完成復制,利用配置工具生成的全局符號確定加載地址、運行地址和段長度,并使用 memcpy() 函數(shù)進行復制。
4.4 初始化閃存控制寄存器(DSP/BIOS和非DSP/BIOS項目)
閃存控制寄存器的初始化代碼不能從閃存執(zhí)行,否則可能導致不可預測的結(jié)果。因此,初始化函數(shù)必須在運行時從閃存(加載地址)復制到RAM(運行地址)。需注意閃存控制寄存器受代碼安全模塊(CSM)或雙代碼安全模塊(DCSM)保護,不同設備的保護方式不同。可使用C編譯器的 CODE_SECTION 編譯指示創(chuàng)建可單獨鏈接的段,并在用戶鏈接器命令文件中指定加載和運行地址,最后使用 memcpy() 函數(shù)進行復制。
4.5 從RAM執(zhí)行時間關鍵函數(shù)以最大化性能(DSP/BIOS和非DSP/BIOS項目)
F28xxx設備的片上RAM提供的代碼執(zhí)行性能與設備的工作時鐘頻率相等(以MIPS為單位),而片上閃存的有效代碼執(zhí)行性能稍低。因此,對于時間關鍵或計算要求高的例程,可考慮從片上RAM運行。需為這些函數(shù)設置單獨的加載和運行地址,并在運行時將其從片上閃存復制到RAM。
4.6 將關鍵全局常量鏈接到RAM以最大化性能(DSP/BIOS和非DSP/BIOS項目)
常量數(shù)據(jù)結(jié)構存放在 .econst 段中,訪問閃存中的數(shù)據(jù)常量可能需要多個周期。為提高性能,可將頻繁訪問的常量和常量表保留在片上RAM中??刹捎脙煞N方法:
- 方法1:從RAM運行所有常量數(shù)組:為整個 .econst 段指定單獨的加載和運行地址,并在運行時將其復制到RAM。
- 方法2:從RAM運行特定常量數(shù)組:選擇性地將常量從閃存復制到RAM,將選定的常量放置在命名段中并復制到RAM。
5. 編程代碼安全模塊密碼
F28xxx設備的代碼安全模塊提供對軟件的保護,防止未經(jīng)授權的復制和篡改。設備分為單區(qū)代碼安全模塊(CSM)和雙區(qū)代碼安全模塊(DCSM)。
5.1 單區(qū)安全設備(DSP/BIOS和非DSP/BIOS項目)
CSM保護整個閃存、OTP內(nèi)存和一些‘L’ SARAM塊。CSM使用128位密碼,在開發(fā)階段建議使用0xFFFF的虛擬密碼。開發(fā)完成后,可使用真實密碼,并將0x0000值編程到密碼地址前的118個閃存地址中??墒褂?a href="http://m.greenbey.cn/v/tag/3195/" target="_blank">匯編語言編程實現(xiàn)密碼設置,并在用戶鏈接器命令文件中放置密碼和保留段。
5.2 雙區(qū)安全設備(DSP/BIOS和非DSP/BIOS項目)
雙區(qū)安全與單區(qū)安全類似,但有三個主要區(qū)別:
- 從安全區(qū)執(zhí)行的代碼只能訪問該區(qū)域或非安全內(nèi)存中的數(shù)據(jù)。
- 每個區(qū)域使用位于OTP內(nèi)存中的16x16位‘區(qū)域選擇塊’控制對該區(qū)域的安全訪問。
- 安全配置表位于OTP內(nèi)存中,每個條目只能寫入一次。
可使用匯編語言創(chuàng)建區(qū)域配置表,并在用戶鏈接器命令文件中鏈接相關段。
6. DSP復位后從閃存執(zhí)行代碼
F28xxx設備包含ROM引導加載程序,可在設備復位后將代碼執(zhí)行轉(zhuǎn)移到閃存。當引導模式選擇引腳配置為‘Jump-to-Flash’模式時,ROM引導加載程序?qū)⒎种У介W存中的跳轉(zhuǎn)目標地址。用戶應在該地址放置分支指令,分支到代碼的起始位置??墒褂脜R編代碼創(chuàng)建名為 codestart 的初始化段,并在用戶鏈接器命令文件中放置該段。
7. 在C環(huán)境引導期間禁用看門狗定時器
C編譯器運行時支持庫中的C環(huán)境初始化函數(shù) _c_int00 負責初始化全局和靜態(tài)變量。當軟件中存在大量初始化的全局和靜態(tài)變量時,看門狗定時器可能在C環(huán)境引導例程完成并調(diào)用 main() 之前超時??赏ㄟ^在C環(huán)境引導例程開始之前禁用看門狗定時器來解決該問題,在到達 main() 并開始正常代碼執(zhí)行流程后再重新啟用??墒褂脜R編代碼實現(xiàn)看門狗禁用和分支到 _c_int00 例程。
8. C代碼示例
8.1 概述
本文提供了包含CCS v5代碼項目的下載,涵蓋了F281x、F280x、F2802x、F2803x、F2805x、F2806x和F2833x子系列的超集設備。每個設備類型(除F2802x、F2803x和F2805x外)有四個不同的項目:非DSP/BIOS項目(從片上RAM運行和從片上閃存運行)和DSP/BIOS項目(從片上RAM運行和從片上閃存運行)。這些項目僅為示例,使用的開發(fā)工具版本為CCS v5.3.0、Code Generation Tools v6.1.1和DSP/BIOS v5.42.0.07。
8.2 目錄結(jié)構
每個代碼項目包含所有所需文件(除C編譯器運行時支持庫外),表3提供了CCS項目的目錄結(jié)構描述。
8.3 附加信息
- 構建項目后,.out 文件將位于
Debug 目錄中。 - 使用RAM示例時,板應配置為“Jump to H0 SARAM”(F2812)或“Jump to M0 SARAM”(其他設備)引導模式;使用FLASH示例時,板應配置為“Jump to Flash”引導模式。
- 示例項目的鏈接位置未經(jīng)過精細調(diào)整,若作為代碼開發(fā)的起點,可能需要調(diào)整鏈接以提高性能。
- 非DSP/BIOS項目在 DefaultIsr_nonBIOS.c 文件中定義了完整的中斷服務例程;DSP/BIOS項目在 DefaultIsr_BIOS.c 文件中定義了完整的(硬件)中斷服務例程。
總之,在TMS320F28xxx DSP上從內(nèi)部閃存運行應用程序需要考慮多個方面,包括鏈接器命令文件的創(chuàng)建、段的鏈接位置、段的復制、代碼安全模塊密碼的編程等。通過遵循本文介紹的步驟和技巧,工程師可以順利地將應用程序配置為從內(nèi)部閃存運行,并優(yōu)化性能。你在實際應用中遇到過哪些相關問題呢?歡迎在評論區(qū)分享。
發(fā)布評論請先 登錄
TMS320F280x/C280x系列數(shù)字信號處理器:功能特性與應用指南
TMS320F281x與TMS320C281x DSPs:功能特性與應用指南
TMS320F281x/C281x DSPs:高性能數(shù)字信號處理器的全面解析
TMS320F2805x系列實時微控制器:特性、應用與開發(fā)指南
TMS320F280x/C280x系列數(shù)字信號處理器深度解析
TMS320F243與TMS320F241 DSP控制器:數(shù)字信號處理的得力助手
深入解析TMS320F280x與TMS320C280x系列數(shù)字信號處理器
TMS320LF2401A與TMS320LC2401A DSP控制器深度解析
TMS320VC5507 DSP深度剖析:從特性到應用的全方位指南
Microchip PIC18F2XXX/4XXX 系列閃存微控制器編程指南
TMS320F28P650DK實時微控制器技術文檔總結(jié)
TMS320F280013x系列微控制器技術解析與應用指南
TMS320F280015x微控制器技術解析:面向?qū)崟r控制的高效解決方案
Texas Instruments TMS320F28P65x/TMS320F28P65x-Q1實時MCU數(shù)據(jù)手冊
Texas Instruments TMS320F28P55x/TMS320F28P55x-Q1實時MCU數(shù)據(jù)手冊
TMS320F28xxx DSP:從內(nèi)部閃存運行應用程序的全面指南
評論