自定義控件及各種特效實驗第1天手冊_第1頁
自定義控件及各種特效實驗第1天手冊_第2頁
自定義控件及各種特效實驗第1天手冊_第3頁
自定義控件及各種特效實驗第1天手冊_第4頁
自定義控件及各種特效實驗第1天手冊_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0實驗?zāi)夸泴嶒炓弧⑹煜?realview 開發(fā)環(huán)境21.1 RealView MDK 軟件開發(fā)環(huán)境簡介21.1.11.1.21.2RealView MDK 的突出特性2模塊介紹2RealView 使用51.2.1 創(chuàng)建一個工程51.2.1.1 選擇工具集51.2.1.2 創(chuàng)建工程文件71.2.1.3 選擇設(shè)備71.2.2 編譯、工程81.2.2.11.2.2.21.2.2.3設(shè)置目標硬件的工具選項8增加連接文件9編譯.91.2.3 程序調(diào)試101.2.4 工程選項頁概述11實驗二、ARM 指令集122.1 ARM 匯編指令 1122.2 ARM 匯編指令 22

2、02.3 ARM 匯編指令 321實驗三233.1 LDR/STM 指令尋址實驗233.2 ARM 匯編子函數(shù)調(diào)用253.3 Thumb 匯編指令練習(xí)253.4 利用 ARM 匯編實現(xiàn)開發(fā)板 LED 燈.25實驗四264.1 簡單C 語言程序?qū)嶒?64.2 匯編與C 語言的相用實驗264.34.44.5C 語言中內(nèi)聯(lián)匯編程序?qū)嶒?7C 語言中嵌入型匯編程序?qū)嶒?7SWI 軟中斷實驗284.6 綜合編程實驗28實驗五、I/O 及串口通信編程實驗29實驗六、中斷實驗32實驗七、實時時鐘實驗32實驗八、看門狗實驗33實驗九、PWM 接口實驗33實驗十、A/D 轉(zhuǎn)換實驗33實驗十一、I2C 串行通信實

3、驗341ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0實驗一、熟悉 realview 開發(fā)環(huán)境1.1 RealView MDK 軟件開發(fā)環(huán)境簡介RealView MDK 全稱 RealView MDK 中國版開發(fā)套件,源自德國 Keil 公司,被全球超過10 萬的開發(fā)工程師驗證和使用,是 ARM 公司目前最新推出的對各種處理器的軟件開發(fā)工具。RealView MDK 集成了業(yè)內(nèi)最領(lǐng)先的技術(shù),包括 Vision3 集成開發(fā)環(huán)境與RealView 編譯器,支持 ARM7、ARM9 和最新的 Cortex-M3 核處理器,自動配置啟動代碼,集成 Flash 燒寫模塊,強大的 Simulation 設(shè)備模擬,性

4、能分析等功能,與 ARM 之前的工具包ADS 等相比,RealView 編譯器的最新版本可將性能超過 20。1.1.1 RealView MDK 的突出特性菜鳥的飛毯啟動代碼生成向?qū)?,自動引?dǎo),一日千里 軟件模擬器,完全脫離硬件的軟件開發(fā)過程性能分析器,看得更遠、看得更細、看得更清Cortex-M3 支持 RealView 編譯器,代碼更小,性能更高配備高手的無劍勝有劍的望遠鏡未來戰(zhàn)士的激光劍業(yè)界最優(yōu)秀的編譯器ULINK2器無需安裝驅(qū)動 輕松實現(xiàn) Flash 燒寫 國際品質(zhì),本土價格Flash 編程模塊絕對的高性價比1.1.2模塊介紹Vision3 IDEVision IDE 在全球擁有龐大的

5、用戶群,超過 10 萬開發(fā)工程師在使用 Keil 開發(fā)工具。不管以前是用 8 位、16 位 MCU,還是現(xiàn)在改用 ARM 32 位處理器,Vision IDE 簡單易用,能立馬上手。2Vision3 IDE啟動代碼生成向?qū)гO(shè)備模擬器性能分析器RealView 編譯器MircoLibRL-ARM(可選)ULINK2器ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 1.1 Vision3 IDEVision3 IDE 主要特性:l功能強大的源代碼編輯器;l可根據(jù)開發(fā)工具配置的設(shè)備數(shù)據(jù)庫;l用于創(chuàng)建和維護工程的工程管理器;l集匯編、編譯和過程于一體的編譯工具;l用于設(shè)置開發(fā)工具配置的框;l真正集成高速 CP

