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

下載本文檔

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

文檔簡(jiǎn)介

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

2、輸出,并且用指示燈對(duì)語(yǔ)音存儲(chǔ)和回放過(guò)程進(jìn)行指示。</p><p>  關(guān)鍵詞:CCS;DSP;采集;壓縮;存儲(chǔ)與回放;</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ì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)字信號(hào)處理技術(shù)已經(jīng)逐漸發(fā)展成為一門(mén)關(guān)鍵的技術(shù)學(xué)科。而DSP芯片的出現(xiàn)則為數(shù)字信號(hào)處理算法的實(shí)現(xiàn)提供了可能。這一方面極大地促進(jìn)了數(shù)字信號(hào)處理技術(shù)的進(jìn)一步發(fā)展;另一方面,它也使數(shù)字信號(hào)處理的應(yīng)用領(lǐng)域得到了極大

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

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

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

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

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

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

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

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

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

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

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

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

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

19、t;  (5) 定時(shí)器</b></p><p>  定時(shí)器是一個(gè)軟件可編程計(jì)數(shù)器,用來(lái)產(chǎn)生定時(shí)中斷。定時(shí)器主要由定時(shí)寄存器TM,定時(shí)周期寄存器PRD,定時(shí)控制寄存器TCR及相應(yīng)的邏輯控制電路組成。其中寄存器TIM、PRD和TCR都是存儲(chǔ)映象寄存器,它們?cè)跀?shù)據(jù)存儲(chǔ)器中的地址分別為0024H、0025H和0026H。TIM是一個(gè)減1寄存器。PRD用來(lái)存放定時(shí)時(shí)間常數(shù)。TCR中包含定時(shí)器的控制位和狀態(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)先級(jí)為11—16個(gè)固定級(jí),有4種工作方式。</p><p>  (7) 主機(jī)接口HPI</p><p>  HPI是一個(gè)與主機(jī)通信的并行接口,主要用于DSP與其他總線(xiàn)或CPU進(jìn)行通信,信息可通過(guò)TMS320VC5402的片內(nèi)存儲(chǔ)器與主機(jī)進(jìn)行數(shù)據(jù)交換。不同型號(hào)的器件配置不同的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ù);支持存儲(chǔ)器塊傳送指令;支持32位長(zhǎng)操作數(shù)指令;具有支持2操作數(shù)或3操作數(shù)的讀指令;具有能并行存儲(chǔ)和并行加載的算術(shù)指令;支持條件存儲(chǔ)指令及中斷快速返回指令。</p><p><b>  (9) 片外圍電路</b></p><p>

23、;  具有軟件可編程等待狀態(tài)發(fā)生器;設(shè)有可編程分區(qū)轉(zhuǎn)換邏輯電路;帶有內(nèi)部震蕩器或外部時(shí)鐘源的片內(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)的主要特點(diǎn)是將程序和數(shù)據(jù)存儲(chǔ)在不同的存儲(chǔ)空間中,即程序存儲(chǔ)器和

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

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

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

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

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

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

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

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

32、在隨聲聽(tīng)(如CD,MP3……)、錄音機(jī)等數(shù)字音頻領(lǐng)域[2]。由TLC320AD50C組成的語(yǔ)音輸入與輸出模塊不僅采樣率高最高可達(dá)96K,且外圍電路簡(jiǎn)單,性?xún)r(jià)比高。</p><p>  采用DSP可以直接對(duì)PCM編碼后的語(yǔ)音信號(hào)進(jìn)行μ律和A律壓縮。圖2.1是DSP硬件實(shí)現(xiàn)數(shù)據(jù)壓縮解壓的簡(jiǎn)單流程,DSP將傳輸來(lái)的壓縮后的數(shù)據(jù)進(jìn)行解壓成16位或者32位,然后對(duì)解壓后的數(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。這是因?yàn)?.711的A律壓縮只能對(duì)13位數(shù)據(jù)操作。DSP將解壓后的數(shù)據(jù)放在緩沖串口的發(fā)送寄存器中,只要運(yùn)行發(fā)送指令,緩沖串口就會(huì)將數(shù)據(jù)發(fā)送出去。緩沖

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

65、;<b>  附件</b></p><p>  存儲(chǔ)器的分配(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è)計(jì)*/</b></p><p>  /

82、*語(yǔ)音采集及回放程序*/</p><p>  /*用A律進(jìn)行壓縮及解壓*/</p><p>  /*采用AD50進(jìn)行A/D,D/A轉(zhuǎn)換 */ </p><p>  /*燈循環(huán)閃爍程序開(kāi)始*/</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為片外存儲(chǔ)器 </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); //對(duì)采樣進(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>  //點(diǎn)亮二極管1 表示放音開(kāi)始</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ù)寫(xiě)入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>  /*******延時(shí)******/&

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

最新文檔

評(píng)論

0/150

提交評(píng)論