dsp的c語言程序設(shè)計_第1頁
dsp的c語言程序設(shè)計_第2頁
dsp的c語言程序設(shè)計_第3頁
dsp的c語言程序設(shè)計_第4頁
dsp的c語言程序設(shè)計_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、DSP的C語言程序設(shè)計 為什么要使用C語言對DSP編程 C語言是高級語言,易學易用。 C語言的編程效率極高,易于調(diào)試。 C語言的可移植性好。 C程序的結(jié)構(gòu)及組成 完整的C程序是由一個主函數(shù) main()和其它的子函數(shù)組成的,每一個子函數(shù)完成特定的功能。DSP的C 語言的入口地址固定為 c_int00,在中定義。C語言支持豐富的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu),在ccs集成開發(fā)環(huán)境 中,為C語言提供了完整的支持硬件的底層函數(shù)庫和支持算法的DSP函數(shù)庫。在使用C語言的庫函數(shù)時,在 工程中必須包括相應(yīng)的函數(shù)庫和運行時支持庫。下面是一般C語言程序的結(jié)構(gòu)和組成框架。 一般C程序的結(jié)構(gòu)如下: h頭文件 #i nclud

2、e函數(shù)庫 1 #include #include函數(shù)庫 3 */ /* */ /* Parameters:*/ /* - port - port address (HEX)*/ /* */ /* Return:*/ /* - returns value read from port.*/ */ /* /* Notes: */ /* */ * s16 portRead(u16 port); * /* portWrite(u16 port, s16 value) /* /* This routi ne writes a word to the specified port. /* /* Param

3、eters: /* - port - port address (HEX) /* - value - 16 bit word to write. /* */ */ */ */ */ */ */ */ /* Return:*/ /* - none*/ /* */ /* Notes: */ /* */ * void portWrite(u16 port, s16 value); #e ndif/* end of #ifndef _PORTIO_H */ 使用時,先使用宏替換或枚舉定義I/O端口的地址,然后使用portRead()和portWrite()函數(shù)訪問I/O端口 例如: #include

4、Variable=portRead(portA); c5400cgtoolsin elude目錄與 c5400dsk5402i nclude目錄中的頭文件類型不同。c5400cgtoolsi nclude 目錄下是5000系列DSP的通用頭文件,與硬件無關(guān)。c5400dsk5402include目錄下是硬件專用頭文件,包括 DSP芯片和dsk板。 頭文件和特定的庫文件相關(guān)聯(lián),c5400cgtoolsi nclude目錄下的頭文件與運行時支持庫相關(guān)聯(lián), c5400dsk5402include目錄中的部分頭文件與dsk板庫文件和相關(guān)聯(lián)。和函數(shù)庫在 c5400dsk5402lib 目錄下, 是一個主

5、要的庫函數(shù),內(nèi)部使用了。 五、關(guān)于DSPg序中段的定義 一個程序中到底有哪些段定義 般地,對于固定的硬件應(yīng)用系統(tǒng),其存儲器的配置也較為固定,存儲器的配置需要設(shè)計者自己定義,但理 解了基本的段如: .text 、.data、.stack 、.bss之外,用C語言編程時,對程序中所使用的段并不十分清楚, 可以在寫.CMD文件時,只將MEMOR部分寫出,而暫時省略掉 SECTIONS義,CCS集成開發(fā)環(huán)境會自動生成 .map 文件,其中詳細記錄了存儲器和段的配置和使用情況、各個段的絕對地址和重新分配后的全局符號,根據(jù)其中的 段的描述,我們反過來再重新修改 .CMD文件,進行合理地段到存儲器的分配。

6、DSP C語言開發(fā)環(huán)境所必有的段定義: Cinit ;C語言初始化段,包括初始化變量和常量表 text ;代碼段,包括可執(zhí)行代碼、字符串和常量 Vectors ;中斷向量段 stack ;堆棧段,為C的系統(tǒng)堆棧分配存儲空間,用于變量的傳遞 -trap const ;包括字符串常量和以con st關(guān)鍵字疋義的常量 data ;數(shù)據(jù)段 bss ;保留全局和靜態(tài)變量空間 cio -switch ;為.const 語句建立的表格 system ;為動態(tài)存儲器函數(shù) malloc 、 calloc 、 realloc 分配存儲空間 DSP的C語言程序設(shè)計實驗 分析工程中的程序,了解c語言程序的一般結(jié)構(gòu)以及

