當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]CCS(Code Composer Studio)是TI公司的DSP集成開發(fā)環(huán)境。它提供了環(huán)境配置、源文件編輯、程序調(diào)試、跟蹤和分析等工具,幫助用戶在一個(gè)軟件環(huán)境下完成編輯、編譯鏈接、調(diào)試和數(shù)據(jù)分析等工作。

       1  引言

       CCS(Code Composer Studio)是TI公司的DSP集成開發(fā)環(huán)境。它提供了環(huán)境配置、源文件編輯、程序調(diào)試、跟蹤和分析等工具,幫助用戶在一個(gè)軟件環(huán)境下完成編輯、編譯鏈接、調(diào)試和數(shù)據(jù)分析等工作。與TI提供的早期軟件開發(fā)工具相比,利用CCS能夠加快軟件開發(fā)進(jìn)程,提高工作效率。CCS一般工作在兩種模式下:軟件仿真器和與硬件開發(fā)板相結(jié)合的在線編程。前者可以脫離DSP芯片,在PC機(jī)上模擬DSP指令集與工作機(jī)制,主要用于前期算法實(shí)現(xiàn)和調(diào)試。后者實(shí)時(shí)運(yùn)行在DSP芯片上,可以在線編制和調(diào)試應(yīng)用程序。 

       2  C語言和匯編語言的混合編程

       TMS320 C5000系列的軟件設(shè)計(jì)通常有三種方法:

       (1  
) 用C語言開發(fā);

       (2) 用匯編語言開發(fā);

       (3) C和匯編的混合開發(fā)。

       其中用C語言開發(fā)具有兼容性和可移植的優(yōu)點(diǎn),有利于縮短開發(fā)周期和減少開發(fā)難度,但是在運(yùn)算量較大的情況下,C代碼的效率還是無法和手工編寫的匯編代碼的效率相比,比如FFT運(yùn)算,用匯編語言開發(fā)的效率高,程序執(zhí)行速度快,而且可以合理利用芯片的硬件資源,但是開發(fā)難度較大,開發(fā)周期長(zhǎng),而且可讀性和可移植性差。C和匯編的混合編程則可以充分利用前兩者的優(yōu)點(diǎn),以達(dá)到最佳利用DSP資源的目的。但是,采用C和匯編語言混合編程必須遵循相關(guān)函數(shù)調(diào)用規(guī)則和寄存器調(diào)用規(guī)則,否則會(huì)給程序的開發(fā)帶來意想不到的問題。

       2.1  C語言和匯編語言混合編程的四種方法

       (1) 獨(dú)立編寫匯編程序和C程序,分開編譯或匯編成各自的目標(biāo)代碼模塊,再用鏈接器將二者鏈接起來。這種方法比較靈活,但是設(shè)計(jì)者必須自己維護(hù)各匯編模塊的入口和出口代碼,自己計(jì)算傳遞的參數(shù)在堆棧中的偏移量,工作量較大,但是能做到對(duì)程序的絕對(duì)控制。

       (2) 在C程序中使用匯編程序中定義的變量和常數(shù)。

       (3) 在C程序中內(nèi)嵌匯編語句。這種方法可以實(shí)現(xiàn)C語言無法實(shí)現(xiàn)的一些硬件控制功能,如修改中斷控制寄存器。

       (4) 將C語言編譯生成相應(yīng)的匯編代碼,手工修改和優(yōu)化C編譯器生成的匯編代碼。采用這種方法可以控制C編譯器,從而產(chǎn)生具有交叉列表的匯編程序,而設(shè)計(jì)者可以對(duì)其中的匯編語句進(jìn)行修改,然后對(duì)匯編程序進(jìn)行編譯,產(chǎn)生目標(biāo)文件。

       后3種方法由于在C中直接嵌入了匯編語言,易造成程序混亂,破壞C環(huán)境,甚至導(dǎo)致程序崩潰,而開發(fā)者又很難對(duì)不良結(jié)果進(jìn)行預(yù)期和有效控制。而如果采用第一種方法,只要遵循有關(guān)C語言函數(shù)調(diào)用規(guī)則和寄存器規(guī)則,就能預(yù)見到程序運(yùn)行的結(jié)果,保證程序正確。

       2.2  編程注意事項(xiàng)

       C編譯器對(duì)函數(shù)調(diào)用制定了一組嚴(yán)格的規(guī)則。除了特殊的運(yùn)行時(shí)間支持庫函數(shù)外,任何調(diào)用函數(shù)和被C函數(shù)調(diào)用的函數(shù)都必須遵守這些規(guī)則。結(jié)合作者在編程中的實(shí)際情況和切身體會(huì),提出在編程時(shí)要注意以下幾點(diǎn):

       (1) 必須保護(hù)任何被函數(shù)修正的專用寄存器。這些專用寄存器包括:AR1,AR6,AR72和堆棧指針(SP)。其中,如果對(duì)SP正常使用,則不必明顯的保存。換句話說,只要匯編函數(shù)在調(diào)用返回時(shí)彈出壓入的對(duì)象,實(shí)際上就已經(jīng)保護(hù)了SP。

       (2) 中斷函數(shù)必須保存其使用的所有寄存器。

       (3) 從匯編函數(shù)中調(diào)用C函數(shù)時(shí),第一個(gè)參數(shù)(最左邊的)必須放入累加器A中,剩下的參數(shù)按照自右向左的順序壓入堆棧。  


       (4) 如果函數(shù)有返回值,則返回值存放在累加器A中。

       (5) 調(diào)用C函數(shù)時(shí),注意C函數(shù)只保護(hù)了幾個(gè)特定的寄存器,對(duì)于其他寄存器C函數(shù)是可以自由使用的。

       (6) 長(zhǎng)整數(shù)和浮點(diǎn)數(shù)存儲(chǔ)在存儲(chǔ)器中的方法是最高有效字在低位地址。

       (7) 匯編語言模塊不能改變由C模塊產(chǎn)生的.cinit段,如果改變其中的內(nèi)容將會(huì)引起不可預(yù)測(cè)的后果。

       (8) 在匯編語言模塊中,對(duì)可以從C中訪問的變量和函數(shù)名需加上前綴“_”。對(duì)于僅用于匯編語言模塊中的標(biāo)識(shí)符,不用加下劃線。而且如果僅在匯編中使用,只要不加下劃線,即使與C程序中定義的對(duì)象名相同,也不會(huì)造成沖突。

   
       (9) 任何在匯編語言模塊中聲明的將要從C訪問或調(diào)用的對(duì)象或函數(shù),都必須在匯編語言中用.global偽指令聲明為全局變量。同樣,任何在C程序中定義而將在匯編中訪問或調(diào)用的對(duì)象或函數(shù),在匯編中也必須用.global聲明。

       (10) 在默認(rèn)的情況下,編譯器總是認(rèn)為CPL為1。因此,若在匯編程序中將CPL清0,則在返回C環(huán)境時(shí),必須將其恢復(fù)為1;在默認(rèn)的情況下,編譯器總是認(rèn)為 OVM為0。因此,若在匯編程序中將OVM置為1,則返回C環(huán)境時(shí),必須將其恢復(fù)為0;ARP在函數(shù)進(jìn)入和返回時(shí),必須為0,即當(dāng)前輔助寄存器為AR0。函數(shù)執(zhí)行時(shí)可以為其他值。 

       3  編程實(shí)例

       3.1  FFT算法簡(jiǎn)介

       FFT是一種高效實(shí)現(xiàn)離散傅立葉變換的算法,在數(shù)字信號(hào)處理系統(tǒng)中,F(xiàn)FT作為一個(gè)非常重要的工具,甚至成為DSP運(yùn)算能力的一個(gè)考核因素。如何將FFT算法很好的應(yīng)用到DSP系統(tǒng)中對(duì)于DSP系統(tǒng)的設(shè)計(jì)具有重要的意義。

       一個(gè)優(yōu)化的實(shí)數(shù)FFT算法是一個(gè)組合以后的算法。該算法主要分為以下幾步,首先將輸入的2N點(diǎn)實(shí)序列進(jìn)行位倒序組合成一個(gè)N點(diǎn)的復(fù)序列,之后對(duì)復(fù)序列進(jìn)行N 點(diǎn)的FFT運(yùn)算,最后再由N點(diǎn)的復(fù)數(shù)輸出拆散成2N點(diǎn)的復(fù)數(shù)序列,這2N點(diǎn)的復(fù)數(shù)序列與原始的2N點(diǎn)的實(shí)數(shù)輸入序列的DFT輸出一致。(詳細(xì)的算法介紹可參考相關(guān)信號(hào)處理書籍)。

       3.2  C主程序

