dsp課程設(shè)計--基于tms320vc5402語音采集壓縮存儲與回放_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  基于TMS320VC5402語音采集壓縮存儲與回放</p><p>  摘 要:本課程設(shè)計的主要目的是熟悉CCS集成開發(fā)環(huán)境。然后在CCS環(huán)境下實現(xiàn)基于TMS320VC5402芯片的語音采集壓縮與存儲和回放。本課程設(shè)計首先采用A/D轉(zhuǎn)換器從MIC輸入口實行語音信號采集,進(jìn)行壓縮后存儲到DSP的片內(nèi)和片外RAM存儲器中,等到存儲器存滿之后,使用DSP實行解壓縮,并從SPEAKER輸出口進(jìn)行回放

2、輸出,并且用指示燈對語音存儲和回放過程進(jìn)行指示。</p><p>  關(guān)鍵詞:CCS;DSP;采集;壓縮;存儲與回放;</p><p>  Abstract: The main purpose of this course design is familiar with the CCS IDE. Then in the CCS environment finish TMS320VC5402

3、 chip-based compression and storage of voice capture and playback. The course is designed first of all with A / D converter implementation from the MIC input speech signal acquisition, after compression to the DSP on-chi

4、p memory and off-chip RAM memory, after the memory is full, use the DSP to implement decompression, and from the SPEAKER output for playback output, and w</p><p>  Keyword:CCS; DSP; acquisition; compressi

5、on; storage and playback</p><p><b>  1 引言</b></p><p>  隨著信息技術(shù)革命的深入和計算機(jī)技術(shù)的飛速發(fā)展,數(shù)字信號處理技術(shù)已經(jīng)逐漸發(fā)展成為一門關(guān)鍵的技術(shù)學(xué)科。而DSP芯片的出現(xiàn)則為數(shù)字信號處理算法的實現(xiàn)提供了可能。這一方面極大地促進(jìn)了數(shù)字信號處理技術(shù)的進(jìn)一步發(fā)展;另一方面,它也使數(shù)字信號處理的應(yīng)用領(lǐng)域得到了極大

6、的拓展。在國外DSP芯片已經(jīng)被廣泛地應(yīng)用于當(dāng)今技術(shù)革命的各個領(lǐng)域;在我國,DSP技術(shù)也正以極快的速度被應(yīng)用到科技和國民經(jīng)濟(jì)的各個領(lǐng)域。目前,在微電子技術(shù)發(fā)展的帶動下,DSP芯片的發(fā)展日新月異,DSP的功能日益強(qiáng)大,性能價格比不斷上升,開發(fā)手段不斷改進(jìn)。DSP芯片已經(jīng)完全走下了“貴族”的圣壇。DSP芯片已經(jīng)在通信與電子系統(tǒng)、信號處理系統(tǒng)、自動控制、雷達(dá)、軍事、航空航天、醫(yī)療、家用電器、電力系統(tǒng)等許多領(lǐng)域中得到了廣泛的應(yīng)用,而且新的應(yīng)用領(lǐng)域

7、在不斷地被發(fā)掘。</p><p>  1.1 課程設(shè)計目的</p><p>  在CCS環(huán)境下基于TMS320VC5402芯片的語音采集壓縮存儲與回放。通過這次課程設(shè)計,加深對CCS集成開發(fā)環(huán)境的以及DSP試驗系統(tǒng)箱的使用。鍛煉邏輯思維能力、動手能力以及獨立解決問題的能力,對以后更深入地學(xué)習(xí)和應(yīng)用數(shù)字信號處理及相關(guān)知識作準(zhǔn)備。</p><p>  1.2 課程設(shè)計的

8、要求</p><p> ?。?)了解DSP開發(fā)工具及其安裝過程</p><p> ?。?)熟悉DSP開發(fā)軟件CCS使用</p><p> ?。?)熟悉工程文件的建立方法、匯編程序開發(fā)調(diào)試過程</p><p> ?。?)熟悉常用C5402系列指令的用法</p><p>  (5)在老師的指導(dǎo)下,獨立完成課程設(shè)計的全部內(nèi)容

9、,并按要求編寫課程設(shè)計論文,能正確闡述和分析設(shè)計和實驗結(jié)果。</p><p><b>  1.3 設(shè)計平臺</b></p><p>  CCS是TI公司推出的用于開發(fā)DSP芯片的集成開發(fā)環(huán)境,它采用Windows風(fēng)格界面,集編輯、編譯、鏈接、軟件仿真、硬件調(diào)試以及實時跟蹤等功能于一體,極大地方便了DSP芯片的開發(fā)與設(shè)計,是目前使用最為廣泛的DSP開發(fā)軟件之一。<

10、/p><p><b>  2 系統(tǒng)硬件簡述</b></p><p>  2.1 TMS320VC5402芯片的基本原理</p><p>  TMS320VC5402 數(shù)字信號處理器是TI公司為實現(xiàn)低功耗,高速實時信號處理而專門設(shè)計的16位定點數(shù)字信號處理器,采用改進(jìn)的哈佛結(jié)構(gòu),具有高度的操作靈活性和運行速度,適用于遠(yuǎn)程通信等實時嵌入式應(yīng)用的需要。廣

11、泛應(yīng)用于電子測試、電子設(shè)計、模擬仿真、通信工程中。</p><p>  TMS320VC5402具有的主要優(yōu)點如下:</p><p>  (1) 圍繞一組程序總線、三組數(shù)據(jù)總線和四組地址總線而建立的改進(jìn)哈佛結(jié)構(gòu),提高了系統(tǒng)的多功能性和操作的靈活性。</p><p>  (2) 具有高度的并行性和專用硬件邏輯的CPU設(shè)計,提高了芯片的性能。</p>&l