7、頭文件和函數(shù)庫的關(guān)系, 并解讀頭文件的內(nèi)容 修改程序,使三個發(fā)光二極管指示燈依次流水點亮熄滅 例:編寫程序 主要說明:DSP C程序編制的流程 函數(shù)庫中函數(shù)的使用(例如) Project的建立、編譯、調(diào)試、執(zhí)行 CMD文件的編寫 試重新定義.CMD文件,重新對project進行編譯運行。 自編寫CODE(程序,.h頭文件在c5400dsk5402include目錄下,頭文件對應(yīng)的函數(shù)在 和 中。dsk5402是一個主要的庫函數(shù),內(nèi)部使用了。 5402上有兩個多通道緩沖串行口( MCBSP0 MCBSP),其寄存器定義位于頭文件和當中。 如果在File菜單中頭load program ”項說明目

8、標報未正常連接,注意觀察條提示: VECS:0080h len gth=0080h/*i nternet PRAM:orgi n=7600h,le ngth=8000h program Ran */ Scratch RAN 5402 DSP程序寄存儲藏256K如同加載執(zhí)行 DSP 5402 64K(更多)程序存儲器空間 64K(更多)數(shù)據(jù)存儲器空間 64K I/O存儲器空間 可以由:片上 ROM片上RAN片外floah,片外RAN構(gòu)成取決定于: MP/MC OVLY FLASHENBi map在外部 存儲器時,由于 FLASHE決定訪問FLAH=1還是外部 RAN=0 OVLY FLASH可以

9、由片上 RAM RAN片外flash RAM 構(gòu)成取決于 DROM DMSEL當 map外部存儲器空間時,由 DMSEI決定是訪問FLASH/RAM( DMSEL=0還是子報存儲 器,F(xiàn)LAS 14個等待周期;RAM1個等待周期。 C5402 Device Simulater; Mp/mc=1 Ovly=1 DRAM=0 5402 DSK load program后:mp/mc=1 OVLY=1 DROM=運行程序后: mp/mc=0 OVLY=1 DROM=管腳一致,suwsr 等 待狀態(tài)寄存器D844 1 1 0 1 1 0 0 0 01 00 0 100 _ I/O 空間 高32K 低3

10、2K 高32K 低32K 54104 MCBS串口以及AD50的初始化,AD50初始化包括以下步驟: 1 .打開CODEC獲取句柄(指針) 2. 設(shè)置AD轉(zhuǎn)換的工作方式 3. 設(shè)置DA轉(zhuǎn)換的工作方式 4. 設(shè)置模擬輸入增益 5. 設(shè)置模輸出增益 6. 設(shè)置取樣率 board in it Flag cade in it Flag code_setup_serial_port 設(shè)置串口 code resetcodee 復(fù)位 cli ne_reset code_disable_tx_isr code_disable_vx_isr code_write_regs code_setup_serical_

11、port serial_reset D : DSPTEST DTK- 把Project中所用到的所有頭文件、庫文件、包含文件均方向在Project目錄下,解析此工程,了解庫函數(shù) 的定義與源程序, Code的操作 串口( MCBSP的操作 MCBSP TMS320C5000系統(tǒng)DSP系統(tǒng)設(shè)計與開發(fā)實例,熟悉多通道緩沖串口的結(jié)構(gòu)組成以及各個 寄存器的內(nèi)容工作方式,編程方法: MCBSP勺初始化 串口復(fù)位(發(fā)送復(fù)位、接收復(fù)位) 設(shè)置所有寄存器的值 SPCR 1 SPCR2 RCR1 RCR2 XCR1 XCR2 SPGR1 SPGR2 PCR CODE (AD50的初始化 CODEC復(fù)位 設(shè)置線路輸

12、入通道增益 設(shè)置輸出增益 設(shè)置模擬工作方式輸入選擇 LINE 設(shè)置數(shù)據(jù)部分的運行模式 設(shè)置電源模式 設(shè)置數(shù)據(jù)格式,CODE(工作于主方式 設(shè)置波樣率 啟動CODEC 另外:MCBSP勺初始化及使用參考頭文件的有關(guān)函數(shù)。 MCBSP勺初始化: 接收器復(fù)位,SPCR啲D0=0 發(fā)送器復(fù)位,SPCR2勺D0=0 設(shè)置SPCR1寄存器:(0X007) (D15禁止數(shù)字環(huán)回: DLB=0 (D14- D13)接收數(shù)據(jù)符號擴展和調(diào)整方式: =00右對齊MCBS零填充 (D12 D11 )時鐘停止模式: =00 時鐘停止模式營業(yè) (D10- D08)保留 (D7) DX31腳延遲功能 =0 關(guān)閉DX3腳延時

13、功能 (D6)保留 (D5- D4)接收中斷模式 =00 當RRDY有效時,產(chǎn)生接收中斷 D3) 接收幀同步錯誤標志 =0 不檢測同步錯誤 D2) 接收移位寄存滿過速錯誤標志 =1 接收移位寄存器滿 D1) 接收就緒標志 =1 接收器就緒 D0) 接收器復(fù)位 =1 串口接收使能(接收器停止復(fù)位) 設(shè)置RCR1寄存器(接收控制寄存器官)=0 x0040 AD50寄存器的初始化:(按ENTER功能) CODEC復(fù)位:Control REG:ster1 的 設(shè)置ADCX作模式為15bit模式 control Register 2的 D4=0 設(shè)置DAO的工作模式為15bit模式 control Re

14、gister 1的 D0=0 設(shè)置DODE啲模擬輸入增益6db: control Register 4的 D3D2=01 設(shè)置DODE啲模擬輸入增益-6db: control Register 4的 D1D0=01 設(shè)置DODE啲取樣率為8000HZ: con trol Register 4 的 D6 04=N=MCLK 128 x 8000 AD50按寄存器初始化 AD50按功能進行初始化 在CODE .h頭文件中,定義了與 CODEQAD50功能相關(guān)的枚舉變量,除了可以調(diào)用中提供 的函數(shù)之外,我們可以利用這些枚舉變量重新編寫自己的函數(shù),用枚舉變量相或產(chǎn)生 所需要的寄存器初始化值。 片上外設(shè)

15、寄存器的初始化方法: 有兩種,一是按要求填表,然后將結(jié)果直接寫入寄存器;二是用寄存器各部分的宏定義相或,如 各寄存器比特的宏定義。 報卡初始化 brdi ni t(100); 初始化的內(nèi)容; #8806h 29 單元 OH tXPC #0a0hT pmST C1KnD1=0 k C1K2=0 C1K3=1 設(shè)置CPU的工作頻率 設(shè)置等待周期 SWR=D844H 設(shè)置報卡初始化標志sxm=1 JINTM=1 *zch=*zch or ox2c J 對I/O端口 0、4、2、3、5、6進行初始化 DSP技術(shù)及其應(yīng)用常見問題 .cmd文件的格式及編寫 .cmd文件的編寫硬件確定存貯器配置就基本確定了

16、嗎 5402 DSP存儲器配置如何是 64K RAM、256k Flash 嗎 Boot loader 過程 如何察看函數(shù)庫內(nèi)容,如頭文件中的函數(shù) 在程序調(diào)試中,打開匯編窗口,使用斷點、單步方式進行調(diào)試。 DSP從復(fù)位到運行,MP/MC OVLY、DROM位的變化 如何知道C程序中有哪些段定義編譯時生成并察看.map文件。 AD5 0的一次通信二次通信如何用軟件實現(xiàn) AD50 AIC23兩種codec的操作是否一致是否可調(diào)用一個庫函數(shù) 不一致。 DSK板的初始化包含哪些內(nèi)容 CSL庫是否只能用于 dsp_bios編程模式否,可以在非 dsp_bios環(huán)境下調(diào)用CSL庫。 AD5 0的Prima

17、ry、Seco nd通信對應(yīng)于 MCBS串口,是如何實現(xiàn)的分兩次寫,使用了宏函數(shù)().嗎 5402DSK板上集成了一個并口仿真器,它仿真時裝載程序是使用的JTAG接口,還是HPI接口 使用DSK并口仿真器調(diào)試 DSP時,各控制比特的設(shè)置以及memory的map如何此時是否為 HPI Boot loader 方式 并口仿真與 HPI引導是否為一回事不是,通過JTAG下載調(diào)試程序,程序運行后暫停,此時MP/MC=0 OVLY=1 DROM=0 I/O空間cpld寄存器如何觀察 ram中數(shù)據(jù)可讀可改,ROM中的數(shù)據(jù)只能讀嗎 HPI-8的中文翻譯 5402上使用了 HPI-8增強型的HPI接口,hos

18、t通過HPI-8可訪問DSP所有片上RAM 在DOS下運行程序utilityevmdskctrl2 -cp,能夠察看CPLD各個I/O寄存器的值: CNTL 0 x02 STAT1: 0 x13 STAT2 0 x1E( DM_SEL=0選擇板上存儲器) CPLDREV 0 x1F SEM0 0 x1F( FLASHENB=0 INTSEL=0 FC1CON=1選擇 SRAM乍為外部存儲器) DMSEL OFF SEM1 0 x1F HINT YES 此時,flash位于程序空間的 8000HBFFFFH ram位于程序和數(shù)據(jù)空間的低 64K,即程序空間的 0080HEFFFH 可同時被程序存儲空間和數(shù)據(jù)存儲空間訪問,因此在 .CMD文件中,必須將程序存儲器(PAGE0和數(shù)據(jù)存儲器 (PAGE1統(tǒng)一分配存儲空間。注意 .CMD文件、.map文件與實際程序代碼的對應(yīng)關(guān)系。這相當于馮紐曼(諾 依曼)結(jié)構(gòu),雖然程序存儲器空間和數(shù)據(jù)存儲器空間分屬兩個不同的邏輯空間,但實際上卻對應(yīng)著同一個物理的 存儲器空間,高速處理器大多采用這種存儲器結(jié)構(gòu),在5402DSKDSP系統(tǒng)中程序

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論