6、U 及片上外設(shè)模擬器的源碼級調(diào)試器;l高級 GDI 接口,可用于目標硬件的軟件調(diào)試和 ULINK2器的連接;l用于應(yīng)用程序到 Flash ROM 中的 Flash 編程器;l完善的開發(fā)工具手冊、設(shè)備和用戶向?qū)?。啟動代碼配置向?qū)ision3 IDE 的啟動代碼配置向?qū)⒏鱾€所需配置的功能模塊以框方式展示,附加的提示說明,幫助你快速輕松的做出選擇,生成完善的啟動代碼,免除手工寫幾百行匯編程序的痛苦。3ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 1.2配置啟動代碼Vision3 設(shè)備模擬器Vision3 設(shè)備模擬器的功能強大,能模擬整個 MCU 的行為。使你在沒有硬件或?qū)δ繕薓CU 沒有更深的了解的情

7、況下,仍然可以立即開始開發(fā)軟件。高效指令集中斷片內(nèi)設(shè)備ADC,DAC, EBI,Timers UART,CAN,I2C外部信號和 I/O圖 1.3 設(shè)備模擬器4ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0性能分析器性能分析器可給所有的 MCU 實現(xiàn)如程序運行時間統(tǒng)計、被調(diào)用次數(shù)統(tǒng)計、代碼覆蓋率統(tǒng)計等高端功能,而這些功能對于快速死區(qū)代碼,幫助優(yōu)化分析等起了關(guān)鍵的作用。圖 1.4 性能分析器RealView 編譯器(RVCT)RealView MDK 集成的 RealView 編譯器(跟 RVDS 使用一樣的編譯器),是業(yè)界最優(yōu)秀的編譯器,它能使代碼容量更小、執(zhí)行效率更高;使應(yīng)用程序運行更快、系統(tǒng)成本更低

8、。MicroLib為進一步改進基于 ARM 處理器的應(yīng)用代碼密度,RealView MDK 采用了新型 microlib C庫(用于 C 的 ISO 標準運行的一個子集),并將其代碼鏡像降低最小以滿足微器應(yīng)用的需求。Microlib C 庫可將運行代碼大大降低。RealView 實RL-ARM(可選)ULINK2器1.2RealView 使用1.2.1 創(chuàng)建一個工程Vision 是一個標準的窗口應(yīng)用程序,可以點擊程序按鈕開始運行。為了創(chuàng)建一個新的Vision 工程必須作如下處理:選擇工具集 創(chuàng)建工程文件選擇設(shè)備1.2.1.1 選擇工具集Vision 可以使用 ARM RealView 編譯工具

9、、 ARM ADS 編譯器、GNU GCC 編譯器和Keil C ARM 編譯器。當(dāng)使用 GNU GCC 編譯器或ARM ADS 編譯器時必須另外安裝它們編譯集。實際使用的工具集可以在 Vision IDE 的 Project Manage- Components, Environment,5ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0and Books框的 Folders/Extensions 頁(見下圖)中選擇。圖 1.5 選擇工具集Use RealView Compiler 復(fù)選框表示本工程使用 ARM 開發(fā)工具。RealViewFolder文本框指定開發(fā)工具的路徑。下面的例子顯示了各種版本的

10、ARM ADS/RealView 開發(fā)工具的路徑:a)b)c)Vision 的 RealView 編譯器: BIN31ADS V1.2: C:Program FilesARMADSv1_2BinRealView 評估版 2.1: C:Program FilesARMRVCTPrograms2.1350eval2-scwin_32-pentiumUse Keil CARM Compiler 復(fù)選框表示本工程使用 Keil CARM 編譯器、Keil AARM 匯編器和 Keil LARM器/裝載器。Use GNU Compiler 復(fù)選框表示本工程使用 GNU 開發(fā)工具。Cygnus Folde

11、r 文本框指定 GNU 的安裝路徑。GNU-Tool-Prefix 文本框指定不同的 GNU 工具鏈。下面是各種 GNU版本的例子:a) 帶 uclib 的 GNU V3.22: GNU-Tool-Prefix: arm-uclibc- Cygnus Folder:C:Cygnusb) 帶標準庫的 GNUARM V4: GNU-Tool-Prefix: arm-elf- Cygnus Folder: C:Program FilesGNUARM6ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0Keil 根目錄的設(shè)置是基于 Vision/ARM 開發(fā)工具的安裝目錄的。對于 Keil ARM 工具來說,工具組件

12、的路徑是在開發(fā)工具目錄中配置的。1.2.1.2 創(chuàng)建工程文件單擊 Project -New.-Vision Project 菜單項,Vision 3 將打開一個標準框,輸入希望新建工程的名字即可創(chuàng)建一個新的工程,建議對每個新建工程使用的文件夾。例如,這里先建立一個新的文件夾,然后選擇這個文件夾作為新建工程的目錄,輸入新建工程的名字 Project1,Vision 將會創(chuàng)建一個以 Project1.UV2 為名字的新工程文件,它包含了一個缺省的目標(target)和文件組名。這些內(nèi)容在 Project Workspace-Files 中可以看到。1.2.1.3 選擇設(shè)備在創(chuàng)建一個新的工程時,Vi