12、t;p>  (3) 具有完善的尋址方式和高度專業(yè)化指令系統(tǒng),更適用于快速算法的實現(xiàn)和高級語言編程的優(yōu)化。</p><p>  (4) 模塊化結(jié)構(gòu)設(shè)計,使派生器件得到了更快的發(fā)展。</p><p>  (5) 采用先進(jìn)的IC制造工藝,降低了芯片的功耗,提高了芯片的性能。</p><p>  (6) 采用先進(jìn)的靜態(tài)設(shè)計技術(shù),進(jìn)一步降低了功耗,使芯片具有更強(qiáng)的應(yīng)用能

13、力。</p><p>  TMS320VC5402主要有中央處理器CPU,特殊功能寄存器,數(shù)據(jù)存儲器RAM,程序存儲器ROM,I/O接口功能,串行口,主機(jī)通信接口HPI,定時器,中斷系統(tǒng)等10部分組成。</p><p><b>  各部分功能如下:</b></p><p>  (1) 中央處理器(CPU)</p><p>

14、;  它是DSP芯片的核心,它有以下特點:</p><p>  (a) 采用多總線結(jié)構(gòu),通過一組程序總線、三組數(shù)據(jù)總線和四組地址總線來實現(xiàn)。</p><p>  (b) 40位算術(shù)邏輯運算單元ALU,包括一個40位的桶形移位寄存器和兩個獨立的40位累加器。</p><p>  (c) 17×17位并行乘法器,與40位專用加法器相連,可用于進(jìn)行非流水線的單周

15、期乘法—累加運算。</p><p>  (d) 比較、選擇、存儲單元,可用于Viterbi譯碼器的加法-比較-選擇運算。</p><p>  (e) 指數(shù)編碼器,是一個支持單周期指令EXP的專用硬件??梢栽谝粋€周期內(nèi)計算40位累加器數(shù)值的指數(shù)。</p><p>  (f) 配有兩個地址生成器,包括8個輔助寄存器和2個輔助寄存器運算單元。</p><

16、;p>  (2)數(shù)據(jù)存儲器RAM</p><p>  TMS320VC5402有兩種片內(nèi)數(shù)據(jù)存儲器:</p><p>  (a) 雙尋址RAM:在一個指令周期內(nèi),可對其進(jìn)行兩次存取操作,一次讀出和一次寫入;</p><p>  (b) 雙尋址RAM:在一個指令周期內(nèi),只能進(jìn)行一次存取操作。</p><p>  (3) 程序存儲器ROM&

17、lt;/p><p>  TMS320VC5402的程序存儲器可由ROM和RAM配置而成,程序空間可以定義在ROM上,也可以定義在ROM上。當(dāng)需要高速運行程序時,可以將片外ROM中的程序調(diào)入到片內(nèi)RAM中,以提高程序運行速度。降低對外部ROM的要求,增強(qiáng)系統(tǒng)整體抗干擾性能。</p><p><b>  (4) I/O口</b></p><p>  T

18、MS320VC5402芯片只有兩個通用I/O引腳BIO和XF,BIO主要用來監(jiān)測外部設(shè)備工作狀態(tài),而XF用來發(fā)信號給外部設(shè)備。 </p><p>  另外,芯片還配有主機(jī)接口HPI,同步串行口和64K字的I/O空間,HPI和串行口通過控制,用做通用I/O口使用。而64K字I/O空間可通過外加緩沖器或鎖存電路,配合外部I/O讀寫控制時序構(gòu)成片外外設(shè)的控制電路。</p><p><b&g

19、t;  (5) 定時器</b></p><p>  定時器是一個軟件可編程計數(shù)器,用來產(chǎn)生定時中斷。定時器主要由定時寄存器TM,定時周期寄存器PRD,定時控制寄存器TCR及相應(yīng)的邏輯控制電路組成。其中寄存器TIM、PRD和TCR都是存儲映象寄存器,它們在數(shù)據(jù)存儲器中的地址分別為0024H、0025H和0026H。TIM是一個減1寄存器。PRD用來存放定時時間常數(shù)。TCR中包含定時器的控制位和狀態(tài)位。&

20、lt;/p><p><b>  (6) 中斷系統(tǒng)</b></p><p>  TMS320VC5402的中斷系統(tǒng)具有硬件中斷和軟件中斷。 </p><p>  硬件中斷:由外圍設(shè)備引起的中斷分為片外外設(shè)所引起的中斷和片內(nèi)外設(shè)所引起的中斷。</p><p>  軟件中斷:有程序指令I(lǐng)NTR、TRAP和RESET所引起的中斷。中

21、斷管理優(yōu)先級為11—16個固定級,有4種工作方式。</p><p>  (7) 主機(jī)接口HPI</p><p>  HPI是一個與主機(jī)通信的并行接口,主要用于DSP與其他總線或CPU進(jìn)行通信,信息可通過TMS320VC5402的片內(nèi)存儲器與主機(jī)進(jìn)行數(shù)據(jù)交換。不同型號的器件配置不同的HPI口,可分為8位標(biāo)準(zhǔn)HPI口、8位增強(qiáng)型HPI接口和16位增強(qiáng)型HPI接口。</p><

22、;p><b>  (8) 指令系統(tǒng)</b></p><p>  支持單指令重復(fù)和塊指令重復(fù);支持存儲器塊傳送指令;支持32位長操作數(shù)指令;具有支持2操作數(shù)或3操作數(shù)的讀指令;具有能并行存儲和并行加載的算術(shù)指令;支持條件存儲指令及中斷快速返回指令。</p><p><b>  (9) 片外圍電路</b></p><p>

