用C語(yǔ)言開發(fā)DSP系統(tǒng)的全過程_第1頁(yè)
用C語(yǔ)言開發(fā)DSP系統(tǒng)的全過程_第2頁(yè)
用C語(yǔ)言開發(fā)DSP系統(tǒng)的全過程_第3頁(yè)
用C語(yǔ)言開發(fā)DSP系統(tǒng)的全過程_第4頁(yè)
用C語(yǔ)言開發(fā)DSP系統(tǒng)的全過程_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、摘要 : 目前很多嵌入式系統(tǒng)以 DSP 為核心構(gòu)建,但是,采用匯編語(yǔ)言開發(fā) DSP 系統(tǒng)存在開 發(fā)難度大、 開發(fā)周期長(zhǎng)、 維護(hù)性差等缺點(diǎn), 應(yīng)用 C 語(yǔ)言開發(fā) DSP 系統(tǒng)是廣大嵌入式開發(fā)者 的迫切要求。有關(guān)單片機(jī)的 C 語(yǔ)言開發(fā)有相當(dāng)多的資料可以參考,而 DSP 系統(tǒng)的 C 語(yǔ)言 開發(fā)卻很少見。本文以 TI 公司的 DSP 器件 TMS320F24X 系列為例,講述怎樣用 C 語(yǔ)言 開發(fā)一個(gè)完整的 DSP 嵌入式系統(tǒng)。大家在開發(fā)嵌入式產(chǎn)品時(shí)首先會(huì)想到用控制器的匯編語(yǔ)言編寫* 程序,主要原因是:一、匯編語(yǔ)言生成的程序?qū)?yīng)的二進(jìn)制代碼少,程序執(zhí)行要比高級(jí)語(yǔ)言生成的程序快。二、控制器剛問世時(shí),沒有

2、相應(yīng)的高級(jí)語(yǔ)言可供使用。三、存儲(chǔ)器的價(jià)格問題和尋址空間的限制。 以上所述問題目前都基本上解決了,在這就不闡述了。實(shí)際情況是:在單片機(jī)的應(yīng)用領(lǐng)域,開發(fā)者開始使用 C 語(yǔ)言進(jìn)行開發(fā)了。大家發(fā)現(xiàn)用高級(jí)語(yǔ)言開發(fā)嵌入式產(chǎn)品是如此 輕松,并且 C 語(yǔ)言程序編譯后的二進(jìn)制代碼也非常短小精練。目前使用最多的數(shù)字信號(hào)處理器(DSP)是美國(guó)TI公司的TMS320家族,而工業(yè)控制上用的最多的又是 TMS320F2XX 系列, TI 公司為每一個(gè) DSP 芯片提供了匯編語(yǔ)言和 C語(yǔ)言供開發(fā)者選用,本人一直使用C語(yǔ)言進(jìn)行產(chǎn)品開發(fā),而目前很少見到這方面的介紹,所以特撰此文以 TMS320F240 為例,向各位同行推薦用

3、C 語(yǔ)言開發(fā) DSP 嵌入式系統(tǒng)。1、DSP 的 C 語(yǔ)言的特殊性大家在使用 51 系列 C 語(yǔ)言時(shí)已經(jīng)注意到,控制器的 C 語(yǔ)言和 PC 機(jī)上使用的 C 有 一個(gè)顯著的特點(diǎn):經(jīng)常要對(duì)硬件操作,程序中有大量針對(duì)控制器內(nèi)部資源進(jìn)行操作的語(yǔ)句。 所以,開發(fā)者要明白怎樣用 C 語(yǔ)言來操縱控制器的內(nèi)部資源,既怎樣用 C 語(yǔ)句操作寄存器 和內(nèi)部存儲(chǔ)器等。舉個(gè)例子,在51匯編中我們寫 MOV A,#20H,匯編程序能夠識(shí)別 A是指累加器,而在 51 C程序中我們寫 ACC=32 ;,編譯器能夠識(shí)別 ACC是指累加器而不是一般的變量。即每一 個(gè)寄存器都有一個(gè)專有名字供開發(fā)者使用,它們定義在一個(gè)頭文件reg5

