国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

DSP集成開發環境中的混合編程及FFT算法的實現

發布時間:2010-9-3 20:14    發布者:conniede
關鍵詞: CCS , dsp , FFT算法
1 引言

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

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

TMS320 C5000系列的軟件設計通常有三種方法:

(1 ) 用C語言開發;

(2) 用匯編語言開發;

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

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

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

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

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

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

(4) 將C語言編譯生成相應的匯編代碼,手工修改和優化C編譯器生成的匯編代碼。采用這種方法可以控制C編譯器,從而產生具有交叉列表的匯編程序,而設計者可以對其中的匯編語句進行修改,然后對匯編程序進行編譯,產生目標文件。

后3種方法由于在C中直接嵌入了匯編語言,易造成程序混亂,破壞C環境,甚至導致程序崩潰,而開發者又很難對不良結果進行預期和有效控制。而如果采用第一種方法,只要遵循有關C語言函數調用規則和寄存器規則,就能預見到程序運行的結果,保證程序正確。

2.2 編程注意事項

C編譯器對函數調用制定了一組嚴格的規則。除了特殊的運行時間支持庫函數外,任何調用函數和被C函數調用的函數都必須遵守這些規則。結合作者在編程中的實際情況和切身體會,提出在編程時要注意以下幾點:

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

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

(3) 從匯編函數中調用C函數時,第一個參數(最左邊的)必須放入累加器A中,剩下的參數按照自右向左的順序壓入堆棧。
(4) 如果函數有返回值,則返回值存放在累加器A中。

(5) 調用C函數時,注意C函數只保護了幾個特定的寄存器,對于其他寄存器C函數是可以自由使用的。

(6) 長整數和浮點數存儲在存儲器中的方法是最高有效字在低位地址。

(7) 匯編語言模塊不能改變由C模塊產生的.cinit段,如果改變其中的內容將會引起不可預測的后果。

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

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

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

3 編程實例

3.1 FFT算法簡介


FFT是一種高效實現離散傅立葉變換的算法,在數字信號處理系統中,FFT作為一個非常重要的工具,甚至成為DSP運算能力的一個考核因素。如何將FFT算法很好的應用到DSP系統中對于DSP系統的設計具有重要的意義。

一個優化的實數FFT算法是一個組合以后的算法。該算法主要分為以下幾步,首先將輸入的2N點實序列進行位倒序組合成一個N點的復序列,之后對復序列進行N 點的FFT運算,最后再由N點的復數輸出拆散成2N點的復數序列,這2N點的復數序列與原始的2N點的實數輸入序列的DFT輸出一致。(詳細的算法介紹可參考相關信號處理書籍)。

3.2 C主程序

#include "stdlib.h"
extern void fft(); // FFT運算函數
int DisData[256]; // 輸出結果
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
};
// 輸入數據
int main()
{
rfft();
// 調用FFT函數
while(1) ;
}

本程序中FFT運算所用到的數據是通過matlab仿真產生的,然后通過全局數組進行傳值,這種方式的優點是數據的通用性強,方便對數據進行其他相關處理; 也可通過其他C程序產生然后保存到一個文本文件中,再由匯編程序將該數據文件拷到數據存儲器中參與FFT運算。這種方式的優點是程序的可讀性強,缺點是當輸入數據修改后,必須進行重新編譯、匯編和鏈接。

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

(5) 調用C函數時,注意C函數只保護了幾個特定的寄存器,對于其他寄存器C函數是可以自由使用的。

(6) 長整數和浮點數存儲在存儲器中的方法是最高有效字在低位地址。

(7) 匯編語言模塊不能改變由C模塊產生的.cinit段,如果改變其中的內容將會引起不可預測的后果。

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

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

(10) 在默認的情況下,編譯器總是認為CPL為1。因此,若在匯編程序中將CPL清0,則在返回C環境時,必須將其恢復為1;在默認的情況下,編譯器總是認為 OVM為0。因此,若在匯編程序中將OVM置為1,則返回C環境時,必須將其恢復為0;ARP在函數進入和返回時,必須為0,即當前輔助寄存器為AR0。函數執行時可以為其他值。
  
