利用dsp實現(xiàn)實時信號譜分析概要_第1頁
利用dsp實現(xiàn)實時信號譜分析概要_第2頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、指導(dǎo)老師: 侯亞麗 國家電工電子實驗教學(xué)中心 DSP課程設(shè)計 設(shè)計報告 設(shè)計題目:利用 DSP 實現(xiàn)實時信號頻譜分析 學(xué) 院: 電子信息工程學(xué)院 專 業(yè): 通信工程 成 員: 目錄 1 設(shè)計環(huán)境簡介 . 1 1.1 DSP 芯片主要特性 . 1 1.2 BJTU-DSP550 實驗板板上資源主要包括: . 1 1.3 TMS320VC5502 片上外設(shè) . 1 2 指標(biāo)及設(shè)計要求 . 2 3 設(shè)計思路及原理 . 2 3.1 整體思路 . 2 3.2 信號的實時采集與傳輸 . 2 3.3 FFT 算法 . 3 3.4 “ ping -pong” 存儲方式 . 6 4 實驗步驟 . 6 5 實驗結(jié)

2、果及分析 . 7 6 實驗中遇到的問題及解決方法 . 9 7 實驗感想 . 9 8 參考文獻 . 10 9 程序清單及源代碼 . 101 4 設(shè)計環(huán)境簡介 4. DSP 芯片主要特性 C55x是 TI的 C5000 系列的 DSP 的子系列,是目前能耗效率很高的 DSP 處理器,其功耗 可低至 0.05mW/MIPS.是 54 系列發(fā)展起來的,和 C54x 代碼兼容,但是速度更快,功耗明顯 降低,如300MHz 的 C55x 與 120MHz 的 C54x 相比,處理速度提高了 5 倍,功耗只有 C54x的 1/6. TMS320VC5502 勺程序/數(shù)據(jù)存儲空間采用統(tǒng)一編址,整個尋址空間大小

3、為 16M 字節(jié) (bytes),其中片內(nèi) DARAM 占 64K 字節(jié),ROM 占 32K 字節(jié),其余存儲空間被映射到片外 4 個 片選的子空間。 BJTU-DSP5502 板支持 TMS320VC550QSP 工作頻率可以高達 300MHz 工作的核電壓為 1.26V,I/O 電壓為 3.3V。 4. BJTU-DSP5502 實驗板板上資源主要包括: DSP 芯片 1 枚(U1) : TMS320VC5502300MHz SDRAM 1 枚 (U5) : 2MX 32bit(8Mbytes) HY57V643220CT FLASH 1 枚(U4) : 256KX 16bit(512Kby

4、tes) SST39VF400A-70 CPLD 1 枚(U2) : CY37064VP100 通信接口 3 個:仿真器 JTAG 接口(J1)、連接到 PC 機 USB 接口 (J4)和 UART 接口(J2) 信號采集和輸出端口:立體音輸入接口 line-in(J5 ,直接接電腦的語音輸出端口 )/ 麥克風(fēng)輸入接口 (J7)/ 耳機音頻輸出接口 (J6) 擴展板接口 (J9 , J10) 4. TMS320VC5502 片上外設(shè) 64bit Timer : 4 個,TIMER0/TIMER1/Watch Dog TIMER/TIMER3(DSP/BIOS timer) McBSP 3 通道

5、,McBSP0/McBSP1/McBSP2 DMA:6 通道 , DMA0/ DMA1/ DMA2/ DMA3/ DMA4/ DMA5/ DMA6 IIC :1 通道 UART:1 通道 8/16bit HPI :1 通道 2 5 指標(biāo)及設(shè)計要求 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 設(shè)計譜分析算法,或調(diào)用 DSPLIB 中 FFT 函數(shù),實現(xiàn)對信號的頻譜分析。 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔

6、? 飁飁G 利用 C 語言對 A/D、D/A 進行初始化 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 利用 C 語言對 DM 進行初始化 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 編寫 DM 中斷服務(wù)程序,實現(xiàn)信號的實時譜分析 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 利用 CCS!號分析工具分析信號

7、的頻譜成分,對 FFT 算法結(jié)果進行驗證。 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 信號頻譜數(shù)據(jù)實時輸出到 Headph on 俞出接口,并在示波器上進行顯示; 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 在實驗板的 Line in 輸入端接入正弦信號,分左右聲道分別采集,并分別進行頻譜 分析 ; 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ?