13、sion 要求為這個工程選擇一款 CPU。選擇設(shè)備框顯示了 Vision 的設(shè)備數(shù)據(jù)庫,只需要選擇用戶所需的微器即可。例如,選擇 Philips LPC2106微器,這個選擇設(shè)置了 LPC2106 設(shè)備的必要工具選項、簡化了工具的配置。圖 1.6 選擇設(shè)備注意:當(dāng)創(chuàng)建一個新的工程時,Vision 會自動為所選擇的 CPU 添加合適的啟動代碼。對于一些設(shè)備而言,Vision 需要用戶手動地輸入額外的參數(shù)。請仔細閱讀這個框右邊的信息,因為它可能包含所選設(shè)備的額外配置要求。7ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0創(chuàng)建源文件以后,就可以將這個文件添加到工程中。Vision 提供了幾種方法將源文件添加到工

14、程中。例如, 在 Project Workspace -Files 頁的文件組上點擊鼠標右鍵,然后在彈出的菜單中選擇 Add Files 菜單項,這時將打開標準的文件c 文件即完成源文件的添加??颍x擇我們創(chuàng)建的 asm 或1.2.2 編譯、工程1.2.2.1 設(shè)置目標硬件的工具選項Vision 可以設(shè)置目標硬件的選項。通過工具欄按鈕或 Project - Options for Target 菜單項打開 Options for Target框,在 Target 頁中設(shè)置目標硬件及所選 CPU 片上組件的參數(shù)。下圖是 LPC2106 的一些參數(shù)設(shè)置。圖 1.7 設(shè)置目標硬件下表描述了 Targ

15、et框的選項:框項描述設(shè)備的晶振(XTAL)頻率。大多數(shù)基于 ARM 的微器都使用片上 PLLXtal產(chǎn)生 CPU 時鐘。所以,一般情況下 CPU 的時鐘與 XTAL 的頻率是不同的。Read/Only Memory AreaRead/WriteMemory Areas配置片內(nèi)、片外的 ROM 區(qū)地址以及大小指定目標硬件的片內(nèi)和片外的 RAM 區(qū)地址以及大小Code Generation 旋轉(zhuǎn)產(chǎn)生 ARM code 還是 Thumb code8ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.01.2.2.2 增加連接文件對于 GNU 和 ARM ADS/RealView 工具鏈來說器的配置是通過器文件實文件

16、 在文件現(xiàn)的。這個文件指定了 ARM 目標硬件的配置。預(yù)配置的器夾.ARMGNU 或.ARMADS 中。 為了與目標硬件相匹配,用戶可能會修改器文件,所以工程中的那個文件是預(yù)配置的連接文件的一個副本。這個文件可以通過 Project- Options for Target框的 Linker 頁添加到工程中。圖 1.8 設(shè)置 linker 選項對于復(fù)雜的 memory layout 分配方式,應(yīng)該采用 scatter file, 對于簡單的工程,直接指定 R/O和 R/W 的基地址即可。1.2.2.3 編譯一般來說,在新建一個應(yīng)用程序的時候 Options -Target 頁中的所有的工具和屬性

17、都要配置。單擊 Build Target 工具欄按鈕將編譯所有的源文件,應(yīng)用程序。當(dāng)編譯有語法錯誤的應(yīng)用程序時,Vision 將在 Output Window -Build 窗口中顯示錯誤和警告信息。單擊這些信息行,Vision 將會到相應(yīng)的源代碼處。9ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 1.9 編譯結(jié)果產(chǎn)生應(yīng)用程序以后就可開始調(diào)試了, 點擊 Debug-Start/Stop debug源文件編譯session (Ctrl F5)即進入調(diào)試模式。1.2.3 程序調(diào)試進入調(diào)試模式之后,可以選擇單步、全速運行??梢栽O(shè)置斷點等常規(guī)的調(diào)試。所有有關(guān)調(diào)試的操作都可以在 Debug 菜單下找到。如下圖

18、所示為進入調(diào)試模式下時的界面。圖 1.10 simulator 調(diào)試常用的調(diào)試:lll單步、全速運行程序F10 單步運行, F5 全速運行。對于各種模式下的寄存器,可以在左邊的窗口查看10ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0l對于 ARM 的 7 種模式下的寄存器,都可以查看。當(dāng)處理器處于任何一種模式時,可以查看 Current 中所有的寄存器的值,處理器從一種狀態(tài)改變到另外一種狀態(tài)時,該模式下物理上設(shè)置斷點的寄存器將會被用到。llll選中需要設(shè)置斷點的行,然后 F9 即在改行設(shè)置斷點,程序運行到此處就停止運行。查看變量的實時值對于 local 的變量,打開 View-Watch&Call S

19、tack Window,在此 Window 中,選擇Locals tab 就可以查看所有的 local 變量。對于全局變量,選擇 Watch window 中的 Watch #1, 加入你需要查看的變量就可以l查的全局變量的值。ll外設(shè)模塊因為我們選擇的是 Simulator,所以可以通過 RealView MDK 強大的功能來調(diào)試程序。打開 Peripheral-GPIO 可以看到每一個 GPIO pin 的實時狀態(tài)信息。全速運行程序后,GPIO 的狀態(tài)就開始按照程序的開始變化。1.2.4 工程選項頁概述在 Project - Options框頁可以設(shè)置所有的工具選項。所有的選項都保存在 V

