

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、指導(dǎo)老師: 侯亞麗 國(guó)家電工電子實(shí)驗(yàn)教學(xué)中心 DSP課程設(shè)計(jì) 設(shè)計(jì)報(bào)告 設(shè)計(jì)題目:利用 DSP 實(shí)現(xiàn)實(shí)時(shí)信號(hào)頻譜分析 學(xué) 院: 電子信息工程學(xué)院 專 業(yè): 通信工程 成 員: 目錄 1 設(shè)計(jì)環(huán)境簡(jiǎn)介 . 1 1.1 DSP 芯片主要特性 . 1 1.2 BJTU-DSP550 實(shí)驗(yàn)板板上資源主要包括: . 1 1.3 TMS320VC5502 片上外設(shè) . 1 2 指標(biāo)及設(shè)計(jì)要求 . 2 3 設(shè)計(jì)思路及原理 . 2 3.1 整體思路 . 2 3.2 信號(hào)的實(shí)時(shí)采集與傳輸 . 2 3.3 FFT 算法 . 3 3.4 “ ping -pong” 存儲(chǔ)方式 . 6 4 實(shí)驗(yàn)步驟 . 6 5 實(shí)驗(yàn)結(jié)
2、果及分析 . 7 6 實(shí)驗(yàn)中遇到的問題及解決方法 . 9 7 實(shí)驗(yàn)感想 . 9 8 參考文獻(xiàn) . 10 9 程序清單及源代碼 . 101 4 設(shè)計(jì)環(huán)境簡(jiǎ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ù)存儲(chǔ)空間采用統(tǒng)一編址,整個(gè)尋址空間大小
3、為 16M 字節(jié) (bytes),其中片內(nèi) DARAM 占 64K 字節(jié),ROM 占 32K 字節(jié),其余存儲(chǔ)空間被映射到片外 4 個(gè) 片選的子空間。 BJTU-DSP5502 板支持 TMS320VC550QSP 工作頻率可以高達(dá) 300MHz 工作的核電壓為 1.26V,I/O 電壓為 3.3V。 4. BJTU-DSP5502 實(shí)驗(yàn)板板上資源主要包括: 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 個(gè):仿真器 JTAG 接口(J1)、連接到 PC 機(jī) USB 接口 (J4)和 UART 接口(J2) 信號(hào)采集和輸出端口:立體音輸入接口 line-in(J5 ,直接接電腦的語(yǔ)音輸出端口 )/ 麥克風(fēng)輸入接口 (J7)/ 耳機(jī)音頻輸出接口 (J6) 擴(kuò)展板接口 (J9 , J10) 4. TMS320VC5502 片上外設(shè) 64bit Timer : 4 個(gè),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è)計(jì)要求 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 設(shè)計(jì)譜分析算法,或調(diào)用 DSPLIB 中 FFT 函數(shù),實(shí)現(xiàn)對(duì)信號(hào)的頻譜分析。 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔
6、? 飁飁G 利用 C 語(yǔ)言對(duì) A/D、D/A 進(jìn)行初始化 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 利用 C 語(yǔ)言對(duì) DM 進(jìn)行初始化 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 編寫 DM 中斷服務(wù)程序,實(shí)現(xiàn)信號(hào)的實(shí)時(shí)譜分析 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 利用 CCS!號(hào)分析工具分析信號(hào)
7、的頻譜成分,對(duì) FFT 算法結(jié)果進(jìn)行驗(yàn)證。 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 信號(hào)頻譜數(shù)據(jù)實(shí)時(shí)輸出到 Headph on 俞出接口,并在示波器上進(jìn)行顯示; 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ? 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 在實(shí)驗(yàn)板的 Line in 輸入端接入正弦信號(hào),分左右聲道分別采集,并分別進(jìn)行頻譜 分析 ; 椀洀攀椀 ? 爀椀愀氀 ? 吀椀洀攀猀 一攀眀 刀漀洀愀渀 ? 勻椀洀勻甀渀 ? 勻 漀琀梔椀挀 ?
8、 漀甀爀椀攀爀 一攀眀 耈?梔? 飁飁G 利用 CCS 勺 Profiler 工具計(jì)算 FFT 算法所需要的時(shí)間,并根據(jù)實(shí)時(shí)性要求進(jìn)行必要的 算法優(yōu)化 6 設(shè)計(jì)思路及原理 6. 整體思路 首先通過 DSP 勺 DM 方式對(duì)外部信號(hào)進(jìn)行實(shí)時(shí)采集,外部模擬信號(hào)先進(jìn)行 A/D 轉(zhuǎn)換, 利用 MCBS 的接收寄存器接收數(shù)據(jù),并將數(shù)據(jù)存放到 DS 簾儲(chǔ)區(qū)中。設(shè)計(jì) FFT 算法或調(diào)用 DSPLIB 中的 rfft 或 cfft 頻譜分析函數(shù),對(duì)信號(hào)進(jìn)行快速傅立葉變換。頻譜數(shù)據(jù)利用 DMA 方式送到 D/A 轉(zhuǎn)換器轉(zhuǎn)換為模擬信號(hào)在示波器上顯示。 6. 信號(hào)的實(shí)時(shí)采集與傳輸 DMAg 制器可以在不影響 CPU
9、 勺情況下完成數(shù)據(jù)的傳輸,因此數(shù)據(jù)傳輸速度快,在 要求信號(hào)實(shí)時(shí)采集和處理的系統(tǒng)中常采用 DM 方式進(jìn)行信號(hào)傳輸。本設(shè)計(jì)中輸入信號(hào)經(jīng) 3 過 A/D 轉(zhuǎn)換成數(shù)字信號(hào)后,將 DMA!道 4 的源地址設(shè)為串口的接收寄存器,利用 DMAI 道 4 進(jìn)行傳輸;而將 DM!道 5 的目的地址設(shè)置為串口的發(fā)送寄存器,將信號(hào)頻譜利用 DMA5 通道進(jìn)行傳輸, 此步驟需要對(duì) AIC23、McBSP DMA!道 4和 DMA!道 5 進(jìn)行初始化配置。 處 理流圖如圖 3.2.1 所示。 開始 主程序 中斷服務(wù) 程序 圖 321 6. FFT 算法 FFT ( Fast Fourier Transformation
10、 ),即為快速傅氏變換,是離散傅氏變換 (DFT)的 快速算法,它是根據(jù)離散傅氏變換的奇、偶、虛、實(shí)等特性,對(duì)離散傅立葉變換的算法進(jìn)行 改進(jìn)獲得的。 離散傅里葉變換 DFT N 點(diǎ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ù)序列的情況下,對(duì)某個(gè) k 值,直接按(1)式計(jì)算 X(k)只需要 N 次復(fù)數(shù)乘法和(N-1) 次復(fù)數(shù)加法。因此,對(duì)所有 N 個(gè) k 值,共需要 N2 次復(fù)數(shù)乘法和 N(N-1)次復(fù)數(shù)加法。對(duì)于一些相 當(dāng)大有N 直(如 1024 點(diǎn)
11、)來說,直接計(jì)算它的 DFT 所需要的計(jì)算量是很大的,因此 DFT 運(yùn)算的 4 應(yīng)用受到了很大的限制。 快速傅里葉變換 FFT 旋轉(zhuǎn)因子 WN 有如下的特性。5 對(duì)稱性:WNk+N/2=-WNk 周期性:WNn( N-k)=WNk(N-n)=WN-nk 利用這些特性,既可以使 DFT 中有些項(xiàng)合并,減少了乘法積項(xiàng),又可以將長(zhǎng)序列的 DFT 分解成幾個(gè)短序列的 DFT FFT 就是利用了旋轉(zhuǎn)因子的對(duì)稱性和周期性來減少運(yùn)算量的。 一般而言,F(xiàn)FT 算法分為按時(shí)間抽取的 FFT( DIT FFT)和按頻率抽取的 FFT ( DIF FFT ) 兩大類。DIF FFT 算法是在時(shí)域內(nèi)將每一級(jí)輸入序列依
12、次按奇/偶分成2個(gè)短序列進(jìn)行計(jì)算。 而 DIF FFT 算法是在頻域內(nèi)將每一級(jí)輸入序列依次奇/偶分成2個(gè)短序列進(jìn)行計(jì)算。兩者的 區(qū)別是旋轉(zhuǎn)因子出現(xiàn)的位置不同,得算法是一樣的。在 DIF FFT 算法中,旋轉(zhuǎn)因子 出現(xiàn)在 輸入端,而在 DIF FFT 算法中它出現(xiàn)在輸入端。假定序列 x(n)的點(diǎ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國(guó)
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 由于對(duì)稱性,VNk+N/2=-Wk。 因此,N 點(diǎ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 點(diǎn)
14、值。以同樣的方式進(jìn)行抽取, 可以求得 N/4 點(diǎn)的 DFT 重復(fù)抽取過程, 就可以使 N 點(diǎn)的 DFT 用上組 2 點(diǎn)的 DFT 來計(jì)算,這樣就可以大減少運(yùn)算量。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 的蝶形運(yùn)算如圖 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 級(jí)運(yùn)算,每級(jí)有 N/2 個(gè) 2 點(diǎn) FFT 蝶形運(yùn)算,因此, N 點(diǎn) FFT 總共有 MN/2 個(gè)蝶形運(yùn)算。 圖 3.3.1 基 2 DIF FFT 的蝶形運(yùn)算 例如:基數(shù)為 2 的 FFT,當(dāng) N=8 時(shí),共需要 3 級(jí),12 個(gè)基 2 DIT FFT 的蝶形運(yùn)算。其信 號(hào)流程如圖 3.3.2 所示。 -1 -1+J 圖 3.3.2 從圖可以看出,輸入是經(jīng)過比特反轉(zhuǎn)的倒位序列,稱為位碼倒置,其排列順序?yàn)?A-BC 7 x(0),x(4),x(2),x(6),x(1),x(5),x(3
16、),x(7), 輸出 是按自 然順序 排列, 其 順序?yàn)?x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7). 在本設(shè)計(jì)中,信號(hào)的頻譜通過 FFT 算法得出,F(xiàn)FT 算法可以自己編寫,也可以調(diào)用 55xdsp.lib 庫(kù) rfft 或 cfft 函數(shù)。調(diào)用庫(kù)函數(shù)的需要在工程中添加庫(kù)文件 55xdsp.lib ,并且在 程序中包含頭文件 dsplib.h 。調(diào)用的時(shí)候入口參數(shù)是時(shí)域信號(hào)地址, 返回處理后的 FFT 信號(hào), 注意返回值不包含求模過程,而是交替返回實(shí)部和虛部。本實(shí)驗(yàn)采用自己編寫的基 2 頻率抽 取法計(jì)算 FFT。 6. “ping-pong ”存儲(chǔ)方式 P
17、ing-pong 存儲(chǔ)方式在內(nèi)存開辟四塊存儲(chǔ)區(qū),分別是 gBufferRcvPing 、 gBufferRcvPong、gBufferXmtPing、gBufferXmtPong,其中前兩塊用于 DMA 接收,后兩塊 用于 DM發(fā)送。目的是將正在接收或發(fā)送的區(qū)域與正在處理的區(qū)域分離開。這個(gè)過程通過 變量“ pingpong ”控制,以進(jìn)入中斷時(shí) pingpong=0 為例,進(jìn)入終端后將其值改為 1,將 DMA 接收目的區(qū)改為 gBufferRcvPong ,處理 gBufferRcvPing 的數(shù)據(jù),并將處理的數(shù)據(jù)發(fā)往 gBufferXmtPing ,而同時(shí) DM 發(fā)送源是 gBufferXm
18、tPong,這樣發(fā)送和接收都不沖突。程序 有序的運(yùn)行。 7 實(shí)驗(yàn)步驟 (1 ) 新建工程,正確設(shè)置工程選項(xiàng)( build option ),設(shè)置工程的存儲(chǔ)器模式、頭文 件路徑及庫(kù)文件路徑等,注意工程存放路徑不能有中文名; (2) 編寫工程所需的所有實(shí)驗(yàn)源程序, 實(shí)驗(yàn)程序包括 c 文件、h文件、cmd 文件、GEL 文件、中斷向量 s55 文件等,并添加進(jìn)工程; (3) 將仿真器等硬件正確連接上,注意音頻輸入輸出方向是否正確。將音頻立體聲 輸入 J5 接電腦耳機(jī)輸出口,將 J7 接電腦語(yǔ)音錄入口; (4) 按 F7 鍵編譯連接生成 obj 文件(無錯(cuò)誤時(shí)) ,若程序有錯(cuò)誤則查看錯(cuò)誤信息, 雙擊錯(cuò)
19、誤處光標(biāo)自動(dòng)跳轉(zhuǎn)到錯(cuò)誤處,直到排除所有錯(cuò)誤; (5) 點(diǎn)擊 file 菜單下 load program 載入程序,將程序下載在 DSP 芯片中,點(diǎn)擊run ” 或按鍵F5 全速運(yùn)行; (6) 使用變量觀察圖形觀察窗等工具觀察分析輸入輸出信號(hào)是否與預(yù)期效果相同; ( 7) 系統(tǒng)調(diào)試、代碼優(yōu)化等; ( 8) 確定最終方案,撰寫設(shè)計(jì)報(bào)告。 8 5 實(shí)驗(yàn)結(jié)果及分析 圖 5.1 和圖 5.2 顯示的是左右聲道同時(shí)輸入相同頻率的正弦信號(hào)的實(shí)驗(yàn)結(jié)果,圖 5.1 是實(shí)際輸出的示波器顯示,圖 5.2 是用 ccs 工具計(jì)算的結(jié)果顯示,用于驗(yàn)證實(shí)驗(yàn)結(jié)果。 圖 5.3、圖 5.4 和圖 5.5 顯示的是雙聲道不同輸
20、入的結(jié)果,左右聲道分別輸入 2kHz 正 弦和 1kHz 方波。三個(gè)圖分別是 ccs 工具得出的結(jié)果、本實(shí)驗(yàn) FFT 算出的結(jié)果和輸出的示波 器顯示的結(jié)果,根據(jù)實(shí)驗(yàn)設(shè)置,信號(hào)的采樣率是 32kHz,做 256 點(diǎn) FFT。由數(shù)字信號(hào)處理原 理知頻譜的分辨率是 32k/256=125Hz.,從圖中看,波峰的主要頻頻率分別是 5*8=1000Hz 和 125*16=2000Hz。當(dāng)然除此之外還有其他的諧波成分,諧波主要是由于輸入方波造成的。實(shí) 際示波器再進(jìn)行一定的處理就可以精確計(jì)算出輸入信號(hào)的頻譜成分, 因此本實(shí)驗(yàn)的效果達(dá)到 預(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í)驗(yàn)中遇到的問題及解決方法 編譯時(shí)提示找不到庫(kù)文件或頭文件,找不到庫(kù)文件是工程設(shè)置的問題,也可以收到 添加,找不10 到頭文件可以把 include 語(yǔ)句的尖括號(hào)改成引號(hào)試試。 編譯正確但是載入后不能正常運(yùn)行,這種情況可以讓 CPU 復(fù)位一下,或者重啟軟件 環(huán)境等。 左右聲道分別采集并分別做 FFT,原理是采集的時(shí)候是“左-右-左-右-左-右”采集 的,按此規(guī)律
22、分別提取兩個(gè)聲道的數(shù)據(jù)即可。 各寄存器的初始化配置,剛開始時(shí)候沒什么頭緒,完全不知道怎么配置那些寄存器, 后來找到一些例程和 TI 官方文檔,按照例程框架模仿編程,逐步完善。 實(shí)驗(yàn)感想 雖然已經(jīng)學(xué)習(xí)了信號(hào)系統(tǒng)和數(shù)字信號(hào)處理等先修課程, 但是兩門課程的學(xué)習(xí)都僅限于理 論知識(shí), 并沒有實(shí)際的用到信號(hào)處理中來, 而這次的課程設(shè)計(jì)才是真正的實(shí)際應(yīng)用。 可以說 我們?cè)?dsp 的實(shí)際應(yīng)用上還是一片空白, 通過這次課程設(shè)計(jì), 我們開始了解了 dsp 處理的過 程及 dsp 芯片的應(yīng)用方法和過程。 我想這是很重要的, 因?yàn)?dsp 的芯片是很多的我們不可能 在短時(shí)間內(nèi)全部學(xué)習(xí)到, 但是可以通過學(xué)習(xí)一個(gè)芯片而
23、觸類旁通, 在以后接觸到類似的芯片 的時(shí)候能很快上手。 我們的設(shè)計(jì)題目是利用 dsp 實(shí)現(xiàn)實(shí)時(shí)信號(hào)譜分析,簡(jiǎn)單的實(shí)現(xiàn)功能并不是很難,但在 課程設(shè)計(jì)中我們也遇到了很多的困難, 包括基礎(chǔ)一些的 C 語(yǔ)言的組織語(yǔ)法問題以及專業(yè)相關(guān) 的數(shù)字信號(hào)處理原理上的問題等。 但是最終都通過查閱資料或者請(qǐng)教老師解決了, 結(jié)果并不 是最重要的, 重要的是通過這次課程設(shè)計(jì), 我們更過的了解了在設(shè)計(jì)一個(gè)系統(tǒng)的時(shí)候遇到問 題的解決思路以及接觸一個(gè)自己不熟悉的設(shè)計(jì)時(shí)怎樣才能盡快上手去哪里怎樣獲取資料等 技能。另外在實(shí)驗(yàn)中特別是編程的時(shí)候遇到了很多問題都是細(xì)節(jié)的問題, 這也再次提醒我們, 細(xì)節(jié)很重要,在很大程度上決定最終的成
24、敗。 總之這次課程設(shè)計(jì)收獲還是不小的。 這次 DSP 系統(tǒng)課程設(shè)計(jì)給我最大的感受便是它將理論知識(shí)與實(shí)際編程相結(jié)合。通過之 前學(xué)習(xí)的數(shù)字信號(hào)處理,我們對(duì) DSP 已經(jīng)有了基本的認(rèn)識(shí),但僅僅是理論課程的學(xué)習(xí)并不 能對(duì)知識(shí)有十分深入的理解,沒有一個(gè)直觀的認(rèn)識(shí)。本次課程設(shè)計(jì)在理論知識(shí)的基礎(chǔ)之上, 加入了軟件編程與硬件連接,是理論與實(shí)踐的結(jié)合。 通過這次課設(shè),我對(duì) DSP 的原理有了更深入直觀的理解,同時(shí)提升了自己的編程能力, 逐漸掌握11 如何將思想通過代碼表達(dá)出來, 這是本專業(yè)極其重要的一種能力。 此外, 面對(duì)一個(gè) 相對(duì)陌生的問題時(shí), 我們學(xué)會(huì)了如何查閱資料, 如何學(xué)習(xí)相關(guān)知識(shí), 如何與大家共同學(xué)習(xí)
25、探 討。這些都是十分寶貴的學(xué)習(xí)經(jīng)歷,對(duì)我們今后的學(xué)習(xí)工作有很大的幫助。 參考文獻(xiàn) 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ù)長(zhǎng)度為 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 個(gè)數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024基于類腦計(jì)算人工智能安全
- 口語(yǔ)交際:轉(zhuǎn)述 教學(xué)設(shè)計(jì)-2023-2024學(xué)年語(yǔ)文四年級(jí)下冊(cè)統(tǒng)編版
- 2025年中考道德與法治全真模擬卷3(含答案)
- 攝影基礎(chǔ)知識(shí)培訓(xùn)課件
- 出資贈(zèng)與合同范本
- 2025年節(jié)約糧食標(biāo)準(zhǔn)教案5篇
- 員工薪酬福利計(jì)劃
- 加強(qiáng)社區(qū)“鄰里守望”機(jī)制建設(shè)計(jì)劃
- 加強(qiáng)幼兒園學(xué)生創(chuàng)新思維能力的工作計(jì)劃
- 教學(xué)評(píng)價(jià)中的定量與定性計(jì)劃
- 《工程建設(shè)監(jiān)理規(guī)劃》課件
- 《鋼結(jié)構(gòu)安裝施工》課件
- 2024年執(zhí)業(yè)藥師資格藥事管理與法規(guī)相關(guān)知識(shí)考試題庫(kù)與答案
- DB43T 1179-2016 火災(zāi)高危單位消防安全評(píng)估技術(shù)指南
- 2024年湖南省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 第五屆中國(guó)石油工程設(shè)計(jì)大賽-地面工程-獲獎(jiǎng)作品
- 腰椎骨水泥術(shù)后護(hù)理
- 【臨床護(hù)士發(fā)生針刺傷情況的調(diào)研報(bào)告(論文)9300字】
- 數(shù)字孿生水利項(xiàng)目建設(shè)可行性研究報(bào)告
- 大班繪本閱讀《小老鼠的探險(xiǎn)日記》教案含反思
- 高級(jí)中學(xué)語(yǔ)文教師資格考試學(xué)科知識(shí)與教學(xué)能力2024年下半年測(cè)試試題及解答
評(píng)論
0/150
提交評(píng)論