摘 要: 隨著數(shù)字芯片速度的提高和數(shù)字信號(hào)技術(shù)的發(fā)展,DSP被廣泛應(yīng)用于工業(yè)控制等領(lǐng)域,系統(tǒng)開(kāi)發(fā)的效率得到普遍的關(guān)注,傳統(tǒng)的MATLAB仿真與產(chǎn)品硬件實(shí)現(xiàn)相分隔的方式已經(jīng)無(wú)法滿(mǎn)足設(shè)計(jì)的需求。提出一種基于MATLAB的DSP實(shí)時(shí)控制軟件自動(dòng)生成方案,并通過(guò)Simulink模型自動(dòng)生成TI C2812 DSP的目標(biāo)代碼的應(yīng)用實(shí)例,驗(yàn)證了代碼自動(dòng)生成的可執(zhí)行性。
關(guān)鍵詞: CCSLink;ETTIC2000;自動(dòng)生成代碼
0 引言
傳統(tǒng)的DSP軟件設(shè)計(jì)開(kāi)發(fā)一般分為兩個(gè)階段:設(shè)計(jì)仿真和源代碼開(kāi)發(fā)實(shí)現(xiàn)[1]。設(shè)計(jì)仿真階段根據(jù)系統(tǒng)開(kāi)發(fā)的需要,以DSP算法研究與仿真驗(yàn)證為主,這階段可以利用MATLAB的Simulink模塊仿真來(lái)實(shí)現(xiàn);源代碼開(kāi)發(fā)通常采用匯編指令或C語(yǔ)言編寫(xiě)源代碼,由匯編器和連接器進(jìn)行鏈接后生成目標(biāo)可執(zhí)行代碼。源代碼開(kāi)發(fā)完成后,功能的實(shí)現(xiàn)主要在硬件電路板上來(lái)驗(yàn)證設(shè)計(jì)方案的正確性,對(duì)于軟件開(kāi)發(fā)者關(guān)于DSP數(shù)字芯片與硬件電路的原理有一定程度的要求,特別是各個(gè)寄存器的作用和存儲(chǔ)空間的特性和擴(kuò)展。這兩個(gè)部分通常是在不同階段相互獨(dú)立地完成,因此大大增加了系統(tǒng)開(kāi)發(fā)的時(shí)間,系統(tǒng)設(shè)計(jì)的實(shí)時(shí)性也不能得到保證。本文介紹了MATLAB中的MATLAB與CCS的接口和Embeded Target for TIC2000 DSP,提出了一種基于TI C2812的軟件設(shè)計(jì)思路,實(shí)現(xiàn)將設(shè)計(jì)仿真和源代碼開(kāi)發(fā)在同一平臺(tái)下開(kāi)展,從而有效地將開(kāi)發(fā)過(guò)程中的兩大階段有機(jī)地結(jié)合在一起,大大縮短了開(kāi)發(fā)周期,并通過(guò)應(yīng)用實(shí)例進(jìn)行驗(yàn)證。
1 ETTIC2000概述
Embedded Target for the TI TMS320C2000TM為T(mén)I C2000 DSP實(shí)時(shí)控制軟件的自動(dòng)生成的模型仿真、源代碼開(kāi)發(fā)、目標(biāo)代碼自動(dòng)生成、實(shí)時(shí)調(diào)試等各個(gè)環(huán)節(jié)都提供了技術(shù)方面的支持[2]。
1.1 ETTIC2000的功能和特點(diǎn)
ETTIC2000首先利用Real-Time Workshop從Simulink模型生成標(biāo)準(zhǔn)C語(yǔ)言程序代碼,然后通過(guò)MATLAB Link for CCS Development Tools調(diào)用CCS開(kāi)發(fā)工具,編譯鏈接Simulink所生成的程序,自動(dòng)生成目標(biāo)板(C2812 Simulator)的可執(zhí)行代碼(.out文件),最后把生成的可執(zhí)行代碼加載到目標(biāo)板中,并利用嵌入式對(duì)象對(duì)程序運(yùn)行進(jìn)行實(shí)時(shí)監(jiān)控和調(diào)試。
Embedded Target for the TI C2000 DSP、Simulink、Real-Time Workshop、CCS和TI目標(biāo)之間的關(guān)系如圖1所示。
1.2 C281×DSP模塊庫(kù)
ETTIC2000提供了多個(gè)Simulink模塊,以支持不同型號(hào)的DSP,在MATLAB窗口中執(zhí)行命令C2000lib,就會(huì)顯示對(duì)應(yīng)型號(hào)的DSP芯片模塊。其中,本文使用的C281×的各模塊如圖2所示。
2 MATLAB與TI CCS的接口
2.1 CCSLink的功能及特點(diǎn)
MATLAB Link for CCS Development Tools作為MATLAB的一個(gè)工具箱被集成在MATLAB中,可以支持CCS能夠識(shí)別的任何目標(biāo)板。利用此工具箱,將調(diào)用函數(shù)、讀寫(xiě)存儲(chǔ)器或寄存器中的數(shù)據(jù)、實(shí)時(shí)測(cè)試等工作統(tǒng)一在MATLAB平臺(tái)下進(jìn)行,把MATLAB和TI CCS及目標(biāo)DSP連接起來(lái)。其功能圖如圖3所示。
2.2 CCSLink的連接方式
利用CCSLink提供的MATLAB函數(shù)可以完成MATLAB與TI CCS、目標(biāo)板的存儲(chǔ)器或寄存器的數(shù)據(jù)及信息的交換。
CCS IDE的連接對(duì)象用于創(chuàng)建CCS與MATLAB的連接。從MATLAB的命令窗中可以運(yùn)行CCS IDE中的程序,向目標(biāo)板的存儲(chǔ)器或寄存器讀取數(shù)據(jù),檢查DSP的運(yùn)行狀態(tài),而且可以控制DSP上運(yùn)行程序的起止。
在MATLAB環(huán)境中可以創(chuàng)建一個(gè)嵌入式對(duì)象訪(fǎng)問(wèn)目標(biāo)板的存儲(chǔ)器或寄存器中的變量,即把C語(yǔ)言代碼中的變量作為MATLAB的一個(gè)變量處理。轉(zhuǎn)變數(shù)據(jù)類(lèi)型,創(chuàng)建函數(shù)聲明,改變變量值,讀取DSP中的數(shù)據(jù)與信息,所有這些操作都在MATLAB平臺(tái)下進(jìn)行。
在MATLAB中,對(duì)所有對(duì)象的操作方式是一樣的,只是對(duì)應(yīng)的屬性及屬性值不同而已。
3 應(yīng)用實(shí)例
32位的TMS320C281×系列芯片融合了DSP和微控制器的最佳特性,能夠完成64位的數(shù)據(jù)處理,專(zhuān)門(mén)的分支硬件減少了條件指令執(zhí)行的反應(yīng)時(shí)間,使該處理器能夠?qū)崿F(xiàn)更高精度的處理任務(wù)[3]。
在TMS320F281×DSP中,ADC模塊是一個(gè)12位帶流水線(xiàn)的模/數(shù)轉(zhuǎn)換器,由16個(gè)結(jié)果寄存器ADCResult存放ADC的轉(zhuǎn)換結(jié)果,轉(zhuǎn)換的計(jì)算過(guò)程為:
本系統(tǒng)搭建的是一個(gè)由AD模塊采集來(lái)的數(shù)字信號(hào)量來(lái)控制PWM輸出的占空比的模型。通過(guò)讀取AD轉(zhuǎn)換的數(shù)據(jù)與信息,同時(shí),利用示波器顯示的PWM輸出波形,分析由CCS實(shí)時(shí)控制的DSP代碼自動(dòng)生成的效果。
具體步驟如下:
?。?)在MATLAB中的Simulink環(huán)境搭建模型如圖4所示,選用ADC模塊中A0通道,由PWM1通道輸出結(jié)果,設(shè)置參數(shù)并進(jìn)行仿真。
?。?)配置CCSLink。
驗(yàn)證CCS是否在PC上安裝并配置好,在MATLAB命令窗中輸入命令:ccsboardinfo,則MATLAB命令窗中會(huì)返回圖5所示的板卡信息。
圖5證明CCS已經(jīng)安裝并配置好。CCSLink工作時(shí)CCS將自動(dòng)啟動(dòng)。
?。?)在Real-Time Workshop中設(shè)置編譯鏈接(Build)選項(xiàng)。
指定ti_c2000.tlc作為系統(tǒng)目標(biāo)文件(system target file)。設(shè)置好Build選項(xiàng)后,通過(guò)編譯鏈接選項(xiàng),Real-Time Workshop會(huì)自動(dòng)產(chǎn)生實(shí)時(shí)可執(zhí)行代碼,同時(shí),可通過(guò)設(shè)置將可執(zhí)行代碼自動(dòng)加載到指定的目標(biāo)板上并且開(kāi)始運(yùn)行。圖6為MATLAB命令窗口顯示。
(4)實(shí)時(shí)代碼調(diào)試。
在MATLAB環(huán)境下編輯m文件,并運(yùn)行以下代碼:
cc=ccsdsp(′boardnum′,0,′procnum′,0)
//創(chuàng)建一個(gè)連接對(duì)象
visible(cc,1)//CCS IDE窗口在桌面上可見(jiàn)
linkinfo=info(cc)//測(cè)試DSP目標(biāo)板的狀態(tài)信息
projfile=fullfile(matlabroot,′work′,...);
projpath=fileparts(projfile);
open(cc,projfile)//加載工程文件
build(cc)//編譯文件
load(cc,′.out′)//可執(zhí)行文件加載到DSP中
run(cc)//運(yùn)行
halt(cc)//停止
ddatv=read(cc,address(cc,′ddat′),′double′,2)
//訪(fǎng)問(wèn)嵌入在目標(biāo)DSP存儲(chǔ)器中的值
在MATLAB環(huán)境下完成了對(duì)工程文件的調(diào)入、編譯,生成可執(zhí)行文件并將其加載到DSP目標(biāo)板。切換到已經(jīng)打開(kāi)的CCS界面,可以看到在MATLAB環(huán)境下已經(jīng)完成了對(duì)CCS的各種操作。
?。?)運(yùn)行結(jié)果。
當(dāng)由變位器給定模擬電壓輸入為1 V時(shí),加載自動(dòng)生成代碼到DSP后,讀取DSP寄存器的值如圖7所示。
自動(dòng)生成代碼F2812.ADC=(AdcRegs.ADCRESULT0)>>4;之所以右移4位,是因?yàn)樵诩?jí)聯(lián)序列發(fā)生器模式中,讀取時(shí),ADCRESULTn寄存器為左對(duì)齊,應(yīng)向右平移4位后讀取[4]。
結(jié)果寄存器存放的數(shù)字量與計(jì)算得出的理論值 1 355非常接近,如圖8所示,驗(yàn)證目標(biāo)板AD轉(zhuǎn)換有效。
程序的目標(biāo)板輸出波形比較如圖9所示。
圖9證明了由MATLAB模型生成的代碼是有效的,運(yùn)行結(jié)果也與理論輸出占空比近似,進(jìn)而證明這種設(shè)計(jì)方法快捷、高效。
4 結(jié)論
應(yīng)用MATLAB自動(dòng)生成DSP代碼的方案,有效地克服了傳統(tǒng)DSP代碼設(shè)計(jì)方法效率低、難度大等缺點(diǎn),快速生成了標(biāo)準(zhǔn)化的C語(yǔ)言代碼和DSP可執(zhí)行文件,極大地縮短了代碼的開(kāi)發(fā)時(shí)間。實(shí)驗(yàn)結(jié)果表明,自動(dòng)生成的代碼運(yùn)行效果良好,可以應(yīng)用于項(xiàng)目的設(shè)計(jì)與實(shí)現(xiàn),體現(xiàn)了方案的實(shí)用性與可行性。
參考文獻(xiàn)
[1] 李利.DSP原理及應(yīng)用[M].北京:中國(guó)水利水電出版社,2004.
[2] 李真芳,蘇濤,黃小宇.DSP程序開(kāi)發(fā):MATLAB調(diào)試及直接目標(biāo)代碼生成[M].西安:西安電子科技大學(xué)出版社,2003.
[3] 蘇奎峰,呂強(qiáng),常天慶,等.TMS320281×DSP原理及C程序開(kāi)發(fā)[M].北京:北京航空航天大學(xué)出版社,2008.
[4] 張雄偉,陳亮,徐光輝.DSP芯片的原理與開(kāi)發(fā)應(yīng)用[M].北京:電子工業(yè)出版社,2003.