20、ision工程文件中。在 Project Workspace -Files 窗口點擊鼠標右鍵,在彈出的菜單中可以設(shè)置文件夾或單個文件的不同選項,這些選項在文件和文件夾選項中解釋過。在這種情況下,可能有附加的屬性頁及僅與所選項相關(guān)的框頁。下表概述了各種選項框頁框的功能。描述Device Target Output Listing CAsm從 Vision 的設(shè)備數(shù)據(jù)庫中選擇選擇設(shè)備。為應(yīng)用程序指定硬件環(huán)境。定義工具鏈的輸出文件,在編譯完成后運行用戶程序。指定工具鏈產(chǎn)生的所有列表文件。設(shè)置 C 編譯器的工具選項,例如代碼優(yōu)化和變量分配。設(shè)置匯編器的工具選項,如宏處理。設(shè)置器的相關(guān)選項。一般來說,器

21、的設(shè)置需要配置目標系統(tǒng)的Linker分配。設(shè)置器定義器類型和段的位置。DebugVision 調(diào)試器的設(shè)置。Utilities配置 Flash 編程實用工具。11ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0實驗二、ARM 指令集2.1 ARM 匯編指令 1【實驗內(nèi)容】建立一個匯編工程,要求完成兩個變量求和,編譯通過后,調(diào)試結(jié)果?!緦嶒?zāi)康摹繒褂?Vision3 IDE for ARM 開發(fā)環(huán)境及 ARM 軟件模擬器; 通過實驗掌握簡單 ARM 匯編指令的使用方法?!緦嶒灢襟E】1、新建工程首先在就業(yè)班 ARM 課件ARM 實驗第 1 天目錄下建立文件夾命名為 asm-00,運行 Vision3 IDE

22、 集成開發(fā)環(huán)境,選擇菜單項 Project New Vision Project,系統(tǒng)彈出一個框,按照圖2-1所示輸入相關(guān)內(nèi)容。點擊“保存”按鈕,將創(chuàng)建一個新工程asm00.Uv2。圖 2-12、為工程選擇CPU新建工程后,要為工程選擇 CPU,如圖 2.2 所示,在此選擇 SAMSUNG 的 S3C2410X12ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 2-23、添加啟動代碼在圖 2-3 中點“確定”后,會彈出一個示。框,問是否要添加啟動代碼。如圖 2.3 所圖 2-3由于本實驗是簡單的匯編實驗,因此不需要啟動代碼。選擇否。4、選擇開發(fā)工具要為工程選擇開發(fā)工具,在 Project - Mana

23、ge - Components,Environment and Books- Folder/Extensions框的 Folder/Extensions 頁內(nèi)選擇開發(fā)工具,如圖 2-4 所示。13ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 2-4 選擇開發(fā)工具從圖中可以看到,有三個開發(fā)工具可選,在此選擇 RealView Compiler。5、建立源文件點擊菜單項 File - New,系統(tǒng)彈出一個新的、沒有標題的文本編輯窗,輸入光標位于窗口中第一行,按照實驗參考程序編輯輸入源文件代碼。編輯,保存文件 asm1_a.s。6、添加源文件單擊工程管理窗口中的相應(yīng)右鍵菜單命令,選擇 Add Files

24、to,會彈出文件選擇對話框,在工程目錄下選擇剛才建立的源文件 asm1_a.s。如圖 2-5 所示。14ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 2-57、工程配置選擇菜單項 Project-Option for Target,將彈出工程設(shè)置框,如圖 2-6 所示??驎蛩x開發(fā)工具的不同而不同,在此僅對 Target 選項頁、Linker 選項頁及 Debug選項頁進行配置。Target 選項頁的配置如圖 2-6;Linker 選項頁的配置如圖 2-7;Debug 選項頁的配置如圖 2-8。需要注意,后面的實驗中在 Debug 選項頁內(nèi)需要一個初始化文件:DebugINRam.ini。此.IN

25、I 文件用于設(shè)置生成的.AXF 文件到目標中的位置,以及調(diào)試前的寄存器、內(nèi)存的初始化等配置操作。它是由調(diào)試函數(shù)及調(diào)試命令組成調(diào)試命令文件。15ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 2-6 基本配置 Target圖 2-7 基本配置 Linker16ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 2-8 基本配置 Debug8、生成目標代碼選擇菜單項 Project - Build target 或快捷鍵 F7,生成目標代碼。在此過程中,若有錯誤,則進行修改,直至無錯誤。若無錯誤,則可進行9、調(diào)試的調(diào)試。選擇菜單項 Debug - Start/Stop Debug Session 或快捷鍵 Ctrl+

