第一篇:大學生嵌入式系統設計競賽簡介
全國大學生嵌入式系統設計競賽簡介
“英特爾杯全國大學生電子設計競賽嵌入式系統專題邀請賽”是教育部高等教育司和信息產業部共同主辦,上海交通大學協辦的全國性面向大學本科生的四大賽事之一。該賽事是全國大學生電子設計競賽的姊妹賽事,每兩年舉行一次。第一屆始于2002年,當時只有清華、北大等15所院校參加。2004年擴大到全國有研究生院的重點院校及少數電子信息類專業較強的一般院校,共有53所學校的106支參賽隊。今年在Intel公司的建議下將參賽范圍擴大到亞太地區的高校,并有香港地區以及印度、馬來西亞、新加坡和菲律賓等國的高校接受了邀請組隊參賽,所以今年共有70所高校的158支參賽隊參賽。原則上每校只派兩隊參賽,每隊3名隊員,一名指導教師。但今年允許第一屆參賽的15所高校有四支參賽隊。
與單數年舉辦的電子設計競賽不同的是,電子設計競賽是基礎型、知識點型、普及型的競賽,而嵌入式系統設計競賽是提高型,知識綜合運用及創新型、精英型競賽。競賽平臺統一采用以Intel最新的兩款嵌入式處理器構建的嵌入式應用裸機板(本次競賽有采用Pentium/C M處理器及采用PXA 270處理器兩個平臺),參賽隊通過在其上擴充硬件及接口電路、移植操作系統、設計驅動程序及開發應用程序,最終實現自己的設計。設計題目的擬定及制作實現過程完全由各隊自行決定。最終的成績評定首先是檢驗作品立意的創新性,然后是考察設計對硬件平臺資源利用的合理性和充分性,接著是評判設計的功能強弱及實現復雜性,最后是對比測試實現項目的技術指標。
本次競賽經過了近4個月的設計制作過程,7月16日到23日在上海交大共進行了8天的嚴格評比,最終評選出一等獎12個隊,二等獎26個隊,三等獎59個隊。8月8日在北京中國大飯店會議大廳舉行了隆重的頒獎大會,教育部、信息產業部領導,競賽組委會主任、兩院院士王越,中國工程院鄔賀銓副院長,英特爾公司全球副總裁兼中國區總裁陳偉錠在大會上致詞,另有倪光南等8位電子信息界資深院士參加了頒獎。
教育部領導在會上表示,產業、科研和教育交流對教育事業的發展至關重要,實踐性教育環節已成為教育部對高校教學質量進行評估的重點。全國大學生電子設計競賽是面向全國高等學校大學生的學科競賽活動,始終堅持與高校電子信息類專業教學實際緊密結合,深入研究相關專業課程教學體系和內容、尤其是實踐教學改革的方式,探索符合國情的人才培養模式。各高校今后應更多提倡此類活動,鼓勵教學實踐,實現教育與行業應用接軌,促進產學研發結合,把“科教興國”戰略落于實處。同時,高校教育是未來社會經濟發展的后續力量,信息產業中的企業應借鑒本次活動的經驗,加強企業與高校教育的交流,在促進技術發展的同時,選擇吸收優秀人才。
第二篇:嵌入式系統設計報告
嵌入式系統設計實驗報告
班 級:學 號:姓 名:成 績:指導教師:
20090612 2009112107 侯金鐘 武俊鵬、劉書勇 1.實驗一
1.1 實驗名稱
嵌入式系統硬件開發環境
1.2 實驗目的
1.熟悉UP-net3000實驗平臺。
2.超級終端設置及BIOS 功能使用。
1.3 實驗環境
硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。
1.4 實驗內容及要求
熟悉UP-net3000實驗平臺的硬件電路和外設,ARM JTAG的安裝和使用,利用超級終端檢驗外設的工作狀態。
1.5 實驗設計與實驗步驟
1.建立工程
(1)運行ARM SDT 2.5 集成開發環境(ARM Project Manager).(2)在新建的工程中,如圖1A-2 所示,選中工程樹的“根部”。
(3)因為開發板上的嵌入式處理器ARM7TDMI 沒有浮點處理器,所以,如圖1A-3 所
示,在彈出的對話框中設置Floating Point Processor 為none,并保持其他的設置不變。(4)選中工程樹的“根部”,通過菜單Project | Tool Configuration for work1.apj | asmlink | Set,對整個工程的連接方式進行設置。(5)在彈出的對話框中,選中Entry and Base 標簽,如圖1A-4 所示,設置連接的Read-Only(只讀)和Read-Write(讀寫)地址。
(6)選擇Linker Configuration 的ImageLayout 標簽,(7)選擇Project | Edit Project Tamplete 菜單,彈出Project Template Editor 對話框。
(8)選擇Project | Edit Variables for work1.apj,彈出Edit Variables for work1.apj 對話框。
2.進行程序的在線仿真、調試
1.6 實驗過程與分析
熟悉UP-net3000實驗平臺的硬件電路和外設,安裝了ARM JTAG,利用超級終端檢驗了外設的工作狀態。
1.7 實驗結果總結
軟件安裝成功,結果顯示正常。
1.8 心得體會
通過此次試驗,我對ARM的環境的功能有一定的了解與完善。對試驗臺有了基本的認識與使用。
2.實驗二
2.1 實驗名稱
嵌入式系統軟件開發環境
2.2 實驗目的
1.熟悉ADS1.2 開發環境,學會ARM 仿真器的使用。
2.使用ADS 編譯、下載、調試并跟蹤一段已有的程序,了解嵌入式開發的基本思想和過程。
2.3 實驗環境
硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。
2.4 實驗內容及要求
本次實驗使用ADS 集成開發環境。新建一個簡單的工程文件,并編譯這個工程文件。學習ARM 仿真器的使用和開發環境的設置。下載已經編譯好的文件到嵌入式控制器中運行。學會在程序中設置斷點,觀察系統內存和變量。
2.5 實驗設計與實驗步驟
(1)運行ADS1.2 集成開發環境(CodeWarrior for ARM Developer Suite)。
(2)在新建的工程中,選擇Debug 版本,使用Edit | Debug Settings菜單對Debug 版本進行參數設置。(3)在Debug Settings 對話框中選擇Target Settings 項。在Post-linker一欄中選擇ARM from ELF。
(4)在Debug Settings 對話框中選擇ARM Linker 項
(5)在第四步中如果選擇簡單的地址連接設置,在Debug Settings 對話框中選擇ARM Linker 項
(6)回到的工程窗口中,選擇Release 版本,使用Edit | Release Settings 菜單對Release 版本進行參數設置。(7)參照第(3)、(4)、(5)、(6)步在Release Settings 對話框中設置Release版本的Post-linker、連接地址范圍、入口模塊和輸出文件。(8)回到如圖1B-3 所示的工程窗口中,選擇Targets 選項卡,如圖1B-11 所示。選中DebugRel 版本,按Del 鍵將其刪除。DebugRel 子樹是一個折衷版本,通常用不到,所以在這里刪除。
2.6 實驗過程與分析
1)回到工程窗口選中Debug 版本,執行菜單Project | Make 對工程進行編譯連接。(2)在ADS 中執行菜單Project | Debug 啟動ADS1.2 的調試工具AXD。(3)在AXD 中執行菜單Options | Configure Target 對AXD 進行設置。(4)點Select 按鈕選擇遠程連接為ARM ethernet driver,點Configure 按鈕輸入仿真器的IP 地址。
(5)等待程序裝載完畢以后,通過Execute | Go 菜單以及Execute | Stop(或者工具欄中的相應按鈕)運行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。(6)通過Execute | Step 菜單(或者工具欄中的相應按鈕)可以單步運行程序。
(7)程序停止后可以通過Processor Views | Sources 菜單查看源文件,并可在適當位置按F9 設置端點。
(8)使用在Processor View 菜單下的Registers、Variables 和Memory 命令可以查看工作寄存器或者內存變量。讀者可以逐一地嘗試,為以后調試程序打下基礎。
2.7 實驗結果總結
超級終端輸出“Hello World!”。
2.8 心得體會
基本了解了ADS1.2的配置條件,學會了ARM仿真器的使用方法。
3.實驗三
3.1 實驗名稱
鍵盤及LED實驗
3.2 實驗目的
1.學習鍵盤及LED 驅動原理。
2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驅動17鍵的鍵盤和8個共陰極LED。
3.3 實驗環境
硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。
3.4 實驗內容及要求
通過ZLG7289芯片驅動17鍵的鍵盤和8個共陰極LED,將按鍵值在LED上顯示出來。要求從右至左循環顯示至少四位數字。
基本功能實現之后可考慮實現從左至右顯示四位及四位以上數字(最大八位),并可設置清零鍵等擴展功能。
3.5 實驗設計與實驗步驟
利用所給的基礎代碼進行調試,觀察輸出結果,結合指導書和教材掌握基本原理和源代碼的編寫方式。根據實驗的要求設計函數流程,并反復調試,實現功能。1.新建工程,將“Exp3 鍵盤及LED 驅動實驗”中的文件添加到工程。2.定義ZLG7289 寄存器(ZLG7289.h)
#define ZLG7289_CS(0x20)//GPB5 #define ZLG7289_KEY(0x10)//GPG4 #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)3.編寫ZLG7289 驅動函數(ZLG7289.c)4.定義鍵盤映射表:(Keyboard16.c)
unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//64 鍵值映射表,通過查找鍵盤映射表來確定鍵盤掃描碼對應的按鍵值。
5.定義鍵值讀取函數。(Keyboard16.c)6.編寫主函數,將按鍵值在數碼管上顯示。
3.6 實驗過程與分析
利用鍵盤驅動函數實現基本數字輸入,然后利用循環左移函數實現輸入數字做一樣功能,并通過改變函數中相應delay的值來消除鍵盤按鍵帶來的抖動。
3.7 實驗結果總結
按鍵值可以在LED上顯示出來。要求從右至左循環顯示八位數字,同時可以復位清零。達到實驗的效果。
3.8 心得體會
通過本次實驗,我了解了LED的顯示屏幕的數字的移位功能,這個功能不止可以用一個方法實現,而循環左移是其中比較巧妙且省力的一種,在遇到類似情況的時候,可以優先考慮能不能利用到文件中已經存在的函數,這樣可以不必自己編寫函數,省時省力。是一種可靠的方法。4.實驗四
4.1 實驗名稱
電機轉動控制及中斷實驗
4.2 實驗目的
1.熟悉ARM本身自帶的六路即三對PWM,掌握相應寄存器的配置。
2.編程實現ARM系統的PWM輸出和I/O輸出,前者用于控制直流電機,后者用于控制步進電機。
3.了解直流電機和步進電機的工作原理,學會用軟件的方法實現步進電機的脈沖分配,即用軟件的方法代替硬件的脈沖分配器。
4.了解44B0處理器上中斷的應用。5.學習在44B0處理器上中斷的應用。
6.進一步熟悉平臺外圍硬件及其驅動程序的編寫。
4.3 實驗環境
硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。
4.4 實驗內容及要求
1.學習步進電機和直流電機的工作原理,了解實現兩個電機轉動對于系統的軟件和硬件要求。學習ARM 知識,掌握 PWM 的生成方法,同時也要掌握 I/O的控制方法。
2.編程實現ARM芯片的一對PWM輸出用于控制直流電機的轉動,通過A/D旋鈕控制其轉動方式。
3.編程實現ARM的四路I/O通道,實現環形脈沖分配用于控制步進電機的轉動,通過A/D旋鈕控制步進電機的轉角。
4.通過鍵盤控制直流電機與步進電機的切換。5.設置并啟動定時器。
6.設置中斷,編寫定時器中斷服務程序,對中斷次數進行計數并在LED上顯示結果。
4.5 實驗設計與實驗步驟
1.添加并打開工程。
2.進行直流電機初始化設置和代碼編寫。3.進行步進電機初始化設置和代碼編寫。
4.對Timer3編程,編寫定時器中斷服務程序,完成對中斷次數的計數。5.編寫LED計數顯示函數,使LED能正確計數并顯示0-9999。6.編寫中斷初始化函數和中斷響應函數。7.終端下載測試。
4.6 實驗過程與分析 1.對直流電機進行編程和測試,掌握轉速和旋轉方向的設定方法。
2.對步進電機進行編程和測試,掌握ARM的四路I/O通道,實現環形脈沖分配用于控制步進電機的轉動,通過A/D旋鈕控制步進電機的轉角。
3.對主函數進行編程,用鍵盤響應直流電機與步進電機的切換控制。
4.掌握中斷相關語句的應用,弄清定義的中斷向量、中斷向量號,編寫中斷響應函數,并完成中斷響應控制。
4.7 實驗結果總結
實現了直流電機與步進電機的基本設置和控制,可以通過鍵盤控制電機之間的切換。完成了中斷的響應和定時中斷。當對其中一個旋鈕轉動時,就可以由直流電機轉換成步進電機的轉換,達到實驗的效果。
4.8 心得體會
通過本次實驗,我了解了直流電機和步進電機的工作原理,同時也知曉了電機間的轉換過程,了解其中的道理內涵,熟悉了ARM自帶的A/D轉換器的工作原理及編程方法,了解了中斷的意義和實現方法,實現了簡單了中斷處理程序。同時我也收獲了很多關于ARM處理機的相關知識。
5.實驗五
5.1 實驗名稱
觸摸屏驅動實驗
5.2 實驗目的
1.了解觸摸屏的基本概念與原理。
2.理解觸摸屏與LCD的關系。3.編程實現對觸摸屏的控制。
4.熟悉用 ARM 內置的 LCD控制器驅動 LCD。
5.3 實驗環境
硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。
5.4 實驗內容及要求
1.了解觸摸屏基本原理,理解對觸摸屏進行輸出標定、與LCD顯示器配合的過程。2.通過編程實現觸摸兩點自動在兩點間劃直線。3.通過編程實現在觸摸屏上動態畫出曲線。5.5 實驗設計與實驗步驟
1.添加并打開工程。
2.在頭文件中定義宏和常量及驅動函數。
#define ADS7843_CTRL_START 0x80 #define ADS7843_GET_X 0x50 #define ADS7843_GET_Y 0x10 #define ADS7843_CTRL_12MODE 0x0 #define ADS7843_CTRL_8MODE 0x8 #define ADS7843_CTRL_SER 0x4 #define ADS7843_CTRL_DFR 0x0 #define ADS7843_CTRL_DISPWD 0x3 // Disable power down #define ADS7843_CTRL_ENPWD 0x0 // enable power down #define ADS7843_PIN_CS(1<<6)//GPF6 #define ADS7843_PIN_PEN(1<<5)//GPG5 /////////觸摸屏動作//////// #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 //觸摸屏單擊 #define TCHSCR_ACTION_DBCLICK 2 //觸摸屏雙擊 #define TCHSCR_ACTION_DOWN 3 //觸摸屏按下 #define TCHSCR_ACTION_UP 4 //觸摸屏抬起 #define TCHSCR_ACTION_MOVE 5 //觸摸屏移動
#define TCHSCR_IsPenNotDown()(rPDATG&ADS7843_PIN_PEN)(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)//采樣x 軸電壓值,數據為12 位,參考電壓輸入模式為差分模式,允許省電模式
#defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)int TchScr_Xmax=1840,TchScr_Xmin=176, TchScr_Ymax=195,TchScr_Ymin=1910;//觸摸屏返回電壓值范圍 #defineADS7843_CMD_X 3.校準觸摸屏坐標,進行坐標轉換。
4.實現觸屏取點并顯示功能。
將觸摸動作及觸摸點坐標在超級終端上顯示出來。5.實現兩點間自動劃線功能。6.實現觸摸屏動態劃線功能。
可以使用TchScr_GetScrXY()函數(第三個參數為0)來獲得液晶屏的x、y 方向的電壓
范圍,分別點觸摸屏有效面積的左上角和右下角,得到下列參數:
TchScr_Xmax=1840;TchScr_Xmin=176;TchScr_Ymax=195;TchScr_Ymin=1910;//此數值僅供參考,請以實際校對為準
5.6 實驗過程與分析 1.在定義觸屏響應功能的函數中對點擊觸屏進行響應函數的修改,在其中添加修改點顏色的函數,修改得到的觸摸點的顏色,并顯示在LCD上。
2.獲取第一個點坐標并儲存,獲取第二個點坐標并儲存,由編寫的劃線函數取得儲存的兩點間直線上所有點的坐標,并對其改變顏色,顯示在LCD上,即完成劃直線功能。
3.將劃線函數應用到響應觸屏移動消息的函數下,即可對連續獲得的觸摸坐標進行連續的畫短直線,連接成曲線,完成動態劃線功能。
5.7 實驗結果總結
了解了觸摸屏響應動作消息的函數的工作原理,通過修改實現了觸摸屏響應不同動作進行畫點、劃線、動態劃線的功能。驗證觸摸屏的靈敏度的實驗。
5.8 心得體會
通過這次實驗,我基本掌握了通過編程驅動觸摸屏以及觸摸屏響應時間,實現了觸摸屏對不同動作消息的響應。同時也知曉了在觸摸屏上的描點畫線的實現,但是由于不知名的原因,描點畫線的誤差較大,位置偏差較大,同時觸摸屏有時會不靈敏,出現時好時壞的現象,但是由于我們的辛勤鉆研,最終克服了這個困難,實現了最后的觸摸屏的實現。
6.實驗六
6.1 實驗名稱
UCOS-Ⅱ在ARM微處理器上的裁剪
6.2 實驗目的
1.了解UCOS-Ⅱ內核的主要結構。
2.掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現方法。3.學習如何根據具體情況對UCOS-Ⅱ操作系統進行裁剪。
4.通過對UCOS-Ⅱ配置文件(OS_CFG.H)中相關的配置常量進行設置,實現對UCOS-Ⅱ的裁剪。
6.3 實驗環境
硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。
6.4 實驗內容及要求
對UCOS-Ⅱ內核進行裁剪并移植到ARM7微處理器上。
6.5 實驗設計與實驗步驟 1.按照要求,載入STARTUP目錄下文件,完成系統初始化、環境配置。2.載入UCOS-Ⅱ的全部源碼,與處理器架構相關的文件位于arch目錄下。3.在os_cpu.h中編寫與處理器和編譯器相關的代碼。
4.編寫os_cpu_c.c等6個與操作系統相關的函數。5.編寫os_cpu.asm等4個與處理器相關的函數。
6.6 實驗過程與分析
按照實驗步驟進行,得到了需要的系統。
6.7 實驗結果總結
按照要求進行了裁剪,得到了滿足需要又緊湊的應用軟件系統。
6.8 心得體會
通過本次實驗,我了解了UCOS-Ⅱ內核的主要結構,掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現方法,學會了如何根據具體情況對UCOS-Ⅱ操作系統進行裁剪。
7.實驗七
7.1 實驗名稱
UCOS-Ⅱ在ARM微處理器上的移植和編譯
7.2 實驗目的
1.了解UCOS-Ⅱ內核的主要結構。
2.掌握將UCOS-Ⅱ內核移植到ARM7處理器上的基本方法。
7.3 實驗環境
硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。
7.4 實驗內容及要求
1.將UCOS-Ⅱ內核進行移植到ARM7微處理器上。
2.編寫兩個簡單任務,在超級終端上觀察兩個任務的切換。
7.5 實驗設計與實驗步驟
1.該實驗的文件分為兩類,其一是 STARTUP 目錄下的系統初始化、配置等文件,其二是 UCOS-Ⅱ的全部源碼,arch 目錄下的 3 個文件是和處理器架構相關的。
2.設置 os_cpu.h 中與處理器和編譯器相關的代碼。
3.用 C 語言編寫 6 個操作系統相關的函數(OS_CPU_C.C)。4.用匯編語言編寫 4 個與處理器相關的函數(OS_CPU.ASM)。5.編寫一個簡單的多任務程序來測試一下移植是否成功。6.編譯并下載移植后的 UCOS-Ⅱ。
7.6 實驗過程與分析
1.按照實驗步驟進行,將μC/OS-II 內核移植到了ARM7 微處理器上。2編寫了兩個簡單任務,在超級終端上觀察兩個任務的切換。
7.7 實驗結果總結
將μC/OS-II 內核順利移植到了ARM7 微處理器上。
7.8 心得體會
通過本次實驗,使我更加了解了μC/OS-II 內核的主要結構,掌握了ARM的C語言和匯編語言的編程方法,了解了ARM7處理器結構,掌握了將μC/OS-II 內核移植到ARM 7 處理器上的基本原理與嵌入式編程實現方法。
8.實驗八
8.1 實驗名稱
綜合實驗
8.2 實驗目的
對前七次實驗進行總結,應用之前所學的知識,將前幾次實驗內容結合起來,完成鍵盤,LED,觸摸屏,直流電機,步進電機各種功能的組合。實現一個較為全面的功能結構。
8.3 實驗環境
硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。
8.4 實驗內容及要求
對前七次實驗進行總結,應用之前所學的知識,完成自擬的嵌入式系統,要求綜合前期基礎實驗的各種功能。
8.5 實驗設計與實驗步驟
1.添加并打開工程。2.進行LCD設計,在LCD顯示屏輸出文本。
3.進行LED及鍵盤設計,完成LED輸出顯示功能和鍵盤輸入功能。4.進行電機控制設計,完成鍵盤控制電機轉動功能。5.進行中斷設計,完成定時中斷功能。
6.進行觸摸屏設計,完成觸摸屏感應和劃線功能。7.進行裁剪和移植功能設計和完成。
8.6 實驗過程與分析
1.完成LCD顯示功能,在LCD顯示屏上輸出文本:“Hello World!”。2.進入界面觸屏控制選擇功能,實現觸屏選擇功能。
3.自定義四種種功能,第一為電機控制,從鍵盤讀取命令,并將功能編號顯示在LED上,LED顯示的是計數的數據,同時旋轉按鈕完成電機轉速的控制選擇。
4.第三種功能為劃線,功能編號顯示在LED高四位上,同時LCD屏幕清屏,為劃線功能做準備,可以實現劃線功能。
5.第四種功能為定時中斷,當由鍵盤控制時,LED顯示數值清零,實現了中斷。6.實現裁剪與移植功能。
8.7 實驗結果總結
完成了各種基本功能,并通過自擬的系統將各種功能整合起來,完成了一個小的嵌入式系統,對前七次的功能有了更深入的了解。通過LED的計數,當在計數值在前30秒之內,由鍵盤控制LED的數值及顯示,按鍵盤上的某一個按鍵,實現對LED上的數值清零,后30秒由觸摸屏控制清零,并且在前30秒之內,旋轉按鈕,實現對直流電機的運轉,并且到步進電機的轉換。
8.8 心得體會
通過這次實驗,我更加深刻地掌握了前幾次實驗中的基本功能的實現方法,并且把幾種功能聯合在一起,實現一些功能,把LED 顯示屏,LCD觸摸屏,鍵盤,直流電機,步進電機等等設備聯合在一起,對該實驗有一定的幫助與提高,而我和我的隊友也對嵌入式系統有了更深入的了解,在此期間,也學習了關于ARM處理器的開發與實踐,了解了關于手機的嵌入式設備的產生過程,我也深深的對此充滿了興趣,對未來的嵌入式課程設計奠定了深厚的基礎,可是令我遺憾的是,我和隊員的水平所限,沒有完成中斷優先級的控制。本來想完成更多的功能,可是最后由于時間緊迫,也有一些其他的事情來分神分心,所以就只能完成這些,但是在未來的幾周內,嵌入式課程設計也給了我們很大的空間去做未完成的事情。我相信我們會做的更加完美,功能更強大,用于未來的生活中去實踐。
第三篇:《嵌入式系統設計》教學大綱
《嵌入式系統設計》課程教學大綱
嵌入式系統設計(Design of Embedded Systems)
一、課程教學目的和基本要求
教學目的:
嵌入式系統技術已被廣泛地應用于工業控制系統、信息家電、通信設備、醫療儀器、智能儀器儀表等眾多領域。如手機、PDA、MP3、手持設備、智能電話、機頂盒等,可以說嵌入式系統無處不在。本課程講述當前主流的嵌入式處理器—ARM的微處理器和實時操作系統μC/OS,介紹嵌入式系統的基本原理和應用及設計方法。通過本課程的學習,著重培養學生的實際動手能力,使學生掌握ARM的系統結構、指令系統、程序設計方法、系統擴展方法、應用及開發技術等。使學生在工作中具有利用嵌入式系統開發產品和解決實際問題的基本能力。
基本要求:
1、掌握嵌入式系統技術的基本原理。
2、了解并掌握ARM的系統結構、指令系統、程序設計方法、系統擴展方法、應用及開發技術等。
3、比較熟練地用ADS進行ARM實驗箱的編程及調試。
4、了解并掌握實時操作系統μC/OS,并學會用μC/OS開發小型應用系統。
二、先修課程及本課程總學時
先修課程:C程序設計語言、單片機原理 本課程總學時:36
三、課程章節及各章節學時安排
第一章 嵌入式系統概述(2學時)
第二章 嵌入式系統硬件基礎(2學時)
第三章 設計方法及ADS集成開發環境(4學時)
第一節 嵌入式系統的設計方法(2學時)第二節 ADS集成開發環境(2學時)第四章 ARM7體系結構(4學時)
第一節ARM7體系結構介紹(2學時)第二節ARM7TDMI(-S)指令集簡介。(2學時)第五章 ARM指令集(8學時)
第一節 ARM處理器尋址方式。(2學時)第二節ARM指令集。(2學時)第三節ARM匯編程序設計。(2學時)第四節C與匯編混合編程。(2學時)第六章 硬件結構與功能(12學時)第一節 LPC2106/2105/2104結構(2學時)第二節 GPIO及引腳連接模塊。(2學時)
第三節 UART0和UART1、I2C接口、SPI接口。(2學時)第四節 定時器0和定時器1。(2學時)第五節 脈寬調制器(PWM)。(2學時)
第六節 看門狗及Flash存儲器系統和編程。(2學時)第七章 μC/0S-II程序設計(4學時)
第一節 μC/0S-II簡介及移植(2學時)第二節 移植μC/0S-II。(2學時)
四、課程主要內容
第一章 嵌入式系統概述(2學時)
1、嵌入式系統簡介(包括什么是嵌入式系統,嵌入式系統的特點,嵌入式系統的分類)。
2、嵌入式系統的應用領域。
3、嵌入式系統的現狀和發展趨勢。
4、嵌入式微處理器和嵌入式操作系統。
5、嵌入式系統中的一些重要概念。難點:什么是嵌入式系統。
第二章 嵌入式系統硬件基礎(2學時)
1、嵌入式系統的總體結構。
2、與嵌入式系統相關的硬件知識。難點:總體結構。
第三章 設計方法及ADS集成開發環境(4學時)第一節 嵌入式系統的設計方法
包括嵌入式系統的設計流程,嵌入式系統的一般設計方法,嵌入式系統的硬件/軟件協同設計技術。第二節 ADS集成開發環境
1、ADS 1.2 集成開發環境的組成
2、工程的編輯
3、工程的調試
4、仿真器的安裝與應用 難點:調試、仿真器。
第四章 ARM7體系結構(4學時)第一節ARM7體系結構介紹
1、處理器模式。
2、內部寄存器。
3、程序狀態寄存器。
4、異常。
第二節ARM7TDMI(-S)指令集簡介。難點:異常。
第五章 ARM指令集(8學時)第一節 ARM處理器尋址方式。第二節ARM指令集。
第三節ARM匯編程序設計。第四節C與匯編混合編程。難點:ARM匯編程序設計。
第六章 硬件結構與功能(12學時)第一節 LPC2106/2105/2104結構
1、存儲器尋址。
2、系統控制模塊。
3、存儲器加速模塊。
4、向量中斷控制器。
第二節 GPIO及引腳連接模塊。
第三節 UART0和UART1、I2C接口、SPI接口。第四節 定時器0和定時器1。第五節 脈寬調制器(PWM)。
第六節 看門狗及Flash存儲器系統和編程。
難點:存儲器重新映射,編程實現功能部件的初始化和控制。本章實驗:LPC2106/2105/2104功能部件基礎實驗。
第七章 μC/0S-II程序設計(4學時)第一節 μC/0S-II簡介及移植
1、移植規則。
2、編寫LPC2106/2105/2104的啟動代碼。第二節 移植μC/0S-II。難點:移植μC/0S-II。本章實驗:學習移植μC/0S-II。
五、教材及主要參考書
教材:
《嵌入式系統設計與開發》,馬文華,科學出版社,2006年
主要參考書:
[1] 田苗苗.嵌入式控制系統.北京航空航天大學出版社,2002年 [2] 呂 駿 譯.嵌入式系統設計.電子工業出版社,2002年
[3] 周立功等.ARM微控制器基礎與實戰.北京航空航天大學出版社,2003年
[4] 李駒光等.ARM應用系統開發祥解.清華大學出版社,2003年
[5] 劭貝貝譯.uCOS-II-源代碼公開的實時嵌入式操作系統.中國電力出版社,2001年 [6] 田苗苗.嵌入式系統設計與實例開發.清華大學出版社,2002年 [7] 袁勤勇等譯.嵌入式系統構件.機械工業出版社,2002年 [8] 田苗苗.《實用嵌入式系統設計與開發—基于ARM微處理器與μCOS-II實時操作系統》(第二版),清華大學出版社,2003.9 [9] 邵貝貝譯.《源代碼公開的實時嵌入式操作系統——μCOS-II》,北京航空航天大學出版社,2003年
六、其他需要說明的情況
1.采用多媒體教學。
2.實驗課單列,每周2學時。
3.每周作業量2~3小時,主要針對基本概念、開發環境的操作和編程。
七、成績評定
1.理論考核
占60% 2.實踐考核
占40%(其中包括:實驗、作業、課堂提問、學生自行設計制作的作品)。
第四篇:《嵌入式系統設計》教案
嵌入式系統設計教案
課程總學時: 32 講課學時: 24 實驗學時: 8 授 課 人: 楊詞慧
南昌航空大學信息工程學院
目錄 嵌入式系統概述.......................................................................................................................1 1.1 嵌入式系統的基本概念...............................................................................................1 1.2 嵌入式系統的發展歷史...............................................................................................2 1.3 嵌入式系統的體系結構...............................................................................................2 1.4 嵌入式處理器...............................................................................................................3 1.5 嵌入式操作系統...........................................................................................................4 1.6 嵌入式系統的應用及發展趨勢...................................................................................7 ARM體系結構.........................................................................................................................8 2.1 ARM設計思想.............................................................................................................8 2.2 ARM體系結構分析.....................................................................................................9 2.3 ARM處理器系列.......................................................................................................11 2.4 ARM處理器模式.......................................................................................................15 2.5 ARM體系的異常處理...............................................................................................16 2.6 ARM內部寄存器.......................................................................................................18 2.7 ARM體系的存儲系統...............................................................................................19 ARM指令系統及程序設計基礎...........................................................................................21 3.1 ARM尋址方式...........................................................................................................21 3.2 ARM指令集...............................................................................................................24 3.3 Thumb指令集............................................................................................................33 3.4............................................................................................................................................35 3.5............................................................................................................................................35 3.6 嵌入式系統設計與開發過程.....................................................................................36 STM32微控制器...................................................................................................................37 4.1 STM32微控制器的性能指標....................................................................................37 2 3 4
I 嵌入式系統概述
教學目的:使學生對嵌入式系統的基本概念和體系結構、嵌入式處理器、嵌入式操作系統、嵌入式系統的歷史、應用及發展趨勢有一定的了解。
教學重點:嵌入式系統的基本概念、嵌入式處理器和嵌入式操作系統。教學難點:嵌入式系統的體系結構、嵌入式處理器。教學方法與教學手段:課堂講授,多媒體教學。教學時間:2課時。教學內容
1.1 嵌入式系統的基本概念
(1)嵌入式系統的定義
先舉例說明生活中的各種嵌入式系統設備,如iPhone、小米手機、洗衣機、電壓力鍋等。IEEE(國際電氣和電子工程師協會)的定義:嵌入式系統是用于控制、監視或者輔助操作機器和設備的裝置(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
微機學會的定義:嵌入式系統是以嵌入式應用為目的的計算機系統,可分為系統級、板級和片級。a)系統級:各種類型的工控機、PC104等模塊。b)板級:各種類型的帶CPU的主板或OEM產品。c)片級:各種以單片機、DSP、微處理器為核心的產品。
一般定義:嵌入式系統是以應用為中心,以計算機技術為基礎,軟件硬件可裁剪,對功能、可靠性、成本、體積、功耗要求嚴格的專用計算機系統。
(2)嵌入式系統的特點 a)專用、軟硬件可剪裁配置。b)低功耗、高可靠性、高穩定性。c)軟件代碼矮小精悍。d)代碼可固化。e)實時性。f)弱交互性。
g)軟件開發通常需要專門的開發工具、環境和方法。h)要求開發、設計人員具有較高的技能。i)具有較長的生命周期。(3)嵌入式系統的分類
按嵌入式微處理器的位數可分為:4位、8位、16位、32位和64位。按實時性能可分為:非實時系統和實時系統。
按軟件結構可分為:嵌入式單線程系統和嵌入式事件驅動系統。
按應用領域可分為:信息家電類、消費電子類、醫療電子類、移動終端類、通信類、汽車電子類、工業控制類、航空電子類、軍事電子類等。
1.2 嵌入式系統的發展歷史
(1)以單芯片為核心的可編程控制器形成的系統
1971年11月,Intel推出Intel 4004。隨后出現Intel 8080/8085、8086、Motorola的6800、68000,Zilog的Z80、Z8000。
以微處理器為核心構成的系統
單板機:Intel的iSBC系列、Zilog的MCB等
將計算機做在一個芯片上,大部分應用于專業性強的工業控制系統中,沒有操作系統的支持,系統結構和功能相對單一,處理效率較低,存儲容量較小。
(2)以嵌入式CPU為基礎、以簡單操作系統為核心的嵌入式系統
CPU種類繁多,通用性較弱;系統開銷小,效率高;操作系統達到一定的兼容性和擴展性;應用軟件較專業化,用戶界面不夠友好。
(3)以嵌入式操作系統為標志的嵌入式系統
嵌入式操作系統可運行于各種不同類型的微處理器上,兼容性好;操作系統內核小,效率高;具備文件和目錄管理,支持多任務、網絡應用,具備圖形窗口和用戶界面;有大量的應用程序接口API。
(4)以Internet為標志的嵌入式系統 嵌入式設備與Internet的結合。
1.3 嵌入式系統的體系結構
(1)體系結構
(2)硬件層
? 嵌入式處理器:ARM、DSP、FPGA ? 存儲器系統:ROM、FLASH、SDRAM ? 中斷控制器、DMAC、定時器/計數器、UART、USB控制器、LCD控制器等 ? I/O接口:USB、I2C、SPI、CAN等
(3)中間層
? 硬件抽象層(Hardware Abstraction Layer, HAL)。位于操作系統內核與硬件電路之間的接口層,隱藏硬件接口細節。
? 板級支持包(Board Support Package, BSP)。為上層的驅動程序提供訪問硬件設備寄存器的函數包。? 設備驅動程序
1.4 嵌入式處理器
(1)嵌入式處理器的分類
中高端的嵌入式微處理器(Embedded Micro-Processor Unit, EMPU)低端的微控制器(Microcontroller Unit, MCU)DSP處理器(Digital Signal Processor, DSP)高度集成的片上系統(System on Chip, SoC)(2)嵌入式微處理器
由通用計算機中的CPU演變而來,只保留與嵌入式應用緊密相關的功能硬件,在工作溫度、抗電磁干擾、可靠性、功耗等方面做了各種增強。
主要的嵌入式處理器類型:ARM、MIPS、PowerPC、68000系列等。特點
a)在設計中考慮低功耗。
b)采用可擴展的處理器結構。處理器內部留有很多擴展接口。c)具有很強的存儲區保護功能。d)提供豐富的調試功能。
e)對實時任務具有很強的支持能力。(3)微控制器
俗稱單片機,將整個計算機系統集成到一塊芯片中。
WatchWatchdogdogGPIO/計數GPIOUARTUART定時定時/計數A/DA/DD/A器D/A器2CCANCANII2CSPISPIUSBUSBCPUCPUSRAMSRAM核心部分FlashFlash8位單片機示意圖以一種微處理器為核心,芯片內部集成Flash、RAM、總線邏輯、定時器/計數器、I/O口、串行口、PWM、A/D、D/A等。
最早的單片機: 1976年,Intel的8048,Motorola的68HC05、Zilog公司的Z80.(4)DSP處理器
對系統結構和指令進行了特殊設計,使其適合DSP算法 高效乘累加運算、超標量操作、指令流水線 高效數據存取、硬件重復循環 確定性操作(程序執行時間可預測)應用場合:音視頻編解碼、數字濾波、FFT等(5)片上系統
將整個系統做在一個芯片上 優點
a)通過改變內部工作電壓,降低芯片功耗 b)減少芯片對外的引腳數,簡化制造過程
c)減少外圍驅動接口單元及電路板之間的信號傳遞,加快微處理器數據處理的速度 d)內嵌線路可避免信號傳遞時所造成的系統雜訊 聯發科推出28nm雙核處理器MT6572 a)代號武松,基于Cortex-A7架構 b)主頻為1.2GHz c)處理器上整合了Wi-Fi、FM收音機、GPS以及藍牙四種功能 d)支持500萬像素攝像頭(6)嵌入式處理器的發展趨勢 a)內部結構
SoC設計,與DSP、Flash、FPGA融合;性能更強,集成更多的功能部件;雙核或多核結構 b)功耗更低 c)可靠性更高 d)支持ISP、ISD 1.5 嵌入式操作系統
(1)操作系統的概念及功能
操作系統。是一組計算機程序的集合,用來有效地控制和管理計算機的硬件和軟件資源,并為用戶提供方便的應用接口。
功能:處理器管理;存儲器管理;設備管理;文件管理;用戶接口(2)操作系統的分類 按程序調度的方法分為
? 順序操作系統。只含一個運行程序,獨占CPU時間,順序執行。如DOS系統。? 分時操作系統。系統內同時有多道程序運行。如Unix系統。? 實時操作系統。
從應用角度,嵌入式操作系統可分為 ? 面向低端信息家電
? 面向高端信息家電 ? 面向個人通信終端 ? 面向通信設備 ? 面向汽車電子 ? 面向工業控制
從實時性的角度,嵌入式操作系統可分為 ? 具有強實時特點的嵌入式操作系統 ? 具有弱實時特點的嵌入式操作系統 ? 沒有實時特點的嵌入式操作系統(3)實時操作系統(RTOS)
是具有實時性且能支持實時控制系統工作的操作系統,首要任務是調度一切可利用的資源來完成控制任務。
對現場不停監測,一旦有事件發生能立即處理。與通用OS的區別:實時性,代碼尺寸小。一般包括以下幾個重要組成部分:
? 實時內核:任務管理、定時器管理、存儲器管理、任務間通信與同步等。? 網絡組件 ? 文件系統 ? 圖形用戶界面
IEEE的Unix委員會規定了實時操作系統須具備以下幾個特點: ? 支持異步事件的響應。? 中斷和調度任務的優先機制。? 支持指令性計劃占式調度。? 支持同步。
(4)常見的嵌入式操作系統 嵌入式Linux ? 實時的嵌入式Linux:如RT-Linux、KURT-Linux等。RT-Linux將通常的Linux任務優先級設為最低。
? 一般的嵌入式Linux:如μCLinux。? 開源,內核小、效率高,可定制 μC/OS和μC/OS-II ? μC/OS-II(MicroController Operating System)是由Jean J.Labrosse開發的實時操作系統內核。
? 已被移植到Intel、ARM、Motorola等公司的81種不同的處理器上。
? Labrosse用一年時間開發了μC/OS實時操作系統; 1992年在《Embedded System Programming》上 發表介紹文章,并公布源代碼;1993年寫了《μC/OS, The Real-Time Kernel》;書及源碼推動了μC/OS-II的發展。
? μC/OS-II只是一個實時操作系統的內核,全部核心代碼只有8.3 KB。? 只包含進程調度、時鐘管理、內存管理和進程間的通信與同步等基本功能。Windows CE ? 多線程、完整優先權、多任務的32位嵌入式操作系統。? 基本內核大小至少為200KB。VxWorks ? 美國WindRiver公司于1983年設計
? 是目前嵌入式系統領域中使用最廣泛、市場占有率最高的系統。? 擁有良好的持續發展能力和高性能的內核及友好的用戶開發環境。
? 支持多種處理器,如ARM、x86、i960、SunSparc、MIPS RX000、PowerPC、StrongARM等。? 以良好的可靠性和實時性,廣泛應用在通信、軍事、航空、航天等領域。
? 應用案例:美國F-
16、FA-18戰斗機,B-2隱形轟炸機,“愛國者”導彈,1997年4月在火星登陸的火星探測器。Palm OS ? 32位嵌入式操作系統,由3Com公司的Palm Computing部門開發。
? 在掌上電腦和PDA市場上占有很大的市場份額,曾占據90%的PDA市場份額。? 2010年04月29日惠普12億美元收購Palm QNX ? 一個實時、可擴充的操作系統。
? 部分遵循POSIX(可移植操作系統接口)相關標準。
? 內核僅提供4種服務:進程調度、進程間通信、底層網絡通信和中斷處理。? 內核非常小巧(QNX4.X約為12KB),運行速度極快。iOS ? 蘋果推出,基于Darwin ? 最新:iOS8 Android ? Google開發的基于Linux平臺的開源手機操作系統 Delta OS ? 是電子科技大學實時系統教研室和北京科銀京成技術有限公司聯合研制并開發的全中文嵌入式操作系統。
? 絕大部分代碼由C語言編寫。
? 已成功應用于通信、網絡、信息家電等多個應用領域。pSOS ISI公司研發的產品。
模塊化、高性能、完全可擴展。
1.6 嵌入式系統的應用及發展趨勢
(1)嵌入式系統的應用領域 ? 消費電子領域 ? 通信網絡領域
? 工業控制領域、機器人領域 ? 交通管理與汽車電子領域 ? 國防與航空航天領域 ? 醫療儀器領域
(2)嵌入式系統的發展趨勢
? 小型化、智能化、網絡化、可視化 ? 多核技術的應用 ? 低功耗、綠色環保
? 云計算、可重構、虛擬化等技術被進一步應用到嵌入式系統中 ? 嵌入式系統軟件將逐漸PC化 ? 融合趨勢
? 微控制器MCU與SoC的結合 ? 微控制器MCU與DSP的結合 ? ARM與DSP的結合
? 微控制器MCU與CPLD/FPGA的結合 ? 安全性 ARM體系結構
教學目的:使學生對ARM設計思想、ARM處理器系列、ARM體系結構、ARM處理器模式、ARM內部寄存器、ARM體系的存儲系統有一定的了解。
教學重點:ARM設計思想、ARM體系結構、ARM處理器模式、ARM內部寄存器。教學難點:ARM處理器模式、ARM內部寄存器。教學方法與教學手段:課堂講授,多媒體教學。教學時間:4課時。教學內容
2.1 ARM設計思想
(1)RISC 傳統的CISC(Complex Instruction Set Computing)指令集中,約20%指令占整個程序代碼的80%。RISC(Reduced Instruction Set Computing)是一種設計思想,其目標是設計出一套能在高時鐘頻率下單周期執行、簡單而有效的指令集。
RISC設計重點在于降低硬件執行指令的復雜度,而傳統的CISC更側重于硬件執行指令的功能性,使CISC指令變得復雜。
(2)RISC設計思想的實現
? 指令集。減少了指令種類,指令只實現簡單的功能,指令長度固定。
? 流水線。指令的處理過程被拆分成幾個更小的、能夠被流水線并行執行的單元。
? 寄存器。更多通用寄存器,可存數據和地址,可為所有數據操作提供快速的局部存儲訪問。? load-store結構。處理器只處理寄存器中數據,用load和store指令完成寄存器和外存間的數據傳送
(3)ARM的設計思想 ? 較小的核。降低功耗
? 高的代碼密度。考慮成本和物理尺寸限制
? 較小的處理器內核管芯(Die)面積。留給外設電路的空間較大 ? 硬件調試技術(4)ARM微處理器的特點
? 體積小,功耗低,成本低,性能高; ? 支持Thumb/ARM指令集,兼容8/16位器件;
? 大量使用寄存器,指令執行速度更快; ? 大多數數據操作都在寄存器中完成; ? 尋址方式靈活簡單,執行效率高; ? 指令長度固定。
2.2 ARM體系結構分析
(1)包含典型 的RISC 體系結構特征
? 統一寄存器文件加載/存儲體系結構,數據處理操作只針對寄存器內容; ? 簡單尋址模式,所有加載/存儲地址只通過寄存器內容和指令字段確定。? 指令長度固定,簡化了指令譯碼。(2)還提供
? 可組合使用轉換與算術或邏輯運算指令 ? 自動遞增和自動遞減尋址模式,可優化程序循環 ? 加載存儲多個指令以最大化數據吞吐量 ? 幾乎所有指令都采取條件執行的方式(3)普林斯頓結構和哈佛結構
普林斯頓結構:也稱馮·諾伊曼結構,它將程序指令存儲器和數據存儲器合并在一起的存儲結構。ARM7系列基于普林斯頓結構。
哈佛結構:將程序指令存儲和數據存儲分開的存儲結構。ARM9系列之后都基于哈佛結構。
(4)流水線
ARM7的三級流水線在執行單元完成了大量的工作,執行單元的工作往往占用多個時鐘周期,從而成為系統性能的瓶頸。
ARM9采用哈佛架構,避免了數據訪問了取指的總路線沖突,采用五級流水線設計。
五級流水線技術把三級流水線中的執行單元進一步細化,減少了在每個時鐘周期內必須完成的工
作量,進而允許使用較高的時鐘頻率。
無論三級流水線還是五級流水線,在以下情況下都會發生阻塞: ? 多周期指令、跳轉分支指令 ? 中斷發生
? 相鄰指令之間的寄存器沖突:如果當前指令(A)的目的操作數寄存器和下一條指令(B)的源操作數寄存器一致,B指令就需要等A回寫之后才能譯碼。
(5)ARM體系結構的版本
2.3 ARM處理器系列
(1)ARM處理器系列
? 經典ARM處理器:ARM7、ARM9、ARM10、ARM11 ? Cortex-A系列處理器:Cortex-A15、Cortex-A9、Cortex-A8、Cortex-A7、Cortex-A5 ? Cortex-R系列處理器:Cortex-R7、Cortex-R5、Cortex-R4 ? Cortex-M系列處理器:Cortex-M4、Cortex-M3、Cortex-M1、Cortex-M0+、Cortex-M0、CMSDK、CMSIS ? SecurCore處理器(2)ARM內核版本命名規則
(3)ARM7系列微處理器 a)主要特點
? 最高主頻:130MIPS(Million Instructions Per Second); ? 功耗低;
? 代碼密度高,兼容16位的微處理器; ? 可得到廣泛的操作系統和實時操作系統支持; ? 眾多的開發工具,優秀的調試機制; ? 采用3級流水線結構;
? 提供0.25μm、0.18μm和0.13μm的生產工藝。b)馮·諾伊曼結構:數據和指令使用同一條總線。
c)包括ARM7TDMI、ARM7TDMI-S、ARM7EJ-S和ARM720T四種類型,適用于不同的市場要求 d)ARM7TDMI ? ARM公司最早為業界普遍認可并廣泛應用的處理器核。? T:Thumb;D:Debug;M:Multiplier;I:Embedded ICE logic。e)ARM7TDMI-S ? 是ARM7TDMI的可綜合(synthesizable)版本(軟核)。
? ARM以“軟”核的方式把ARM7TDMI核授權給處理器廠商,處理器廠商可進行修改和綜合。這就是ARM7TDMI-S。
? 綜合出的整個核比“硬”核大50%,電源效率降低50%。f)ARM7EJ-S ? 是可綜合的、帶有增強型DSP(E變種)和Java加速功能(J變種)的32位RISC嵌入式處理器。
? 主要用于數字音頻播放器、帶Java功能的無線手持設備、噴墨打印機、數碼相機和PDA等方面。
g)ARM720T ? 專為使用Windows CE、Symbian OS操作系統平臺設計。? 主要用于數字音頻播放器、噴墨打印機和數碼相機等。(4)ARM9系列微處理器 a)主要特點
? 5級整數流水線;
? 單一的32位AMBA(Advanced Microcontroller Bus Architecture)總線接口; ? MMU支持Windows CE、Symbian OS、Linux等; ? 支持實時操作系統,包括VxWorks; ? 統一的數據Cache和指令Cache;
? 提供0.25μm、0.18μm和0.13μm的生產工藝。
b)包括ARM9TDMI、ARM920T、ARM940T和ARM9E四種類型。后三種含有Cache。
c)采用Harvard體系結構
? 指令與數據分開存儲。? 采用指令快存 和數據快存。
d)在相同工藝條件下,ARM9TDMI的處理能力是ARM7TDMI的兩倍。e)ARM920T ?
Motorola MC9328MX1和Samsung S3C2410X處理器都采用ARM920T 核心。? 主要應用于通信終端、3G基帶和應用處理器、基于OS的平臺設備、數碼相機、音頻/視頻解碼和機頂盒等。
f)ARM940T ? 與ARM920T相比,實現了一個更小的D-Cache、I-Cache和MPU。適于不需運行操作系統的平臺。
g)ARM9E ? 使用單一的處理器核,提供微控制器、DSP、Java應用系統的解決方案; ? DSP指令集;
? 在0.13μm工藝下,主頻可達300MIPS的性能; ? 集成實時跟蹤調試功能; ? 可選的VFP9浮點處理協處理器;
? 高性能的AHB(Advanced High performance Bus)。(5)ARM10系列微處理器 a)主要特點
? 6級流水線;
? 在典型的0.13μm工藝下,主頻可達400MIPS的性能; ? 單一的32位AMBA 總線接口;
? MMU支持Windows CE、Symbian OS、Linux等; ? 統一的數據Cache和指令Cache;
? 提供0.25μm、0.18μm和0.13μm的生產工藝; ? 并行讀取/寫入部件。
b)包括:ARM1020、ARM10200、ARM1020E、ARM1022E、ARM1026EJ-S。c)使用ARM10TDMI處理器核,采用ARMv5T結構。d)ARM10TDMI ? 在相同工藝條件下,處理能力是ARM9TDMI的兩倍;
? 采用提高時鐘頻率、6級流水線、轉移預測邏輯、64位存儲器和無阻塞的存/取邏輯等措施提升性能。
e)ARM10E。新節能模式,64位Load/Store體系,與ARM10TDMI相比具有的特點
? DSP指令集;
? 可選的VFP10浮點處理協處理器;
? 在實時控制和三維圖像處理時,主頻可達650MFLPS(百萬次浮點運算每秒)。
(6)ARM11系列微處理器
? ARM1156T2-S內核、ARM1156T2F-S內核、ARM1176JZ-S內核和ARM11JZF-S內核 ? ARM1156T2-S內核和 ARM1156T2F-S內核 ? 基于ARM v6指令集體系結構;
? 是首批含有ARM Thumb-2內核技術的產品。(7)Cortex-A系列微處理器
? 適于高計算要求、運行豐富操作系統及提供交互媒體和圖形體驗的應用領域。? 支持傳統 ARM、Thumb指令集和新的高性能緊湊型 Thumb-2 指令集。? 移動互聯網的支持
? 低功率設計,支持 Adobe Flash 10.1 ? 高性能 NEON 引擎,廣泛支持媒體編解碼器 ? 高性能
? Cortex-A15:為新一代移動基礎結構應用和無線基礎結構應用提供高性能的解決方案。
? Cortex-A9。800 MHz1 GHz 的頻率下,提供的性能超過 2000 DMIPS。
? Cortex-A5 低成本實現,在 400-800 MHz 的頻率下,提供的性能超過 1200 DMIPS,是尺寸最小、功耗最低的 ARM 多核處理器。
? 多核技術:Cortex-A15、Cortex-A5和Cortex-A9 處理器都支持 ARM 第二代多核技術。? 高級擴展
? Thumb-2,提供最佳代碼大小和性能。? TrustZone,安全擴展,提供可信計算。
? Jazelle 技術,提高執行環境(如 Java、.Net、MSIL、Python 和 Perl)速度。
(8)Cortex-R系列微處理器
? 為具有嚴格的實時響應限制的深層嵌入式系統提供高性能計算解決方案。
? 快速。以高時鐘頻率獲得高處理性能。
? 確定性。處理在所有場合都必須符合硬實時限制。? 安全。系統必須可靠且可信。
? 成本效益。在處理器及其內存系統中都具有競爭力的成本和功耗。? 應用領域
? 智能手機
? 企業系統:硬盤驅動器、聯網和打印 ? 消費電子:機頂盒、數字電視和播放器 ? 醫療行業、工業和汽車行業的可靠系統 ? 功能集
(9)Cortex-M系列微處理器
? 向上兼容的高能效、易于使用的處理器
? 針對成本和功耗敏感的 MCU 和終端應用的混合信號設備進行過優化。? 更低的功耗,更長的電池壽命。
? 高密度指令集,更小的代碼,更低的硅成本。
RISC 處理器內核高性能32 位CPU具有確定性的運算低延遲3 階段管道Thumb-2 技術16/32 位指令的最佳混合小于8 位設備3 倍的代碼大小對性能沒有負面影響低功耗模式集成的睡眠狀態支持多電源域基于架構的軟件控制嵌套矢量中斷控制器(NVIC)低延遲、低抖動中斷響應不需要匯編編程以純C 語言編寫的中斷服務例程工具和RTOS 支持廣泛的第三方工具支持Cortex 微控制器軟件接口標準(CMSIS)最大限度地增加軟件成果重用CoreSight調試和跟蹤JTAG 或2 針串行線調試(SWD)連接支持多處理器支持實時跟蹤(10)SecurCore系列微處理器
? 為安全要求較高應用設計。智能卡
? SIM、ID、銀行業、付費電視、公共交通、電子政務
2.4 ARM處理器模式
(1)32位ARM處理器工作狀態
32位ARM處理器有三種工作狀態 ? ARM狀態。對應32位ARM指令集 ? Thumb狀態。對應16位Thumb指令集 ? Jazelle狀態。對應8位的Jazelle指令集
用于在處理器指令層次對JAVA加速
只有進入特定的狀態,相應的指令集才有效。CPSR的J(Jazelle)和T(Thumb)位反映程序的狀態。Thumb-2 ? 與現有 ARM 和 Thumb 解決方案向后兼容,同時擴展了 Thumb 指令集的可用功能; ? 使用少于 31% 的內存以降低系統成本; ? 提供比現有高密度代碼高出 38% 的性能。(2)64位ARM處理器工作狀態
ARMv8架構
兩種主要執行狀態:AArch64, AArch32 AArch64:引入了一套新的指令集“A64”專門用于64位處理 AArch32:兼容現有的32位ARM指令集 ARMv8架構支持三個主要指令集
A32(或 ARM):32 位固定長度指令集
T32(Thumb):以 16 位固定長度指令集的形式引入,在引入 Thumb-2 技術時增強為 16 位和 32 位混合長度
A64:提供與 ARM 和 Thumb 指令集類似功能的64位固定長度指令集(3)ARM處理器運行模式
? 用戶模式(usr):ARM處理器正常的程序執行狀態。? 快速中斷模式(fiq):用于高速數據傳輸或通道處理 ? 外部中斷模式(irq):用于通用的中斷處理。? 管理模式(svc):操作系統使用的保護模式。
? 數據訪問終止模式(abt):當數據或指令預取終止時進入該模式,可用于虛擬存儲及存儲保護。
? 系統模式(sys):運行具有特權的操作系統任務。
? 未定義指令中止模式(und):當未定義的指令執行時進入該模式,可用于支持硬件協處理器的軟件仿真。
運行模式可通過軟件改變,也可通過外部中斷或異常處理改變。用戶模式之外的模式稱為非用戶模式或特權模式。除用戶模式和系統模式之外的5種稱為異常模式,常用于處理中斷和異常、訪問受保護的系統資源等情況。
2.5 ARM體系的異常處理
(1)ARM體系中3種控制程序執行流程的方式: ? 順序執行 ? 跳轉分支指令
? 異常中斷:處理器暫時中斷當前數據流的現象。(2)對異常的響應。ARM處理器執行完當前指令后: ? 進入與特定的異常相應的操作模式;
? 將引起異常指令的下一條指令的地址保存到新模式的R14中;
? 將CSPR原值保存到新模式的SPSR中;
? 通過設置CSPR的第7位來禁止IRQ。如果為FIQ中斷,則還要設置CSPR的第6位來禁止FIQ;
? 給PC強制賦向量地址值。(3)中斷向量表
指定了異常中斷及其處理程序的對應關系,它通常存放在存儲地址的低端。
大小為32字節,其中每個異常中斷占據4字節空間,用于存放一個跳轉指令或者一個向PC寄存器中賦值的指令。
(4)異常優先級:當幾個異常中斷同時發生時,就必須按照一定的次序來處理這些異常中斷。(5)從異常返回
將連接寄存器LR的值減去相應偏移量后送到PC中; 將SPSR復制回CPSR中;
若在進入異常處理時設置了中斷禁止位,則要清除。通過普通指令控制PC返回
軟件中斷的返回指令 MOVS R15, R14;將鏈接寄存器內容移入PC并轉換模式 IRQ,FIQ和預取異常終止中斷的返回指令 SUBS R15, R14, #4 數據終止異常的返回指令 SUBS R15, R14, #8;異常在導致異常的指令的下一條指令后產生
2.6 ARM內部寄存器
(1)寄存器結構
32位ARM有31個32位通用寄存器,6個狀態寄存器。通用寄存器可用來保存數據和地址信息,用R為前綴加寄存器序號表示
15個通用寄存器(R0~R14)、一個或兩個狀態寄存器及程序計數器可在任意時間和處理器模式下被訪問,有些處理器模式擁有自身獨立的寄存器
(2)通用寄存器
分成三類:
R0~R7:未分組寄存器。每個未分組寄存器在所有的處理器模式下都表示同一個物理寄存器。R8~R14:分組寄存器。每個分組寄存器與一個用戶模式的寄存器對應。R15:程序計數器PC。
分組寄存器R8~R14可分為兩組:
R8~R12:每個寄存器對應兩組不同的物理寄存器,一組是FIQ模式下的,記為R8_fiq~R12_fiq, 另一組是除FIQ模式外的:R8_usr~R12_usr。
R13~R14:分別對應6個不同的物理寄存器。用戶模式和系統模式共用一個寄存器,另外5個對應其余5種。
R13 _
R13:被稱為堆棧指針SP,但沒有任何指令強制性使用R13作為堆棧指針
R14又被稱為鏈接寄存器LR(Link Register)。當調用子程序時,返回地址被自動保存到R14。由于ARM采用了多級流水線技術,所以當正常讀取PC值時,該值為當前指令地址值加8,或是加12。
2.7 ARM體系的存儲系統
(1)地址空間
將存儲器看作是從零地址開始的字節的線性組合 0-3字節:第1個存儲的字數據 4-7字節:第1個存儲的字數據 依次排列(2)存儲器格式 大端格式
小端格式
(3)存儲器訪問對準
無論取指還是內存訪問都以字、半字或字節對準訪問 a)非對齊的指令預取操作
ARM狀態:將一個非對齊地址寫入PC,數據的第0位和第1位被忽略,PC的bit[1:0]為0 Thumb狀態:數據的第0位被忽略,PC的bit[0]為0 b)非對齊地址內存的訪問操作(LOAD/STORE操作)
執行結果不可預知
忽略字單元地址低兩位的值,半字單元最低位的值(分別對應訪問字和半字)
在LDR和SWP指令中,對存儲器訪問忽略造成地址不對齊的低地址位,然后使用這些低地址位控制裝載數據的循環 ARM指令系統及程序設計基礎
教學目的:使學生對ARM指令系統及程序設計的基礎知識有一定的了解。教學重點:ARM指令系統。
教學難點:ARM程序設計的基礎知識。教學方法與教學手段:課堂講授,多媒體教學。教學時間:4課時。教學內容
3.1 ARM尋址方式
(1)尋址方式
處理器根據指令中給出的地址信息尋找物理地址的方式。尋找操作數或操作數地址的方式。
(2)立即尋址
也叫立即數尋址,操作數本身在指令中給出,該操作數被稱為立即數。例如: ADD R0, R0, #1;R0?R0+1 立即數須以“#”為前綴,對于十六進制表示的立即數,還需在“#”后加上“0x”或“&”。(3)寄存器尋址
操作數存在寄存器中。例如: ADD R0, R1, R2;R0?R1+R2(4)寄存器間接尋址
以寄存器的值作為操作數地址。例如: ADD R0, R1, [R2]
;R0 ? R1+[R2](5)基址變址尋址
a)基址加偏移的尋址方式
將寄存器內容與指令中給出的地址偏移量相加,得到操作數的有效地址。如: LDR R0, [R1, #4];R0 ? [R1+4]
前變址:基址加變址作為操作數地址。
后變址:基址作為操作數的地址,傳送后自動更新基址寄存器的值。
b)基址加索引的尋址方式
將基址寄存器的值與索引寄存器的值相加,形成操作數的有效地址。例如: LDR R0, [R1, R2]
;R0 ? [R1+R2] c)多寄存器尋址
一條指令可完成多個(最多16個)寄存器值的傳送。例如:
LDMIA R0, {R1, R2, R4};R1 ? [R0] 22
;R2 ? [R0+4];R4 ? [R0+8](6)寄存器移位尋址
操作數為寄存器中數做相應的移位而得到 例如:
ARM中的移位或循環移位操作: ? LSL:邏輯左移(Logical Shift Left)? LSR:邏輯右移(Logical Shift Right)ADD
R0, R1, R2, LSL #3;R0?R1+8×R2 ? ASR:算術右移(Arithmetic Shift Right)。移位過程中保持符號位不變,若源操作數為正數,則字的高端空出的位補0。若源操作數為負數,則字的高端空出的位補1。
? ROR:循環右移(Rotate Right)。從字的最低端移出的位依次填入字的高端空出的位。? RRX:擴展的循環右移(Rotate Right Extended)。操作數向右移一位,左側空位由狀態寄存器C位填充。當移位的類型為RRX時,無需指定移位的位數,其它的則須指定移位的位數。(7)相對尋址
以PC當前值作為基地址,指令中的地址標號作為位移量,兩者相加后得到操作數的有效地址。例如:
BL
NEXT
MOV ??
PC, LR
;從子程序返回 NEXT
;跳轉至子程序 NEXT ??
(8)堆棧尋址
a)堆棧:按先進后出(FILO)的方式工作,使用堆棧指針(Stack Pointer, SP)指示當前操作位置。b)根據棧指針的指向位置可將堆棧分為
? 滿堆棧:SP指向最后壓入堆棧的數據。? 空堆棧:SP指向下個將放入數據空位置
c)根據堆棧的生成方式可將堆棧分為
? 遞增堆棧(Ascending Stack):堆棧由低地址向高地址生成。
? 遞減堆棧(Descending Stack):由高地址向低地址生成。d)ARM支持四種類型堆棧工作方式
滿遞增堆棧:SP指向最后壓入的數據,且由低地址向高地址生成。滿遞減堆棧:SP指向最后壓入的數據,且由高地址向低地址生產。
空遞增堆棧:SP指向下個將放入數據的空位置,且由低地址向高地址生成。空遞減堆棧:SP指向下個將要放入數據的空位置,且由高地址向低地址生成。
3.2 ARM指令集
(1)ARM指令集分類 加載/存儲指令
數據處理指令 分支指令
狀態寄存器訪問指令 異常/中斷指令 協處理器指令(2)ARM指令的特點 所有指令都是32bit;
大多數指令都在單周期內完成; 所有指令都可以條件執行; load/store體系結構;
指令集可以通過協處理器擴展。(3)ARM指令的格式
(4)ARM指令的條件執行
所有ARM指令都可包含一個可選的條件碼,只有當CPSR中條件標志位滿足指定條件時,指令才會被執行。否則以NOP指令通過流水線。
(5)加載/存儲指令
Load:將內存中數據裝載到寄存器 Store:將寄存器中的數據存入內存 a)單寄存器傳輸指令
LABEL:相對PC的尋址方式。編譯器在匯編時,會將標號LABEL匯編成PC的偏移量存入該指令的立即數字段。
B: Byte;S: Sign;H: Half LDR/STR:讀/寫一個32bit字到/從一個32位寄存器,要求讀/寫地址字對齊。LDRB:內存8bit字節?32bit寄存器;不要求地址對齊,寄存器高24位清零。STRB:寄存器低8位?內存的某個地址;不要求地址對齊。
LDRH:16bit半字? 32bit寄存器;要求地址半字對齊,寄存器的高16bit清零。STRH:寄存器低16bit?內存;要求地址半字對齊。
LDRSH:有符號16bit半字?32bit寄存器中;要求地址半字對齊,寄存器高16bit根據符號位擴展。
LDRSB:有符號8bit字節?32bit寄存器中;不要求地址對齊,寄存器高24bit根據符號位擴展。
“數據”一列指的是這條指令所訪問的存儲單元
“基址寄存器”一列的內容是指執行指令之后“基址寄存器”的內容 b)多寄存器傳輸指令
!:表示執行完操作后將變化之后的地址值寫入基址寄存器
^:對于LDM操作,如恢復的寄存器中含有PC(R15)寄存器,則指令執行的同時CPU自動將SPSR拷貝到CPSR中,例如:
LDMFD {R0-R12, LR, PC}^ 數據的傳送發生在User用戶模式下的寄存器,而非當前模式寄存器,例如:
LDMDB SP, {R0-LR}^ 例如:
STMIA R0!, {R1-R5};以R0為地址指針,將R1-R5保存到內存,指針向上移動
c)交換指令
SWP {B} {
SWP R1, R2, [R3];R1?[R3] ,[R3]? R2 SWP R1, R1, [R2];R1與[R2]內容互換(6)數據處理指令
a)數據傳送指令
MOV {cond} {S} Rd, Operand 例如: MOV R1, R0 MOVEQ PC, R14
;將R14值傳到PC b)數據取反傳送指令 MVN {cond} {S} Rd, Operand 例如:
MVN R1, #2;將立即數2取反送至R1 c)算術運算指令
ADD、ADC ADD|ADC {cond} {S} Rd, Oper1, Oper2 例如: ADDS ADCS ADCS ADC R0, R4, R8 R1, R5, R9;加低端的字;帶進位加第二字
R2, R6, R10;帶進位加第三字 R3, R7, R11;帶進位加第四字
可實現 128位加法 SUB:減法指令
SUB {cond} {S} Rd, Oper1, Oper2 SBC:帶借位減法指令
SBC {cond} {S} Rd, Oper1, Oper2 例:SBCS R0, R1, R2;R0=R1–R2–C RSB:反向減法指令
RSB {cond} {S} Rd, Oper1, Oper2 操作數2減去操作數1,例如: RSB R0, R1, R2;R0 = R2 – R1 RSC:帶借位的逆向減法指令 RSC {cond} {S} Rd, Oper1, Oper2 d)邏輯運算指令 AND:與
AND {cond} {S} Rd, Oper1, Oper2 ORR:或
ORR {cond} {S} Rd, Oper1, Oper2 EOR:異或
EOR {cond} {S} Rd, Oper1, Oper2 e)比較指令 CMP CMP {cond} Operand1, Operand2 CMN:反值比較 CMN {cond} Operand1, Operand2 將第一個數與第二個數的反值進行比較,相當于完成兩個數相加。例如: CMN R1, R0;R1+R0,并設置CPSR f)測試指令 TST TST {cond} Operand1, Operand2
把兩個操作數按位進行與運算,根據結果更新CPSR。
TEQ TEQ {cond} Operand1, Operand2 把兩個操作數按位進行異或運算,根據結果更新CPSR g)乘法指令 MUL MUL {cond} {S} Rd, Oper1, Oper2 Rd?Operand1×Operand2。例如: MUL
R0, R1, R2 MLA MLA {cond} {S} Rd,Oper1,Oper2,Oper3 Rd?Operand1×Operand2+Operand3 例如:
MLA R0, R1, R2, R3;R0 = R1×R2+R3;R0 =R1×R2 UMULL:64位無符號數乘法指令 UMULL {cond} {S} Rd_L, Rd_H, Operand1, Operand2 Rd_H:Rd_L? Operand1×Operand2 例如: UMULL R0, R1, R2, R3;R0 =(R2×R3)的低32位;R1 =(R2×R3)的高32位 UMLAL: 64位無符號數乘加指令 UMLAL {cond} {S} Rd_L, Rd_H, Operand1, Operand2 Rd_H:Rd_L+= Operand1×Operand2 例如:
UMLAL
R0, R1, R2, R3;R0 =(R2×R3)的低32位+R0;R1 =(R2×R3)的高32位+R1 SMULL:64位有符號數乘法指令 SMULL {cond} {S} Rn_L, Rn_H, Operand1, Operand2 Rd_H:Rd_L? Operand1×Operand2 SMLAL: 64位有符號數乘加指令 SMLAL {cond} {S} Rn_L, Rn_H, Operand1, Operand2 Rd_H:Rd_L+= Operand1×Operand2(7)分支指令
a)B(分支指令)和 BL(帶鏈接分支指令)B {cond} LABEL BL {cond} LABEL
允許向前或向后跳轉最高32MB。
BL:帶返回的分支指令,用于調用一個將其返回地址存入鏈接寄存器的函數。例如:
SUBPRG BL …… SUBPRG ??;<子程序代碼> MOV PC, LR;返回
b)BX(分支并可選地交換指令集)和BLX(帶鏈接分支并可選地交換指令集)BX {cond} Rm BLX {cond} LABEL | Rm Rm:轉移地址,bit[0]為0時,目標地址處為ARM指令,否則為Thumb指令。BX 和 BLX是唯一可使用的切換指令集的方法。
BX 和 BLX指令執行與B和BL指令相同的分支操作,并可從ARM指令集切換到THUMB指令集。
c)長跳轉
通過向PC寄存器中寫目標地址值,可實現在4GB地址空間中進行任意跳轉。例如: MOV MOV LR, PC;保存返回地址
R15, #0x00110000;無條件轉向0x110000(8)狀態寄存器訪問指令 a)MRS MRS {
R3, CPSR;CPSR?R3
x:擴展域,即PSR[15:8] s:狀態域,即PSR[23:16] f:標志域,即
;設置所有標志位
(9)異常/中斷指令(續)a)SWI SWI {
SWI 0x01
;調用編號為01的系統例程
b)BKPT BKPT <16位立即數> 產生軟件斷點中斷,可用于程序調試。例如 BKPT 0xF010(10)協處理器指令 a)CDP CDP {
CDP P6, 2, C5, C10, C3, 16
;激活協處理器P6的操作,操作碼1和操作碼2值分別為2和16,目標寄存器為C5,源操作數寄存器為C10和C3 b)MRC和MRC MRC | MCR {
STC:存儲器?協處理器寄存器 前變址格式
LDC | STC {
LDC | STC {
(1)Thumb指令集的特點
? 是ARM指令集壓縮形式的子集,所有Thumb指令均有對應的ARM指令。? 采用16位二進制編碼,代碼密度小。
? 執行Thumb指令時,先動態解壓縮,然后作為標準的ARM指令執行。? 如何區分指令流取決于CPSR的位T。? 大多Thumb數據處理指令采用2地址格式。? 移位操作變成單獨指令。
? 沒有協處理器指令、單寄存器交換指令、乘加指令、64位乘法指令及程序寄存器處理指令。? 僅分支指令B有條件執行功能。
(2)Thumb狀態切換
a)ARM狀態進入Thumb狀態 執行帶狀態切換的轉移指令BX。例如: BX R0;若R0最低位為1,則轉Thumb狀態
異常返回。通常用于返回到進入異常前所執行的指令流,而不是特地用于切換到Thumb模式。適用于異常前執行的是Thumb指令。
b)Thumb 狀態進入ARM狀態 執行BX指令。
利用異常進入ARM指令流。(3)Thumb指令寄存器的使用 ? 對R0~R7具有全部訪問權限。
? R8~R12的訪問受到限制,只能通過MOV、ADD和CMP訪問。
? 在每一種特權模式下都有一組SP、LR和SPSR,分別對應ARM狀態的R13、R14和R15。(4)Thumb指令與ARM指令的相似點 ? Load/Store結構。
? 支持8位字節、16位半字和32位字數據類型。? 半字以2字節邊界對準,字以4字節邊界對準。(5)Thumb指令與ARM指令差異點
? 跳轉指令:條件跳轉在范圍上有更多的限制,轉向子程序只具有無條件轉移。
? 數據處理指令:對通用寄存器進行操作,操作結果需放入其中一個操作數寄存器。因此,許多Thumb指令采用2地址格式,ARM數據處理指令大多采用3地址格式。? 單寄存器加載和存儲指令:只能訪問R0~R7。
? PUSH和POP指令使用堆棧指針R13作為基址實現滿遞減堆棧,除R0~R7外,PUSH指令還可存儲R14,POP指令可加載程序指令PC。
? 大多數Thumb指令是無條件執行的,所有ARM指令都是條件執行的。? 由于采用高密度編碼,Thumb指令格式沒有ARM指令格式規則。(6)Thumb分支指令
a)B 指令——目標為Thumb代碼 B <條件碼>
B指令是Thumb指令集中唯一可條件執行的指令。PC = PC +(SignExtend(signed_immed_8)<< 1)B
3.4 3.5 35
3.6 嵌入式系統設計與開發過程
(1)嵌入式軟件開發的特點 a)需要交叉開發環境
? 交叉開發環境:實現編譯、鏈接和調試應用程序代碼的環境,它分散在有通信連接的宿主機與目標環境之中。
? 宿主機(Host)是一臺通用計算機,一般是PC機。
? 目標機(Target)可以是嵌入式應用軟件的實際運行環境,也可以是能替代實際環境的仿真系統。
? 交叉軟件開發工具包括:交叉編譯器、交叉調試器和模擬軟件等。b)引入任務設計方法
? 嵌入式應用系統以任務為基本執行單元 ? 用多個并發的任務代替通用軟件的多個模塊 c)需要固化程序 d)軟件開發難度大
? 實時性。
? 穩定性、可靠性、抗干擾性。(2)軟硬件平臺的選擇 選擇處理器需考慮的因素 ? 處理性能 ? 技術指標、功耗
? 軟件支持工具、是否內置調試工具 ? 供應商是否提供評估板 軟件平臺的選擇
? 操作系統。開發工具,與硬件接口難度,內存,是否提供硬件驅動程序,可裁剪性、實時性等
? 編程語言。通用性、可移植性、執行效率、可維護性等 ? 集成開發環境
(3)嵌入式系統設計與開發流程 ? 需求分析 ? 體系結構設計
? 硬件的設計、制作及測試 ? 軟件的設計、實現及測試 ? 系統集成
? 系統性能測試及可靠性測試
STM32微控制器
教學目的:使學生對STM32的性能指標、硬件結構有一定的了解。教學重點:STM32的硬件結構。教學難點:STM32的硬件結構。
教學方法與教學手段:課堂講授,多媒體教學。教學時間:4課時。教學內容
4.1 STM32微控制器的性能指標
(1)STM32F103的主要功能
? ARM Cortex-M3核 ? 最高主頻72MHz ? 512kB Flash、64kB RAM ? 1個USB、1個CAN、5個USART、3個SPI、2個I2C、2個I2S、1個SDIO、112個GPIO
? 3個ADC、2個DAC、8個定時器
? FSMC總線(支持NOR,NAND,SRAM)? 12通道DMA控制器
? Serial wire debug(SWD)、JTAG 接口 ? 啟動:用戶Flash、系統存儲器、SRAM(2)JC-STM32CB核心板
? 核心芯片:ST STM32F103ZET6 ? 8M NOR Flash:SST39VF6401,16bit ? 128M NAND Flash:K9F1G08U0C,8bit ? 8MHz CPU晶振,32768Hz RTC晶振 ? 1個10M/100M以太網接口 ? 1路音頻輸出和1路音頻輸入 ? 1個10-pin JTAG調試接口 ? 1個4-pin SWD串行調試接口 ? Reset按鈕、自定義LED,電源LED ? 1個精密可調電阻連接到片內ADC輸入
? 使用CPLD擴展IO口及地址譯碼,型號EPM240T100C5N ? 板載10/100M網卡控制器,型號DM9000AEP,16bit總線接口
STM32
第五篇:嵌入式Linux系統學習步驟簡介
嵌入式Linux系統學習步驟簡介 Linux 基礎安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命令 認識Linux系統的常用服務安裝Linux操作系統 Linux基本命令實踐 設置Linux環境變量 定制Linux的服務 Shell 編程基礎使用vi編輯文件 使用Emacs編輯文件 使用其他編輯器 Shell 編程基礎Shell簡介 認識后臺程序Bash編程熟悉Linux系統下的編輯環境 熟悉Linux下的各種Shell 熟練進行shell編程熟悉vi基本操作 熟悉Emacs的基本操作 比較不同shell的區別 編寫一個測試服務器是否連通的shell腳本程序 編寫一個查看進程是否存在的shell腳本程序 編寫一個帶有循環語句的shell腳本程序
Linux 下的 C 編程基礎linux C語言環境概述 Gcc使用方法 Gdb調試技術 Autoconf Automake Makefile 代碼優化 熟悉Linux系統下的開發環境 熟悉Gcc編譯器 熟悉Makefile規則編寫Hello,World程序 使用 make命令編譯程序 編寫帶有一個循環的程序 調試一個有問題的程序
嵌入式系統開發基礎嵌入式系統概述 交叉編譯 配置TFTP服務 配置NFS服務 下載Bootloader和內核 嵌入式Linux應用軟件開發流程熟悉嵌入式系統概念以及開發流程 建立嵌入式系統開發環境制作cross_gcc工具鏈 編譯并下載U-boot 編譯并下載Linux內核 編譯并下載Linux應用程序
嵌入式系統移植Linux內核代碼平臺相關代碼分析 ARM平臺介紹平臺移植的關鍵技術 移植Linux內核到 ARM平臺 了解移植的概念 能夠移植Linux內核移植Linux2.6內核到 ARM9開發板
嵌入式 Linux 下串口通信串行I/O的基本概念 嵌入式Linux應用軟件開發流程 Linux系統的文件和設備 與文件相關的系統調用 配置超級終端和MiniCOM 能夠熟悉進行串口通信 熟悉文件I/O 編寫串口通信程序 編寫多串口通信程序
嵌入式系統中多進程程序設計Linux系統進程概述 嵌入式系統的進程特點 進程操作 守護進程 相關的系統調用了解Linux系統中進程的概念 能夠編寫多進程程序編寫多進程程序 編寫一個守護進程程序 sleep系統調用任務管理、同步與通信 Linux任務概述任務調度 管道 信號 共享內存 任務管理 API 了解Linux系統任務管理機制 熟悉進程間通信的幾種方式 熟悉嵌入式Linux中的任務間同步與通信編寫一個簡單的管道程序實現文件傳輸 編寫一個使用共享內存的程序
嵌入式系統中多線程程序設計線程的基礎知識 多線程編程方法 線程應用中的同步問題了解線程的概念 能夠編寫簡單的多線程程序編寫一個多線程程序
嵌入式 Linux 網絡編程網絡基礎知識 嵌入式Linux中TCP/IP網絡結構 socket 編程 常用 API函數 分析Ping命令的實現 基本UDP套接口編程 許可證管理 PPP協議 GPRS 了解嵌入式Linux網絡體系結構 能夠進行嵌入式Linux環境下的socket 編程 熟悉UDP協議、PPP協議 熟悉GPRS 使用socket 編寫代理服務器 使用socket 編寫路由器 編寫許可證服務器 指出TCP和UDP的優缺點 編寫一個web服務器 編寫一個運行在 ARM平臺的網絡播放器 GUI 程序開發GUI基礎 嵌入式系統GUI類型 編譯QT 進行QT開發熟悉嵌入式系統常用的GUI 能夠進行QT編程使用QT編寫“Hello,World”程序 調試一個加入信號/槽的實例 通過重載QWidget 類方法處理事件
Linux 字符設備驅動程序設備驅動程序基礎知識 Linux系統的模塊 字符設備驅動分析 fs_operation結構 加載驅動程序了解設備驅動程序的概念 了解Linux字符設備驅動程序結構 能夠編寫字符設備驅動程序編寫Skull驅動 編寫鍵盤驅動 編寫I/O驅動 分析一個看門狗驅動程序 對比Linux2.6內核與2.4內核中字符設備驅動的不同Linux 塊設備驅動程序塊設備驅動程序工作原理 典型的塊設備驅動程序分析 塊設備的讀寫請求隊列了解Linux塊設備驅動程序結構 能夠編寫簡單的塊設備驅動程序比較字符設備與塊設備的異同 編寫MMC卡驅動程序 分析一個文件系統 對比Linux2.6內核與2.4內核中塊設備驅動的不同 文件系統虛擬文件系統 文件系統的建立 ramfs內存文件系統 proc文件系統 devfs 文件系統 MTD技術簡介 MTD塊設備初始化 MTD塊設備的讀寫操作了解Linux系統的文件系統 了解嵌入式Linux的文件系統 了解MTD技術 能夠編寫簡單的文件系統為 ARM9開發板添加 MTD支持 移植JFFS2文件系統 通過proc文件系統修改操作系統參數 分析romfs 文件系統源代碼 創建一個cramfs 文件系統
無論選擇哪一方向,基本的linux的知識是需要具備的,其他還需要掌握的知識有ARM(最常用的一款嵌入式處理器)和C語言編程,每一方面知識的掌握熟練程度都最終決定了個人進行嵌入式linux開發的綜合能力。
END