4、1.h 中,程序員只需在程序的開始部分用 #inelude “ reg51.h”語(yǔ)句將該文件包含進(jìn)來即可。注意:這些寄存器的 名字不能用做變量名。同樣, 在 TMS320F240 的 C 語(yǔ)言中也有一個(gè)頭文件 C240.H 定義各個(gè)寄存器的名稱, 這里摘 錄幾條語(yǔ)句進(jìn)行介紹。比如: #define IMR (PORT)0x0004 )#define XINT1_CR ( PORT) 0x07070)IMR 、 XINT1_CR 就對(duì)應(yīng)兩個(gè)寄存器,實(shí)際是寄存器的地址,用高級(jí)語(yǔ)言的說法是指針。我們也在程序的開始部分用 #inelude “ c240.h”語(yǔ)句將該文件包含進(jìn)來。這樣,在DSP的C語(yǔ)言

5、中使用它們只需在前面加一個(gè)星號(hào)( * ),例如,*IMR=0X1010 ; /*將16進(jìn)制數(shù)1010H賦給IMR寄存器 */*XINT1_CR=0X0A0B0 ; /* 將 16 進(jìn)制數(shù) AOBOH 賦給 XINT1_CR 寄存器 */開發(fā)者最好將 c240.h 這個(gè)文件打印出來,弄清楚各個(gè)寄存器的定義名稱。至于不涉及硬件的語(yǔ)法和 ANSI 語(yǔ)法一樣,需要注意的是,有些 ANSI 標(biāo)準(zhǔn)中的函數(shù)在 DSP 的編 譯器中不提供,讀者可以參考 DSP 編譯器的 C 語(yǔ)言手冊(cè)。搞清楚了這些特殊性,由匯編語(yǔ) 言轉(zhuǎn)到 C 語(yǔ)言開發(fā)是很容易的事,當(dāng)然,沒有匯編語(yǔ)言編程基礎(chǔ)的人同樣可以用C 語(yǔ)言開發(fā) DSP

6、應(yīng)用系統(tǒng)。有關(guān)嵌入式系統(tǒng)的 C 語(yǔ)言編程可參考單片機(jī)與嵌入式系統(tǒng)應(yīng)用 2001 年 1 到 6 期上馬忠梅的“嵌入式 C編程技術(shù)”,本文不做討論。下面只針對(duì)以 TMS320F240芯片為處 理器的嵌入式 C 語(yǔ)言編程進(jìn)行闡述,希望能夠指導(dǎo)讀者進(jìn)行具體操作。2、TMS320F240 芯片的 C 語(yǔ)言開發(fā)過程 簡(jiǎn)單地說,整個(gè)過程包括以下五個(gè)步驟:編輯 C 語(yǔ)言源程序編譯源程序(注意編譯參數(shù)) 鏈接目標(biāo)文件(注意用 CMD 文件) 在線仿真固化程序 下面分別進(jìn)行闡述。一 源程序的編輯可以用任何一個(gè)編輯器書寫源程序,如EDIT、NOTEPAD等,最后以.C為后綴存盤。源代碼可以寫在一個(gè) C 文件中,也

7、可寫在多個(gè) C 文件中,有些預(yù)定義變量和函數(shù)原型聲明 可以集中放在一個(gè)頭文件中。注意事項(xiàng):不要忘記在C程序的前面用#inelude “ c240.h”將寄存器定義文件包括進(jìn)來。源程序的編譯源程序編輯好后可以用 DSPCL 編譯程序進(jìn)行編譯,生成 OBJ 文件。 使用格式: DSPCL 源文件名 參數(shù)例如:DSPCL EX1.C V2XX GK MN常用參數(shù)的意義:V2XX :表示 C 編譯器選擇處理器 2XX 系列GK :保留編譯生成的匯編文件(.ASM文件)MN :進(jìn)行正常優(yōu)化其他參數(shù)請(qǐng)參考 DSP 編譯器的手冊(cè)。如果有多個(gè)源文件,分別編譯。每一個(gè)源文件經(jīng)編譯 后產(chǎn)生一個(gè) OBJ 文件和 A

