“今天開始,我們就要真正開始2812的學習了。我們今天的內容比較簡單,主要是讓沒有基礎的朋友來了解一下DSP開發需要哪些工具,一個完整的2812的工程(Project)是由哪些文件組成的,各個文件的主要作用是什么,以及如何在CCS里創建一個新的工程。
1.DSP開發所需要的工具
咱要進行DSP的學習和開發了,可能從沒接觸過DSP的朋友就要問了,我們做DSP開發首先要哪些開發工具呢?DSP開發通常需要軟件開發環境和硬件平臺。軟件開發環境為CCS(Code Composer Studio),是TI公司為方便開發人員而設計的軟件環境。硬件平臺由仿真器和目標板組成。仿真器的作用是將目標板和PC機連起來,使得您可以在CCS里對目標板上的DSP進行編程,燒寫和調試等工作,而目標板是指具有DSP芯片,上電后能保證DSP獨立運行電路板,通常為各個公司設計的開發板或者您自己設計的電路板。
2..安裝并配置CCS
首先,讓我們來了解一下CCS的版本。目前,CCS常用的版本有CCS2.2,CCS3.1以及CCS3.3
CCS2.2是一個分立版本,也就是每一個系列的DSP都有一個CCS2.2的開發軟件,分CCS2.2 for C2000,CCS2.2 for C5000,CCS2.2 for C6000。而CCS3.1和CCS3.3是一個集成版本,支持全系列的DSP開發。我們推薦使用CCS2.2,因為這是目前最穩定的版本。但是使用最多的是CCS3.3,因此我們這次學習也以CCS3.3為軟件開發環境,和大家一起探討2812的軟件開發。如果您還沒有安裝CCS,請訪問下面的地址進行下載。如果您購買了我們HELLODSP的相關產品,我們會為您免費提供含有CCS開發環境的資料光盤。
CCS下載地址:http://www.hellodsp.com/bbs/view?
? ?CCS的安裝和普通應用軟件的安裝沒有多大區別,在這里就不贅述了。建議大家默認安裝路徑就行了,如果需要修改安裝路徑,請確保將CCS安裝到不含中文字符的路徑。
? ?CCS安裝完成之后,桌面上會出現兩個圖標,一個是CCS,另外一個是CCS Setup。在使用CCS之前,需要對CCS進行一些配置操作,以保證CCS支持我們所要開發的DSP,在這里就是2812了。
雙擊,打開CCS Setup。如果您具有硬件開發平臺,即具有仿真器,那么請您根據仿真器的生產廠家提供的配置說明進行相應的操作。如果您不具有硬件開發的條件,目前只能軟件仿真,那么請您通過中間的篩選框,找到“F2812 Device Simulator”,將其拖入左邊的“System Configuration”欄,然后點擊“Save and Quit”退出CCS Setup的設置,可以進入CCS啦。

3.一個完整的工程由哪些文件構成
請下載附件中的例程gpio,我們將以這個程序為例為您講解一個完整的工程是由哪些文件構成的,以即這些文件大致的作用。
下載完程序后,請解壓縮,然后將其拷貝到CCS安裝路徑下面的myprojects文件夾,如果您剛才是默認安裝的,那就是C:\CCStudio_v3.3\myprojects。可能又會有朋友要問了,我只能放到myprojects文件夾嗎?當然不是的,您可以將工程文件夾放在您喜歡的位置,但是和安裝路徑一樣,請確保訪問到這個文件夾的路徑里不要出現中文字符。
OK,將gpio文件夾放好了嗎?放好之后,我們打開CCS,添加工程。添加工程的方法有兩種,一種是點擊菜單欄的Project—》Open,另一種方法是左側Files窗口內,點擊“Projects”然后右鍵,點擊“Open Project”。


打開gpio工程之后,gpio.pjt工程會顯示在左側Files窗口內。

點擊gpio.pjt左邊的加號,工程內部的文件就展現在我們面前了,下面我們來分析一下構成該工程的文件。
首先我們看到的是Include文件夾下面有很多后綴是.h的文件,這就是2812的頭文件了,頭文件的作用是定義了2812內部寄存器的數據結構。頭文件一般情況下不需要修改,如果你需要定義一些在整個工程內都具有作用域的全局變量的時候,可以在頭文件中定義這些變量,具體的方法我們以后在例程或項目實踐中應該會有介紹。

?
?
然后是libraries下面擴展名為.lib的庫文件,它是C語言系統的庫文件。

庫文件下面是source文件夾,里面的文件都是以.c為擴展名的,顧名思義,就是源文件,也就是我們開發時編寫的軟件代碼都是保存在這些文件中的。