23、;  具有軟件可編程等待狀態(tài)發(fā)生器;設(shè)有可編程分區(qū)轉(zhuǎn)換邏輯電路;帶有內(nèi)部震蕩器或外部時鐘源的片內(nèi)鎖相環(huán)發(fā)生器;支持全雙工操作的串行口,可進(jìn)行8位或16位串行通信。</p><p>  2.2 DSP芯片的基本結(jié)構(gòu)</p><p>  DSP的主要基本結(jié)構(gòu)包括:</p><p> ?。?)哈佛結(jié)構(gòu)。哈佛結(jié)構(gòu)的主要特點是將程序和數(shù)據(jù)存儲在不同的存儲空間中,即程序存儲器和

24、數(shù)據(jù)存儲器是兩個相互獨立的存儲器,每個存儲器獨立編址,獨立訪問。與兩個存儲器相對應(yīng)的是系統(tǒng)中設(shè)置了程序總線和數(shù)據(jù)總線,從而使數(shù)據(jù)的吞吐率提高了一倍。由于程序和數(shù)據(jù)存儲在兩個分開的空間中,因此取指和執(zhí)行能完全重疊。</p><p> ?。?)流水線操作。流水線與哈佛結(jié)構(gòu)相關(guān)。DSP廣泛采用流水線,以減少指令執(zhí)行的時間,從而增強(qiáng)了處理器的處理能力。處理器可以并行處理2~4條指令,每條指令處于流水線的不同階段。TMS

25、320VC5402有6級流水線。本次軟件設(shè)計就充分利用DSP這一優(yōu)點。在設(shè)計FIR濾波器時,采用repeat指令重復(fù)執(zhí)行macd指令,可以大大提高數(shù)據(jù)的處理速度。macd指令執(zhí)行時需要三個周期,但用repeat指令執(zhí)行macd,進(jìn)入流水線后只要一個周期就可以執(zhí)行一次macd指令。</p><p>  (3)多總線結(jié)構(gòu)。許多DSP內(nèi)部都采用了多總線結(jié)構(gòu),這樣保證在一個機(jī)器周期內(nèi),可以同時訪問數(shù)據(jù)和程序存儲空間。因此

26、,可以解決傳統(tǒng)芯片的總線沖突問題,使系統(tǒng)的速度和效率提高。</p><p> ?。?)專用的硬件乘法器。乘法速度越快,DSP的性能越高。由于具有專用的應(yīng)用乘法器,乘法可在一個指令周期內(nèi)完成。</p><p> ?。?)特殊的DSP指令。為了更好地滿足數(shù)字信號處理應(yīng)用的需要,在DSP指令系統(tǒng)中設(shè)計了一些特殊的DSP指令,以完成一些專門的運算。例如C5402DSP的FIRS指令,專門用于FIR

27、濾波運算。macd指令可以實現(xiàn)乘法累加運算,。</p><p> ?。?)快速的指令周期。哈佛結(jié)構(gòu)、流水線操作、專用的硬件乘法器、特殊的DSP指令,再加上集成電路的優(yōu)化設(shè)計,可使DSP的指令周期在納秒級。此次設(shè)計外部提供12MHZ的頻率,工作頻率通過C5402內(nèi)部提供PLL(可編程鎖相環(huán))倍頻外部頻率得到,具體在后面的硬件時鐘模塊里介紹。</p><p>  2.3 DSP芯片的基本特征&

28、lt;/p><p>  數(shù)據(jù)信號處理技術(shù)在近幾年得到迅速的發(fā)展,應(yīng)用非常廣泛,是因為有了如下的優(yōu)點:</p><p> ?。?)接口方便。DSP應(yīng)用系統(tǒng)與其他以現(xiàn)代數(shù)字技術(shù)為基礎(chǔ)的系統(tǒng)或設(shè)備都是相互兼容的,它與這樣的系統(tǒng)接口以實現(xiàn)某種功能要比模擬系統(tǒng)與這些系統(tǒng)接口要容易得多。</p><p> ?。?)編程方便。DSP應(yīng)用系統(tǒng)中的可編程DSP芯片可使設(shè)計人員在開發(fā)過程中

29、靈活方便地對軟件進(jìn)行修改和升級。</p><p> ?。?)穩(wěn)定性好。DSP應(yīng)用系統(tǒng)以數(shù)字處理為基礎(chǔ),受環(huán)境溫度以及噪聲的影響較小、可靠性高。</p><p> ?。?)精度高。16位數(shù)字系統(tǒng)可以達(dá)到級的精度。</p><p> ?。?)可重復(fù)性好。模擬系統(tǒng)的性能受元器件參數(shù)性能變化的影響比較大,而數(shù)字系統(tǒng)基本不受影響,因此數(shù)字系統(tǒng)便于測試、調(diào)試和大規(guī)模生產(chǎn)。<

30、;/p><p> ?。?)集成方便。DSP應(yīng)用系統(tǒng)中的數(shù)字部件有高度的規(guī)范性,便于大規(guī)模集成。</p><p>  2.4 語音采集與輸出模塊</p><p>  語音采集與輸出模塊采用的是TI公司推出的一款高性能的立體聲音頻Codec芯片TLC320AD50C,內(nèi)置耳機(jī)輸出放大器,支持MIC和LINE IN兩種輸入方式(二選一),且對輸入和輸出都具有可編程增益調(diào)節(jié)。A

31、D50的模數(shù)轉(zhuǎn)換(ADCs)和數(shù)模轉(zhuǎn)換(DACs)部件高度集成在芯片內(nèi)部,采用了先進(jìn)的Sigma-delta過采樣技術(shù),可以在8K到96K的頻率范圍內(nèi)提供16bit、20bit、24bit和32bit的采樣,ADC和DAC的輸出信噪比分別可以達(dá)到90dB和100dB。與此同時,AD50還具有很低的能耗,回放模式下功率僅為23mW,省電模式下更是小于15uW。由于具有上述優(yōu)點,使得AD50是一款非常理想的音頻模擬I/O器件,可以很好的應(yīng)用