8、SM 文件。三 目標(biāo)文件的鏈接(一)TI 公司的 COFF 文件格式TI 公司新的匯編器和編譯器創(chuàng)建的目標(biāo)文件采用 COFF 的目標(biāo)文件格式 ( Common Object File Format )采用 COFF 格式有利于模塊化編程,為管理代碼段和目標(biāo)系統(tǒng)存儲(chǔ)器提 供更加強(qiáng)有力和靈活的方法?;?COFF 格式編寫匯編程序或 C 語(yǔ)言程序時(shí),不必為程序 代碼和變量指定目標(biāo)地址,為程序編寫和程序移植提供了極大的方便。COFF 格式的基本思想是:鼓勵(lì)程序員在用匯編語(yǔ)言或 C 語(yǔ)言編程時(shí)運(yùn)用代碼塊和 數(shù)據(jù)塊的概念。這種塊稱為 SECTION ,是目標(biāo)文件中的最小單位。所有的塊分為兩大類: 已初始

9、化塊和未初始化塊, 已初始化塊包含程序代碼和數(shù)據(jù), 未初始化塊是為未初始化的數(shù) 據(jù)在存儲(chǔ)器中的保留塊。 C 編譯器對(duì) C 程序編譯后產(chǎn)生已初始化塊和未初始化塊,已初始 化塊如 .text 塊、 .const 塊、 .cinit 塊 ;未初始化塊如 .bss 塊。舉個(gè)例子,當(dāng)程序員用C語(yǔ)句float data100;定義一個(gè)數(shù)組時(shí)不需要指定這100個(gè)數(shù)組元素的具體位置,編譯器會(huì)在數(shù)據(jù)區(qū)預(yù)留所需空間,到鏈接時(shí)鏈接器會(huì)具體定位。(二)鏈接器對(duì)塊的處理鏈接器對(duì)塊的處理有兩個(gè)功能: 其一, 將 COFF 目標(biāo)文件中的塊用來建立程序塊和數(shù) 據(jù)塊,并將這些塊組合成可以被 DSP 芯片執(zhí)行的 COFF 輸出模

10、塊;其二,鏈接器為輸出塊 指定存儲(chǔ)位置。鏈接器提供兩個(gè)命令實(shí)現(xiàn)上述功能: MEMORY 和 SECTIONS 。 MEMORY 命令定義 目標(biāo)系統(tǒng)的存儲(chǔ)器, 程序員可以定義每一塊存儲(chǔ)器并指定起始地址和長(zhǎng)度; SECTIONS 命令 用來定義輸入塊的組合和輸出塊在存儲(chǔ)器中的存放位置。若不用 MEMORY 和 SECTIONS 命令,鏈接器采用缺省的分配算法;推薦使用這兩個(gè)命令,但要注意這兩個(gè)命令在 CMD 文 件(鏈接器命令文件)中使用。下面分析一個(gè) TMS320F240 芯片的典型 CMD 文件。(假設(shè)文件名 EX1.CMD )1、 CMD 文件的構(gòu)成及其詳細(xì)解釋BOOT.OBJ /* F24

11、0 的中斷矢量表,參見后面的說明 */EX1.OBJ /* 源程序編譯后對(duì)應(yīng)的目標(biāo)文件 */* 若程序有多個(gè)目標(biāo)文件,一塊寫在這里 */-STACK 0X400 /* 設(shè)定系統(tǒng)堆棧 */-C /* ROM 初始化 */-O EX1.OUT /* 輸出的文件名 */-M EX1.MAP /* 輸出映像文件名 */-L RTS2XX.LIB /* 鏈入 RTS2XX.LIB 庫(kù) */MEMORY /*MEMORY 命令規(guī)定系統(tǒng)的存儲(chǔ)器配置 */PAGE 0:ROM0:origin=0000h ,length=003fh /* FLASH ROM */PAGE 0:ROM1:origin=0040h

