450 likes | 701 Views
第 3 章 ARM 開發工具. 3.1. IAR Embedded Workbench for ARM 3.2. 瞭解 ARM 開發板 3.3. 安裝硬體工具 3.4. 第一個範例 程式. ARM 開發工具. 本課程 ARM 程式的 開發工具 如下 : ★ 開發軟體: IAR Embedded Workbench for ARM ★ 開發板套件: StartARM7 開發板, JTAG 連線. 3.1. IAR Embedded Workbench for ARM.
E N D
第 3 章 ARM 開發工具 3.1. IAR Embedded Workbench for ARM 3.2. 瞭解ARM開發板 3.3. 安裝硬體工具 3.4. 第一個範例程式
ARM 開發工具 本課程ARM程式的開發工具如下: ★ 開發軟體:IAR Embedded Workbench for ARM ★ 開發板套件:StartARM7 開發板,JTAG 連線
3.1. IAR Embedded Workbench for ARM IAR公司是瑞典的軟體開發商,提供許多嵌入式系統開發工具,也包括ARM 的開發工具,本書介紹的工具是IAR公司所發行的32k限制試用版Embedded Workbench for ARM 32K Kickstart Edition,以下以IAR EW 簡稱。此工具軟體可以到IAR網站免費下載, 網址: http://supp.iar.com/Download/SW/?item=EWARM-KS32 下載之前必須先填寫註冊資料,待收到IAR確認E-mail 信函後,點選信函中的網址,即可引導到IAR產品下載網址,網址包含註冊的序號資訊,安裝IAR套件時必須輸入,下載完成後請先安裝IAR 開發工具。
3.2. 瞭解ARM開發板 • StartARM7 開發板具有以下特點 • 2 個 UART 接口,其中一個用於SAM7S Debug • 標準20 Pin JTAG 插座,可接JTAG 或ICE • 1 個I2C 串列EEPROM • 2 個SPI 介面7 段顯示器 • 1 個蜂鳴器,可使用PWM 驅動 • 4 個通用LED • 4 個通用按鈕 • 1 個重置按鈕 • 1 個2x16 文字型LCD • 2 個AD 轉換可變電阻 • CPU 所有接腳引出 • PA 所有接腳拉出EXT 擴展介面 • USB Device 插座,可由USB 取得供電 • 不使用USB 供電時可用外部電源插座, 輸入DC +9V
3.2. 瞭解ARM開發板(電源部分) PowerSEL 可以選擇使用外部電源或者USB 供電。外部電源經過7805 取得+5V 電源,USB 則是使用PC 提供+5V電源。由+5V 電源透過1117-330 再轉成+3.3V 提供CPU 與板上各元件操作電壓。
3.2. 瞭解ARM開發板(JTAG 部分) JTAG 接頭為標準ARM 20PIN JTAG 接頭。JATG 訊號直接連到CPU。CPU可直接透過JTAG 訊號重置,不需再使用外接的RESET 訊號,因此NRST 跳線可以不用連接。
3.2. 瞭解ARM開發板(USB 部分) • USB 訊號線1 提供+5V 電源,VBUS_DET 訊號可以用來偵測是否有USB 線插入USB 接頭。 • USB 訊號線2 為USB- 訊號線,連接到SAM7S USB_DM 腳。 • USB 訊號線3 為USB+訊號線,連接到SAM7S USB_DP 腳。 • USB 訊號線4 為接地端。
3.2. 瞭解ARM開發板(USB 部分) USB 全速裝置連線偵測以USB+訊號是否上拉1.5KΩ為判斷依據。USB_DP_PUP控制是否將USB_DP訊號上拉1.5KΩ。當USB_DP_PUP=low,Q2導通PC可偵測到USB連線。當USB_DP_PUP=hi,Q2 斷開PC 認為USB 斷線。USB_DP_PUP 連接到SAM7S 的PA16,透過控制PA16 可以使用軟體控制USB 連線打開/關閉。
3.2. 瞭解ARM開發板(UART 連線) StartARM7 提供兩組與PC RS-232 連線的介面。一組為SAM7S DBGU 連線,另一組為SAM7SUART0 連線。
3.2. 瞭解ARM開發板(LCD 部分) StartARM7開發板有搭配2x16文字型LCD。使用4bit資料傳輸方式,LCD_DB7-LCD_DB4 可透過跳線與PA14-PA11連接。PA8控制LCDRW,PA7 控制LCDRS,PA25 控制LCDE,PA24 控制LCD 背光。
3.2. 瞭解ARM開發板(AD 轉換電路部分) StartARM7 板上具有ADR4 與ADR5 兩組可變電阻分別接到SAM7S 的AD4 與AD5,透過調整ADR4 與ADR5 可以作AD 轉換實驗。SAM7S 的參考電壓由ADVREF 輸入。透過ADVREF 跳線連接到3.3V。用戶可自行更改ADVREF 電壓參考值。ADVREF 參考電壓可介於2.6V~VDDIN 之間。
3.2. 瞭解ARM開發板(AD 轉換電路部分) StartARM7 板上具有ADR4 與ADR5 兩組可變電阻分別接到SAM7S 的AD4 與AD5,透過調整ADR4 與ADR5 可以作AD 轉換實驗。SAM7S 的參考電壓由ADVREF 輸入。透過ADVREF 跳線連接到3.3V。用戶可自行更改ADVREF 電壓參考值。ADVREF 參考電壓可介於2.6V~VDDIN 之間。
3.2. 瞭解ARM開發板(蜂鳴器部分) 蜂鳴器可以使用PA0 控制,PA0 也可以當成PWM0 輸出。所以蜂鳴器可以使用一般GPIO 控制或使用PWM0 控制。
3.2. 瞭解ARM開發板(七段顯示器與SPI 部分) StartARM7板上有兩組七段顯示器,透過HC595 晶片控制。HC595 晶片為串列轉並列元件,可透SAM7S SPI 介面將資料送到HC595 後輸出。SPI訊號SPI_SPCK、SPI_MISO、SPI_MOSI與SPI_CS0可透過跳線與PA14-PA11連接。
3.2. 瞭解ARM開發板(LED 部分) LED1~LED4 透過PA21~PA24 控制明滅,跳線PA21~PA24 可以選擇PA21~PA24 是否用來控制LED1~LED4。
3.2. 瞭解ARM開發板(按鍵部分) KEY1~KEY4 分別使用SAM7S PA17~PA20 來控制。
3.2. 瞭解ARM開發板(I2C 部分) AT24C04 為I2C 介面的串列EEPROM,跳線SCL 與SDA 用來選擇與SAM7S PA4,PA3 連接。SAM7S 的PA4,PA3為TWI 介面,與I2C 介面可以相容。透過TWI 介面可以對AT24C01 讀寫。
3.2. 瞭解ARM開發板(CPU 部分) • 按鈕RST 連接到SAM7S NRST 腳,按下時NRST 拉低,可產生CPU 重置訊號。 • 跳線JTAGSEL連接到SAM7S JTAGSEL 腳,一般使用時斷開。 • 跳線ERASE 連接到SAM7S ERASE 腳,短接並上電可使SAM7S 抹除內部Flash 與NVRAM 內容。 • 跳線TST 連接到SAM7S TST 腳,短接並上電可使SAM7S 回復SAM-BA 連線程式到Flash 中。 • 跳線ADVREF 為SAM7S AD 參考電壓3.3V選擇跳線,短接時SAM7S AD 轉換參考電壓為3.3V。
3.2. 瞭解ARM開發板(I2C 部分) AT24C04 為I2C 介面的串列EEPROM,跳線SCL 與SDA 用來選擇與SAM7S PA4,PA3 連接。SAM7S 的PA4,PA3為TWI 介面,與I2C 介面可以相容。透過TWI 介面可以對AT24C01 讀寫。
3.3. 安裝硬體工具(Wiggler JTAG) • 除了有開發板之外,還必須有JTAG或ICE 硬體連接到開發板,使得PC 可與開發板連線控制。 • 注意,因為Wiggler 本身並沒有硬體加速器,完全使用PC 的CPU 資源產生時序訊號控制ARM 核心,所以PC 的CPU 不要太慢以免造成連線不穩定,另外Windows 系統也不要有太多常駐程式,會影響JTAG 控制訊號品質。 • 請先將JTAG 的20Pin 插頭插到StartARM7 開發板上,另一端接到PC 的並列埠(25Pin 印表機連接座)。開發板使用PC 的USB 供電,所以請先將電源選擇跳線選擇USB 供電,並將USB 纜線連接到PC。
3.3. 安裝硬體工具(安裝JTAG 連線程式) JTAG,透過H-JTAG 程式,開發工具(IAR EW)才能透過Wiggler JTAG 與開發板連線,最新的H-JTAG 程式可在 http://www.hjtag.com/ 取得。
3.3. 安裝硬體工具(啟動H-JTAG 程式) • 安裝完成後執行桌面上H-JTAG 啟動程式。 • 若開發板已經將Wiggler JTAG 與PC連接,並接上USB提供電源,H-JTAG 應該會偵測出CPU型號。 • 此時可以先按關閉視窗,H-JTAG會縮到系統狀態列 • 此時H-JTAG 仍保持運行狀態,使用JTAG連線時必須保持H-JTAG 於運行狀態,請勿關閉。
3.4. 第一個範例程式(SAM7S64.eww) • 請將開發板範例複製到硬碟個人的子目錄,並將所有唯讀選項去除。 • 首先開啟第一個範例『GPIO_c』。 • 請到目錄“GPIO\GPIO_c\IAR”目錄下點兩下開啟IAR EW 專案檔案“SAM7S64.eww”,IAR EW 啟動後畫面如右。
3.4. 第一個範例程式(專案模式選擇) • 專案模式有三種 • RAM_DEBUG:進入除錯(Debug)時,將程式碼載入RAM中除錯,不會把程式碼燒到Flash,下載到RAM區域除錯速度較快。但使用中斷功能時必須記得將SRAM 區域映射到啟動區塊,IAR EW 可以幫我們完成記憶體映射,程式不用再設定。 • FLASH_DEBUG:進入除錯(Debug)時,將程式碼載入Flash中除錯,載入時需先進行Flash 寫入,IAR EW 會透過JTAG 自動完成。Flash 區塊預設映射到啟動區塊,但Flash 除錯執行速度較慢。 • BINARY:生成二進制檔案
3.4. 第一個範例程式(IAR EW 專案瀏覽) • 進行JTAG工具設定,將滑鼠游標移到專案檔上,按右鍵Options叫出專案設定視窗。Device選擇AT91SAM7S64,選擇正確CPU 可使IAR 具有更強的工具支援。
3.4. 第一個範例程式(設定編譯模式) 由於本課程主要使用 ARM 32bit指令集,不使用Thumb 16bit 指令集,所以請將編譯模式設定成ARM;SAM7S資料排列選擇小端(Little-endian)模式 。
3.4. 第一個範例程式(設定連結格式) 依圖 勾選C-SPY 選項,此步驟命令IAR EW 產生除錯訊息,在進行除錯時才能顯示除錯相關訊息。
3.4. 第一個範例程式(設定輸出格式) • 選擇其他格式輸出,在“Output format"中可以選擇許多種輸出格式,常用的有intel-extended (HEX 格式)與raw-binary(BIN 格式)。 • 如果希望同時產生Debug C-SPY 與其他檔案格式則『Output』分頁選擇C-SPY 輸出,並在『Extra Output』分頁選擇額外輸出檔案格式即可。
3.4. 第一個範例程式(設置除錯裝置) • 將游標點選Debugger 項目 • Debugger 設定選項裡,選擇Driver 為RDI,另外如果覺得ARM 啟動代碼很複雜,可以勾選 Run to [main]的選項,在除錯時跳過啟動代碼,直接執行到main 程式位置並停止。
3.4. 第一個範例程式(設定下載模式) • 在Download 部分,如果使用RAM_DEBUG 模式選勾選 Verify download,如右圖 • 如果選擇FLASH_DEBUG則必須勾選Use flash loader(s),當要在Flash 區域除錯時,IAR 會先透過JTAG下載程式碼於Flash內,之後再進入除錯模式。
3.4. 第一個範例程式(選擇RDI 驅動) • 在Debugger 選項選擇使用RDI 介面,接下來到RDI 選項設置,選擇RDI 驅動程式。目前是使用H-JTAG 驅動程式。 • 在圖中按[…],選擇H-JTAG.dll的路徑,一般H-JTAG 會安裝在C:\Program Files\H-JTAG V0.4.x\H-JTAG.dll 路徑,
3.4. 第一個範例程式(選擇RDI 驅動) • 在Debugger 選項選擇使用RDI 介面,接下來到RDI 選項設置,選擇RDI 驅動程式。目前是使用H-JTAG 驅動程式。 • 在圖中按[…],選擇H-JTAG.dll的路徑,一般H-JTAG 會安裝在C:\Program Files\H-JTAG V0.4.x\H-JTAG.dll 路徑,
3.4. 第一個範例程式(除錯按鈕) • 目前已經完成專案相關設定,可以先進入除錯模式體驗ARM 的功能。 • 按下除錯 (Debug) 按鈕進入除錯模式。
3.4. 第一個範例程式(IAR 除錯畫面) 進入除錯前IAR EW會利用JTAG下載程式到SAM7S的SRAM中,並作相關設置,由於在Debugger 設置時有勾選 Run to [main]選項,所以IAR EW 在主程式main 的位置停止。 在右圖中間為C 語言程式碼顯示與編輯視窗,綠色箭頭指到目前SAM7S CPU 執行位置;左邊的視窗為專案導覽視窗,可以點選與瀏覽本專案使用的檔案,右邊是組語解譯(Disassembly) 視窗,在除錯模式下才會出現,如果不需要看可以按小視窗上方小x 按鈕關掉此視窗。
3.4. 第一個範例程式(除錯功能鍵) 接下來為程式單步追蹤功能,下圖為除錯功能鍵 • Reset:重置程序,使程式執行回到最初狀態。 • Break:在游標處設置中斷點。 • Step Over:不進入子程序追蹤,直接執行到下一道指令。 • Step Into:進入子程序追蹤。 • Step Out:直接執行到子程序返回退出。 • Next Statement:下一行程式敘述,以程式行為追蹤單位。 • Run To Cursor:程式直接執行到游標位置後停止。 • Go:程式執行。 • Stop Debugging:退出除錯模式。
3.4. 第一個範例程式(除錯操作) 按Step Over,單步執行程式並觀察開發板上LED 的變化。 單步執行時,可以把滑鼠移到變數上,IAR EW 會自動顯示該變數值。
3.4. 第一個範例程式(除錯操作) 在IAR EW 選單選擇ViewLocals, 可以顯示區域變數視窗。
3.4. 第一個範例程式(除錯操作) • 在IAR EW 選單選擇ViewStatics, 可以顯示全域變數視窗。 • 接著試著設定中斷點,並讓程式執行(Go),看看程式是否在中斷點停止。 • 之後如果要修改程式,可立即編修。但需要重新載入才會執行編修後的結果。再次按下Debug 按鈕就會自動重新編譯與載入。 • 按下Stop Debugging 按鈕,退出除錯模式。
3.5. 複製目錄(專案) 最快學習的方式就是參考別人的程式。StartARM7 包含許多範例程式,可以複製這些範例程式來修改。例如將『GPIO_c』複製一份成為『GPIO_c_copy』如下圖所示
3.5. 複製目錄(專案) 不過使用IAR EW 工具時必須注意:當開啟新複製專案『GPIO_c_copy』的IAR 專案檔時,之前專案記錄已開啟的檔會被重新開啟,可是顯示的檔案卻是原來專案的檔案,也就是『GPIO_c』內的檔案。此時編輯main.c 會修改到『GPIO_c』內的main.c 而不是『GPIO_c_copy』的main.c。這點必須特別注意。
3.5. 複製目錄(專案) • 最保險的方式是在複製目錄之後,第一次開啟專案檔時將所有已開啟的檔案關閉。如下圖所示 • 再點選左邊專案列表中的檔案重新開啟檔案,才會是正確的檔案路徑。 • 如上圖所示,點選專案的檔案列表所開啟的檔案路徑才是新複製專案『GPIO_c_copy』的檔案路徑。
3.6. 專案架構 StartARM7 使用IAR EW 作為開發工具,其中專案目錄架構分配如下: • [IAR]:儲存IAR 專案檔設定與編譯產生的目的檔。 • [Include]:各種標頭檔,其中幾個重要的標頭檔說明如下: • AT91SAM7S64.h:SAM7S64 定義檔,C 語言引入用。 • AT91SAM7S64.inc:SAM7S64 定義檔,組合語言引入用。 • lib_AT91SAM7S64.h:各種控制暫存器存取程序定義。 • Board.h:各種資料型態與StartARM7 開發板相關定義。 • [Modules]:各個模組驅動程式。 • [Resource]:IAR 系統資源設定檔。 • [Src]:主程式與應用程式碼。 • [Startup]:C 語言啟動程式與IRQ 處理程序。
3.6. 專案架構(StartARM7 開發板定義程式) 在專案的[include]目錄中包含開發板定義檔 “Board.h”,其中定義了與開發板佈局相關的定義。