32、在隨聲聽(如CD,MP3……)、錄音機(jī)等數(shù)字音頻領(lǐng)域[2]。由TLC320AD50C組成的語音輸入與輸出模塊不僅采樣率高最高可達(dá)96K,且外圍電路簡單,性價比高。</p><p>  采用DSP可以直接對PCM編碼后的語音信號進(jìn)行μ律和A律壓縮。圖2.1是DSP硬件實現(xiàn)數(shù)據(jù)壓縮解壓的簡單流程,DSP將傳輸來的壓縮后的數(shù)據(jù)進(jìn)行解壓成16位或者32位,然后對解壓后的數(shù)據(jù)進(jìn)行分析、處理,最后將處理后的數(shù)據(jù)按照要求壓縮成

33、8位的數(shù)據(jù)格式輸出到相應(yīng)設(shè)備,供其他設(shè)備讀取。</p><p>  圖2.1 數(shù)據(jù)壓縮解壓流程</p><p>  圖2.2是DSP將數(shù)據(jù)解壓的值,DSP將壓縮的8位數(shù)據(jù)解壓成16位的DSP通用數(shù)據(jù)格式,其中高13位為解壓后的數(shù)據(jù),低3位補(bǔ)0。這是因為6.711的A律壓縮只能對13位數(shù)據(jù)操作。DSP將解壓后的數(shù)據(jù)放在緩沖串口的發(fā)送寄存器中,只要運行發(fā)送指令,緩沖串口就會將數(shù)據(jù)發(fā)送出去。緩沖

34、串口對接收數(shù)據(jù)的解壓過程和壓縮過程完全相反。圖2.3是μ律數(shù)據(jù)解壓的示意圖。</p><p>  15 3 2 0</p><p><b>  發(fā)送緩沖器 </b></p><p><b>  A律</b></p><p>  圖

35、2.2 A律數(shù)據(jù)解壓</p><p>  15 2 1 0</p><p><b>  發(fā)送緩沖器</b></p><p><b>  B律</b></p><p>  圖2.3 μ律數(shù)據(jù)解壓</p><p&g

36、t;  DSP內(nèi)部的緩沖串口(McBSPs)帶有硬件實現(xiàn)的μ律/A律壓縮解壓,只需要在相應(yīng)寄存器中進(jìn)行設(shè)置就可以了。</p><p>  在進(jìn)行A律壓縮時,采樣后的12位數(shù)據(jù),默認(rèn)其最高位為符號位,壓縮時要保持最高位即符號位不變,原數(shù)據(jù)的后11位要壓縮成7位。這7位碼由3位段落碼和4位段內(nèi)碼組成。具體的壓縮變換后的數(shù)據(jù)根據(jù)后11位數(shù)據(jù)大小決定。除對串行口數(shù)據(jù)實現(xiàn)壓擴(kuò)處理外,這套硬件在McBSP不使用時還可以當(dāng)作一

37、個特殊的處理單元對內(nèi)部數(shù)據(jù)實現(xiàn)壓擴(kuò)處理,他有兩種實現(xiàn)方法。</p><p>  法一:當(dāng)串行口的發(fā)送和接受部分都處于復(fù)位狀態(tài)時,DRR1和DXR1內(nèi)部通過壓擴(kuò)邏輯連接在一起,數(shù)據(jù)從DXR1寫入并根據(jù)XCOMPAND處理,然后根據(jù)RCOMPAND再處理,在4個CPU時鐘后從DRR1中讀出數(shù)據(jù)。該處理比軟件實現(xiàn)快,不利之處在于處理完后沒有同步信息通知CPU和DMA。</p><p>  法二:

38、在數(shù)據(jù)環(huán)回模式下,McBSP也實現(xiàn)了一種內(nèi)連。數(shù)據(jù)處理與第一種方法相同,但它可以提供中斷信號(或同步事件)給CPU(或DMA)。這里數(shù)據(jù)處理的時間是根據(jù)串行口的比特律確定的。</p><p>  另外,在通常情況下McBSP先傳輸信號的高位后傳輸?shù)臀?,但是在字長為8比特的數(shù)據(jù)傳輸時,McBSP提供了比特倒序的功能,即可以先傳輸?shù)臀缓髠鬏敻呶弧?lt;/p><p>  在本實驗中,我們通過軟件編

39、程來完成線性碼轉(zhuǎn)換成A律。</p><p>  語音信號通常是小信號概率大,大信號出現(xiàn)的概率小,為提高小信號時的量化信躁比,壓縮比特速率,可為非線性量化。語音壓縮是把16位的數(shù)據(jù)比特轉(zhuǎn)化為8位數(shù)據(jù)比特,從而到達(dá)語音壓縮的目的。</p><p>  在主程序中通過A/D抽樣量化,可以得到16位的線性編碼,再由編碼表通過軟件計算得到8位A律編碼,其中最高位為符號位,第6位到第4位為段落碼,低4

40、位為段內(nèi)碼。將8位的壓縮結(jié)果存儲到系統(tǒng)RAM中進(jìn)行緩存,根據(jù)抽樣率、語音存儲時間以及系統(tǒng)RAM的容量設(shè)置語音存儲緩沖區(qū)的大小,待緩沖區(qū)存滿后,將緩沖區(qū)內(nèi)的數(shù)據(jù)進(jìn)行解壓縮,然后輸出到SPEAKER接口輸出端。若使用A/D轉(zhuǎn)換器,必須首先對A/D轉(zhuǎn)換器進(jìn)行初始化設(shè)置,即設(shè)置A/D轉(zhuǎn)換器的工作模式、輸入增益以及抽樣頻率等。</p><p>  3 硬件電路接口設(shè)計</p><p><b&g