12、 ,length=0200h /*FLASH ROM */PAGE 0:ROM2:origin=0240h ,length=3000h /* FLASH ROM */PAGE 1:RAM_B2: origin=0060h,length=0020h /* 內(nèi)部 RAM B2 */PAGE 1:RAM_B1: origin=0300h,length=0100h /* 內(nèi)部 RAM B1 */PAGE 1:RAM_B0: origin=0100h,length=0100h /* 內(nèi)部 RAM B0 */PAGE 1:RAM_EX: origin=0d000h ,length=2800h /* 外部擴(kuò)

13、展 RAM */SECTIONS /* SECTIONS 命令規(guī)定了程序中塊的具體分配方法 */ .vectors: load=ROM0 /* 規(guī)定矢量表的存放位置 */.cinit : load=ROM1 /* C 初始化表的存放位置 */ .text: load=ROM2 /* 系統(tǒng)程序的存放位置 */.bss load=RAM_B0 /* 未初始化數(shù)據(jù)的存放位置 */.const load=RAM_B1 /* 已初始化數(shù)據(jù)的存放位置 */2、 TMS320F240 鏈接時(shí)所需的中斷矢量表文件和具體匯編后TMS320F240 的目標(biāo)文件在鏈接時(shí)要用到中斷矢量表, 中斷矢量表用匯編語(yǔ)言編寫,

14、 的 DSP 芯片有關(guān),假設(shè) TMS320F240 的中斷矢量表對(duì)應(yīng)的匯編程序?yàn)?BOOT.ASM , 的文件名為 BOOT.OBJ 。下面是一個(gè)典型的矢量表文件(假設(shè)程序名為 BOOT.ASM )。.port /* 定義中斷函數(shù)的名字 */ .globl _c_int0 /* 中斷 0 對(duì)應(yīng)的函數(shù)名 */.globl _c_int1 /* 中斷 1 對(duì)應(yīng)的函數(shù)名 ,以下語(yǔ)句的意義相同 */.globl _c_int2 /* 可以將中斷函數(shù)名看作中斷入口地址 */ .globl _c_int3 /* 矢量表的存放不需程序員干預(yù) */ .globl _c_int4 .globl _c_int5.

15、globl _c_int6 .globl _c_int7 .globl _c_int8.sect .vectors” /*用.sect命令自定義一個(gè)塊,用于存放中斷矢量表*/RSVECT B _c_int0 /* 中斷 0 發(fā)生后,程序的跳轉(zhuǎn)目的地址 */INT1 B _c_int1 /*中斷1發(fā)生后,則跳到c_int1 ()函數(shù)處*/INT2 B _c_int2 /* 意義同上,下同 */INT3 B _c_int3INT4 B _c_int4INT5 B _c_int5INT6 B _c_int6用匯編器匯編該程序,命令形式:DSPA BOOT.ASM - V2XX生成BOOT.OBJ文件

16、供鏈接 器使用。這樣,我們就可以按如下形式在 C 源程序中編寫中斷函數(shù): void c_intx () /* x 為 1 8 中之一 */ 中斷程序的 C 語(yǔ)句系列; 注意事項(xiàng): c_int0() 是系統(tǒng)入口函數(shù),用戶不能編寫。 經(jīng)過上面對(duì)命令文件( CMD 文件)和中斷矢量表的介紹,接下來可以鏈接命令文件來生成 所需要的 OUT 文件供 DSP 芯片執(zhí)行或進(jìn)行軟仿真。命令形式: DSPLNK CMD 文件名 例如: DSPLNK EX1.CMD 另一種情況是,不使用 CMD 文件,使用缺省配置,簡(jiǎn)單介紹如下: 命令形式: DSPLNK OBJ 文件名 參數(shù)例女口 DSPLNK EX1.0BJ

17、 BOOT.OBJ - O XX1.OUT - M XX1.MAP 以上三步可以用下圖描述:四 程序的仿真EMURST 仿真器復(fù)位命令EMU2XXW EX1.OUT 載入COFF格式的二進(jìn)制代碼仿真運(yùn)行,有關(guān)調(diào)試器的使用限于篇幅在此就不做討論了。五 程序的固化程序仿真運(yùn)行正確后,需要固化到 FLASH ROM 中, TMS320F240 內(nèi)部有 16K 字的 FLASH ROM可以用來固化程序,而不需要外擴(kuò)EPROM (程序不大于16K字的情況下)。TI 公司提供有固化程序的軟件,可以通過仿真器經(jīng) JTAG 口將程序?qū)懭胄酒瑑?nèi)。目 前發(fā)展了一種新的固化技術(shù),可以通過串口寫入 DSP 芯片,特別

