1. 程式人生 > >DSP 基礎學習 1:搭建環境與CCS6建立工程模板

DSP 基礎學習 1:搭建環境與CCS6建立工程模板

DSP 基礎學習 1:搭建環境與CCS6建立工程模板


  鄙人之前學習過STM32,現在學習DSP的永磁同步電機向量控制。同樣是微控制器,DSP顯然比STM32“高階”很多。效能提高不少的同時,DSP使用起來也更為複雜。為了更好地學習DSP,鄙人在部落格裡記錄學習過程。


  鄙人使用的DSP是TMS320F28335PGFA,開發板是pop28335(師兄遺留的,開發板大同小異,貌似POP現在倒閉了?),模擬器是XDS100V3。電腦系統為windows8.1,CCS軟體版本是6.0.1。

  大部分DSP教學,不論是視訊還是書籍,上來先一通理論,然後再是操作。這是因為大部分DSP使用者本身就有微控制器與計算機的基礎,所以會關注DSP在結構上有什麼不一樣的地方。如果是0基礎者學習DSP也沒有關係,不用聽信別人諸如先學習51或STM32或AVR再學習DSP之類的言論。這些內容本質上是並列而非遞進關係,就好比有人告訴您英文來源於拉丁文,先學習拉丁文再上手英文快,您不也照樣英文66的,拉丁文毛都不會一樣。因為大部分DSP學習者都是先學習的其他低效能微控制器而後接觸的DSP,只是單片機種類不同而已。所以我們本著先上手動起來的原則,先搭建環境並建立CCS6工程模板,然後在之後的例程使用中慢慢深入講解DSP的體系。

1 DSP簡介

  DSP 全程是Digital Signal Processing,數字訊號處理。在這裡DSP指專門用來進行數字訊號處理的晶片。 DSP晶片是一種快速強大的微處理器,獨特之處在於它能即時處理資料。 DSP 晶片的內部採用程式和資料分開的哈佛結構,具有專門的硬體乘法器,可以用來快速的實現各種數字訊號處理演算法。 在當今的數字化時代背景下, DSP 己成為通訊、計算機、消費類電子產品等領域的基礎器件。

1.1 DSP 發展

  DSP 晶片的誕生是時代所需。 20 世紀 60 年代以來,隨著計算機和資訊科技的飛速發展,數字訊號處理技術應運而生並得到迅速的發展。在 DSP 晶片出現之前數字訊號處理只能依靠微處理器來完成。但由於微處理器較低的處理速度不快,根本就無法滿足越來越大的資訊量的高速實時要求。因此應用更快更高效的訊號處理方式成了日漸迫切的社會需求。

  上世紀 70 年代, DSP 晶片的理論和演算法基礎已成熟。但那時的 DSP 僅僅停留在教科書上,即使是研製出來的 DSP 系統也是由分立元件組成的,其應用領域僅侷限於軍事、航空航天部門。

  1978 年, AMI 公司釋出世界上第一個單片 DSP 晶片 S2811,但沒有現代 DSP晶片所必須有的硬體乘法器;

  1979 年, 美國 Intel 公司釋出的商用可程式設計器件 2920 是 DSP 晶片的一個主要里程碑,但其依然沒有硬體乘法器;

  1980 年,日本 NEC 公司推出的 MPD7720 是第一個具有硬體乘法器的商用 DSP晶片,從而被認為是第一塊單片 DSP 器件。

  1982 年世界上誕生了第一代 DSP 晶片 TMS32010 及其系列產品。這種 DSP 器件採用微米工藝 NMOS 技術製作,雖功耗和尺寸稍大,但運算速度卻比微處理器快了幾十倍。 DSP 晶片的問世是個里程碑,它標誌著 DSP 應用系統由大型系統向小型化邁進了一大步。至 80 年代中期,隨著 CMOS 工藝的 DSP 晶片應運而生,其儲存容量和運算速度都得到成倍提高,成為語音處理、影象硬體處理技術的基礎。

  80 年代後期,第三代 DSP 晶片問世。 運算速度進一步提高,其應用範圍逐步擴大到通訊、計算機領域;

  90 年代 DSP 發展最快,相繼出現了第四代和第五代 DSP 晶片。 第五代與第四代相比系統整合度更高,將 DSP 芯核及外圍元件綜合整合在單一晶片上。

  進入 21 世紀後,第六代 DSP 晶片橫空出世。第六代晶片在效能上全面碾壓第五代晶片,同時基於商業目的的不同發展出了諸多個性化的分支,並開始逐漸拓展新的領域。