41、t;  3.1 設(shè)計流程</b></p><p>  在對語音進(jìn)行采集時,先要初始化DSP及其串口和A/D和D/A轉(zhuǎn)換器,待所有的都進(jìn)行初始化后,就可以進(jìn)行語音的采集,其后續(xù)的步驟如下面的流程圖所示:</p><p><b>  圖3.1設(shè)計流程圖</b></p><p>  3.2 創(chuàng)建工程文件及編寫程序</p>&

42、lt;p>  利用CCS創(chuàng)建一個新工程,然后向該工程中添加源代碼文件和庫文件。</p><p>  首先在CCS的安裝目錄e:\ccs的文件夾e:\ccs\myprojects\下建立一個新的文件夾,命名為1111。并將所有的源代碼全部拷貝到該新建的文件夾中。然后雙擊桌面上圖標(biāo),在出現(xiàn)的對話框中選擇C5402 simulator模式下,然后點擊“確定”按鈕即可進(jìn)入“code composer studio”

43、界面。從CCS的Project菜單下選擇子菜單New。將出現(xiàn)Project Creation對話框。在對話框中“Project Name”處輸入1111,“Location”處輸入”myproject\1111\”,在“Project”處選擇Executable(.out)類型,在“Target”中選擇CCS所配置的TMS320C54XX 類型的DSP。最后單擊“完成”即可。創(chuàng)建好的工程的參數(shù)如下圖所示:</p><

44、p>  圖3.2工程創(chuàng)建的參數(shù)</p><p>  通過上述步驟Code Composer Studio就建立了一個工程文件,名為1111.pjt,該工程文件用于存儲工程配置以及在工程中所用到的若干文件??稍凇肮こ添椖坑^察窗口(Project view)”處看到。</p><p>  在CCS中選擇菜單Project中的1111.pjt??然后單擊右鍵選擇“add Files to

45、Project”,然后選文件yuyin.c,并單擊Open。在CCS中選擇菜單Project,選中add Files to Project,并在文件類型選框中選匯編源文件(*.a*, *.s*),然后選vectors.asm 和 load.asm 這兩個文件并單擊Open。這些文件中包含了設(shè)置復(fù)位RESET中斷到程序的C入口c_int00的一些匯編指令。對于更加復(fù)雜的程序,可在vectors.asm 文件中定義更多的中斷向量。也可利用D

46、SP/BIOS來自動定義所有的中斷向量。</p><p>  在CCS中選擇菜單Project,選擇add Files to Project,并在文件類型選框中選擇鏈接命令文件(*.cmd),然后選yuyin.cmd并單擊Open,該命令文件將匯編程序的段映射到DSP的存儲空間中。</p><p>  在CCS中選擇菜單Project??選擇add Files to Project,進(jìn)入編

47、譯庫文件夾,在文件類型選框中選擇目標(biāo)文件類型和庫文件類型(*.o*, *.lib),為所配置的目標(biāo)DSP選rts.lib文件并單擊Open。該庫文件為目標(biāo)DSP提供了運行時間(runtime)支持。</p><p>  在工程視圖窗口,用鼠標(biāo)右鍵單擊工程文件1111.pjt 并在快捷菜單中選擇 Scan All Dependencies。這時.h應(yīng)出現(xiàn)于工程視圖窗口中的庫(Libraries)文件夾中。單擊Pro

48、ject左邊的小加號+,將展開工程列表:1111.pjt,Libraries,以及 Source。該列表即為工程視圖。無需手工向工程中加入include文件,因為CCS將會在編譯過程中自動找到這些文件。編譯之后在工程視圖中將出現(xiàn)這些include文件。添加好后的文件如下圖所示:</p><p>  圖3.3添加好的工程文件</p><p>  3.3編譯并運行程序</p>&

49、lt;p>  編譯并運行程序的步驟: 選擇Project點擊Rebuild All 或單擊工具按鈕 就可以運行程序。</p><p>  (1)在默認(rèn)情況下,將當(dāng)前工程目錄下的debug子目錄中生成.out文件。通過CCS工具條可改變生成文件的存放位置。</p><p>  (2)選File?Load Program,并在對話框中選剛剛編譯生成的文件1111.out,單擊Op

50、en打開。(默認(rèn)在目錄e:\ccs\myprojects\1111\Debug\ 文件夾下)這樣CCS就將程序載入目標(biāo)DSP,并打開一個反匯編窗口,顯示出相應(yīng)的反匯編指令。CCS也將在窗口底部自動打開一個標(biāo)簽區(qū)域來顯示程序送往stdout的輸出。</p><p>  (1)選View?Mixed Source/ASM,將同時看到c源代碼和匯編結(jié)果代碼。</p><p>  (2)在混合模式

51、窗口中單擊一條匯編偽指令本身,并按F1鍵,CCS將搜索該條指令的幫助。</p><p>  (3)選Debug?Go Main開始從main 函數(shù)處執(zhí)行程序。程序暫停在main處,并用黃色的箭頭標(biāo)識。</p><p>  (4)選Debug?Run或單擊工具按鈕 來運行程序。</p><p>  (5)選Debug?Halt來暫停程序執(zhí)行。</p>

52、<p>  (6)從菜單View中選Mixed Source/ASM。將看到不帶相應(yīng)匯編的c代碼。從而可以方便地進(jìn)行下一個任務(wù):修改程序選項,修正語法錯誤。</p><p>  通過以上步驟,在運行project—》Rebuilt All后得出下圖3.4結(jié)果:</p><p><b>  圖3.4運行結(jié)果</b></p><p>

53、  從上圖可以看出沒有錯誤,故該設(shè)計的源程序代碼是正確的。接下來可以進(jìn)行下面的檢驗以驗證該課程設(shè)計是否正確。</p><p><b>  4實驗檢驗</b></p><p>  點擊工具欄上面的“view”選擇“watch window”然后再輸入“buffer”后就可以出現(xiàn)此數(shù)組的值,其結(jié)果如下圖所示:</p><p><b>  