18、適合于現(xiàn)場(chǎng)調(diào)試。下面介 紹通過 JTAG 口的固化方法。首先用 EMURST 命令復(fù)位調(diào)試器,然后執(zhí)行下面三個(gè)批處理文件。第一步,執(zhí)行 BC0.BAT 批處理文件,將 FLASH ROM 清除( CLEAR ),使全為 0。第二步,執(zhí)行 BEO.BAT批處理文件,將 FLASH ROM 擦除(ERASE),使全為1。以上兩步不需要修改軟件包中自帶的這兩個(gè)BAT文件。第三步,執(zhí)行 BP16K.BAT 批處理文件,將自己的 OUT文件寫入到 DSP內(nèi)部的FROM中。 執(zhí)行這一步之前,要先修改BP16K.BAT,將待寫入的OUT文件替換成自己的 OUT文件,下面看一下這個(gè)批處理文件。假設(shè)軟件包的安裝

19、目錄為C: DSP,該目錄下有一個(gè)子目錄SRC。prg2xx -p 240 -m 0x0006 -w 6 srcc2xx_bpx.out 要寫入的 OUT 文件如果要將EX1。OUT寫入到DSP的FLASH中,則執(zhí)行下面的命令:prg2xx -p 240 -m 0x0006 -w 6 srcc2xx_bpX.out c:dspEX1.out經(jīng)過以上步驟既完成了程序固化,可以將系統(tǒng)放到現(xiàn)場(chǎng)實(shí)驗(yàn)了。注意:固化程序時(shí),CPU的一定要工作在 20MHz的頻率下。在SRC子目錄下有一個(gè)配置文件C240_CFG.I文件,讀者可以根據(jù)程序說明并結(jié)合自己系統(tǒng)的外部晶振頻率將CPU的工作頻率設(shè)為20MHz (寫

20、入時(shí)的頻率)。結(jié)論本文以TMS320F240的開發(fā)為例,介紹了怎樣用C語(yǔ)言開發(fā)DSP系統(tǒng)的全過程,希望對(duì)讀者會(huì)有所啟發(fā)和幫助。有關(guān)怎樣用C語(yǔ)言編程使用 TMS320F240內(nèi)部其他資源(如:定時(shí)/比較器、ADC、SCI、SPI、中斷器)和怎樣擴(kuò)展 DSP的外圍電路等編程技術(shù)見后面的敘述。本文來自:DZ3W.COM 原文網(wǎng)址:直到接觸到DSP,由于使用TI的庫(kù)文件例程的緣故,對(duì)結(jié)構(gòu)體,聯(lián)合體等有了進(jìn)一步的了 解,也對(duì)一個(gè)工程變量的使用有了更深的認(rèn)識(shí)。下面對(duì)談?wù)剬?duì)DSP C剛?cè)腴T者的一些建議:DSP程序的定位配置一一 CMD文件,要求熟悉DSP的存儲(chǔ)器結(jié)構(gòu)。這一部分對(duì)接觸硬件多 一些的新手很容易,其實(shí)也就是配置一般的C語(yǔ)言編譯器的一部分,比如AVR單片機(jī)的頭文件,cpu選擇等在DSP中就是這一部分完成。另外還要注意TI例程中對(duì)加密位,看門狗的處理。當(dāng)然是C語(yǔ)言的一些基礎(chǔ)了: 運(yùn)算符,優(yōu)先級(jí),幾個(gè)基本流程控制語(yǔ)句。 這些無論是什么 C平臺(tái)運(yùn)行都一樣的, 基礎(chǔ)中的基礎(chǔ)。 但是也很容易因?yàn)檫@些基礎(chǔ)的簡(jiǎn)單的問題, 導(dǎo)致一些很 郁悶的結(jié)果。也是因?yàn)閷?duì)這些基礎(chǔ)的

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論