#include "stdlib.h"
extern void fft();  // FFT運(yùn)算函數(shù)
int DisData[256];  // 輸出結(jié)果
int SimData[256]={
0,6270,11585,15137, 16384, 15137, 11585,6270,
0, -6270, -11585,-15137,-16384,-15137,-11585,-6270,
……
0,6270,11585,15137,16384,15137,11585,6270,
0,-6270,-11585,-15137,-16384,-15137,-11585,-6270
};  
// 輸入數(shù)據(jù)
int  main()
{
rfft();  
// 調(diào)用FFT函數(shù)
while(1)  ;
}

       本程序中FFT運(yùn)算所用到的數(shù)據(jù)是通過matlab仿真產(chǎn)生的,然后通過全局?jǐn)?shù)組進(jìn)行傳值,這種方式的優(yōu)點(diǎn)是數(shù)據(jù)的通用性強(qiáng),方便對(duì)數(shù)據(jù)進(jìn)行其他相關(guān)處理; 也可通過其他C程序產(chǎn)生然后保存到一個(gè)文本文件中,再由匯編程序?qū)⒃摂?shù)據(jù)文件拷到數(shù)據(jù)存儲(chǔ)器中參與FFT運(yùn)算。這種方式的優(yōu)點(diǎn)是程序的可讀性強(qiáng),缺點(diǎn)是當(dāng)輸入數(shù)據(jù)修改后,必須進(jìn)行重新編譯、匯編和鏈接。

       3.3  匯編程序

  .mmregs
  .global  sav_sin,sav_idx,sav_grp,_rFFT,_DisData
  .data