54、圖4.1數(shù)組的值</b></p><p>  再在“view”中選擇“memory”可以看到存儲器中的數(shù)據(jù),其結(jié)果如下圖所示:</p><p>  圖4.2存儲器中的值</p><p>  從上圖中我們可以找到存儲器中的任何內(nèi)容,而且便于觀察壓縮前和壓縮后的存儲內(nèi)容是否是一樣的,這也可以用來驗證設(shè)計的程序是否正確。</p><p>

55、;  仍然在“view”中選擇“graph”然后點擊“time frequentcy”可以看到語音輸入的波形,壓縮后的波形以及解壓后的波形圖。在觀察波形的時候可以加入斷點,然后按animate動態(tài)顯示,這更便于觀察波形。所有的輸出的波形圖如下圖所示:</p><p>  圖4.3語音采集的輸入波形</p><p>  圖4.4語音壓縮后的波形</p><p>  圖

56、4.5語音解壓后的波形</p><p>  從上面的三幅仿真結(jié)果圖可以得到輸入的波形圖與壓縮后的波形圖相比,壓縮后的波形比輸入的波形要尖銳一些,而解壓后的波形圖與輸入的波形相比基本上是一樣的,也就是說該課程設(shè)計是成功的。</p><p>  5出現(xiàn)的問題和解決方法</p><p>  在本次課程設(shè)計的過程中,主要遇到的問題有這樣一些方面:</p>&l

57、t;p>  首先沒有找到合適的CCS軟件進(jìn)行安裝,安裝過程中經(jīng)常的出錯。其次是對CCS軟件里面的各個按鈕不熟悉。對其功能也不是很了解,在編寫程序過程中遇到很多問題,</p><p>  程序編寫后調(diào)試過程不知道問題的所在,并且運行后,出現(xiàn)很多的錯誤。最后是對于調(diào)試成功后出來的結(jié)果不能進(jìn)行正確的認(rèn)識。</p><p>  對于以上出現(xiàn)的問題經(jīng)過認(rèn)真的學(xué)習(xí)思考得出如下解決方法:</

58、p><p>  通過看書自己學(xué)習(xí),以及老師的講解,對軟件的面板的一些基本按鈕有了認(rèn)識。并且可以連貫的使用。在認(rèn)真的看書以及老師的檢查后,基本的編程水平得到提升。按照書本介紹的辦法,點擊問題的所在行后,認(rèn)真檢查發(fā)現(xiàn)許多字母打錯。通過老師的認(rèn)真講解以及自己的思考基本懂了DSP實驗系統(tǒng)的作用,以及相應(yīng)芯片的功能。對所有的程序的添加以及運行都能很好的得到把握。通過向同學(xué)學(xué)習(xí)和自己找資料最終能夠很好的分析所得結(jié)果。</p

59、><p>  通過出現(xiàn)問題到解決問題這一過程,我覺得學(xué)習(xí)的過程是相互討論共同進(jìn)步的,多多討論課題中遇到的問題,可以鞏固我們的知識掌握能力,增加熟練運用度。這更加有利于以后的課程設(shè)計。對以后的學(xué)習(xí)打好良好的基礎(chǔ)。</p><p><b>  6結(jié)束語</b></p><p>  課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉

60、實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程。隨著科學(xué)技術(shù)發(fā)展的日新月異,時代對于學(xué)生的綜合素質(zhì)要求將會越來越高,進(jìn)行課程設(shè)計,將有利于提高學(xué)生們綜合素質(zhì)的提高。</p><p>  從本次課程設(shè)計的中心來看,課題是希望通過對語音信號的采集壓縮存儲與回放而將相應(yīng)的結(jié)果顯示出來,這里就是指對程序的編寫,調(diào)試等。在這里我們只要編寫正確的程序,經(jīng)過調(diào)試,仿真硬件調(diào)試就可以對其進(jìn)行處理了。</p&g

61、t;<p>  在這里,用到了處理數(shù)字信號的強(qiáng)有力工具CCS軟件。在課設(shè)過程中,我學(xué)會了如何正確的安裝CCS軟件,以及如何配置相應(yīng)的程序。對DSP實驗系統(tǒng)箱有了全面的了解,最重要的是對DSP實驗系統(tǒng)箱上的芯片的分類,用處等有了全面的了解,充分的認(rèn)識了DSP的作用,與此同時我還學(xué)會了使用CCS一些基本函數(shù),增加了進(jìn)一步學(xué)習(xí)CCS軟件的興趣。同時,通過本次課程設(shè)計,鍛煉了我的動手能力,和提高了我分析問題,解決問題的能力。

62、60;</p><p>  整個實驗過程中,我在不斷的查閱資料和開動腦筋過程中,鍛煉了我的資料采集能力,也鍛煉了我的分析整理能力,為以后作畢業(yè)設(shè)計打下了基礎(chǔ);同樣在實驗過程中我遇到很多困難,而這些困難則鍛煉了我的耐心和分析解決問題的能力。</p><p>  總之通過這次的實驗,讓我認(rèn)識到了自己的不足,同時又通過這次的實驗讓我們學(xué)到了讓我們受用一生的知識。雖然在設(shè)計中遇到了許多原理問題,但

63、是在老師的悉心指導(dǎo)下,終于迎刃而解。同時,我也在老師的身上學(xué)到了許多有用的知識,使我受益匪淺,在此我表示感謝!</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 周霖.DSP系統(tǒng)設(shè)計與實現(xiàn)[M].北京:電子工業(yè)出版社,2005.</p><p>  [2] 蘇濤. DSP實用技術(shù)[M].西安:西安電子科技大學(xué)出版社,20