8、 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 利用 CCS 勺 Profiler 工具計算 FFT 算法所需要的時間,并根據(jù)實時性要求進行必要的 算法優(yōu)化 6 設(shè)計思路及原理 6. 整體思路 首先通過 DSP 勺 DM 方式對外部信號進行實時采集,外部模擬信號先進行 A/D 轉(zhuǎn)換, 利用 MCBS 的接收寄存器接收數(shù)據(jù),并將數(shù)據(jù)存放到 DS 簾儲區(qū)中。設(shè)計 FFT 算法或調(diào)用 DSPLIB 中的 rfft 或 cfft 頻譜分析函數(shù),對信號進行快速傅立葉變換。頻譜數(shù)據(jù)利用 DMA 方式送到 D/A 轉(zhuǎn)換器轉(zhuǎn)換為模擬信號在示波器上顯示。 6. 信號的實時采集與傳輸 DMAg 制器可以在不影響 CPU

9、 勺情況下完成數(shù)據(jù)的傳輸,因此數(shù)據(jù)傳輸速度快,在 要求信號實時采集和處理的系統(tǒng)中常采用 DM 方式進行信號傳輸。本設(shè)計中輸入信號經(jīng) 3 過 A/D 轉(zhuǎn)換成數(shù)字信號后,將 DMA!道 4 的源地址設(shè)為串口的接收寄存器,利用 DMAI 道 4 進行傳輸;而將 DM!道 5 的目的地址設(shè)置為串口的發(fā)送寄存器,將信號頻譜利用 DMA5 通道進行傳輸, 此步驟需要對 AIC23、McBSP DMA!道 4和 DMA!道 5 進行初始化配置。 處 理流圖如圖 3.2.1 所示。 開始 主程序 中斷服務(wù) 程序 圖 321 6. FFT 算法 FFT ( Fast Fourier Transformation

10、 ),即為快速傅氏變換,是離散傅氏變換 (DFT)的 快速算法,它是根據(jù)離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行 改進獲得的。 離散傅里葉變換 DFT N 點 DFT 的正變換公式為: oQ nk X(k)=二 x(n)*W N n =0 式中,WN=e-j*2 n /N ,稱為旋轉(zhuǎn)因子或蝶形因子。從 DFT 的定義可以看出,在 x(n) 為復(fù)數(shù)序列的情況下,對某個 k 值,直接按(1)式計算 X(k)只需要 N 次復(fù)數(shù)乘法和(N-1) 次復(fù)數(shù)加法。因此,對所有 N 個 k 值,共需要 N2 次復(fù)數(shù)乘法和 N(N-1)次復(fù)數(shù)加法。對于一些相 當(dāng)大有N 直(如 1024 點

11、)來說,直接計算它的 DFT 所需要的計算量是很大的,因此 DFT 運算的 4 應(yīng)用受到了很大的限制。 快速傅里葉變換 FFT 旋轉(zhuǎn)因子 WN 有如下的特性。5 對稱性:WNk+N/2=-WNk 周期性:WNn( N-k)=WNk(N-n)=WN-nk 利用這些特性,既可以使 DFT 中有些項合并,減少了乘法積項,又可以將長序列的 DFT 分解成幾個短序列的 DFT FFT 就是利用了旋轉(zhuǎn)因子的對稱性和周期性來減少運算量的。 一般而言,F(xiàn)FT 算法分為按時間抽取的 FFT( DIT FFT)和按頻率抽取的 FFT ( DIF FFT ) 兩大類。DIF FFT 算法是在時域內(nèi)將每一級輸入序列依

12、次按奇/偶分成2個短序列進行計算。 而 DIF FFT 算法是在頻域內(nèi)將每一級輸入序列依次奇/偶分成2個短序列進行計算。兩者的 區(qū)別是旋轉(zhuǎn)因子出現(xiàn)的位置不同,得算法是一樣的。在 DIF FFT 算法中,旋轉(zhuǎn)因子 出現(xiàn)在 輸入端,而在 DIF FFT 算法中它出現(xiàn)在輸入端。假定序列 x(n)的點數(shù) N 是 2 的幕,按照 DIF FFT 算法可將其分為偶序列和奇序列。 偶序列:x(2r)=x i(r) 奇序列:x(2r+1)=x 2(r) 其中:r=0,1,2,N/2-1 則 x(n)的 DFT 表示為 N d N A N A X k 八 X n 八 X n X n W,k n =0 n四 n國

13、 n 為偶數(shù) n 為奇數(shù) N/2 4 N/2 J x 2r w2rk x 2r 1 WN2r 1 k r =0 r rk k N/2 2 rk WN X2 r WN r=0 =X1 (k ) + w,X2(k ) r,k= 0,1,.N /2-1 式中,X1(k)和 x2(k)分別為 x1 (r )和 x2(r)的 N/2 的 DFT 由于對稱性,VNk+N/2=-Wk。 因此,N 點DFT 可分為兩部分: 前半部分:x(k)=x 1(k)+WkW2(k) (1) 后半部分: x(N/2+k)=x 1(k)-W kNX2(k) k=0,1,N/2-1 (2) 0N-1 區(qū)間 x(k)的 N 點