DATA .space 1024   ;數(shù)據(jù)緩沖區(qū)
INPUT .set     0x9000 ;輸入數(shù)據(jù)起始地址
N  .set 128  ;復(fù)數(shù)點(diǎn)數(shù)
LOGN .set 7     ;碟形運(yùn)算級(jí)數(shù)
sav_grp .usect "tempv",3 ;定義組變量值
sav_sin .set sav_grp+1 ;定義旋轉(zhuǎn)因子表
sav_idx .set sav_grp+2
  .copy  "twiddle1.inc" ;正弦表系數(shù)
  .copy  "twiddle2.inc" ;余弦表系數(shù)
  .text
_rfft:
  SSBX TC
  SSBX C
  RSBX OVA
  RSBX OVB
  LD  #0,DP
  RSBX CPL
  SSBX XF
  SSBX SX
M
  LD  #00,ASM  
  SSBX FRCT
  ……  

       本程序主要是對(duì)輸入的256點(diǎn)實(shí)數(shù)作FFT運(yùn)算,通過修改N和LOGN可以完成16-1024點(diǎn)的FFT運(yùn)算。在編寫匯編程序的時(shí)候要注意以下幾個(gè)方面:

       (1) 由于采用循環(huán)尋址來對(duì)旋轉(zhuǎn)因子表尋址,因此每張表的開始地址必須是10個(gè)LSB位為0的地址。如:正弦表系數(shù)可以放在0400h開始的地址,余弦表系數(shù)可以放在0800h開始的地址;

       (2) 在匯編程序的入口處要注意設(shè)置好匯編程序所需要的運(yùn)行環(huán)境(見前述程序),如果此處按照編譯器默認(rèn)的環(huán)境將得不到正確的結(jié)果。詳細(xì)的匯編程序可參考TI公司提供的例程。

       3.4  運(yùn)算結(jié)果

       輸入正弦信號(hào)的頻率為f=16Hz,幅值為1(單位),采樣長(zhǎng)度為2N=256點(diǎn),采樣頻率為fs=256Hz。CCS提供了很多方法將程序產(chǎn)生的數(shù)據(jù)畫圖顯示,包括時(shí)域/頻域波形顯示等??赏ㄟ^查看相關(guān)圖像來檢驗(yàn)FFT運(yùn)算的正確性。由鏈接命令文件可以知道輸入信號(hào)存儲(chǔ)在程序存儲(chǔ)區(qū)0900h開始的256 個(gè)單元中,經(jīng)程序計(jì)算得到的信號(hào)幅值譜存放在數(shù)據(jù)存儲(chǔ)區(qū)0200h開始的256個(gè)單元中。在CCS中選擇View——>Graph——> Time/Frequency命令,相關(guān)設(shè)置可參考圖1:

      

 FFT運(yùn)算結(jié)果查看選項(xiàng)設(shè)置參考

                         圖1  FFT運(yùn)算結(jié)果查看選項(xiàng)設(shè)置參考

       輸入信號(hào)的時(shí)域波形見圖2。

輸入信號(hào)的時(shí)域波形

 圖2     輸入信號(hào)的時(shí)域波形

       經(jīng)FFT運(yùn)算后得到的信號(hào)幅值譜圖見圖3。

 

信號(hào)幅值譜圖

  圖3     信號(hào)幅值譜圖

      將輸入信號(hào)通過Matlab仿真進(jìn)行驗(yàn)證。輸入信號(hào)的時(shí)域波形見圖4。

 輸入信號(hào)的時(shí)域波形

 圖4     輸入信號(hào)的時(shí)域波形

       經(jīng)
FFT運(yùn)算后得到的信號(hào)幅值譜圖見圖5。

 

 信號(hào)幅值譜圖

  圖5     信號(hào)幅值譜圖



       通過比較
CCS中的輸出圖形和Matlab中的仿真輸出圖形, 可以看到二者是一致的,說明本程序的結(jié)果是正確的。

       4  結(jié)束語

       本文通過實(shí)例,說明了TMS320 C5000系列DSP芯片的
混合編程方法,利用混合編程達(dá)到了提高程序的可讀性與編程效率的目的,是開發(fā)DSP軟件的常用方法。本文介紹的混合編程方法不但適用于TI C5000系列DSP芯片,同樣也適用于TI其他系列的DSP芯片,如C2000系列、C6000系列,甚至對(duì)其他芯片,如51系列單片機(jī)等,實(shí)現(xiàn)混合編程也有很大參考價(jià)值。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