1.2 DSP 應用領域

  DSP 晶片強調數字訊號處理的實時性。 DSP 作為數字訊號處理器將模擬訊號轉換成數字訊號,用於專用處理器的高速實時處理。 它具有高速,靈活,可程式設計,低功耗的介面功能,在圖形影象處理,語音處理,訊號處理等通訊領域起到越來越重要的作用。

  應用 DSP 的領域較多, 未來新應用領域有望層出不窮。 根據美國的權威資訊公司統計,目前 DSP 晶片在市場上應用最多的是通訊領域, 佔 56.1%;其次是計算機領域,佔 21.16%;消費電子和自動控制佔 10.69%;軍事/航空佔 4.59%;儀器儀表佔 3.5%;工業控制佔 3.31%;辦公自動化佔 0.65%。

  1)DSP 晶片在多媒體通訊領域的應用。

  媒體資料傳輸產生的資訊量是巨大的,多媒體網路終端在整個過程中需要對獲取的資訊量進行快速分析和處理,因此 DSP 被運用在語音編碼,影象壓縮和減少語音通訊上。如今 DSP 對於語音解碼計算產生實時效果,設計協議要求已經成為最基本的一條國際標準。

  2)DSP 晶片在工業控制領域的應用。

  在工業控制領域, 工業機器人被廣泛應用,對機器人控制系統的效能要求也越來越高。機器人控制系統重中之重就是實時性,在完成一個動作的同時會產生較多的資料和計算處理,這裡可以採用高效能的 DSP。 DSP通過應用到機器人的控制系統後,充分利用自身的實時計算速度特性,使得機器人系統可以快速處理問題,隨著不斷提高 DSP 數字訊號晶片速度,在系統中容易構成並行處理網路,大大提高控制系統的效能,使得機器人系統得到更為廣泛的發展。

  3)DSP 晶片在儀器儀表領域的應用。

  DSP 豐富的片內資源可以大大簡化儀器儀表的硬體電儀路,實現儀器儀表的 SOC 設計。儀器儀表的測量精度和速度是一項重要的指標,使用 DSP 晶片開發產品可使這兩項指標大大提高。例如 TI 公司的 TMS320F2810 具有高效的 32 位 CPU 核心,12 位 A/D 轉換器,豐富的片上儲存器和靈活的指揮系統,為高精密儀器搭建了廣闊的平臺。高精密儀器現在已經發展成為 DSP 的一個重要應用,正處於快速傳播時期,將推動產業的技術創新。

  4)DSP 晶片在汽車安全與無人駕駛領域的應用。

  汽車電子系統日益興旺發達起來,諸如裝設紅外線和毫米波雷達,將需用 DSP 進行分析。如今,汽車愈來愈多,防衝撞系統已成為研究熱點。而且,利用攝像機拍攝的影象資料需要經過 DSP 處理,才能在駕駛系統裡顯示出來,供駕駛人員參考。

  5)DSP 晶片在軍事領域的應用。

  DSP 的功耗低、體積小、實時性反應速度都是武器裝備中特別需要的。如機載空空導彈,在有限的體積內裝有紅外探測儀和相應的 DSP訊號處理器等部分,完成目標的自動鎖定與跟蹤。先進戰鬥機上裝備的目視瞄準器和步兵個人攜帶的頭盔式微光儀,需用 DSP 技術完成影象的濾波與增強,智慧化目標搜尋捕獲。 DSP 技術還用於自動火炮控制、巡航導彈、預警飛機、相控陣天線等雷達數字訊號處理中。

1.3 DSP 產品現狀

  目前, 世界上 DSP 晶片製造商主要有 3 家:德州儀器(TI)、 模擬器件公司(ADI)和摩托羅拉(Motorola) 公司,其中 TI 公司獨佔鰲頭, 佔據絕大部分的國際市場份額, ADI 和摩托羅拉公司也有一定市場。

  德州儀器公司(TI) 是 DSP 業界公認的龍頭老大, 公司在 1982 年成功推出了其第一代 DSP 晶片 TMS32010,由於 TMS320 系列 DSP 晶片具有價格低廉、簡單易用、功能強大等特點,所以逐漸成為目前最有影響、最為成功的 DSP 系列處理器。

  在 TI公司主打的三個系列中, c2000 系列現在所佔市場份額較小,如今 TI 官網上的 DSP產品主要以 c6000 與 c5000 為主。 TI 的三大主力 DSP 產品系列為 C2000 系列主要用於數字控制系統; C5000(C54x、 C55x)系列主要用於低功耗、便攜的無線通訊終端產品; C6000 系列主要用於高效能複雜的通訊系統。 C5000 系列中的TMS320C54x 系列 DSP 晶片被廣泛應用於通訊和個人消費電子領域。

  C6000 系列主打產品為: C6000 DSP+ARM 處理器(12)——OMAP-L1x (5)、66AK2x (7); C6000 DSP (94)——C674xDSP (5)、 C66x DSP (11)
  C5000 系列主打產品為: C55x 超低功耗 DSP,為超低功耗的緊湊型嵌入式產品提供高效的訊號處理。