14、值。以同樣的方式進行抽取, 可以求得 N/4 點的 DFT 重復(fù)抽取過程, 就可以使 N 點的 DFT 用上組 2 點的 DFT 來計算,這樣就可以大減少運算量。N/2 2 二為 X1 r WN r =0 N /2 J -X1 r WN /2 N/2 J k rk W X2 r WN; r z0 從式(1)和式(2 )可以看出,只要求出 0N/2-1 區(qū)間 X1(k)和 X2(k)的值,就可求出 6 基 2 DIF FFT 的蝶形運算如圖 3.3.1 所示。設(shè)蝶形輸入為 X1(k)和 X2(K),輸出為 x(k) 和 x(N/2+K),則有 x(k)=x i(k)+WkNX2(k) (6) x

15、(N/2+k)=x i(k)-W kNx2(k) (7) 在基數(shù)為 2 的 FFT 中,設(shè) N=2M共有 M 級運算,每級有 N/2 個 2 點 FFT 蝶形運算,因此, N 點 FFT 總共有 MN/2 個蝶形運算。 圖 3.3.1 基 2 DIF FFT 的蝶形運算 例如:基數(shù)為 2 的 FFT,當(dāng) N=8 時,共需要 3 級,12 個基 2 DIT FFT 的蝶形運算。其信 號流程如圖 3.3.2 所示。 -1 -1+J 圖 3.3.2 從圖可以看出,輸入是經(jīng)過比特反轉(zhuǎn)的倒位序列,稱為位碼倒置,其排列順序為 A-BC 7 x(0),x(4),x(2),x(6),x(1),x(5),x(3

16、),x(7), 輸出 是按自 然順序 排列, 其 順序為 x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7). 在本設(shè)計中,信號的頻譜通過 FFT 算法得出,F(xiàn)FT 算法可以自己編寫,也可以調(diào)用 55xdsp.lib 庫 rfft 或 cfft 函數(shù)。調(diào)用庫函數(shù)的需要在工程中添加庫文件 55xdsp.lib ,并且在 程序中包含頭文件 dsplib.h 。調(diào)用的時候入口參數(shù)是時域信號地址, 返回處理后的 FFT 信號, 注意返回值不包含求模過程,而是交替返回實部和虛部。本實驗采用自己編寫的基 2 頻率抽 取法計算 FFT。 6. “ping-pong ”存儲方式 P

17、ing-pong 存儲方式在內(nèi)存開辟四塊存儲區(qū),分別是 gBufferRcvPing 、 gBufferRcvPong、gBufferXmtPing、gBufferXmtPong,其中前兩塊用于 DMA 接收,后兩塊 用于 DM發(fā)送。目的是將正在接收或發(fā)送的區(qū)域與正在處理的區(qū)域分離開。這個過程通過 變量“ pingpong ”控制,以進入中斷時 pingpong=0 為例,進入終端后將其值改為 1,將 DMA 接收目的區(qū)改為 gBufferRcvPong ,處理 gBufferRcvPing 的數(shù)據(jù),并將處理的數(shù)據(jù)發(fā)往 gBufferXmtPing ,而同時 DM 發(fā)送源是 gBufferXm

18、tPong,這樣發(fā)送和接收都不沖突。程序 有序的運行。 7 實驗步驟 (1 ) 新建工程,正確設(shè)置工程選項( build option ),設(shè)置工程的存儲器模式、頭文 件路徑及庫文件路徑等,注意工程存放路徑不能有中文名; (2) 編寫工程所需的所有實驗源程序, 實驗程序包括 c 文件、h文件、cmd 文件、GEL 文件、中斷向量 s55 文件等,并添加進工程; (3) 將仿真器等硬件正確連接上,注意音頻輸入輸出方向是否正確。將音頻立體聲 輸入 J5 接電腦耳機輸出口,將 J7 接電腦語音錄入口; (4) 按 F7 鍵編譯連接生成 obj 文件(無錯誤時) ,若程序有錯誤則查看錯誤信息, 雙擊錯

19、誤處光標(biāo)自動跳轉(zhuǎn)到錯誤處,直到排除所有錯誤; (5) 點擊 file 菜單下 load program 載入程序,將程序下載在 DSP 芯片中,點擊run ” 或按鍵F5 全速運行; (6) 使用變量觀察圖形觀察窗等工具觀察分析輸入輸出信號是否與預(yù)期效果相同; ( 7) 系統(tǒng)調(diào)試、代碼優(yōu)化等; ( 8) 確定最終方案,撰寫設(shè)計報告。 8 5 實驗結(jié)果及分析 圖 5.1 和圖 5.2 顯示的是左右聲道同時輸入相同頻率的正弦信號的實驗結(jié)果,圖 5.1 是實際輸出的示波器顯示,圖 5.2 是用 ccs 工具計算的結(jié)果顯示,用于驗證實驗結(jié)果。 圖 5.3、圖 5.4 和圖 5.5 顯示的是雙聲道不同輸