26、F5,調(diào)試模試用版,式。若沒有目標硬件,可以用 Vision 3 IDE 中的軟件器。如果使用MDK則在進入調(diào)試模式前,會有如下框彈出,如圖 2-9 所示。圖 2-9 在軟件確定后即可調(diào)試了,做如下調(diào)試工作: 參看“asm-00”目錄下的代碼。下調(diào)試程序17ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0圖 2.10 ARM 匯編練習(xí)-編譯,。targetOptionsTarget tabfor“Target1”中設(shè)置如下:Linker tab18ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0去掉 “use0x4000000。memorylayoutfromtargetdialog”,R/OBase填0x0,R/W

27、Base填-進入調(diào)試模式,開始調(diào)試,并注意查看寄存器的值,檢查計算結(jié)果是否正確。注意:匯編語言的源語句行的一般格式是:label instruction|directive|pseudo-instruction ;comment即使沒有標號,指令、偽指令和命令前面也必須有一個空白,例如一個空格或制表符。源語句行的所有三部分都是可選的??梢允褂每招衼硎勾a更具可讀性。對以上代碼的解釋:段和 AREA 命令段是最低要求。名的、不可分割的代碼或數(shù)據(jù)序列。一個代碼段是個應(yīng)用程序的匯編或編譯的輸出可以包括:一個或多個代碼段。它們通常是只讀段。一個或多個數(shù)據(jù)段。它們通常是讀寫段。它們可以是零初始化的 (Z

28、I)。程序依照段位置規(guī)則,將每個段放在一個程序映像中。在源文件中相鄰的段,不一定要在應(yīng)用程序映像中相鄰。在源文件中,用 AREA 命令來標記一個段的開始。該命令對屬性放在名稱后面,之間用逗號分隔。ENTRY 命令ENTRY 命令標記要執(zhí)行的第一個指令。在包含 C 代碼的應(yīng)用命名并設(shè)置其屬性。,在 C 庫的初始化代碼中也包含一個點。初始化代碼和異常處理程序也包口點。19ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0END 命令此命令指示匯編程序停止處理這個源文件。每個匯編語言源模塊必須以一行單獨的END 命令結(jié)束。2.2 ARM 匯編指令 2【實驗內(nèi)容】使用 add/sub/lsl/lsr/and/orr

29、 等指令,完成基本算術(shù)/邏輯運算?!緦嶒?zāi)康摹繒褂?Vision3 IDE for ARM 開發(fā)環(huán)境及 ARM 軟件模擬器; 通過實驗掌握簡單 ARM 匯編指令的使用方法?!緦嶒灢襟E】參看“asm-01”目錄下的代碼按照實驗一的方法,新建一個 project,名字為 asm01;添加 asm01.s 文件到項目中。幫助:LDR 指令:LDR 指令用于從內(nèi)存中將一個 32 位的字到目標寄存器。LDR 指令根據(jù)所確定的地址模式將一個 32 位字到指令中的目標寄存器。如果指令中的尋址方式確定的地址不是字對,則讀出的數(shù)值要進行循環(huán)右移。所移位數(shù)為尋址方式確定的地址 bits108 的倍,也就是說處理

30、器將取到的數(shù)值作為字的最低位處理。如果設(shè)置了 L 位,則進行裝載,否則進行。如果設(shè)置了 P 位,則使用預(yù)先變址尋址,否則使用過后變址尋址。如果設(shè)置了 U 位,則給出的偏移量被加到基址寄存器上,否則從中減去偏移量。如果設(shè)置了 B 位,傳送內(nèi)存的一個字節(jié),否則傳送一個字。這在助記符末尾添加后綴“B”,如 MOV r7,r5 變?yōu)?MOVB r7,r5。W 位的解釋依賴于使用的地址模式。l對于預(yù)先變址尋址,設(shè)置 W 位強制把它用做地址轉(zhuǎn)換的最終地址寫回基址寄存器中(例如,傳送的副作用是 Rn:= Rn +/-offset。這在匯編器中表示為給指令加上后綴“!”。)。對于過后變址尋址,地址總是寫回,設(shè)

31、置 W 位指示在進行傳送之前強制地址轉(zhuǎn)換。這在匯編器中表示為給指令加上后綴“T”。ll當(dāng) PC 作為 LDR 的目的寄存器時,從序?qū)⑻D(zhuǎn)到目標地址開始執(zhí)行。器取得的數(shù)據(jù)將被當(dāng)作目標地址值,程指令的語法格式 LDR ,它確定了指令編碼中的 I、P、U、W、Rn 和位。所有的尋址模式中,都會確定一個基址寄存器 Rn。指令舉例 LDR r1,r0,#0x12;將 r0+12 地址處的數(shù)據(jù)讀出,保存到 r1 中(r0 的值不變)20ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0STR 指令:STR 指令用于將一個 32 位的字數(shù)據(jù)寫入到指令中指定的內(nèi)存單元。指令的語法格式指令舉例LDR/STR 指令用于對內(nèi)存變