?
?
?最后是以.CMD為擴展名的文件,這個文件的作用是用來分配存儲空間的。由于DSP編譯器的編譯結果是未定位的,DSP也沒有操作系統來定位執行代碼,DSP系統的配置需求也不盡相同,因此我們根據實際的需求,自己定義代碼的存儲位置。打個通俗的比喻,就是我們有一個倉庫,現在需要把貨物存放到倉庫里面去,為了便于日后取用貨物,我們將貨物分門別類,然后把它們存放到指定的位置去。把哪些貨物放到哪個位置的規則,就是我們的CMD文件的內容。

CMD文件又分成兩種。一種是分配RAM空間的,用來將程序load到RAM內進行調試,因為我們大部分時間都是在調試程序,所以多用這類CMD,gpio工程中的sram.cmd就是用于分配RAM空間的,另一種是分配FLASH空間的,當程序調試完畢后,需要將其燒寫到FLASH內部進行固化,這個時侯我們就需要使用這類CMD文件了。
從上面的分析我們可以看出,一個完整的工程需要由庫文件(.lib),頭文件(.h),源文件(.c)和CMD文件組成,缺一不可。
4.如何創建新的工程
下面,跟著我一起來建立個簡單的工程吧,主要通過這些步驟來了解一下如何創建新工程,方法有多種多樣,我介紹自己常用的,需要用到的文件請下載附件中的newprojects文件夾,此文件夾內的文件推薦為建立新工程的素材,請妥善保存。
1.打開CCS,點擊菜單欄里的Projects,點擊New,會跳出新工程設置的對話框,如下圖所示。


?
?
在Projects欄內我們填寫工程的名字:hellodsp。檢查Location,如果您都是按照默認路徑來的,那沒有問題,如果不是默認路徑,您得手工指定一下文件路徑,確認沒有問題后點擊Finish。我們發現在myprojects文件夾下多了hellodsp文件夾,hellodsp文件夾下生成了hellodsp.pjt文件,而且在CCS左側的Files欄內,出現了我們剛剛創建的hellodsp.pjt。

2. 根據前面一個完整工程的組成情況的分析,我們首先來準備頭文件。由于頭文件多數情況下是
不需改動的,也就是說大家用的頭文件都是一樣的,因為是定義2812的內部資源,所以可以將newproject文件夾內的頭文件全部復制到hellodsp文件夾。
3. 將newproject文件夾內的.lib文件和.cmd文件同樣復制到hellodsp文件夾。
4. 下面就剩下源文件了。我比較喜歡例程中的文件結構,所以建議還沒有形成編程風格的朋友也采用這種文件結構。我們先來分析一下newproject文件夾下各個源文件的內容,以便于我們更好的理解和采用這種文件結構。
DSP28_ADC.C ——外設AD的初始化函數,與外設AD相關
DSP28_CpuTimers.C——CPU定時器的初始化和配置函數,與CPU的定時器相關,
DSP28_DefaultIsr.C——這個文件很重要,包含了2812所有的中斷函數,寫中斷時,只要將程序寫在對應的函數內就可以,大大保證了中斷的成功率。
DSP28_ECan.C——外設CAN的初始化函數,與外設CAN相關。
DSP28_Ev.C——外設EV的初始化函數,與外設EV相關。
DSP28_GlobalVariableDefs.C——全局變量的定義,這個文件也很重要,定義了2812的寄存器,中斷向量表等內容。
DSP28_Gpio.C——GPIO的初始化函數,只和GPIO相關。
DSP28_InitPeripherals.C——所有外設的初始化函數,函數的內容是調用了2812各個外設的初始化函數。 DSP28_Mcbsp.C——Mcbsp的初始化函數,只和Mcbsp相關。
DSP28_PieCtrl.C——PIE初始化函數,和中斷相關,很重要。
DSP28_PieVect.C——PIE中斷向量表定義以及初始化,很重要。
DSP28_Sci.C——外設SCI的初始化函數,只和外設SCI相關。
DSP28_Spi.C——外設SPI的初始化函數,只和外設SPI相關。
DSP28_SysCtrl.C——系統初始化,主要對開門狗,時鐘等模塊進行初始化,以保證2812正常工作,非常重要。
DSP28_XIntrupt.C——外部中斷的初始化函數。
Example_28xGpio.C——main函數所在的文件,但是各個工程的Main函數一般都是不一樣的。!
通過上面的分析我們可以看到幾個文件非常重要,DSP28_DefaultIsr.C,DSP28_GlobalVariableDefs.C,DSP28_PieCtrl.C,DSP28_PieVect.C,DSP28_SysCtrl.C,因此我建議大家每次新建工程的時候,就把這些未編輯過的文件復制過來。其他的外設相關的文件,您這個工程中涉及到哪個外設,您就把這個外設相關的源文件復制過來,一起加入工程。由于Main函數所在的文件內容各個工程都不一樣,所以建議大家自己創建,順便來學習一下如何在CCS里創建一個.c的源文件。
此時我們的新工程hellodsp.pjt還是空的,里面啥都沒有,接下來就是往工程內添加文件了。首先我們來添加庫文件。點擊“hellodsp.pjt”,右鍵,點擊“Add Files to Project”,跳出了添加文件的對話框。