64、05.</p><p>  [3] 彭啟宗.TMS320C54xx實用教程[M].成都:科技大學(xué)出版社,2004.</p><p>  [4] 劉益成.DSP程序設(shè)計與開發(fā)[M].北京:航天大學(xué)出版社,2001.</p><p>  [5] 戴明楨、周建江.TMs320C54x DSP 結(jié)構(gòu)原理及應(yīng)用M].北京:航空航天出版社</p><p>

65、;<b>  附件</b></p><p>  存儲器的分配(5402.cmd)</p><p><b>  MEMORY</b></p><p><b>  {</b></p><p>  PAGE 0: VECS: origin = 0080h, length =

66、0080h /* Internal Program RAM */</p><p>  PRAM: origin = 7600h, length = 8000h /* Internal Program RAM */</p><p>  PAGE 1: SCRATCH: origin = 0060h, length = 0020h /* Scratch Pad Data RAM

67、 */</p><p>  DMARAM: origin = 0C00h, length = 0300h /* DMA buffer */</p><p>  DATA: origin = 1100h, length = 0080h /* Internal Data RAM */</p><p>  STACK: origin = 118

68、0h, length = 0560h /* Stack Memory Space */</p><p>  INRAM: origin = 1900h, length = 0100h /* Internal Data RAM */</p><p>  HPRAM0: origin = 1A00h, length = 0002h /* HPI memory acce

69、ssible by Host and DSP */</p><p>  HPRAM1: origin = 1A02h, length = 0280h /* HPI memory accessible by Host and DSP */</p><p>  HPRAM2: origin = 1C82h, length = 0280h /* HPI memory accessib

70、le by Host and DSP */</p><p>  EXRAM: origin = 1F10h, length = 9000h /* External Data RAM */</p><p><b>  }</b></p><p><b>  SECTIONS</b></p><

71、;p><b>  {</b></p><p>  .cinit > PRAM PAGE 0</p><p>  .text > PRAM PAGE 0</p><p>  .vectors > VECS PAGE 0</p><p>  init_var > PRAM

72、 PAGE 0</p><p>  detect > PRAM PAGE 0</p><p>  vrcprg > PRAM PAGE 0</p><p>  matprg > PRAM PAGE 0</p><p>  .stack > STACK PAGE 1</p><

73、p>  .trap > SCRATCH PAGE 1</p><p>  .const > EXRAM PAGE 1</p><p>  .data > EXRAM PAGE 1</p><p>  .bss > EXRAM PAGE 1</p><p>  .cio &

74、gt; EXRAM PAGE 1</p><p>  .switch > EXRAM PAGE 1</p><p>  tables > EXRAM PAGE 1</p><p>  var > EXRAM PAGE 1</p><p>  svctab > EXRAM PAGE 1

75、 /* SS_V LSP table */</p><p>  vctab > EXRAM PAGE 1 /* V LSP table */</p><p>  uvctab > EXRAM PAGE 1 /* UV LSP table */</p><p>  cuvtab > EXRA

76、M PAGE 1 /* Stochastic codebook */</p><p>  cdbktab > EXRAM PAGE 1 /* various codebook tables*/</p><p>  logtab > EXRAM PAGE 1 /* table for log2 */</p>

77、<p>  powtab > EXRAM PAGE 1 /* table for pow2 */</p><p>  hamtab > EXRAM PAGE 1 /* table for hamming */</p><p>  lgwtab > EXRAM PAGE 1 /* table

78、 for lag window */</p><p>  acostab > EXRAM PAGE 1 /* table for arccos */</p><p>  sqrtab > EXRAM PAGE 1 /* table for square root */</p><p>  acbtab

79、> EXRAM PAGE 1 /* table for thresholds in acb */</p><p>  pm03tab > EXRAM PAGE 1 /* table for x^(-0.3) computation */</p><p>  costab > EXRAM PAGE 1 /* t

80、able for cosine */</p><p>  V23 > INRAM PAGE 1</p><p>  FSK > INRAM PAGE 1</p><p>  hpibuff0 > HPRAM0 PAGE 1</p><p>  hpibuff1 > HPRAM1 PAGE 1

81、</p><p>  hpibuff2 > HPRAM2 PAGE 1</p><p>  dma_buff > DMARAM PAGE 1</p><p><b>  }</b></p><p><b>  /*主程序設(shè)計*/</b></p><p>  /

82、*語音采集及回放程序*/</p><p>  /*用A律進(jìn)行壓縮及解壓*/</p><p>  /*采用AD50進(jìn)行A/D,D/A轉(zhuǎn)換 */ </p><p>  /*燈循環(huán)閃爍程序開始*/</p><p><b>  /*L0:錄音*/</b></p>

83、;<p><b>  /*L1:放音*/</b></p><p>  #include <type.h> /* 頭文件*/</p><p>  #include <board.h></p><p>  #include <codec.h></p>

84、<p>  #include <mcbsp54.h></p><p>  #defineSIGN_BIT(0x80)/* Sign bit for a A-law byte. */</p><p>  #defineQUANT_MASK(0xf)/* Quantization field mask. */</p><p>  #

85、defineNSEGS(8) /* Number of A-law segments. */</p><p>  #defineSEG_SHIFT(4) /* Left shift for segment number. */</p><p>  #defineSEG_MASK(0x70)/* Segment field mask. */</p&

86、gt;<p>  void delay(s16 period);</p><p>  void led(s16 cnt);</p><p>  void initcodec(void);</p><p>  void flashenable(void);</p><p>  unsigned char data2alaw(s16

87、 pcm_val);</p><p>  int alaw2data(unsigned chara_val);</p><p>  static int search(int val,short*table,int size);</p><p>  HANDLE hHandset;</p><p><b>  s16 data;

88、</b></p><p>  s16 data1;</p><p><b>  u16 i=0;</b></p><p>  u16 temp1;</p><p><b>  u16 j=0;</b></p><p>  u16 k,l=0;</p>