20、入的結(jié)果,左右聲道分別輸入 2kHz 正 弦和 1kHz 方波。三個圖分別是 ccs 工具得出的結(jié)果、本實驗 FFT 算出的結(jié)果和輸出的示波 器顯示的結(jié)果,根據(jù)實驗設(shè)置,信號的采樣率是 32kHz,做 256 點 FFT。由數(shù)字信號處理原 理知頻譜的分辨率是 32k/256=125Hz.,從圖中看,波峰的主要頻頻率分別是 5*8=1000Hz 和 125*16=2000Hz。當(dāng)然除此之外還有其他的諧波成分,諧波主要是由于輸入方波造成的。實 際示波器再進行一定的處理就可以精確計算出輸入信號的頻譜成分, 因此本實驗的效果達到 預(yù)期效果。 6359( A EU屮 U 1Jk-r . - 圖 5.1

21、圖 5.5 9 圖 5.2 JBe+6 4 7e+7- I 0 16D 32D 4S.0 64.0 S0.D 96.0 112 127 圖 5.4 陰 5 律秒毎格 1 A f 1 Art A A w r V w j/J v n TF 實驗中遇到的問題及解決方法 編譯時提示找不到庫文件或頭文件,找不到庫文件是工程設(shè)置的問題,也可以收到 添加,找不10 到頭文件可以把 include 語句的尖括號改成引號試試。 編譯正確但是載入后不能正常運行,這種情況可以讓 CPU 復(fù)位一下,或者重啟軟件 環(huán)境等。 左右聲道分別采集并分別做 FFT,原理是采集的時候是“左-右-左-右-左-右”采集 的,按此規(guī)律

22、分別提取兩個聲道的數(shù)據(jù)即可。 各寄存器的初始化配置,剛開始時候沒什么頭緒,完全不知道怎么配置那些寄存器, 后來找到一些例程和 TI 官方文檔,按照例程框架模仿編程,逐步完善。 實驗感想 雖然已經(jīng)學(xué)習(xí)了信號系統(tǒng)和數(shù)字信號處理等先修課程, 但是兩門課程的學(xué)習(xí)都僅限于理 論知識, 并沒有實際的用到信號處理中來, 而這次的課程設(shè)計才是真正的實際應(yīng)用。 可以說 我們在 dsp 的實際應(yīng)用上還是一片空白, 通過這次課程設(shè)計, 我們開始了解了 dsp 處理的過 程及 dsp 芯片的應(yīng)用方法和過程。 我想這是很重要的, 因為 dsp 的芯片是很多的我們不可能 在短時間內(nèi)全部學(xué)習(xí)到, 但是可以通過學(xué)習(xí)一個芯片而

23、觸類旁通, 在以后接觸到類似的芯片 的時候能很快上手。 我們的設(shè)計題目是利用 dsp 實現(xiàn)實時信號譜分析,簡單的實現(xiàn)功能并不是很難,但在 課程設(shè)計中我們也遇到了很多的困難, 包括基礎(chǔ)一些的 C 語言的組織語法問題以及專業(yè)相關(guān) 的數(shù)字信號處理原理上的問題等。 但是最終都通過查閱資料或者請教老師解決了, 結(jié)果并不 是最重要的, 重要的是通過這次課程設(shè)計, 我們更過的了解了在設(shè)計一個系統(tǒng)的時候遇到問 題的解決思路以及接觸一個自己不熟悉的設(shè)計時怎樣才能盡快上手去哪里怎樣獲取資料等 技能。另外在實驗中特別是編程的時候遇到了很多問題都是細(xì)節(jié)的問題, 這也再次提醒我們, 細(xì)節(jié)很重要,在很大程度上決定最終的成

24、敗。 總之這次課程設(shè)計收獲還是不小的。 這次 DSP 系統(tǒng)課程設(shè)計給我最大的感受便是它將理論知識與實際編程相結(jié)合。通過之 前學(xué)習(xí)的數(shù)字信號處理,我們對 DSP 已經(jīng)有了基本的認(rèn)識,但僅僅是理論課程的學(xué)習(xí)并不 能對知識有十分深入的理解,沒有一個直觀的認(rèn)識。本次課程設(shè)計在理論知識的基礎(chǔ)之上, 加入了軟件編程與硬件連接,是理論與實踐的結(jié)合。 通過這次課設(shè),我對 DSP 的原理有了更深入直觀的理解,同時提升了自己的編程能力, 逐漸掌握11 如何將思想通過代碼表達出來, 這是本專業(yè)極其重要的一種能力。 此外, 面對一個 相對陌生的問題時, 我們學(xué)會了如何查閱資料, 如何學(xué)習(xí)相關(guān)知識, 如何與大家共同學(xué)習(xí)

25、探 討。這些都是十分寶貴的學(xué)習(xí)經(jīng)歷,對我們今后的學(xué)習(xí)工作有很大的幫助。 參考文獻 TMS320VC5501/5502 DSP Direct Memory Access ControllerReference Guide.pdf TMS320C55x DSP Library Programmers Reference .pdf 3 TMS320C55x DSP Library Programmer s Reference, SPRU422J.pdf TMS320VC5502Fixed-Point Digital Signal Processor Data Manual, SPRS166K.pdf

26、 TMS320C55x Chip Support Library API Reference Guide, SPRU433I.pdf 程序清單及源代碼 C 文件 AIC23.c : A/D 和 D/A 初始化 I2C.c :總線初始化 Mcbsp.c :串口初始化 FFTfunction.c :基 2 頻譜抽取 FFT 函數(shù) main_dma4.c :主函數(shù) s55 文件 存中斷向量表 h 文件 CODEC.h dsplib.h E2PROM_Function.h i_cmplx.h tms320.h twiddle1024.h 附:主程序源代碼 12 /* * Copyright (C) 2

27、003 Texas Instruments Incorporated * All Rights Reserved */ /* * - main_dma4.c- * This is a DMA application example for Codec AIC23B analog input/output, * The example places the MCBSP in DMA transmit data mode and * syncs MCBSP receive with DMA channel 4 and MCBSP transmit * with DMA channel 5. * T

28、he example uses predefined CSL macros and symbolic * constants to create the initialization values needed for * the MCBSP and DMA control registers to effect the transfer * Created by hailingao , BJTU , 2012/06/25 */ #include #include #include #include #include #include #include #include E2PROM_Func

29、tion.h #include CODEC.h #include i_cmplx.h #include #include #include #include #include /#include dsplib.h short DataBuffer1024=0; 13 COMPLEX DDataBuffer512*2=0; Uint32 mod512*2; int i; unsigned int m=0; long n; short p,q; / -Global data definition - /* Constants for the buffered ping-pong transfer

30、*/ #define BUFFSIZE 512 #define PING 0 #define PONG 1 #define SCALE 1 /* * Data buffer declarations - the program uses four logical buffers of size * BUFFSIZE, one ping and one pong buffer on both receive and transmit sides. */ #pragma DATA_SECTION (gBufferXmtPing, buffer_sect); Uint32 gBufferXmtPin

31、gBUFFSIZE/2; / Transmit PING buffer #pragma DATA_SECTION (gBufferXmtPong, buffer_sect); Uint32 gBufferXmtPongBUFFSIZE/2; / Transmit PONG buffer #pragma DATA_SECTION (gBufferRcvPing, buffer_sect); Int16 gBufferRcvPingBUFFSIZE; / Receive PING buffer #pragma DATA_SECTION (gBufferRcvPong, buffer_sect);

32、Int16 gBufferRcvPongBUFFSIZE; / Receive PONG buffer #pragma DATA_SECTION (gBufferRcvPingleft, buffer_sect); Int16 gBufferRcvPingleftBUFFSIZE/2; / Receive PING buffer #pragma DATA_SECTION (gBufferRcvPongleft, buffer_sect); Int16 gBufferRcvPongleftBUFFSIZE/2; / Receive PONG buffer #pragma DATA_SECTION

33、 (gBufferRcvPingright, buffer_sect); Int16 gBufferRcvPingrightBUFFSIZE/2; / Receive PING buffer #pragma DATA_SECTION (gBufferRcvPongright, buffer_sect); Int16 gBufferRcvPongrightBUFFSIZE/2; / Receive PONG buffer /*- - */ / / Config McBSP: Use McBSP to send and receive the data between DSP and AIC23B

34、 / /*- - */ MCBSP_Config Mcbsp1Config = MCBSP_SPCR1_RMK( MCBSP_SPCR1_DLB_OFF, / DLB = 0 MCBSP_SPCR1_RJUST_LZF, / RJUST = 0,right justify the data and zero fill the MSBs MCBSP_SPCR1_CLKSTP_DISABLE, / CLKSTP = 0 MCBSP_SPCR1_DXENA_ON, / DXENA = 1,DX delay enabler on 0, / Reserved = 0 MCBSP_SPCR1_RINTM_

35、RRDY, / RINTM = 0 MCBSP_SPCR1_RSYNCERR_NO, / RSYNCER = 0 / MCBSP_SPCR1_RFULL_NO, / RFULL = 0 13 14 / MCBSP_SPCR1_RRDY_NO, MCBSP_SPCR1_RRST_DISABLE ), MCBSP_SPCR2_RMK( MCBSP_SPCR2_FREE_NO, MCBSP_SPCR2_SOFT_NO, MCBSP_SPCR2_FRST_FSG, MCBSP_SPCR2_GRST_CLKG, take out of its reset state MCBSP_SPCR2_XINTM_

36、XRDY, MCBSP_SPCR2_XSYNCERR_NO, / MCBSP_SPCR2_XEMPTY_NO, / MCBSP_SPCR2_XRDY_NO, MCBSP_SPCR2_XRST_DISABLE ), / 單數(shù)據(jù)相,接受數(shù)據(jù)長度為 MCBSP_RCR1_RMK( MCBSP_RCR1_RFRLEN1_OF(1), MCBSP_RCR1_RWDLEN1_16BIT ), MCBSP_RCR2_RMK( MCBSP_RCR2_RPHASE_SINGLE, MCBSP_RCR2_RFRLEN2_OF(0), MCBSP_RCR2_RWDLEN2_8BIT, MCBSP_RCR2_RCOM

37、PAND_MSB, MSB received first MCBSP_RCR2_RFIG_YES, MCBSP_RCR2_RDATDLY_1BIT ), / RRDY = 0 / RRST = 0; Disable receiver / FREE = 0 / SOFT = 0 / FRST = 1 ; Enable the frame-sync logic / GRST = 1 ; The sample rate generator is / XINTM = 0 / XSYNCER =0 / XEMPTY = 0 / XRDY = 0 / XRST = 0 Disable transimitt

38、er 16 位, 每相 2 個數(shù)據(jù) / RFRLEN1 = 1 / RWDLEN1 = 2 / RPHASE = 0 / RFRLEN2 = 0 / RWDLEN2 = 0 / RCOMPAND = 0 No companding,any size data, / RFIG = 1 Frame-sync ignore / RDATDLY = 1 1-bit data delay MCBSP_XCR1_RMK( 15 MCBSP_XCR1_XFRLEN1_OF(1), / XFRLEN1 = 1 ), MCBSP_XCR2_RMK( MCBSP_XCR2_XPHASE_SINGLE, MCBSP

39、_XCR2_XFRLEN2_OF(0), / XFIG = 1 Unexpected Frame-sync ignore MCBSP_XCR2_XDATDLY_1BIT / XDATDLY = 1 1-bit data delay ), MCBSP_SRGR1_DEFAULT, MCBSP_SRGR2_DEFAULT, MCBSP_MCR1_DEFAULT, MCBSP_MCR2_DEFAULT, MCBSP_PCR_RMK( / MCBSP_PCR_IDLEEN_RESET, by AIC23B by AIC23B MCBSP_XCR1_XWDLEN1_16BIT / XWDLEN1 = 2

40、 MCBSP_XCR2_XWDLEN2_8BIT, / XWDLEN2 = 0 MCBSP_XCR2_XCOMPAND_MSB, / XCOMPAND = 0 / XPHASE = 0 / XFRLEN2 = 0 MCBSP_XCR2_XFIG_YES, / IDLEEN = 0 MCBSP_PCR_XIOEN_SP, / XIOEN MCBSP_PCR_RIOEN_SP, / RIOEN MCBSP_PCR_FSXM_EXTERNAL, / FSXM 0 Tranmit frame-syn is provided MCBSP_PCR_FSRM_EXTERNAL, / FSRM 0 Recei

41、ve frame-syn is provided MCBSP_PCR_CLKXM_INPUT, / CLKR is input MCBSP_PCR_CLKRM_INPUT, / CLKX is input MCBSP_PCR_SCLKME_NO, / SCLKME=0 CLKG is taken from the McBSP internal input clock / MCBSP_PCR_CLKSSTAT_0, / The signal on the CLKS pin is low MCBSP_PCR_DXSTAT_0, / Drive the signal on the DX pin lo

42、w / MCBSP_PCR_DRSTAT_0, / The signal on the DR pin is low 16 or LRCOUT starts data transfer MCBSP_PCR_FSRP_ACTIVELOW, / FSRP = 1 MCBSP_PCR_CLKXP_FALLING, / CLKXP = 1 The falling edge of BCLK starts data transfer MCBSP_PCR_CLKRP_RISING / CLKRP = 1 ), MCBSP_RCERA_DEFAULT, MCBSP_RCERB_DEFAULT, MCBSP_RC

43、ERC_DEFAULT, MCBSP_RCERD_DEFAULT, MCBSP_RCERE_DEFAULT, MCBSP_RCERF_DEFAULT, MCBSP_RCERG_DEFAULT, MCBSP_RCERH_DEFAULT, MCBSP_XCERA_DEFAULT, MCBSP_XCERB_DEFAULT, MCBSP_XCERC_DEFAULT, MCBSP_XCERD_DEFAULT, MCBSP_XCERE_DEFAULT, MCBSP_XCERF_DEFAULT, MCBSP_XCERG_DEFAULT, MCBSP_XCERH_DEFAULT ; DMA_Config dm

44、aRcvConfig = DMA_DMACSDP_RMK( DMA_DMACSDP_DSTBEN_NOBURST, DMA_DMACSDP_DSTPACK_OFF, DMA_DMACSDP_DST_DARAMPORT1,MCBSP_PCR_FSXP_ACTIVEHIGH, / FSXP 1 Because a falling edge on LRCIN 17 DMA_DMACSDP_SRCBEN_NOBURST, DMA_DMACSDP_SRCPACK_OFF, DMA_DMACSDP_SRC_PERIPH, DMA_DMACSDP_DATATYPE_16BIT ), /* DMACSDP *

45、/ DMA_DMACCR_RMK( DMA_DMACCR_DSTAMODE_POSTINC, DMA_DMACCR_SRCAMODE_CONST, DMA_DMACCR_ENDPROG_OFF, DMA_DMACCR_WP_DEFAULT, DMA_DMACCR_REPEAT_OFF, DMA_DMACCR_AUTOINIT_ON, DMA_DMACCR_EN_STOP, DMA_DMACCR_PRIO_LOW, DMA_DMACCR_FS_DISABLE, DMA_DMACCR_SYNC_REVT1 ), /* DMACCR */ DMA_DMACICR_RMK( DMA_DMACICR_A

46、ERRIE_ON, DMA_DMACICR_BLOCKIE_OFF, DMA_DMACICR_LASTIE_OFF, DMA_DMACICR_FRAMEIE_ON, DMA_DMACICR_FIRSTHALFIE_OFF, DMA_DMACICR_DROPIE_OFF, DMA_DMACICR_TIMEOUTIE_OFF ), /* DMACICR */ (DMA_AdrPtr)(MCBSP_ADDR(DRR11), 0, /* DMACSSAU */ NULL, /* ENDPROG OFF */ /* AUTOINIT ON */ /* DMACSSAL */ /* DMACDSALt,o

47、 be loaded by submit */ 0, /* DMACDSAU */ 18 ; DMA_Config dmaXmtConfig = DMA_DMACSDP_RMK( DMA_DMACSDP_DSTBEN_NOBURST, DMA_DMACSDP_DSTPACK_OFF, DMA_DMACSDP_DST_PERIPH, DMA_DMACSDP_SRCBEN_NOBURST, DMA_DMACSDP_SRCPACK_OFF, DMA_DMACSDP_SRC_DARAMPORT0, DMA_DMACSDP_DATATYPE_16BIT ), /* DMACSDP */ DMA_DMAC

48、CR_RMK( DMA_DMACCR_DSTAMODE_CONST, DMA_DMACCR_SRCAMODE_POSTINC, DMA_DMACCR_ENDPROG_ON, DMA_DMACCR_WP_DEFAULT, DMA_DMACCR_REPEAT_OFF, DMA_DMACCR_AUTOINIT_OFF, DMA_DMACCR_EN_STOP, DMA_DMACCR_PRIO_LOW, DMA_DMACCR_FS_DISABLE, DMA_DMACCR_SYNC_XEVT1 ), /* DMACCR */ DMA_DMACICR_RMK( DMA_DMACICR_AERRIE_ON,B

49、UFFSIZE, /* DMACEN */ 1, /* DMACFN */ 0, /* DMACFI */ /* DMACEI */ 19 DMA_DMACICR_BLOCKIE_OFF, DMA_DMACICR_LASTIE_OFF, DMA_DMACICR_FRAMEIE_ON, DMA_DMACICR_FIRSTHALFIE_OFF, DMA_DMACICR_DROPIE_OFF, DMA_DMACICR_TIMEOUTIE_OFF /* DMACICR */ /* DMACDSAL, to be loaded by submit ; /* Define a DMA_Handle obj

50、ect to be used with DMA_open function */ DMA_Handle hDmaRcv, hDmaXmt; /* Define a MCBSP_Handle object to be used with MCBSP_open function */ MCBSP_Handle hMcbsp; volatile Uint16 transferComplete = FALSE; Uint16 err = 0; Uint16 old_intm; Uint16 xmtEventId, rcvEventId; /* Reference the start of the in

51、terrupt vector table */ */ 0, /* DMACSSAU */ (DMA_AdrPtr)(MCBSP_ADDR(DXR11), /* DMACDSAL */ 0, /* DMACDSAU */ BUFFSIZE, /* DMACEN */ 1, /* DMACFN */ 0, /* DMACFI */ /* DMACEI */ ), NULL, / Function prototypes 20 /* This symbol is defined in file vectors.s55 */ extern void VECSTART(void); /* Protoype

52、 for interrupt functions */ interrupt void dmaXmtIsr(void); interrupt void dmaRcvIsr(void); void taskFxn(void); /* * copyData() - Copy one buffer with length elements to another. */ void copyData(unsigned long *inbuf, unsigned long *outbuf, Int16 length) Int16 i = 0; / rfft(inbuf,length,SCALE); for

53、(i = 0; i length; i+) outbufi = inbufi; /* - Threads - */ /* * processBuffer() - Process audio data once it has been received. */ void processBuffer(void) Uint32 addr; static Int16 pingPong = PING; while(DMA_FGETH (hDmaRcv, DMACCR, ENDPROG) J 21 / Determine which ping-pong state were in if (pingPong

54、 = PING) / Configure the receive channel for pong input data addr = (Uint32)gBufferRcvPong) 16) & 0 xffff); / Set new state to PONG pingPong = PONG; else / Configure the receive channel for ping input data addr = (Uint32)gBufferRcvPing) 16) & 0 xffff); / Set new state to PING pingPong = PING