1.4 哈佛結構

  先來說說馮·諾伊曼結構,相信不少人從小上計算機課都背過以下內容:

  計算機必須有一個儲存器,必須有一個控制器,必須有一個運算器,必須有輸入和輸出裝置,用於進行人機通訊。如上圖所示,馮·諾伊曼結構將程式指令儲存器和資料儲存器合併在一起,也就是說Memory裡面不僅儲存了指令還儲存了資料。

  而哈佛結構是一種將程式指令儲存和資料儲存分開的儲存器結構,如下圖所示。 中央處理器首先到程式指令儲存器中讀取程式指令內容,解碼後得到資料地址,再到相應的資料儲存器中讀取資料,並進行下一步的操作(通常是執行)。顯而易見,這樣做的好處有:指令和資料可以並行處理,執行時可以預先讀取下一條指令;可以使指令和資料有不同的資料寬度,如Microchip公司的PIC16晶片的程式指令是14位寬度,而資料是8位寬度。

  總之,哈佛結構的微處理器通常具有較高的執行效率。 那既然哈佛結構比馮·諾伊曼結構要快,為什麼不都使用哈佛結構呢。
  這是因為,相對於馮·諾依曼結構,哈佛結構更可靠,更加適合於那些程式固化、任務相對簡單的控制系統,哈佛結構的微處理器也相對更高效。不過在通用計算機系統中,應用軟體的多樣性使得計算機要不斷地變化所執行的程式碼的內容,並且頻繁地對資料與程式碼佔有的儲存器進行重新分配,這種情況下,馮·諾依曼結構佔有絕對優勢,因為統一編址可以最大限度地利用資源,而哈佛結構的計算機若應用於這種情形下則會對儲存器資源產生理論上最大可達50%(指令儲存器或者資料儲存器有一個沒用上)的浪費,這顯然是不合理的。現在的處理器,不單是隻有一種結構,而是運用了先進技術混合了多種結構,兼顧多方面需求。比如現在的高效能處理器雖然外部總線上看是諾依曼結構的,但是由於內部CACHE的存在,因此實際上內部來看已經算是改進型哈佛結構的了。

1.5 TMS320F28335 簡介

  TMS320F28335型數字訊號處理器TI公司的一款TMS320C28X系列浮點DSP控制器。TMS320F28335具有150MHz的高速處理能力,具備32位浮 點處理單元,6個DMA通道支援ADC、McBSP和 EMIF,有多達18路的PWM輸出,其中有6路為TI特有的更高精度的PWM輸出(HRPWM),12位16通道ADC。得益於其浮點運算單元,使用者可快速編寫控制演算法而無需在處理小數操作上耗費過多的時間和精力,與前代DSP相比,平均效能提高50%,並與定點C28x控制器軟體相容,從而簡化軟體開發, 縮短開發週期,降低開發成本。


2 搭建環境

  廢話這麼多,DSP到底怎麼寫程式啊。別急,要想寫程式,得先在電腦上配置好環境。
  首先是IDE的選擇,因為用的是TI的DSP當然選TI公司的CCS,全稱是Code Composer Studio,建議使用CCS6。網上很容易就可以找到CCS6安裝與破解資料的。如果是第一次用模擬器,可能需要模擬器的驅動。這個大部分電腦會自動識別出USB裝置並安裝的,實在不行插著模擬器用驅動精靈之類的軟體安裝一下就好了。還需要DSP的原始檔和標頭檔案,如果是複雜的數學運算,那麼還需要數學運算庫。這些東西在TI的官網都有,建議直接裝一個controlSUITE,下載controlSUITE的時候需要註冊使用者。TI官網的下載連結如下:
  http://www.ti.com.cn/tool/cn/CONTROLSUITE。
  它是一個集成了DSP檔案庫、手冊、例程的輔助軟體。這些庫有啥用呢,比如您要用三角函式,DSP裡面可不能直接運算三角函式啊,當時學C的時候都要include<math.h>呢。如果您覺得麻煩,想快速上手,只想要最基本的檔案,那麼可以下載鄙人提供的資料。等需要用到TI的輪子的時候再去下載對應的檔案。連結在下面,只要1個幣,良心吧。
  https://download.csdn.net/download/huagengpai1994/10841285

  安裝CCS6的過程就不說了,網上一大堆,重點說說怎麼建立工程模板。


