摘 要: 隨著數字芯片速度的提高和數字信號技術的發展,DSP被廣泛應用于工業控制等領域,系統開發的效率得到普遍的關注,傳統的MATLAB仿真與產品硬件實現相分隔的方式已經無法滿足設計的需求。提出一種基于MATLAB的DSP實時控制軟件自動生成方案,并通過Simulink模型自動生成TI C2812 DSP的目標代碼的應用實例,驗證了代碼自動生成的可執行性。
關鍵詞: CCSLink;ETTIC2000;自動生成代碼
0 引言
傳統的DSP軟件設計開發一般分為兩個階段:設計仿真和源代碼開發實現[1]。設計仿真階段根據系統開發的需要,以DSP算法研究與仿真驗證為主,這階段可以利用MATLAB的Simulink模塊仿真來實現;源代碼開發通常采用匯編指令或C語言編寫源代碼,由匯編器和連接器進行鏈接后生成目標可執行代碼。源代碼開發完成后,功能的實現主要在硬件電路板上來驗證設計方案的正確性,對于軟件開發者關于DSP數字芯片與硬件電路的原理有一定程度的要求,特別是各個寄存器的作用和存儲空間的特性和擴展。這兩個部分通常是在不同階段相互獨立地完成,因此大大增加了系統開發的時間,系統設計的實時性也不能得到保證。本文介紹了MATLAB中的MATLAB與CCS的接口和Embeded Target for TIC2000 DSP,提出了一種基于TI C2812的軟件設計思路,實現將設計仿真和源代碼開發在同一平臺下開展,從而有效地將開發過程中的兩大階段有機地結合在一起,大大縮短了開發周期,并通過應用實例進行驗證。
1 ETTIC2000概述
Embedded Target for the TI TMS320C2000TM為TI C2000 DSP實時控制軟件的自動生成的模型仿真、源代碼開發、目標代碼自動生成、實時調試等各個環節都提供了技術方面的支持[2]。
1.1 ETTIC2000的功能和特點
ETTIC2000首先利用Real-Time Workshop從Simulink模型生成標準C語言程序代碼,然后通過MATLAB Link for CCS Development Tools調用CCS開發工具,編譯鏈接Simulink所生成的程序,自動生成目標板(C2812 Simulator)的可執行代碼(.out文件),最后把生成的可執行代碼加載到目標板中,并利用嵌入式對象對程序運行進行實時監控和調試。
Embedded Target for the TI C2000 DSP、Simulink、Real-Time Workshop、CCS和TI目標之間的關系如圖1所示。

1.2 C281×DSP模塊庫
ETTIC2000提供了多個Simulink模塊,以支持不同型號的DSP,在MATLAB窗口中執行命令C2000lib,就會顯示對應型號的DSP芯片模塊。其中,本文使用的C281×的各模塊如圖2所示。

2 MATLAB與TI CCS的接口
2.1 CCSLink的功能及特點
MATLAB Link for CCS Development Tools作為MATLAB的一個工具箱被集成在MATLAB中,可以支持CCS能夠識別的任何目標板。利用此工具箱,將調用函數、讀寫存儲器或寄存器中的數據、實時測試等工作統一在MATLAB平臺下進行,把MATLAB和TI CCS及目標DSP連接起來。其功能圖如圖3所示。

2.2 CCSLink的連接方式
利用CCSLink提供的MATLAB函數可以完成MATLAB與TI CCS、目標板的存儲器或寄存器的數據及信息的交換。
CCS IDE的連接對象用于創建CCS與MATLAB的連接。從MATLAB的命令窗中可以運行CCS IDE中的程序,向目標板的存儲器或寄存器讀取數據,檢查DSP的運行狀態,而且可以控制DSP上運行程序的起止。
在MATLAB環境中可以創建一個嵌入式對象訪問目標板的存儲器或寄存器中的變量,即把C語言代碼中的變量作為MATLAB的一個變量處理。轉變數據類型,創建函數聲明,改變變量值,讀取DSP中的數據與信息,所有這些操作都在MATLAB平臺下進行。
在MATLAB中,對所有對象的操作方式是一樣的,只是對應的屬性及屬性值不同而已。
3 應用實例
32位的TMS320C281×系列芯片融合了DSP和微控制器的最佳特性,能夠完成64位的數據處理,專門的分支硬件減少了條件指令執行的反應時間,使該處理器能夠實現更高精度的處理任務[3]。
在TMS320F281×DSP中,ADC模塊是一個12位帶流水線的模/數轉換器,由16個結果寄存器ADCResult存放ADC的轉換結果,轉換的計算過程為:
本系統搭建的是一個由AD模塊采集來的數字信號量來控制PWM輸出的占空比的模型。通過讀取AD轉換的數據與信息,同時,利用示波器顯示的PWM輸出波形,分析由CCS實時控制的DSP代碼自動生成的效果。
具體步驟如下:
(1)在MATLAB中的Simulink環境搭建模型如圖4所示,選用ADC模塊中A0通道,由PWM1通道輸出結果,設置參數并進行仿真。