55、; DMA_FSETH (hDmaRcv, DMACCR, ENDPROG, 1); / DMA_FSETH (hDmaXmt, DMACCR, ENDPROG, 1); if (pingPong = PONG) /Insert your application program here / copyData(gBufferRcvPing, gBufferXmtPing, BUFFSIZE); for(i=0;i(BUFFSIZE/2);i+) gBufferRcvPinglefti=gBufferRcvPing2*i; 22 gBufferRcvPingrighti=gBufferRcvPi

56、ng2*i+1; for(i=0;i(BUFFSIZE/2/2);i+) / DDataBufferi.real=gBufferXmtPing2*i; /short int / DDataBufferi.imag=gBufferXmtPing2*i+1; /short int DDataBufferi.real=gBufferRcvPingleft2*i; /short int DDataBufferi.imag=gBufferRcvPingleft2*i+1; /short int fft256(DDataBuffer,256); m=0; for(i=0;i128;i+) p=DDataB

57、ufferi.real; q=DDataBufferi.imag; n=(long)p*(long)p+(long)q*(long)q; modm=sqrt(n); m+; / printf( 取模!); / copyData(mod, gBufferXmtPing, BUFFSIZE/2); for(i=0;iBUFFSIZE/2/2;i+) /gBufferXmtPingi=-(gBufferXmtPingi16); gBufferXmtPingi=-(modi16); /rfft(gBufferXmtPing,BUFFSIZE,SCALE); / Configure the transm