?
?
在篩選框欄內選擇“Object and Library Files”,就會看到RTS2800N.lib,點擊并打開,便將庫文件添加到工程中來了。


接下來,用同樣的方法,來添加sources文件夾下的源文件和CMD文件。只是添加源文件時,篩選框的條件是“C++ Source File(*.cpp;*.cc;*.cxx)”添加CMD文件時,篩選框的條件應當選擇”Linker Command File(*.cmd;*.lcf)”。
文件添加完成了,是否hellodsp這個工程就建好了呢?可能您想起來了,我們還沒有添加頭文件,也沒有主函數呢。對了,我們還缺少主函數,頭文件這里先不管,到最后看看是怎么回事。
我們點擊菜單欄中的’File’,”New”,”Source File”,在編輯區域內出現了一個新的Untitled1文件。

然后,點擊“File”,“Save”,會出現保存文件的對話框。文件名填寫“hellodsp”,關鍵要注意的是保存類型,因為我們現在要建立的是源文件,所以選擇“C/C++ Source Flies(*.c*)”,點擊保存。

這時,我們看到原來的“Untitled1”變成了“hellodsp”了。我們在hellodsp文件內輸入以下內容:
1.?#include "DSP28_Device.h"
2.?
3.?Void main(void)
4. {
5.
6. }
然后點擊保存,并關閉hellodsp.c文件。

然后用我們剛才添加文件的方法將hellodsp.c添加到工程中來。
接下來,我們就要編譯啦,是不是有些激動?終于把一個新的工程搭建完成啦。點擊工具欄上的“Rebuild All”,開始編譯咯。

?
可惜的是,我編譯完成時,提示了一個”warning”,內容如下:
1. [hellodsp.c] “C:\CCStudio_v3.3\C2000\cgtools\bin\cl2000” -g -pdsw225 -fr“C:/CCStudio_v3.3/MyProjects/hellodsp/Debug” -d“_DEBUG” -d“LARGE_MODEL” -ml -v28 -@“Debug.lkf” “hellodsp.c”
2.
3. [Linking.。.] “C:\CCStudio_v3.3\C2000\cgtools\bin\cl2000” -@“Debug.lkf”
4. 《Linking》
5. 》》 warning: creating .stack section with default size of 1024 bytes.
?
6. Use
7. -stack option to change the default size.
8.
9. Build Complete,
10. 0 Errors, 1 Warnings, 0 Remarks.
很糟糕啊,呵呵,不過,靜下心來先大概分析一下提示warning的原因,提示是用默認的1024bytes來創建.stack section,就是堆棧段。我在站上搜了一下,發現有朋友也遇到過這樣的問題。怎么解決呢?點擊菜單欄的”Project”,”build options”,彈出編譯選項的對話框。選擇“Linker”標簽,在Stack Size(-stack)欄填寫“800”,點擊確定。

重新編譯,哇,通過了。“0 errors ,0 warnings ,0 remarkings”!
不過我想為什么剛才要將stack section段改成800呢,改成其他的可以嗎?我回頭又將剛才的800改成了1000,編譯也完全正確。所以我覺得,可能改成小于1024的值,只要讓它不要是默認的1024就不會有warning了。雖然,有時候Waring其實并不會影響程序,但是總會覺得不安,所以還是想辦法將其解決吧。
怎么樣,心動了嗎?趕緊下載附件開始自己搭建新的工程吧。
通過本課時的學習,您應該弄清楚了一個完整的2812工程由哪些文件構成了,也應該會搭建屬于自己的工程了,但是有些問題我們還沒有闡述,留給大家討論和思考:
1. 什么是GEL文件?GEL文件的作用是什么呢?
2. Lib文件內部究竟是什么內容,我們自己能編輯LIB文件嗎?
?
?
?
?
電子發燒友App








評論