3 CCS6建立工程模板

  裝好CCS6開啟它,會顯示下面這個介面,貌似安裝的時候就會設定,鄙人忘了。

  workspace,自然是工作空間的意思啦。就是在問你,預設的工作空間在哪裡,也就是預設去哪裡找DSP工程,有點類似於MATLAB的路徑。如果該預設目錄下有DSP工程,那麼開啟就會顯示出來,否則你就要自己去找到並開啟。儘量在目錄裡面不要出現中文和奇奇怪怪的字元,貌似中文也可以,但畢竟是美帝國主義的玩意,編譯錯誤就是找不到問題有可能就是這裡出的。

  設定好後點擊OK,就進入了CCS6,先新建一個Project。點選project->New CCS Project 。會出現如下圖所示的對話方塊。

  Target 是選晶片,第一個空是晶片型別,選擇2833x Delfino。第二個空是晶片型號,選擇TMS302F28335。
  Connection是模擬器,依據您模擬器的型號選擇就好,我的是XDS100V3。
  Project name,是您工程的名字。我這裡可以寫為Hello DSP。
  Use default location 勾選後,就會預設該工程在在Workspace裡。
  然後在下面選擇Empty Project(with main.c),點選Finish建立一個帶main.c的空工程,如下圖所示。

  在Workspace目錄下會自動新建一個名叫Hello DSP的資料夾,裡面的檔案如下。

把DSP2833x_headers和DSP2833x_common兩個資料夾複製貼上到Hello DSP資料夾下,如下圖所示。(這就是2中說到的TI官方檔案,controlSUITE的是在一個特定目錄裡面。沒裝controlSUITE的話,在您買的開發板的資料裡面仔細找找,一般也都會有這兩個資料夾。實在不行也可以用鄙人的,下載連結在2中,連結中還有TI官方的例程和檔案。)

  可以發現在CCS裡面,自動顯示了新來的兩個資料夾,如下圖所示。

  如果這個時候Build Projec會出現很多Problems。這是因為我們只是把相關檔案挪到了工程檔案Hello DSP裡面,並沒有告訴CCS在編譯的時候去哪裡找相關的檔案。下面進行設定,在CCS介面左邊右鍵點選Hello DSP,選擇Properties,點選Bulid——Include Options,如下圖所示。

  點選Add dir to #include search 那個框裡面的綠色加號,出現一個小對話方塊,再點選workspace。然後選擇DSP2833x_headers和DSP2833x_common中的Include,如圖所示。

  點選OK後,會變成下圖所示樣子。說明路徑新增成功了,今後如果要用到TI官方的別人寫好的檔案,也要如此包含進來才能被編譯器找到。

  試Bulid一下,點選CCS介面上面的小鐵錘(Bulid Project),或者也可以右鍵Hello DSP點選Build Project。會發現沒有辦法Build 成功,有很多的錯誤。

  刪除common下cmd裡的所有檔案 (在CCS介面中選中後右鍵,Delete)。刪除common-source下的:DSP2833x_SWPrioritizedDefaultIsr.c、DSP2833x_SWPrioritizedPieVect.c、DSP2833x_Mcbsp1.c和DSP2833x_Sci1.c四個檔案。刪除headers-cmd下的:DSP2833x_Headers_BIOS.cmd檔案,因為我們用的是無作業系統的所以該cmd下的檔案只留nonBIOS。

  再Build 一下,如果介面上的小錘子點不了了,那麼可以右鍵Hello DSP點選Build Project。這次就是0個Problems了,建立成功。

  下面再說說配置模擬器。右鍵Hello DSP——New——Target Configuration File,彈出如下圖所示的對話方塊。

  把File name 改為Hello DSP.ccxml。點選Finish後,CCS介面左側會自動建立相應的模擬器檔案。並且會自動進入該模擬器介面。

  Connection 中選擇自己的模擬器型號,我這裡是XDS100V3,選好後在Board and Device裡面就會出現該模擬器適用的裝置,找到TMS320F28335,也可以在文字框中輸入就可以搜尋到,這樣比較快一點。點選右邊的save後,Test Connection會從不可點變為可點。這時候將板子通電,模擬器連線電腦。按一下Test Connection 就可以測試模擬器,這時候會自動彈出下圖所示的Test Connection文字框,拉到最下面,如果出現紅框中的內容說明模擬器沒有問題。


4 結語

  至此,整個最基本的工程模板建立好了。之所以叫模板,因為可以把這個Hello DSP資料夾儲存下來,以後再編寫DSP程式的時候,複製它一份。然後在Hello DSP的複製版上改動,就不用從頭再建立工程了。

  如果按照本例程的步驟還是有Problems,那麼就要去看看Problems裡面是哪個地方出了問題,然後百度一下一般都能解決。不要看到Problems有幾十個就頭疼,因為一個小問題就會引發很多Probles,但也許僅僅改動一下就同時解決了。可以在Prlblems裡面看到問題都是一群一群指向某幾個地方。在剛複製貼上common和headers的時候,如果不刪除任何檔案立馬就編譯會出現上百個Problems,而我們僅僅刪除了不到10個檔案就好了。

  如果不管怎麼搞都搞不通,也有可能是你拿到手的common和headers本身就少東西。可以下載鄙人2中給的連結,裡面有common和headers,還有鄙人的Hello DSP模板。