32、量的、內(nèi)存緩沖區(qū)數(shù)據(jù)的、查表、部件的控制操作等等,若使用 LDR 指令加載數(shù)據(jù)到 PC 寄存器,則實現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實現(xiàn)了程序散轉(zhuǎn)。變量GPIO 設(shè)置程序散轉(zhuǎn)2.3 ARM 匯編指令 3【實驗內(nèi)容】建立一個匯編工程,要求通過 ARM 匯編指令在各個處理器模式下切換并觀察各個模式下處理器的區(qū)別。編譯通過后,調(diào)試結(jié)果?!緦嶒?zāi)康摹?1MOV r2,r2,LSL #2;功能號乘以 4,以便查表LDR PC,PC,r2;查表取得對應(yīng)功能子程序地址,并跳轉(zhuǎn)NOPFUNTAB DCD FUNSUB0DCD FUNSUB1 DCD FUNSUB2GPIOBASE EQU 0xe0028000;定義G

33、PIO 寄存器的基地址LDRR0,=GPIOBASELDRR1,=0x00ffff00;將設(shè)置值放入寄存器STRR1,R0,#0x0C;IODIR=0x00ffff00,IOSET 的地址為 0xE0028004NumCount EQU 0x40003000;定義變量NumCountLDR R0,=NumCount;使用LDR 偽指令裝載NumCount 的地址到R0LDR R1,R0;取出變量值A(chǔ)DD R1,R1,1;NumCount=NumCount+1STR R1,R0;保存變量STR ,LDR r1,r0;將 r0 地址處的數(shù)據(jù)讀出,保存到 r1 中(零偏移)LDR r1,r0,r2;

34、將 r0+r2 地址的數(shù)據(jù)讀出,保存到 r1 中(r0 的值不變)LDR r1,r0,r2,LSL #2 ;將 r0+r24 地址處的數(shù)據(jù)讀出,保存到 r1 中(r0,r2 的值不變)LDR Rd,label;label 為程序標號,label 必須是當(dāng)前指令的4KB 范圍內(nèi)LDR Rd,Rn,0x04;Rn 的值用作傳輸數(shù)據(jù)的地址。在數(shù)據(jù)傳送后,將偏移量 0x04 與Rn 相加,結(jié)果寫回到 Rn 中。Rn 不是r15ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0通過實驗掌握學(xué)會使用 MSR/MRS 指令實現(xiàn) AMR 處理器工作模式的切換,觀察不同模式下的寄存器,加深對 CPU 結(jié)構(gòu)的理解?!緦嶒灢襟E】

35、參看“asm-02”目錄下的代碼按照實驗一的方法,新建一個 project,名字為 armmode 工程;添加 armmode.s 文件到項目中?!緦嶒炘怼緼RM 處理器共有 7 種工作模式ARM 處理器的工作模式除用戶模式外的其他 6 種處理器模式稱為模式(Privileged Modes)。在這些模式下,程序可以所有的系統(tǒng),也可以任意地進行處理器模式切換。其中的 5 種又稱為異常模式,分別為:FIQ(Fast Interrupt reQuest); IRQ(Interrupt request);管理(Supervisor);中止(Abort);未定義(Undefined)。處理器模式可以

36、通過軟件進行切換,也可以通過外部中斷或異常處理過程進行切換。大多數(shù)的用戶程序運行在用戶模式下。當(dāng)處理器工作在用戶模式時,應(yīng)用程序不能夠訪問受操保護的一些系統(tǒng),應(yīng)用程序也不能直接進行處理器模式切換。當(dāng)需要進行處理器模式切換時,應(yīng)用程序可以產(chǎn)生異常處理,在異常處理過程中進行處理器模式切換。這種體系結(jié)構(gòu)可以使操系統(tǒng)的使用。當(dāng)應(yīng)用程序發(fā)生異常中斷時,處理器進入相應(yīng)的異常模式。在每一種異常模式中都有一寄存器以供相應(yīng)的異常處理程序使用,這樣就可以保證在進入異常模式時用戶模式下組的寄存器(保存程序運行狀態(tài))不被破壞。狀態(tài)操作指令A(yù)RM 指令集提供了兩條指令, 可直接程序狀態(tài)寄存器( PSR , Progra

37、m State22處理器工作模式簡 寫描述用戶模式(User)usr正常程序執(zhí)行模式,大部分任務(wù)執(zhí)行在這種模式下快速中斷模式(FIQ)fiq當(dāng)一個高優(yōu)先級(fast)中斷產(chǎn)生時將會進入這種模式,一般用于高速數(shù)據(jù)傳輸和通道處理外部中斷模式(IRQ)irq當(dāng)一個低優(yōu)先級(normal)中斷產(chǎn)生時將會進入這種模式, 一般用于通常的中斷處理模式(Supervisor)svc當(dāng)復(fù)位或軟中斷指令執(zhí)行時進入這種模式,是一種供操作系統(tǒng)使用的保護模式數(shù)據(jù)中止模式(Abort)abt當(dāng)存取異常時將會進入這種模式,用于虛擬或保護未定義指令中止模式(Undef)und當(dāng)執(zhí)行未定義指令時進入這種模式,有時用于通過軟件協(xié)

38、處理器硬件的工作方式系統(tǒng)模式(System)sys使用和 User 模式相同寄存器集的模式,用于運行級操任務(wù)ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0Register)。MRS 指令用于把 CPSR 或 SPSR 的值傳送到一個寄存器;MSR 與之相反,把一個寄存器的內(nèi)容傳送到 CPSR 或 SPSR。這兩條指令結(jié)合,可用于對 CPSR 和 SPSR 進行讀/寫操作。交換指令如表 5.5 所示。表 5.5程序狀態(tài)寄存器指令在指令語法中可看到一個稱為 fields 的項,它可以是及標志(F)的組合。(C)、擴展(X)、狀態(tài)(S)程序不能通過直接修改CPSR 中的T 位等指令完成程序狀態(tài)的切換。直接將程

