




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、摘要 : 目前很多嵌入式系統(tǒng)以 DSP 為核心構(gòu)建,但是,采用匯編語言開發(fā) DSP 系統(tǒng)存在開 發(fā)難度大、 開發(fā)周期長、 維護(hù)性差等缺點, 應(yīng)用 C 語言開發(fā) DSP 系統(tǒng)是廣大嵌入式開發(fā)者 的迫切要求。有關(guān)單片機(jī)的 C 語言開發(fā)有相當(dāng)多的資料可以參考,而 DSP 系統(tǒng)的 C 語言 開發(fā)卻很少見。本文以 TI 公司的 DSP 器件 TMS320F24X 系列為例,講述怎樣用 C 語言 開發(fā)一個完整的 DSP 嵌入式系統(tǒng)。大家在開發(fā)嵌入式產(chǎn)品時首先會想到用控制器的匯編語言編寫* 程序,主要原因是:一、匯編語言生成的程序?qū)?yīng)的二進(jìn)制代碼少,程序執(zhí)行要比高級語言生成的程序快。二、控制器剛問世時,沒有
2、相應(yīng)的高級語言可供使用。三、存儲器的價格問題和尋址空間的限制。 以上所述問題目前都基本上解決了,在這就不闡述了。實際情況是:在單片機(jī)的應(yīng)用領(lǐng)域,開發(fā)者開始使用 C 語言進(jìn)行開發(fā)了。大家發(fā)現(xiàn)用高級語言開發(fā)嵌入式產(chǎn)品是如此 輕松,并且 C 語言程序編譯后的二進(jìn)制代碼也非常短小精練。目前使用最多的數(shù)字信號處理器(DSP)是美國TI公司的TMS320家族,而工業(yè)控制上用的最多的又是 TMS320F2XX 系列, TI 公司為每一個 DSP 芯片提供了匯編語言和 C語言供開發(fā)者選用,本人一直使用C語言進(jìn)行產(chǎn)品開發(fā),而目前很少見到這方面的介紹,所以特撰此文以 TMS320F240 為例,向各位同行推薦用
3、C 語言開發(fā) DSP 嵌入式系統(tǒng)。1、DSP 的 C 語言的特殊性大家在使用 51 系列 C 語言時已經(jīng)注意到,控制器的 C 語言和 PC 機(jī)上使用的 C 有 一個顯著的特點:經(jīng)常要對硬件操作,程序中有大量針對控制器內(nèi)部資源進(jìn)行操作的語句。 所以,開發(fā)者要明白怎樣用 C 語言來操縱控制器的內(nèi)部資源,既怎樣用 C 語句操作寄存器 和內(nèi)部存儲器等。舉個例子,在51匯編中我們寫 MOV A,#20H,匯編程序能夠識別 A是指累加器,而在 51 C程序中我們寫 ACC=32 ;,編譯器能夠識別 ACC是指累加器而不是一般的變量。即每一 個寄存器都有一個專有名字供開發(fā)者使用,它們定義在一個頭文件reg5
4、1.h 中,程序員只需在程序的開始部分用 #inelude “ reg51.h”語句將該文件包含進(jìn)來即可。注意:這些寄存器的 名字不能用做變量名。同樣, 在 TMS320F240 的 C 語言中也有一個頭文件 C240.H 定義各個寄存器的名稱, 這里摘 錄幾條語句進(jìn)行介紹。比如: #define IMR (PORT)0x0004 )#define XINT1_CR ( PORT) 0x07070)IMR 、 XINT1_CR 就對應(yīng)兩個寄存器,實際是寄存器的地址,用高級語言的說法是指針。我們也在程序的開始部分用 #inelude “ c240.h”語句將該文件包含進(jìn)來。這樣,在DSP的C語言
5、中使用它們只需在前面加一個星號( * ),例如,*IMR=0X1010 ; /*將16進(jìn)制數(shù)1010H賦給IMR寄存器 */*XINT1_CR=0X0A0B0 ; /* 將 16 進(jìn)制數(shù) AOBOH 賦給 XINT1_CR 寄存器 */開發(fā)者最好將 c240.h 這個文件打印出來,弄清楚各個寄存器的定義名稱。至于不涉及硬件的語法和 ANSI 語法一樣,需要注意的是,有些 ANSI 標(biāo)準(zhǔn)中的函數(shù)在 DSP 的編 譯器中不提供,讀者可以參考 DSP 編譯器的 C 語言手冊。搞清楚了這些特殊性,由匯編語 言轉(zhuǎn)到 C 語言開發(fā)是很容易的事,當(dāng)然,沒有匯編語言編程基礎(chǔ)的人同樣可以用C 語言開發(fā) DSP
6、應(yīng)用系統(tǒng)。有關(guān)嵌入式系統(tǒng)的 C 語言編程可參考單片機(jī)與嵌入式系統(tǒng)應(yīng)用 2001 年 1 到 6 期上馬忠梅的“嵌入式 C編程技術(shù)”,本文不做討論。下面只針對以 TMS320F240芯片為處 理器的嵌入式 C 語言編程進(jìn)行闡述,希望能夠指導(dǎo)讀者進(jìn)行具體操作。2、TMS320F240 芯片的 C 語言開發(fā)過程 簡單地說,整個過程包括以下五個步驟:編輯 C 語言源程序編譯源程序(注意編譯參數(shù)) 鏈接目標(biāo)文件(注意用 CMD 文件) 在線仿真固化程序 下面分別進(jìn)行闡述。一 源程序的編輯可以用任何一個編輯器書寫源程序,如EDIT、NOTEPAD等,最后以.C為后綴存盤。源代碼可以寫在一個 C 文件中,也
7、可寫在多個 C 文件中,有些預(yù)定義變量和函數(shù)原型聲明 可以集中放在一個頭文件中。注意事項:不要忘記在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ù)請參考 DSP 編譯器的手冊。如果有多個源文件,分別編譯。每一個源文件經(jīng)編譯 后產(chǎn)生一個 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)存儲器提 供更加強(qiáng)有力和靈活的方法。基于 COFF 格式編寫匯編程序或 C 語言程序時,不必為程序 代碼和變量指定目標(biāo)地址,為程序編寫和程序移植提供了極大的方便。COFF 格式的基本思想是:鼓勵程序員在用匯編語言或 C 語言編程時運(yùn)用代碼塊和 數(shù)據(jù)塊的概念。這種塊稱為 SECTION ,是目標(biāo)文件中的最小單位。所有的塊分為兩大類: 已初始
9、化塊和未初始化塊, 已初始化塊包含程序代碼和數(shù)據(jù), 未初始化塊是為未初始化的數(shù) 據(jù)在存儲器中的保留塊。 C 編譯器對 C 程序編譯后產(chǎn)生已初始化塊和未初始化塊,已初始 化塊如 .text 塊、 .const 塊、 .cinit 塊 ;未初始化塊如 .bss 塊。舉個例子,當(dāng)程序員用C語句float data100;定義一個數(shù)組時不需要指定這100個數(shù)組元素的具體位置,編譯器會在數(shù)據(jù)區(qū)預(yù)留所需空間,到鏈接時鏈接器會具體定位。(二)鏈接器對塊的處理鏈接器對塊的處理有兩個功能: 其一, 將 COFF 目標(biāo)文件中的塊用來建立程序塊和數(shù) 據(jù)塊,并將這些塊組合成可以被 DSP 芯片執(zhí)行的 COFF 輸出模
10、塊;其二,鏈接器為輸出塊 指定存儲位置。鏈接器提供兩個命令實現(xiàn)上述功能: MEMORY 和 SECTIONS 。 MEMORY 命令定義 目標(biāo)系統(tǒng)的存儲器, 程序員可以定義每一塊存儲器并指定起始地址和長度; SECTIONS 命令 用來定義輸入塊的組合和輸出塊在存儲器中的存放位置。若不用 MEMORY 和 SECTIONS 命令,鏈接器采用缺省的分配算法;推薦使用這兩個命令,但要注意這兩個命令在 CMD 文 件(鏈接器命令文件)中使用。下面分析一個 TMS320F240 芯片的典型 CMD 文件。(假設(shè)文件名 EX1.CMD )1、 CMD 文件的構(gòu)成及其詳細(xì)解釋BOOT.OBJ /* F24
11、0 的中斷矢量表,參見后面的說明 */EX1.OBJ /* 源程序編譯后對應(yīng)的目標(biāo)文件 */* 若程序有多個目標(biāo)文件,一塊寫在這里 */-STACK 0X400 /* 設(shè)定系統(tǒng)堆棧 */-C /* ROM 初始化 */-O EX1.OUT /* 輸出的文件名 */-M EX1.MAP /* 輸出映像文件名 */-L RTS2XX.LIB /* 鏈入 RTS2XX.LIB 庫 */MEMORY /*MEMORY 命令規(guī)定系統(tǒng)的存儲器配置 */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 鏈接時所需的中斷矢量表文件和具體匯編后TMS320F240 的目標(biāo)文件在鏈接時要用到中斷矢量表, 中斷矢量表用匯編語言編寫,
14、 的 DSP 芯片有關(guān),假設(shè) TMS320F240 的中斷矢量表對應(yīng)的匯編程序為 BOOT.ASM , 的文件名為 BOOT.OBJ 。下面是一個典型的矢量表文件(假設(shè)程序名為 BOOT.ASM )。.port /* 定義中斷函數(shù)的名字 */ .globl _c_int0 /* 中斷 0 對應(yīng)的函數(shù)名 */.globl _c_int1 /* 中斷 1 對應(yīng)的函數(shù)名 ,以下語句的意義相同 */.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命令自定義一個塊,用于存放中斷矢量表*/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 語句系列; 注意事項: c_int0() 是系統(tǒng)入口函數(shù),用戶不能編寫。 經(jīng)過上面對命令文件( CMD 文件)和中斷矢量表的介紹,接下來可以鏈接命令文件來生成 所需要的 OUT 文件供 DSP 芯片執(zhí)行或進(jìn)行軟仿真。命令形式: DSPLNK CMD 文件名 例如: DSPLNK EX1.CMD 另一種情況是,不使用 CMD 文件,使用缺省配置,簡單介紹如下: 命令形式: 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)場調(diào)試。下面介 紹通過 JTAG 口的固化方法。首先用 EMURST 命令復(fù)位調(diào)試器,然后執(zhí)行下面三個批處理文件。第一步,執(zhí)行 BC0.BAT 批處理文件,將 FLASH ROM 清除( CLEAR ),使全為 0。第二步,執(zhí)行 BEO.BAT批處理文件,將 FLASH ROM 擦除(ERASE),使全為1。以上兩步不需要修改軟件包中自帶的這兩個BAT文件。第三步,執(zhí)行 BP16K.BAT 批處理文件,將自己的 OUT文件寫入到 DSP內(nèi)部的FROM中。 執(zhí)行這一步之前,要先修改BP16K.BAT,將待寫入的OUT文件替換成自己的 OUT文件,下面看一下這個批處理文件。假設(shè)軟件包的安裝
19、目錄為C: DSP,該目錄下有一個子目錄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)場實驗了。注意:固化程序時,CPU的一定要工作在 20MHz的頻率下。在SRC子目錄下有一個配置文件C240_CFG.I文件,讀者可以根據(jù)程序說明并結(jié)合自己系統(tǒng)的外部晶振頻率將CPU的工作頻率設(shè)為20MHz (寫
20、入時的頻率)。結(jié)論本文以TMS320F240的開發(fā)為例,介紹了怎樣用C語言開發(fā)DSP系統(tǒng)的全過程,希望對讀者會有所啟發(fā)和幫助。有關(guān)怎樣用C語言編程使用 TMS320F240內(nèi)部其他資源(如:定時/比較器、ADC、SCI、SPI、中斷器)和怎樣擴(kuò)展 DSP的外圍電路等編程技術(shù)見后面的敘述。本文來自:DZ3W.COM 原文網(wǎng)址:直到接觸到DSP,由于使用TI的庫文件例程的緣故,對結(jié)構(gòu)體,聯(lián)合體等有了進(jìn)一步的了 解,也對一個工程變量的使用有了更深的認(rèn)識。下面對談?wù)剬SP C剛?cè)腴T者的一些建議:DSP程序的定位配置一一 CMD文件,要求熟悉DSP的存儲器結(jié)構(gòu)。這一部分對接觸硬件多 一些的新手很容易,其實也就是配置一般的C語言編譯器的一部分,比如AVR單片機(jī)的頭文件,cpu選擇等在DSP中就是這一部分完成。另外還要注意TI例程中對加密位,看門狗的處理。當(dāng)然是C語言的一些基礎(chǔ)了: 運(yùn)算符,優(yōu)先級,幾個基本流程控制語句。 這些無論是什么 C平臺運(yùn)行都一樣的, 基礎(chǔ)中的基礎(chǔ)。 但是也很容易因為這些基礎(chǔ)的簡單的問題, 導(dǎo)致一些很 郁悶的結(jié)果。也是因為對這些基礎(chǔ)的
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《智能安防系統(tǒng)介紹》課件
- 尊重勞動 創(chuàng)新未來
- 排球教學(xué)課件之防守與攔網(wǎng)
- 《產(chǎn)后護(hù)理》課件
- 2025抵押擔(dān)保合同范本
- 《涂裝前的準(zhǔn)備工作》課件
- 《智能自動化簡介》課件
- 2025四川省房屋買賣合同書范本
- 《中樞神經(jīng)系統(tǒng)病變B》課件
- 浙江省嘉興市2023-2024學(xué)年高一上學(xué)期1月期末測試物理試題 無答案
- 殯葬招聘面試題及答案
- office職場高效辦公知到課后答案智慧樹章節(jié)測試答案2025年春三亞理工職業(yè)學(xué)院
- 2025年上海市靜安區(qū)初三二模語文試卷(含答案)
- 水泥預(yù)制構(gòu)件及建材項目可行性研究報告參考范文
- 建設(shè)工程質(zhì)量檢測標(biāo)準(zhǔn)化指南?技術(shù)示范文本 檢測專項檢測報告和原始記錄模板 -(九)橋梁及地下工程大類
- 2025年中國脊柱骨水泥行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 電機(jī)節(jié)能協(xié)議書模板
- 2024年四川西南石油大學(xué)招聘事業(yè)編制輔導(dǎo)員考試真題
- 中學(xué)教育基礎(chǔ)(上)知到課后答案智慧樹章節(jié)測試答案2025年春陜西師范大學(xué)
- 樓梯 欄桿 欄板(一)22J403-1
- 宮腔鏡的儀器及噐械(課堂PPT)
評論
0/150
提交評論