58、it channel for ping output data / addr = (Uint32)gBufferXmtPing) 16) & 0 xffff); for(i=0;i!bu!dMxn 日 b)-=!bu!dMxn 日 b (+!/S/3ZISddna!0=!)JOj !(S/3ZISddna u!dMxn日 b pomJejeaAdoo / !(. i iW .)wuud ii !+iu !(u)|jbs=iupoiu !b(6uo|)b(6uo|)+d(6uo|)d(6uo|)=u !6eiu!jaj4 n 日印旳 0=匕 !|eaj!ja n 日 EiEGci=d (

59、+!3 衣匸 0=!)0/ :0=iu 日印 EGG)%乙出25 for(i=0;i(BUFFSIZE/2);i+) gBufferRcvPonglefti=gBufferRcvPong2*i; gBufferRcvPongrighti=gBufferRcvPong2*i+1; for(i=0;i(BUFFSIZE/2/2);i+) / DDataBufferi.real=gBufferXmtPing2*i; /short int / DDataBufferi.imag=gBufferXmtPing2*i+1; /short int DDataBufferi.real=gBufferRcvPo

60、ngleft2*i; /short int DDataBufferi.imag=gBufferRcvPongleft2*i+1; /short int fft256(DDataBuffer,256); m=0; for(i=0;i128;i+) p=DDataBufferi.real; q=DDataBufferi.imag; n=(long)p*(long)p+(long)q*(long)q; modm=sqrt(n); m+; / printf( 取模!); / copyData(mod, gBufferXmtPing, BUFFSIZE/2); for(i=0;iBUFFSIZE/2/2;i+) /gBufferXmtPingi=-(gBufferXmtPingi16); 26 gBuffer

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論