版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 目 錄I</b></p><p><b> 摘要II</b></p><p><b> 第1章 概述1</b></p><p><b> 1.1設(shè)計(jì)目的1
2、</b></p><p><b> 1.2設(shè)計(jì)要求1</b></p><p><b> 1.3設(shè)計(jì)環(huán)境1</b></p><p> 第2章 系統(tǒng)硬件設(shè)計(jì)方案2</p><p> 2.1 TMS320VC5416芯片的基本原理2</p><p>
3、2.2 語音編碼芯片的選擇4</p><p> 2.3 系統(tǒng)硬件設(shè)計(jì)4</p><p> 2.3.1 音頻控制接口4</p><p> 2.3.2 音頻數(shù)據(jù)接口5</p><p> 2.3.3 語音數(shù)據(jù)存儲(chǔ)模塊5</p><p> 2.3.4 液晶屏顯示模塊6</p><p&g
4、t; 第3章 軟件設(shè)計(jì)6</p><p> 3.1 MCBSP 的配置6</p><p> 3.2 AIC23 的初始化7</p><p> 3.3 DSP 上電自舉7</p><p> 第4章 課程設(shè)計(jì)總結(jié)8</p><p><b> 參考文獻(xiàn)9</b></p>
5、;<p> 附錄:源程序代碼10</p><p><b> 摘要</b></p><p> 信息技術(shù)和超大規(guī)模集成電路工藝的不斷發(fā)展,極大地推動(dòng)了 DSP 的發(fā)展。DSP 技術(shù)的應(yīng)用領(lǐng)域也越來越廣,尤其在音頻處理領(lǐng)域。目前,在很多語音處理系統(tǒng)中都用到了語音錄放模塊,采集現(xiàn)場的聲音并存儲(chǔ)起來供以后回放。語音處理系統(tǒng)的實(shí)時(shí)性、功耗、體積、以及對(duì)語音信
6、號(hào)的保真度都是很影響系統(tǒng)性能的關(guān)鍵因素。本設(shè)計(jì)采用的高速54x DSP 芯片,最高頻率能達(dá)到160MIPS,能夠很好的解決系統(tǒng)的實(shí)時(shí)性;采用的數(shù)字編解碼芯片TLV320AIC23(以下簡稱AIC23)具有16~32 位采樣精度,錄音回放模式下僅23mW 的功耗。因此,該音頻編解碼芯片與54x DSP 的結(jié)合是可移動(dòng)數(shù)字音頻錄放系統(tǒng)、現(xiàn)場語音采集系統(tǒng)的理想解決方案。</p><p> 經(jīng)過實(shí)驗(yàn)表明,本設(shè)計(jì)實(shí)現(xiàn)的基
7、于定點(diǎn) DSP 的語音錄放系統(tǒng)具有如下優(yōu)點(diǎn):</p><p> 1) 音頻數(shù)據(jù)占用資源少</p><p><b> 2) 聲音保真度高</b></p><p><b> 3) 開發(fā)難度低</b></p><p> 4) 語音芯片與DSP 接口電路簡單</p><p>
8、<b> 5) 體積小</b></p><p><b> 第1章 概述</b></p><p><b> 1.1設(shè)計(jì)目的</b></p><p> 在CCS環(huán)境下基于TMS320VC5416芯片的語音采集壓縮存儲(chǔ)與回放。通過這次課程設(shè)計(jì),加深對(duì)CCS集成開發(fā)環(huán)境,熟悉DSP 54X同步串口原理
9、,了解音頻編解碼芯片TLV320AIC23原理,了解存儲(chǔ)芯片NAND FLASH原理,掌握DSP54X中斷原理 以及DSP試驗(yàn)系統(tǒng)箱的使用。鍛煉邏輯思維能力、動(dòng)手能力以及獨(dú)立解決問題的能力,對(duì)以后更深入地學(xué)習(xí)和應(yīng)用數(shù)字信號(hào)處理及相關(guān)知識(shí)作準(zhǔn)備。</p><p><b> 1.2設(shè)計(jì)要求</b></p><p> (1)了解DSP開發(fā)工具及其安裝過程</p&g
10、t;<p> (2)熟悉DSP開發(fā)軟件CCS使用</p><p> (3)熟悉工程文件的建立方法、匯編程序開發(fā)調(diào)試過程</p><p> (4)熟悉常用C5416系列指令的用法</p><p> ?。?)通過McBSP1設(shè)置AIC23工作模式,通過McBSP0控制AIC23編碼和解碼,語音信號(hào)可由MIC輸入和LINEIN輸入,采集的語音數(shù)據(jù)存儲(chǔ)在
11、NAND FLASH上,語音的回放方式可以為BYPASS和LOOP-BACK。</p><p><b> 1.3設(shè)計(jì)環(huán)境</b></p><p> 計(jì)算機(jī)、DSP仿真器、DSP 54X EVM板,CCS軟件,EVM54庫文件,NAND FLASF,TLV320AIC23。</p><p> 第2章 系統(tǒng)硬件設(shè)計(jì)方案</p>
12、<p> 2.1 TMS320VC5416芯片的基本原理</p><p> TMS320VC5416 數(shù)字信號(hào)處理器是TI公司為實(shí)現(xiàn)低功耗,高速實(shí)時(shí)信號(hào)處理而專門設(shè)計(jì)的16位定點(diǎn)數(shù)字信號(hào)處理器,采用改進(jìn)的哈佛結(jié)構(gòu),具有高度的操作靈活性和運(yùn)行速度,適用于遠(yuǎn)程通信等實(shí)時(shí)嵌入式應(yīng)用的需要。廣泛應(yīng)用于電子測試、電子設(shè)計(jì)、模擬仿真、通信工程中。</p><p> TMS320VC54
13、16具有的主要優(yōu)點(diǎn)如下:</p><p> (1) 圍繞一組程序總線、三組數(shù)據(jù)總線和四組地址總線而建立的改進(jìn)哈佛結(jié)構(gòu),提高了系統(tǒng)的多功能性和操作的靈活性。</p><p> (2) 具有高度的并行性和專用硬件邏輯的CPU設(shè)計(jì),提高了芯片的性能。</p><p> (3) 具有完善的尋址方式和高度專業(yè)化指令系統(tǒng),更適用于快速算法的實(shí)現(xiàn)和高級(jí)語言編程的優(yōu)化。<
14、;/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)用能力。</p><p> TMS320VC5416主要有中央處理器CPU,特殊功能寄存器,數(shù)
15、據(jù)存儲(chǔ)器RAM,程序存儲(chǔ)器ROM,I/O接口功能,串行口,主機(jī)通信接口HPI,定時(shí)器,中斷系統(tǒng)等10部分組成。</p><p><b> 各部分功能如下:</b></p><p> (1) 中央處理器(CPU)</p><p> 它是DSP芯片的核心,它有以下特點(diǎn):</p><p> (a) 采用多總線結(jié)構(gòu),通過
16、一組程序總線、三組數(shù)據(jù)總線和四組地址總線來實(shí)現(xiàn)。</p><p> (b) 40位算術(shù)邏輯運(yùn)算單元ALU,包括一個(gè)40位的桶形移位寄存器和兩個(gè)獨(dú)立的40位累加器。</p><p> (c) 17×17位并行乘法器,與40位專用加法器相連,可用于進(jìn)行非流水線的單周期乘法—累加運(yùn)算。</p><p> (d) 比較、選擇、存儲(chǔ)單元,可用于Viterbi譯
17、碼器的加法-比較-選擇運(yùn)算。</p><p> (e) 指數(shù)編碼器,是一個(gè)支持單周期指令EXP的專用硬件??梢栽谝粋€(gè)周期內(nèi)計(jì)算40位累加器數(shù)值的指數(shù)。</p><p> (f) 配有兩個(gè)地址生成器,包括8個(gè)輔助寄存器和2個(gè)輔助寄存器運(yùn)算單元。</p><p> (2)數(shù)據(jù)存儲(chǔ)器RAM</p><p> TMS320VC5416有兩種片
18、內(nèi)數(shù)據(jù)存儲(chǔ)器:</p><p> (a) 雙尋址RAM:在一個(gè)指令周期內(nèi),可對(duì)其進(jìn)行兩次存取操作,一次讀出和一次寫入;</p><p> (b) 雙尋址RAM:在一個(gè)指令周期內(nèi),只能進(jìn)行一次存取操作。</p><p> (3) 程序存儲(chǔ)器ROM</p><p> TMS320VC5416的程序存儲(chǔ)器可由ROM和RAM配置而成,程序空間
19、可以定義在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> TMS320VC5416芯片只有兩個(gè)通用I/O引腳BIO和XF,BIO主要用來監(jiān)測外部設(shè)備工作狀態(tài),而XF用來發(fā)信號(hào)給
20、外部設(shè)備。 </p><p> 另外,芯片還配有主機(jī)接口HPI,同步串行口和64K字的I/O空間,HPI和串行口通過控制,用做通用I/O口使用。而64K字I/O空間可通過外加緩沖器或鎖存電路,配合外部I/O讀寫控制時(shí)序構(gòu)成片外外設(shè)的控制電路。</p><p><b> (5) 定時(shí)器</b></p><p> 定時(shí)器是一個(gè)軟件可編程計(jì)數(shù)器
21、,用來產(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用來存放定時(shí)時(shí)間常數(shù)。TCR中包含定時(shí)器的控制位和狀態(tài)位。</p><p><b> (6) 中斷系統(tǒng)</b></p>
22、;<p> TMS320VC5416的中斷系統(tǒng)具有硬件中斷和軟件中斷。 </p><p> 硬件中斷:由外圍設(shè)備引起的中斷分為片外外設(shè)所引起的中斷和片內(nèi)外設(shè)所引起的中斷。</p><p> 軟件中斷:有程序指令I(lǐng)NTR、TRAP和RESET所引起的中斷。中斷管理優(yōu)先級(jí)為11—16個(gè)固定級(jí),有4種工作方式。</p><p> (7) 主機(jī)接口HP
23、I</p><p> HPI是一個(gè)與主機(jī)通信的并行接口,主要用于DSP與其他總線或CPU進(jìn)行通信,信息可通過TMS320VC5416的片內(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><p><b> (8) 指令系統(tǒng)</b></p><p>
24、支持單指令重復(fù)和塊指令重復(fù);支持存儲(chǔ)器塊傳送指令;支持32位長操作數(shù)指令;具有支持2操作數(shù)或3操作數(shù)的讀指令;具有能并行存儲(chǔ)和并行加載的算術(shù)指令;支持條件存儲(chǔ)指令及中斷快速返回指令。</p><p><b> (9) 片外圍電路</b></p><p> 具有軟件可編程等待狀態(tài)發(fā)生器;設(shè)有可編程分區(qū)轉(zhuǎn)換邏輯電路;帶有內(nèi)部震蕩器或外部時(shí)鐘源的片內(nèi)鎖相環(huán)發(fā)生器;支持全
25、雙工操作的串行口,可進(jìn)行8位或16位串行通信。</p><p> 2.2 語音編碼芯片的選擇</p><p> 從適應(yīng)語音信號(hào)頻率、滿足實(shí)時(shí)性、降低成本、簡化設(shè)計(jì)的要求出發(fā),本系統(tǒng)選擇TLV320AIC23。AIC23 工作電壓3.3 伏特,能在數(shù)字和模擬電壓下工作,與TMS320VC5416的I/O 電壓相兼容,其控制接口和數(shù)字接口與DSP 的MCBSP 端口能夠無縫連接。AIC23
26、的模數(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[1]。</p><p> 2.3 系統(tǒng)硬件設(shè)計(jì)</p><p> AIC23 有獨(dú)立的控制接口和數(shù)字接口。控制
27、口用于接收控制器的命令字,數(shù)據(jù)接口與DSP 完成語音數(shù)據(jù)的交換。AIC23 的工作時(shí)鐘由外接的一個(gè)11.2896M 的晶振提供,同時(shí)該晶振也為DSP 提供工作時(shí)鐘。DSP 的工作時(shí)鐘是5 倍頻后的時(shí)鐘:56.488M。本系統(tǒng)用到了利用DSP 的MCBSP0 和MCBSP1,分別與AIC23 的控制和數(shù)據(jù)接口相連。DSP 與AIC23的接口電路如圖2</p><p> 2.3.1 音頻控制接口</p>
28、<p> MCBSP1 接 AIC23 的控制接口。AIC23 提供SPI 和I2C 兩種控制接口方式。該器件的模式終端狀態(tài)(MODE)決定了控制接口的形式。本設(shè)計(jì)將MODE 引腳接高,選擇SPI 方式。AIC23 的控制口主要是為了接收DSP 的控制字,因此這里DSP 的MCBSP1 作為主器件。AIC23 有許多可編程特性,其內(nèi)部有11 個(gè)9 位可編程控制寄存器,DSP 通過MCBSP1 來訪問這些控制寄存器。SDI
29、N 為串行數(shù)據(jù)輸入端,它接收DSP 串行數(shù)據(jù),數(shù)據(jù)字長16 位,其中高7 位為地址信息,低9 位為AIC23 的命令字。SCLK 為控制端口串行數(shù)據(jù)時(shí)鐘輸入, DSP串口的采樣率發(fā)生器對(duì)CPU 時(shí)鐘分頻后得到串口的發(fā)送時(shí)鐘BCLKX1=225.952KHz,產(chǎn)生的時(shí)鐘通過SCLK 引腳驅(qū)動(dòng)AIC23。</p><p> 2.3.2 音頻數(shù)據(jù)接口</p><p> DSP 與AIC23
30、的數(shù)據(jù)交換是通過串口0 實(shí)現(xiàn)的。其中MCBSP 多通道緩沖串口數(shù)據(jù)的接收是通過三級(jí)緩沖完成的[2],即引腳DR 上的數(shù)據(jù)先到達(dá)移位寄存器RSR,當(dāng)收到一個(gè)滿字之后數(shù)據(jù)被裝載到數(shù)據(jù)接收寄存器RBR 中,最后數(shù)據(jù)才被拷貝到接收數(shù)據(jù)寄存器DRR中。DSP 通過串口0 接收AIC23 采集的語音數(shù)字信號(hào),并且在回放模式下,通過串口將語音信號(hào)傳送給AIC23。這時(shí)音頻芯片為主器件,給DSP 提供幀同步和時(shí)鐘信號(hào)。</p><p
31、> AIC23 芯片與數(shù)字系統(tǒng)的接口有右判斷模式、左判斷模式、I2S 模式和DSP 模式四種數(shù)據(jù)格式。數(shù)字音頻接口由時(shí)鐘信號(hào)BCLK、數(shù)據(jù)信號(hào)DIN 和DOUT、同步信號(hào)LRCIN 和LRCOUT 組成。由于DSP 的MCBSP 接口與該芯片的DSP 模式相兼容,因此該音頻模塊采用了DSP 模式?,F(xiàn)對(duì)DSP 模式進(jìn)行說明。該音頻處理模塊采用的是DSP 作為從設(shè)備,AIC23為主設(shè)備。DSP 模式下的數(shù)據(jù)格式為:發(fā)送、接收幀長度為
32、2 個(gè)字,每個(gè)字長16 位。幀同步信號(hào)有效后跟著是兩個(gè)數(shù)據(jù)字。</p><p> AIC23 作為數(shù)據(jù)接口的主器件,為DSP 提供發(fā)送接收時(shí)鐘,以及幀同步信號(hào),在幀同步信號(hào)的下降沿開始傳送數(shù)據(jù),左通道數(shù)據(jù)組成了首先傳送的數(shù)據(jù)字,緊接著傳送右通道的數(shù)據(jù)。傳送字長32 位,其中左通道數(shù)據(jù)16 位,右通道數(shù)據(jù)16 位。BCLK 在主動(dòng)方式下是輸出,而在從動(dòng)方式下是輸入。在LRCIN 或LRCOUT 的下降沿開始數(shù)據(jù)傳
33、輸。DSP 為了接收正確的語音數(shù)據(jù),應(yīng)該將串口的數(shù)據(jù)格式配置為與AIC23 相同。幀同步脈沖高電平有效。接收、發(fā)送時(shí)鐘CLKR、幀同步信號(hào)由外部時(shí)鐘驅(qū)動(dòng)。其中幀同步信號(hào)寬度是1 個(gè)BCLK時(shí)鐘寬度。幀周期為32 個(gè)BCLK 時(shí)鐘。在CLKR 的上升沿,發(fā)送或采樣接收數(shù)據(jù)。DSP 模式下的數(shù)據(jù)傳輸時(shí)序入下:</p><p> 2.3.3 語音數(shù)據(jù)存儲(chǔ)模塊</p><p> 考慮到存儲(chǔ)器芯
34、片的容量、系統(tǒng)供電、以及對(duì)語音信號(hào)的讀取速率。本系統(tǒng)采用了具有32MX8 位存儲(chǔ)空間的K9F5608 Nandflash。Nandflash 以容量大價(jià)格低的優(yōu)勢(shì)被廣泛應(yīng)用在便攜式設(shè)備中。同時(shí)Nandflash 存儲(chǔ)器在寫入時(shí)需要復(fù)雜的操作命令,這樣確保了數(shù)據(jù)寫入的正確性。K9F5608 有8 位I/O 端口,地址、命令字以及數(shù)據(jù)復(fù)用這8 位I/O 端口。它采用復(fù)雜的操作順序來區(qū)分地址、命令、數(shù)據(jù)信息。DSP 采集到的32 位語音數(shù)據(jù)通
35、過外部數(shù)據(jù)總線的低8 位分4 次,從左聲道的高8 位到右聲道的低8 位依次寫入Nandflash。</p><p> 2.3.4 液晶屏顯示模塊</p><p> 對(duì)于 DSP 來講LCD 是典型的慢速設(shè)備,如果僅僅靠設(shè)置DSP 等待周期寄存器,在訪問外部I/O 時(shí)最多只能插入14 個(gè)等待周期,這點(diǎn)延時(shí)對(duì)DSP 來說是遠(yuǎn)遠(yuǎn)不夠的。因此,需要在DSP 與LCD 之間加入時(shí)序控制電路。與N
36、andflash 模塊類似,液晶屏、Nandflash 與DSP 的接口電路由CPLD 來完成,液晶屏占用DSP 兩個(gè)I/O 地址,分別是命令和數(shù)據(jù)地址。DSP 對(duì)I/O 空間的操作由地址線、數(shù)據(jù)線和三根信號(hào)線IOSTRB、R/W 和IS 來完成[4] 。CPLD根據(jù)DSP 給出的讀寫信號(hào)以及地址信號(hào),產(chǎn)生液晶屏的片選、讀寫信號(hào)、以及鍵盤的掃描信號(hào)。</p><p><b> 第3章 軟件設(shè)計(jì)<
37、/b></p><p> 系統(tǒng)的軟件開發(fā)環(huán)境是 TI 公司的DSP 集成開發(fā)環(huán)境CCS 2.0。CCS 提供了軟件開發(fā)、程序調(diào)試和系統(tǒng)仿真環(huán)境。CCS 不但能支持匯編語言,而且還支持C/C++語言進(jìn)行軟件開發(fā)。CCS 提供的C 編譯器能優(yōu)化代碼,提高C 程序的運(yùn)行效率。系統(tǒng)有兩種工作方式,一種是現(xiàn)場采集并播放,即系統(tǒng)采集現(xiàn)場的線路輸入信號(hào)或麥克語音信號(hào),并存儲(chǔ)在NandFlash中,在采集的過程中,同時(shí)通
38、過耳機(jī)播出。另一種是播放錄制的語音數(shù)據(jù),即不采集現(xiàn)場語音信號(hào),直接播放已經(jīng)存儲(chǔ)在NandFlash 中的語音數(shù)據(jù)。這兩種工作方式可以在系統(tǒng)初始化工程時(shí)通過按鍵選擇。具體的程序代碼段設(shè)計(jì)主要包括MCBSP 口的配置、AIC23 的初始化、NandFlash 燒寫、DSP 上電自舉,這四個(gè)部分。其中現(xiàn)場采集、播放的流程圖如下:</p><p> 3.1 MCBSP 的配置</p><p>
39、 5416 提供的MCBSP 口是一種高速、雙向、多通道帶緩沖的串行接口。它可以與其他C54x DSP 器件、編碼器或其他串行接口器件通信。MCBSP 的硬件部分是基于標(biāo)準(zhǔn)串行接口的[3]。MCBSP 的控制模塊包括幀同步信號(hào)發(fā)生器、內(nèi)部時(shí)鐘發(fā)生器、以及它們的控制電路和多通道選擇。與MCBSP 有關(guān)的控制寄存器是通過子地址尋址來訪問的,它有28 個(gè)子寄存器只占用一個(gè)DSP 內(nèi)存地址。MCBSP 的子地址寄存器(SPSA)用來指向這些使用
40、同一個(gè)內(nèi)存地址的寄存器中的某一個(gè)。MCBSP 子數(shù)據(jù)寄存器(SPSDx)用來訪問選中的寄存器。由于配置每個(gè)寄存器的代碼段相同,首先指定子地址寄存器地址,接著給數(shù)據(jù)。為了保證程序的簡潔與可讀性,這里采用調(diào)用函數(shù)的方法來替代這些重復(fù)代碼,代碼具體實(shí)現(xiàn)如下:</p><p> #define MCBSP1_SET(add,data)</p><p> MCBSP1_SPSA = add, M
41、CBSP1_SPSD = data // 定義一個(gè)宏函數(shù),第一個(gè)參數(shù)add 為子地址寄存器的地址,data 為子地址寄存器的值</p><p> MCBSP1_SET( SPCR1, 0x1801)</p><p> // SPCR1=0x1801</p><p> MCBSP1_SET( SPCR2, 0x03C1)</p><p>
42、 // SPCR2=0x03C1</p><p> 3.2 AIC23 的初始化</p><p> AIC23 具有8 個(gè)可編程的內(nèi)部寄存器,通過軟件編程能隨時(shí)控制AIC23 的采樣頻率,高、低通濾波器的截止頻率,模擬輸入及輸出的增益。DSP 通過串口1 完成對(duì)AIC23 的初始化工作。程序中把對(duì)AIC23 的初始化命令寫在一個(gè)數(shù)組中,采用循環(huán)方式將這些命令通過串口發(fā)送出去。<
43、/p><p> codec[10]={0x1e00,0x0c00,0x0811,0x0a04,0x0e43,0x102c,0x1201,0x0117,0x05ff, 0x07ff};</p><p> MCBSP1_DXR1=codec[i];</p><p> 3.3 DSP 上電自舉</p><p> 當(dāng)軟硬件設(shè)計(jì)工作完成后,需要系統(tǒng)
44、能夠脫離PC 機(jī)獨(dú)立運(yùn)行。這就需要將調(diào)試好的.out燒寫到外部Flash 中,并要求目標(biāo)系統(tǒng)上電后可自行啟動(dòng)并執(zhí)行用戶軟件代碼,這就需要用到DSP 的自舉引導(dǎo)(Bootloader)技術(shù)。這里采用的是16 位并行Flash 引導(dǎo)方式。使用Hex500.exe 將.out 文件轉(zhuǎn)換成16 進(jìn)制的自舉表文件,通過燒寫器將這個(gè)自舉表文件燒寫到flash 中。然而,這種脫機(jī)燒寫不能燒寫貼片封裝的芯片,系統(tǒng)的靈活性受到很大的限制。本設(shè)計(jì)采用了一種
45、新的一次裝載程序并燒寫的在線燒寫方法。用 Hex500.exe 生成好自舉表文件后,另外跟據(jù)Flash 的編程方法,編寫燒寫代碼,并讀取自舉表文件。在C 程序源碼中讀取的自舉表文件是ASCII 值,因此需要在程序中加一段格式轉(zhuǎn)換代碼,將數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制文件,并且去掉自舉表的表頭和表尾。轉(zhuǎn)換時(shí)采用一個(gè)4 次循環(huán),先讀取4 位16進(jìn)制數(shù)的最高位,把這個(gè)ASCII 值轉(zhuǎn)換成二進(jìn)制數(shù)字,將其左移4 位,接著讀取次高位。循環(huán)4 次便得到了可以直接
46、燒寫的數(shù)據(jù)。系統(tǒng)脫機(jī)工時(shí),通過外部并行總線,用DMA 方式將這些代碼從數(shù)據(jù)空間搬移到程序</p><p> 第4章 課程設(shè)計(jì)總結(jié)</p><p> 通過這次的DSP課程設(shè)計(jì),讓我充分認(rèn)識(shí)到了我的不足。我雖然學(xué)習(xí)過C語言的編程,但一旦將它應(yīng)用到實(shí)際的比較專業(yè)的問題上,我所學(xué)的知識(shí)就變得完全不夠用了,為了這次課程設(shè)計(jì)我查詢了大量的資料,無論是C語言方面的還是壓縮算法方面的都讓我們花費(fèi)了很多
47、時(shí)間,查詢到了需要的資料我們又對(duì)它們進(jìn)行了整理,提取出我們需要的a律壓縮和μ律壓縮的算法和原理,并且努力去理解其中的知識(shí),使其能為我們所用,盡管如此我們?nèi)匀粵]能成功的編出屬于我們自己的程序,因此我們找到了一份編好的程序,用我們已經(jīng)理解的知識(shí)去分析它,理解這份程序的原理,并根據(jù)我們的實(shí)際對(duì)它進(jìn)行一些修改,從而我們才得出我們現(xiàn)在的程序。雖然程序編寫成功了但我們?cè)谡{(diào)試上又遇到了很多的問題,比如在CCS環(huán)境下我們要如何觀察波形,波形有代表什么等
48、等,為此我們又不斷的翻閱課件和資料,才最終解決了所有的問題,我的課程設(shè)計(jì)才算基本完成了。</p><p> 整個(gè)課程設(shè)計(jì)過程中,我在不斷的查閱資料和開動(dòng)腦筋過程中,鍛煉了我的資料采集能力,也鍛煉了我的分析整理能力,為以后做畢業(yè)設(shè)計(jì)打下了基礎(chǔ);同樣在實(shí)驗(yàn)過程中我遇到很多困難,而這些困難則鍛煉了我的耐心和分析解決問題的能力;通過編程鍛煉了我的編程能力,使我對(duì)C語言,匯編語言更加熟悉,讓我能更好的運(yùn)用它們;同時(shí)也鍛煉
49、了我們的團(tuán)結(jié)協(xié)作能力,為將來走入社會(huì)能更好的工作打下了基礎(chǔ)。</p><p> 總之通過這次的實(shí)驗(yàn),讓我認(rèn)識(shí)到了自己的不足,同時(shí)又通過這次的實(shí)驗(yàn)讓我們學(xué)到了讓我們受用一生的知識(shí)。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]戴明楨等編著.TMS320C54X DSP 結(jié)構(gòu)原理及應(yīng)用. 北京:航空航天大學(xué)出版社,第2
50、版,2007;</p><p> [2]彭啟琮編著.DSP技術(shù)的發(fā)展與應(yīng)用.北京:高等教育出版社,2002;</p><p> [3]胡廣書編著.數(shù)字信號(hào)處理理論、算法與實(shí)現(xiàn).北京:清華大學(xué)出版社,2005;</p><p> [4]北京合眾達(dá)電子技術(shù)有限公司編著.SEED-DTK系列實(shí)驗(yàn)手冊(cè).北京合眾達(dá)電子技術(shù)有限公司出版,2007。</p>
51、<p> [5]鄒彥主編.DSP原理及應(yīng)用.電子工業(yè)出版社,2012.1</p><p><b> 附錄:源程序代碼</b></p><p> #include <stdio.h></p><p> #include "mmdrv.h"</p><p> #includ
52、e "mcbsp.h"</p><p> #include "cpu_reg.h" </p><p> #include "lcd_86.h"</p><p> ioport unsigned portefff;</p><p> #define IO_374 p
53、ortefff</p><p> void init_exint1_interrupt();</p><p> void init_GPIO(void); </p><p> void mic_bypass(void);</p><p> void line_in_bypass(void);</p><p>
54、; void mic_record(void);</p><p> void line_in_record(void);</p><p> void codec_play(void);</p><p> void DEAL_RX(unsigned int i);</p><p> unsigned int DEAL_TX(void)
55、;</p><p> void stop_interrupt(); //stop receive & tranmit interrupt</p><p> unsigned int flag=0xffff;</p><p> unsigned long secter_num;</p><p> unsigned int p
56、ing_buf1[0x2000]; </p><p> unsigned int ping_buf2[0x2000];</p><p> unsigned int enc_flag=0; </p><p> unsigned int input_flag =0;</p><p> unsigned int rl_flag=0;
57、 </p><p> unsigned int count1=0 ;</p><p> #define max_secter_num33</p><p> #define init_secter_num0</p><p> void main(void)</p&
58、gt;<p><b> {</b></p><p> unsigned int i,j;</p><p> unsigned int key_val;</p><p> SWWSR = 0x7fff;</p><p> SWCR = 0x0001;</p><p>
59、BSCR = 0x8006; </p><p> CLKMD = PLL_DIV_INIT;</p><p> waitloop( 0x0400 );</p><p> CLKMD = PLL_LOCK_INIT_X(9);</p><p> waitloop( 0x0400 ); </p><
60、p> PMST = 0x0168;</p><p> Init_MCBSP_codec();</p><p> init_codec_linein();</p><p> init_exint1_interrupt();</p><p> init_GPIO(); </p><p> init_l
61、cd();</p><p> LCD_clear(0);</p><p> cur_row=2; </p><p> cur_col=20; </p><p> LCD_pr_chars("RECORD_PLAY TEST",16);</p><p> cur_
62、row=3; </p><p> cur_col=1; </p><p> LCD_pr_chars("=======================",23);</p><p> IO_374=0xffff;//374 enable</p><p> Close_LED_Data(
63、);</p><p> Close_LED_Traf();</p><p> Close_LED_sign();</p><p> waitloop( 0x0400 ); </p><p><b> while(1)</b></p><p> {i=Get_Key();&l
64、t;/p><p> waitloop( 0x04000 );</p><p> j=Get_Key();</p><p><b> if(i==j)</b></p><p><b> {</b></p><p> flag=0xffff;</p><
65、;p> key_val=j;/*Save key_val*/ </p><p> switch(key_val)</p><p><b> {</b></p><p><b> default: </b></p><p><b> break;
66、</b></p><p><b> case 1:</b></p><p> cur_row=4; </p><p> cur_col=10; </p><p> LCD_pr_chars(" Mic_Bypass ",17);</p&g
67、t;<p> cur_row=5; </p><p> cur_col=15; </p><p> LCD_pr_chars(" ",17);</p><p> mic_bypass(); </p><p><b> b
68、reak;</b></p><p><b> case 2:</b></p><p> cur_row=4; </p><p> cur_col=10; </p><p> LCD_pr_chars(" Line_In_Bypass ",17);<
69、;/p><p> cur_row=5; </p><p> cur_col=15; </p><p> LCD_pr_chars(" ",17);</p><p> line_in_bypass(); </p><p><
70、;b> break;</b></p><p><b> case 3:</b></p><p> cur_row=4; </p><p> cur_col=10; </p><p> LCD_pr_chars("Mic_Rec_Loopback "
71、;,17);</p><p> cur_row=5; </p><p> cur_col=15; </p><p> LCD_pr_chars(" ",17);</p><p> mic_record();</p><p><
72、b> break;</b></p><p><b> case 4:</b></p><p> cur_row=4; </p><p> cur_col=10; </p><p> LCD_pr_chars("Line_Rec_Loopback"
73、,17);</p><p> cur_row=5; </p><p> cur_col=15; </p><p> LCD_pr_chars(" ",17);</p><p> line_in_record();</p><p>&
74、lt;b> break;</b></p><p><b> case 6:</b></p><p> cur_row=4; </p><p> cur_col=10; </p><p> LCD_pr_chars(" codec_play &qu
75、ot;,17);</p><p> cur_row=5; </p><p> cur_col=15; </p><p> LCD_pr_chars(" ",17);</p><p> codec_play();</p><p>&l
76、t;b> break;</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p&g
77、t; void init_exint1_interrupt() </p><p><b> {</b></p><p> IFR =0xffff;</p><p> IMR =0x0002;//EXINT1=IMR.1</p><p> asm("\trsbx\tintm ");
78、</p><p><b> } </b></p><p> void init_tx_interrupt() //transmit interrupt</p><p><b> {</b></p><p> IFR =0xffff;</p><p> I
79、MR =0x22;//BXINT0=IMR.5=1, BXINT0=IMR.4=0,EXINT1=IMR.1=1</p><p> asm("\trsbx\tintm ");</p><p><b> } </b></p><p> void init_re_interrupt() //receive
80、interrupt</p><p><b> {</b></p><p> IFR =0xffff;</p><p> IMR =0x12;//BXINT0=IMR.5=0, BXINT0=IMR.4=1,EXINT1=IMR.1=1</p><p> asm("\trsbx\tintm &quo
81、t;);</p><p><b> } </b></p><p> void stop_interrupt() //stop receive & tranmit interrupt</p><p><b> {</b></p><p> IFR =0xffff;</p>
82、;<p> IMR =0x0002;//EXINT1=IMR.1</p><p> asm("\trsbx\tintm ");</p><p><b> } </b></p><p> interrupt void BRINT0_isr(void)</p><p>
83、<b> {</b></p><p> unsigned int i; </p><p> i = MCBSP0_DRR1; /* DRR1 = txdata */ </p><p> MCBSP0_DXR1 = i; </p><p> DEAL_RX(i);</p><
84、p><b> } </b></p><p> interrupt void BXINT0_isr()</p><p><b> {</b></p><p> MCBSP0_DXR1 = DEAL_TX(); </p><p> }
85、 </p><p> interrupt void EXINT1_isr()</p><p><b> {</b></p><p> unsigned int i;</p><p> IO_374=0xffff;//374 enable</p><p> Close_LED_Dat
86、a();</p><p> Close_LED_Traf();</p><p> Close_LED_sign();</p><p> IFR =0xffff;</p><p> //while(!(GPIOSR&0x01))</p><p><b> {</b></p&
87、gt;<p> asm("\tnop");</p><p> asm("\tnop");</p><p><b> }</b></p><p> flag=0;//~flag;</p><p> cur_row=5; </p>
88、<p> cur_col=15; </p><p> LCD_pr_chars("Codecr_Stop_play ",17);</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> Disp_LED_sig
89、n(0,i);</p><p><b> }</b></p><p><b> }</b></p><p> void init_GPIO(void) </p><p><b> {</b></p><p> GPIOCR =0xfffe;
90、 //EXINT1=GPIO.0=input=0,nand_cs=GPIO.6=output=1</p><p> GPIOSR =0x0040; //GPIO.6=output=1</p><p><b> } </b></p><p> void mic_bypass(void) </p><
91、;p><b> {</b></p><p> unsigned int data;</p><p> Init_MCBSP_codec();</p><p> init_codec_mic();</p><p> while(flag)</p><p><b> {&
92、lt;/b></p><p> data=mcbsp0_codec_rx_data();</p><p> mcbsp0_codec_tx_data(data);</p><p><b> }</b></p><p> init_codec_linein(); </p><p>
93、<b> } </b></p><p> void line_in_bypass(void)</p><p><b> {</b></p><p> unsigned int sign_bit=0;</p><p> unsigned int sign_state=1;//1<
94、/p><p> unsigned int data;</p><p> // Init_MCBSP_codec();</p><p> //init_codec_linein();</p><p> while(flag)</p><p><b> {</b></p>&
95、lt;p> data=mcbsp0_codec_rx_data();</p><p> mcbsp0_codec_tx_data(data);</p><p> Disp_LED_sign((sign_state&0x01),sign_bit);</p><p> sign_bit++;</p><p> if(si
96、gn_bit==0x7f0)</p><p><b> {</b></p><p> sign_bit=0; </p><p> sign_state =~sign_state;</p><p><b> } </b></p><p><b> }
97、</b></p><p><b> } </b></p><p> void mic_record(void)</p><p><b> {</b></p><p> unsigned int sign_bit=0;</p><p> uns
98、igned int sign_state=1;</p><p> Init_MCBSP_codec();</p><p> init_codec_mic();</p><p> init_re_interrupt(); //receive interrupt</p><p> enc_flag=0; </p>&l
99、t;p> secter_num=init_secter_num; </p><p> count1 =0;</p><p> MCBSP0_DXR1 = MCBSP0_DRR1;/* DRR1 = txdata */ </p><p> while(flag)</p><p><b> {</b&g
100、t;</p><p> if(enc_flag)</p><p><b> {</b></p><p> Disp_LED_sign((sign_state&0x01),sign_bit);</p><p> sign_bit++;</p><p> if(sign_bit==8
101、)</p><p><b> {</b></p><p> sign_bit=0;</p><p> sign_state =~sign_state;</p><p><b> } </b></p><p> enc_flag=0;</p><p
102、> if(input_flag)</p><p><b> {</b></p><p> erase_nand_flash(secter_num);</p><p> Write_nand_flash_block(secter_num,ping_buf2,0);</p><p><b> }&
103、lt;/b></p><p><b> else</b></p><p><b> {</b></p><p> erase_nand_flash(secter_num);</p><p> Write_nand_flash_block(secter_num,ping_buf1,0);
104、</p><p><b> }</b></p><p> secter_num +=32;</p><p> if(secter_num>32*max_secter_num)</p><p> { </p><p> asm("\tnop&
105、quot;);</p><p> asm("\tnop");</p><p> asm("\tnop");</p><p> secter_num=init_secter_num;</p><p><b> break;</b></p><p>&l
106、t;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> Close_LED_Data();</p><p> Close_LED_Traf();</p><p> Close_LED_s
107、ign();</p><p> cur_row=5; </p><p> cur_col=15; </p><p> LCD_pr_chars("Codecr_Stop_play ",17);</p><p> stop_interrupt(); //stop receive &am
108、p; tranmit interrupt</p><p> init_codec_linein();</p><p><b> }</b></p><p> void line_in_record(void)</p><p><b> {</b></p><p>
109、unsigned int sign_bit=0;</p><p> unsigned int sign_state=1;</p><p> enc_flag=0; </p><p> secter_num=init_secter_num; </p><p> count1 =0;</p><p> Init
110、_MCBSP_codec();</p><p> //init_codec_linein();</p><p> init_re_interrupt(); //receive interrupt</p><p> MCBSP0_DXR1 = MCBSP0_DRR1;/* DRR1 = txdata */</p><p>
111、while(flag)</p><p><b> {</b></p><p> if(enc_flag)</p><p><b> {</b></p><p> Disp_LED_sign((sign_state&0x01),sign_bit);</p><p&
112、gt; sign_bit++;</p><p> if(sign_bit==8)</p><p><b> {</b></p><p> sign_bit=0;</p><p> sign_state =~sign_state;</p><p><b> } </b&g
113、t;</p><p> enc_flag=0;</p><p> if(input_flag)</p><p><b> {</b></p><p> erase_nand_flash(secter_num);</p><p> Write_nand_flash_block(secter
114、_num,ping_buf2,0);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> erase_nand_flash(secter_num);</p><p
115、> Write_nand_flash_block(secter_num,ping_buf1,0);</p><p><b> }</b></p><p> secter_num +=32;</p><p> if(secter_num>32*max_secter_num)</p><p> {
116、 </p><p> asm("\tnop");</p><p> asm("\tnop");</p><p> asm("\tnop");</p><p> secter_num=init_secter_num;</p><p&
117、gt;<b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> Close_LED_Data();</p><p>
118、 Close_LED_Traf();</p><p> Close_LED_sign();</p><p> cur_row=5; </p><p> cur_col=15; </p><p> LCD_pr_chars("Codecr_Stop_play ",17);</p&g
119、t;<p> stop_interrupt(); //stop receive & tranmit interrupt</p><p><b> }</b></p><p> void codec_play(void)</p><p><b> {</b></p><p
120、> unsigned int sign_bit=0;</p><p> unsigned int sign_state=1;</p><p> enc_flag=0; </p><p> secter_num=init_secter_num+32; </p><p> input_flag = 1;
121、 </p><p> count1 =0;</p><p> Init_MCBSP_codec();</p><p> read_nand_flash_block(secter_num,ping_buf2,0);</p><p> secter_num
122、 +=32; </p><p> count1 =0;</p><p> //init_tx_interrupt(); </p><p> MCBSP0_DXR1 = 0;/* DRR1 = txdata */</p><p> while(flag) </p><p><b>
123、 {</b></p><p> mcbsp0_codec_tx_data(DEAL_TX());</p><p> if(enc_flag)</p><p><b> {</b></p><p> Disp_LED_sign((sign_state&0x01),sign_bit);</
124、p><p> sign_bit++;</p><p> if(sign_bit==8)</p><p><b> {</b></p><p> sign_bit=0;</p><p> sign_state =~sign_state;</p><p><b>
125、; } </b></p><p> enc_flag=0;</p><p> if(input_flag)</p><p><b> {</b></p><p> read_nand_flash_block(secter_num,ping_buf2,0);</p><p>
126、<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> read_nand_flash_block(secter_num,ping_buf1,0);</p><p><b> }</b
127、></p><p> secter_num +=32;</p><p> if(secter_num>32*max_secter_num)</p><p> { </p><p> asm("\tnop");</p><p> asm("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- dsp課程設(shè)計(jì)--數(shù)字信號(hào)處理的最小系統(tǒng)
- dsp最小系統(tǒng)課程設(shè)計(jì)
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)報(bào)告-- 語音壓縮與回放
- dsp最小系統(tǒng)課程設(shè)計(jì)
- 數(shù)字信號(hào)處理(dsp)課程設(shè)計(jì)報(bào)告
- 數(shù)字信號(hào)課程設(shè)計(jì)--數(shù)字信號(hào)處理
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)報(bào)告8
- 數(shù)字信號(hào)課程設(shè)計(jì)--語音數(shù)字信號(hào)處理與分析及matlab實(shí)現(xiàn)
- 數(shù)字信號(hào)處理課程設(shè)計(jì)--語音信號(hào)的處理與濾波
- 數(shù)字信號(hào)處理課程設(shè)計(jì)---語音信號(hào)的處理與濾波
- 數(shù)字信號(hào)處理課程設(shè)計(jì)---語音信號(hào)的處理與濾波
- 數(shù)字信號(hào)處理課程設(shè)計(jì)--語音信號(hào)的處理與濾波
- 基于dsp_builder數(shù)字信號(hào)處理課程設(shè)計(jì)
- 數(shù)字信號(hào)課程設(shè)計(jì)---語音信號(hào)的處理與濾波
- dsp最小系統(tǒng)課程設(shè)計(jì)---tms320lf2407a最小系統(tǒng)的設(shè)計(jì)
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)報(bào)告-- ad接口設(shè)計(jì)
- 數(shù)字信號(hào)處理課程設(shè)計(jì)--語音信號(hào)濾波去噪
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)報(bào)告-- 步進(jìn)電機(jī)
- 數(shù)字信號(hào)處理課程設(shè)計(jì)---基于matlab的語音信號(hào)濾波處理
- 數(shù)字信號(hào)處理課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論