39、序狀態(tài)切換到 Thumb 狀態(tài),必須通過 BX注意MRSMRS 指令用于將程序狀態(tài)寄存器的內(nèi)容傳送到通用寄存器中。當(dāng)數(shù)據(jù)被移到通用寄存器以后,就可以對數(shù)據(jù)進行處理。(2)指令的語法格式MSRMSR 指令用于將通用寄存器中的內(nèi)容或立即數(shù)傳送到程序狀態(tài)寄存器中。因此指令的編碼格式也有兩種格式。(2)指令的語法格式實驗三3.1 LDR/STM 指令尋址實驗【實驗內(nèi)容】熟悉開發(fā)環(huán)境的使用并完成一塊【實驗?zāi)康摹繀^(qū)的。完成分支程序設(shè)計。通過實驗掌握使用 LDM/STM、B 等指令,完成較為復(fù)雜的學(xué)習(xí)使用條件碼,加強對 CPSR 的認識?!緦嶒灢襟E】參看“asm-03”目錄下的代碼區(qū)和程序分支。按照實驗一的

40、方法,新建一個 project,名字為 asm01;添加 asm01.s 文件到項目中。23MSR CPSR_, MSR CPSR_, MSR SPSR_, MSR SPSR_,MRS ,CPSR MRS ,SPSR指令作用操作MRS把程序狀態(tài)寄存器的值送到一個通用寄存器Rd=SPRMSR把通用寄存器的值送到程序狀態(tài)寄存器或把一個立即數(shù)送到程序狀態(tài)字PSRfield=Rm 或PSRfield=immediateARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0注意:link 設(shè)置和實驗 2.1 不同,是 asm01.s 中的代碼段屬性為 readwrite,所以R/O Base(-entry 后的值)和 R

41、/W Base 相同,且在 rw 區(qū)域。areastart,code,readwriteLinker tab因為 entry0x30000000所以需要在調(diào)試時把 pc 的初始值指向這個位置。使用 DebugInRam.ini 來實現(xiàn)。DebugInRam.ini 內(nèi)容如下:24ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.03.2 ARM 匯編子函數(shù)調(diào)用【實驗內(nèi)容】建立一個匯編工程,要求完成兩個變量求和,求差,以及返回值。編譯通過后,調(diào)試結(jié)果?!緦嶒?zāi)康摹客ㄟ^實驗掌握簡【實驗步驟】函數(shù)調(diào)用。參看“asm-04”目錄下的代碼按照實驗一的方法,新建一個 project,名字為 asm02;添加 asm02.

42、s 文件到項目中。編譯程序,使用 debugger 調(diào)試程序。觀察程序運行時寄存器的狀態(tài)。單步執(zhí)行代碼,觀察在子程序調(diào)用時,r14(LR)的變化。3.3Thumb 匯編指令練習(xí)【實驗內(nèi)容】建立一個匯編工程,要求完成兩個變量求和,兩個變量相加的子程序用 Thumb 指令編寫。編譯通過后,調(diào)試結(jié)果?!緦嶒?zāi)康摹客ㄟ^實驗掌握簡單的 Thumb 指令及 ARM、Thumb 交互?!緦嶒灢襟E】參看“ThumbTest”目錄下的代碼按照實驗一的方法,新建一個 project,名字為 Thumb_test 工程;添加 Thumb_code.s文件到項目中。3.4 利用 ARM 匯編實現(xiàn)開發(fā)板 LED 燈【實