(2)配置CCSLink。
驗證CCS是否在PC上安裝并配置好,在MATLAB命令窗中輸入命令:ccsboardinfo,則MATLAB命令窗中會返回圖5所示的板卡信息。

圖5證明CCS已經安裝并配置好。CCSLink工作時CCS將自動啟動。
(3)在Real-Time Workshop中設置編譯鏈接(Build)選項。
指定ti_c2000.tlc作為系統目標文件(system target file)。設置好Build選項后,通過編譯鏈接選項,Real-Time Workshop會自動產生實時可執行代碼,同時,可通過設置將可執行代碼自動加載到指定的目標板上并且開始運行。圖6為MATLAB命令窗口顯示。

(4)實時代碼調試。
在MATLAB環境下編輯m文件,并運行以下代碼:
cc=ccsdsp(′boardnum′,0,′procnum′,0)
//創建一個連接對象
visible(cc,1)//CCS IDE窗口在桌面上可見
linkinfo=info(cc)//測試DSP目標板的狀態信息
projfile=fullfile(matlabroot,′work′,...);
projpath=fileparts(projfile);
open(cc,projfile)//加載工程文件
build(cc)//編譯文件
load(cc,′.out′)//可執行文件加載到DSP中
run(cc)//運行
halt(cc)//停止
ddatv=read(cc,address(cc,′ddat′),′double′,2)
//訪問嵌入在目標DSP存儲器中的值
在MATLAB環境下完成了對工程文件的調入、編譯,生成可執行文件并將其加載到DSP目標板。切換到已經打開的CCS界面,可以看到在MATLAB環境下已經完成了對CCS的各種操作。
(5)運行結果。
當由變位器給定模擬電壓輸入為1 V時,加載自動生成代碼到DSP后,讀取DSP寄存器的值如圖7所示。

自動生成代碼F2812.ADC=(AdcRegs.ADCRESULT0)>>4;之所以右移4位,是因為在級聯序列發生器模式中,讀取時,ADCRESULTn寄存器為左對齊,應向右平移4位后讀取[4]。
結果寄存器存放的數字量與計算得出的理論值 1 355非常接近,如圖8所示,驗證目標板AD轉換有效。

程序的目標板輸出波形比較如圖9所示。

圖9證明了由MATLAB模型生成的代碼是有效的,運行結果也與理論輸出占空比近似,進而證明這種設計方法快捷、高效。
4 結論
應用MATLAB自動生成DSP代碼的方案,有效地克服了傳統DSP代碼設計方法效率低、難度大等缺點,快速生成了標準化的C語言代碼和DSP可執行文件,極大地縮短了代碼的開發時間。實驗結果表明,自動生成的代碼運行效果良好,可以應用于項目的設計與實現,體現了方案的實用性與可行性。
參考文獻
[1] 李利.DSP原理及應用[M].北京:中國水利水電出版社,2004.
[2] 李真芳,蘇濤,黃小宇.DSP程序開發:MATLAB調試及直接目標代碼生成[M].西安:西安電子科技大學出版社,2003.
[3] 蘇奎峰,呂強,常天慶,等.TMS320281×DSP原理及C程序開發[M].北京:北京航空航天大學出版社,2008.
[4] 張雄偉,陳亮,徐光輝.DSP芯片的原理與開發應用[M].北京:電子工業出版社,2003.