89、<p><b>  u8 temp2;</b></p><p>  u16 buffer[20000];</p><p>  static short seg_end[8]={0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF};</p><p>  void main()</p>

90、<p>  { if (brd_init(100))</p><p><b>  return;</b></p><p>  led(2); //閃燈兩次</p><p>  initcodec(); //初始化codec</p><p>  flas

91、henable(); //選擇片外FLASH為片外存儲器 </p><p>  delay(100);</p><p>  brd_led_toggle(BRD_LED0);</p><p>  for(i=0x9000;i<0xefff;i++)</p><p><b>  { </

92、b></p><p>  REG_WRITE(i,*(volatile u16*)DRR1_ADDR(HANDSET_CODEC));</p><p>  delay(20);</p><p><b>  }</b></p><p>  brd_led_toggle(BRD_LED1);</p>&l

93、t;p>  delay(200);</p><p>  for(i=0x9000;i<0xefff;i++)</p><p><b>  {</b></p><p>  *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=REG_READ(i);</p><p>  delay(

94、20); }</p><p>  brd_led_toggle(BRD_LED2) </p><p><b>  while (1)</b></p><p>  { while (!MCBSP_RRDY(HANDSET_CODEC)) {}; //等待接收handset處的采樣</p><p>  brd_l

95、ed_toggle(BRD_LED0);</p><p>  data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); //從handset處讀取采樣</p><p>  temp1=data2alaw(data); //對采樣進(jìn)行a律壓縮</p><p>  i=i+1; &

96、lt;/p><p>  if(i%2==1)</p><p>  {buffer[j]=(temp1<<=8);}</p><p><b>  else</b></p><p>  {buffer[j]=(buffer[j]|temp1); </p><p>  j++; //j加1

97、</p><p><b>  }</b></p><p>  if(i>=40000) </p><p><b>  {i=0;}</b></p><p>  if(j>=20000)</p><p><b>  {j=0;</b></

98、p><p>  brd_led_disable(BRD_LED0); </p><p>  brd_led_toggle(BRD_LED1); </p><p>  //點亮二極管1 表示放音開始</p><p>  /* 放音部分 *

99、/</p><p>  for(k=0;k<40000;k++)</p><p><b>  {</b></p><p>  if(k%2==0)</p><p><b>  {</b></p><p>  temp2=(buffer[l]>>8)&

100、0x0ff;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  temp2=buffer[l]&0x0ff;</p><p><b>  l

101、++;</b></p><p><b>  }</b></p><p>  if(l>=20000)</p><p><b>  l=0; </b></p><p>  data1=alaw2data(temp2); // a律解壓</p><p> 

102、 while (!MCBSP_XRDY(HANDSET_CODEC)) {}; </p><p>  *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; //將數(shù)據(jù)寫入D/A轉(zhuǎn)換器</p><p><b>  }</b></p><p>  /* 放音結(jié)束

103、 */</p><p>  brd_led_toggle(BRD_LED0);</p><p>  brd_led_toggle(BRD_LED1); }</p><p><b>  } </b></p><p>  }

104、 //主程序結(jié)束</p><p>  /* 子函數(shù) */ </p><p>  /*******延時******/&

105、lt;/p><p>  void delay(s16 period)</p><p><b>  {</b></p><p><b>  int i, j;</b></p><p>  for(i=0; i<period; i++)</p><p><b>  {

106、</b></p><p>  for(j=0; j<period>>1; j++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*******閃燈******/</p><p>  vo

107、id led(s16 cnt)</p><p>  {while ( cnt-- )</p><p>  {brd_led_toggle(BRD_LED0); //切換LED指示燈0的顯示狀態(tài)</p><p>  delay(1000);</p><p>  brd_led_toggle(BRD_LED1);</p>

108、;<p>  delay(1000);</p><p>  brd_led_toggle(BRD_LED2);</p><p>  delay(1000);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*

109、****初始化codec**/</p><p>  void initcodec(void)</p><p>  {/* Open Handset Codec 獲取設(shè)置codec的句柄*/</p><p>  hHandset = codec_open(HANDSET_CODEC); / Acquire handle to codec </p&g

110、t;<p>  /* Set codec parameters */</p><p>  codec_dac_mode(hHandset, CODEC_DAC_15BIT); // DAC in 15-bit mode </p><p>  codec_adc_mode(hHandset, CODEC_ADC_15BIT); // ADC in 15-bi

111、t mode </p><p>  codec_ain_gain(hHandset, CODEC_AIN_6dB); // 6dB gain on analog input to ADC </p><p>  codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); </p><p>  // -6dB gain on

112、 analog output from DAC </p><p>  codec_sample_rate(hHandset,SR_8000); // 8KHz sampling rate </p><p><b>  }</b></p><p>  /*****設(shè)置flash****/</p><p&g

113、t;  void flashenable(void)</p><p><b>  {</b></p><p>  CPLD_CTRL2_REG|=0x0010;</p><p>  CPLD_DMCTRL_REG|=0x0040;</p><p><b>  }</b></p><

114、;p>  /*****a律壓縮******/</p><p>  unsigned char data2alaw(s16 pcm_val) </p><p><b>  {</b></p><p>  intmask;</p><p><b>  intseg;</b><

115、;/p><p>  unsigned charaval;</p><p>  if (pcm_val >= 0) </p><p><b>  {</b></p><p>  mask = 0xD5; // 標(biāo)記 (7th) bit = 1</p><p&g

116、t;<b>  } </b></p><p><b>  else </b></p><p><b>  {</b></p><p>  mask = 0x55; // 標(biāo)記 bit = 0 </p><p>  pcm_va

117、l = -pcm_val;</p><p><b>  }</b></p><p>  // Convert the scaled magnitude to segment number. </p><p>  seg = search(pcm_val, seg_end, 8); </p><p> 

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論