43、驗內(nèi)容】建立一個簡單的匯編語言代碼,完成 LED 的【實驗?zāi)康摹?。編譯通過后,調(diào)試結(jié)果。學(xué)會使用 realview MDK 編寫簡單的匯編語言程序【實驗步驟】參看“l(fā)ed_asm”目錄下的代碼設(shè)備。1、按照實驗一的方法,新建一個 project,名字為 led_asm 工程;添加 led.s 文件到25ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0項目中。2、按照實驗一的方法,編譯,代碼到開發(fā)板運行,觀察現(xiàn)象。3、修改代碼,實現(xiàn)的邏輯。4、燒寫你的代碼到開發(fā)板后,可能出現(xiàn)邏輯和你想要的不一致。思考?(在于:默認情況下,處理器是打開看門狗的。解決方法:添加指令關(guān)閉看門狗)實驗四4.1 簡單 C 語言程序?qū)?/p>

44、驗【實驗內(nèi)容】建立一個簡單的 C 語言代碼,完成延時功能。編譯通過后,調(diào)試結(jié)果?!緦嶒?zāi)康摹繉W(xué)會使用 realview MDK 編寫簡單的 C 語言【實驗步驟】參看“CTest1”目錄下的代碼調(diào)試運行。按照實驗一的方法,新建一個 project,名字為 C_test1 工程;添加 C_CALL.C 文件到項目中。4.2 匯編與 C 語言的相【實驗內(nèi)容】用實驗使用匯編完成一個函數(shù),通過 C 語言調(diào)用該函數(shù)?!緦嶒?zāi)康摹繉W(xué)會使用 realview MDK 編寫匯編和 C 語言相件?!緦嶒灢襟E】參看“explasm”目錄下的代碼用的程序,學(xué)會使用 sct 連接文按照實驗一的方法,新建一個 proje

45、ct,名字為 C_test1 工程;添加 randtest.c、startup.s、addsubb.s 文件到項目中。注意在 linker 下選擇.explasm.sct 文件26ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.04.3 C 語言中內(nèi)聯(lián)匯編程序?qū)嶒灐緦嶒瀮?nèi)容】建立一個簡單的 C 語言代碼,加入內(nèi)聯(lián)匯編代碼。編譯通過后,調(diào)試結(jié)果?!緦嶒?zāi)康摹繉W(xué)會在 C 語言【實驗步驟】內(nèi)聯(lián)匯編語言。參看“CTest2”目錄下的代碼按照實驗一的方法,新建一個project,名字為CTest2 工程。添加CCode.c startup.s文件到項目中。使用 CTest2.sct文件。4.4 C 語言中嵌入型匯編程

46、序?qū)嶒灐緦嶒瀮?nèi)容】建立一個簡單的 C 語言代碼,加入嵌入型匯編代碼。編譯通過后,調(diào)試結(jié)果?!緦嶒?zāi)康摹?7ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0學(xué)會在 C 語言【實驗步驟】加入嵌入型匯編代碼。參看“CTest3”目錄下的代碼按照實驗一的方法,新建一個project,名字為CTest3 工程。添加CCode.c startup.s文件到項目中。使用 CTest3.sct文件。4.5 SWI 軟中斷實驗【實驗內(nèi)容】參照課件 SWI 示例,完成一個完整的工程,可以實現(xiàn) SWI 的調(diào)用過程?!緦嶒?zāi)康摹坷斫?SWI 的實現(xiàn)過程。【實驗步驟】1、理解課件中“軟中斷(SWI)處理示例”,2、編寫程序,在 s

47、wi 處理過程中,完成軟中斷號的獲取。(參考實驗代碼 swi_test)4.6 綜合編程實驗【實驗內(nèi)容】完成一個完整的工程,要求包含啟動代碼、匯編函數(shù)和 C 文件,而且 C 文件包含 AMR函數(shù)和 Thumb 函數(shù),并且可以相【實驗?zāi)康摹坑?。學(xué)會使用 realview MDK 編寫綜合代碼?!緦嶒灢襟E】參看“interwork”目錄下的代碼按照實驗一的方法,新建一個 project,名字為 interwork 工程;添加 arm.c、thumb.c、addsubb.s、S3C2410A.s 文件到項目中。讀懂程序的啟動過程及調(diào)用關(guān)系。注意:下圖說明了 arm.c 和 thumb.c 是如何被分布編譯為 ARM 代碼和 Thumb 代碼的28ARM 開發(fā)培訓(xùn)班實驗指導(dǎo) V3.0注意:Thumb Mode 選項的選擇情況實驗五、I/O 及串口通信編程實驗【實驗內(nèi)容】編寫程序,實驗平臺的發(fā)光二極管 D9、D10、D11、D12 使它們有規(guī)律的點亮和熄滅。并且通過串口打印提示信息。代碼分別在【實驗?zāi)康摹科飨?、和脫離環(huán)境運行。掌握 S3C2410I/O器、uart器、及系統(tǒng)初始化相關(guān)部分的配置方法;掌握調(diào)整 fputc 庫使其適應(yīng)目標硬件;掌握如何通過 realview MDK 環(huán)境將代碼燒寫

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論