3 編程實例

3.1 FFT算法簡介


FFT是一種高效實現離散傅立葉變換的算法,在數字信號處理系統中,FFT作為一個非常重要的工具,甚至成為DSP運算能力的一個考核因素。如何將FFT算法很好的應用到DSP系統中對于DSP系統的設計具有重要的意義。

一個優化的實數FFT算法是一個組合以后的算法。該算法主要分為以下幾步,首先將輸入的2N點實序列進行位倒序組合成一個N點的復序列,之后對復序列進行N 點的FFT運算,最后再由N點的復數輸出拆散成2N點的復數序列,這2N點的復數序列與原始的2N點的實數輸入序列的DFT輸出一致。(詳細的算法介紹可參考相關信號處理書籍)。

3.2 C主程序

#include "stdlib.h"
extern void fft(); // FFT運算函數
int DisData[256]; // 輸出結果
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
};
// 輸入數據
int main()
{
rfft();
// 調用FFT函數
while(1) ;
}

本程序中FFT運算所用到的數據是通過matlab仿真產生的,然后通過全局數組進行傳值,這種方式的優點是數據的通用性強,方便對數據進行其他相關處理; 也可通過其他C程序產生然后保存到一個文本文件中,再由匯編程序將該數據文件拷到數據存儲器中參與FFT運算。這種方式的優點是程序的可讀性強,缺點是當輸入數據修改后,必須進行重新編譯、匯編和鏈接。

將輸入信號通過Matlab仿真進行驗證。輸入信號的時域波形見圖4。   
                              


                                  圖4 輸入信號的時域波形

經FFT運算后得到的信號幅值譜圖見圖5。
                           
                                    
                                          圖5 信號幅值譜圖

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

4 結束語

本文通過實例,說明了TMS320 C5000系列DSP芯片的混合編程方法,利用混合編程達到了提高程序的可讀性與編程效率的目的,是開發DSP軟件的常用方法。本文介紹的混合編程方法不但適用于TI C5000系列DSP芯片,同樣也適用于TI其他系列的DSP芯片,如C2000系列、C6000系列,甚至對其他芯片,如51系列單片機等,實現混合編程也有很大參考價值。
本文地址:http://www.qingdxww.cn/thread-25633-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • 5分鐘詳解定時器/計數器E和波形擴展!
  • 無線充電基礎知識及應用培訓教程3
  • 無線充電基礎知識及應用培訓教程2
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情中文字幕一区二区 | 国产精品午夜在线播放a | 日韩精品成人在线 | 女人体1963午夜免费视频 | 国产精品亚洲午夜一区二区三区 | 国产成人久久精品激情91 | 国产精品热久久 | 亚洲一区二区三区日本久久九 | 国产三级在线看 | 亚洲va| 欧美一区色 | 日韩精品高清在线 | 欧美色视频在线观看 | 欧美一区二区三区在线视频 | 成人国产第一区在线观看 | 97精品国产自在现线免费观看 | 亚洲激情欧美 | 黄在线观看免费 | 亚洲欧美日韩另类在线专区 | 日本不卡视频一区二区三区 | 欧美v亚洲 | 无限看片动漫的视频在线观看免费 | 国产一级做a爰大片免费久久 | 国产成人精品高清在线观看99 | 成人国内精品久久久久影院 | 日韩精品欧美 | 插插操操 | 日本一区二区三区四区不卡 | 久热精品视频在线播放 | 草逼视频网站 | 亚欧在线视频 | 国产精品久久毛片 | 欧美一区永久视频免费观看 | 精品中文字幕一区二区三区四区 | 亚洲国产成人九九综合 | 中文字幕日本在线视频二区 | 91精品国产色综合久久不 | 久久香蕉精品 | 精品伊人久久久99热这里只 | 九色在线观看视频 | 色偷偷成人 |