《嵌入式系統(tǒng)及應用(第2版)(微課版)》課件-第2章Cortex-M3架構_第1頁
《嵌入式系統(tǒng)及應用(第2版)(微課版)》課件-第2章Cortex-M3架構_第2頁
《嵌入式系統(tǒng)及應用(第2版)(微課版)》課件-第2章Cortex-M3架構_第3頁
《嵌入式系統(tǒng)及應用(第2版)(微課版)》課件-第2章Cortex-M3架構_第4頁
《嵌入式系統(tǒng)及應用(第2版)(微課版)》課件-第2章Cortex-M3架構_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第2章Cortex-M3架構概述Cortex-M3內部結構Cortex-M3的系統(tǒng)地址映射Cortex-M3的編程模型Cortex-M3的異常指令集和匯編語言概述Cortex-M3是基于Armv7-M的微體系結構,是針對那些對成本和功耗敏感,同時對性能要求又相當高的實時嵌入式應用而設計的。基于Cortex-M3架構的微處理器很好地平衡了嵌入式系統(tǒng)的設計過程中需要綜合考慮的系統(tǒng)性能、功耗、成本和開發(fā)難度等因素之間的關系,在獲得高性能的同時維持低功耗和低成本,因此在產品設計中得到廣泛應用。完善的開發(fā)環(huán)境支持,例如,Arm公司的KeilMDK集成開發(fā)環(huán)境就集成了多款Cortex-M3微處理器所需的外設驅動和實時內核等支撐軟件。Cortex-M3內部結構Cortex-M3內部結構Cortex-M3的系統(tǒng)地址映射系統(tǒng)地址映射(SystemAddressMap)嵌入式處理器會為總線上每一個可訪問的區(qū)域分配一段連續(xù)的物理地址,并且將多個這樣區(qū)域按某種方式進行排列,從而形成整個可訪問的地址空間,這種地址空間的排布方式稱為系統(tǒng)地址映射;Armv7-M體系結構采用了一個固定的地址映射,所有程序存儲器、數據存儲器、寄存器和輸入/輸出端口都被安排在同一個32位、最大容量為4GB的線性地址空間中;不同制造商生產的Cortex-M微控制器中各總線的系統(tǒng)地址分配大致相同,但不排除有些組件是可選的,還有些組件是制造商另行添加,因此也會稍有不同。Cortex-M3的系統(tǒng)地址映射Cortex-M3的系統(tǒng)地址映射Cortex-M3/M4系統(tǒng)地址映射的特點不同廠家生產的基于Cortex-M3/M4架構的微控制器地址映射基本相同,從而減輕了程序在不同微控制器上開發(fā)和移植的工作量;支持位帶操作:通過位帶操作可以實現對單一bit的操作;支持存儲器的非對齊訪問;支持存儲器的互斥訪問;數據在存儲器中的存儲可以被配置成小端格式或者大端格式;Cortex-M3的系統(tǒng)地址映射什么是位帶?

位帶是將一段地址空間中的每一位映射到另一段別名地址空間的一個32位字,更準確來講是這個32位字的最低位,從而實現允許處理器核心以訪問別名地址空間的字的形式來訪問該地址空間的位數據。Cortex-M3處理器提供了兩個1MB地址區(qū)間用作別名地址空間:一段是從地址0x20000000開始的SRAM地址空間一段是從地址0x40000000開始的外設地址空間。Cortex-M3的系統(tǒng)地址映射什么是對齊訪問和非對齊訪問?如果一個int型(假設為32位系統(tǒng))存放在偶地址開始的地方,那么讀一個周期就可以讀出這32bit,這就是對齊訪問;而如果存放在奇地址開始的地方,就需要讀2個周期,并對兩次讀出的結果的高低字節(jié)進行拼湊才能得到該32bit數據,這就是非對齊訪問。簡單來說就是提高CPU對內存的訪問效率。為了訪問未對齊的內存,處理器需要作兩次內存訪問;然而,對齊的內存訪問僅需要一次訪問。Cortex-M3的系統(tǒng)地址映射什么是存儲器的互斥訪問?在STM32中,互斥訪問是指多個任務或中斷請求試圖同時訪問共享資源,但是只允許一個任務或中斷請求訪問該資源,以確保數據的一致性和可靠性。Cortex-M3的編程模型工作模式線程模式:處理器正常運行時的模式異常(Handler)模式:當發(fā)生異常時,處理器進入異常處理模式,執(zhí)行中斷處理相關代碼系統(tǒng)復位時進入線程模式,從異常處理模式返回時也會進入線程模式。當發(fā)生異常時,處理器進入異常處理模式,異常處理完成后,處理器重新回到線程模式。運行級別特權模式:具有完全的訪問權限,可以執(zhí)行所有指令和訪問所有硬件資源,用于執(zhí)行嵌入式操作系統(tǒng)內核代碼非特權級模式(用戶模式):僅有有限的訪問權限,用于運行用戶態(tài)的代碼Cortex-M3的編程模型Cortex-M3的編程模型堆棧堆棧是將一部分內存用作“后進先出”的數據緩沖區(qū)。Cortex-M3/M4提供了兩個堆棧指針,分別是主堆棧指針(MSP)和進程堆棧指針(PSP);在某一個時刻只有一個堆棧指針起作用,這樣可以將用戶程序的堆棧和操作系統(tǒng)的堆棧相分離,避免相互影響;Cortex-M3的編程模型存儲格式Cortex-M處理器將存儲器看成是從0開始向上編址的字節(jié)的線性集合,由于Cortex-M內核是32位字長,所以對內存的訪問是字(4個字節(jié))對齊的;Cortex-M內核的存儲器系統(tǒng)支持小端格式(Little-endianformat)和大端格式(Big-endianformat)。小端格式:低字節(jié)放低地址,高字節(jié)放高地址,

同時用低地址作為整個數據的地址大端格式:高字節(jié)放低地址,低字節(jié)放高地址,

同時用低地址作為整個數據的地址Cortex-M內核能夠以小端格式或大端格式訪問存儲器中的數據,但訪問代碼時始終使用小端格式;Cortex-M3的編程模型寄存器組Coretx-M核擁有13個32位通用寄存器(如果算上R13、R14、R15共有16個)和數個特殊功能寄存器。Cortex-M3的編程模型寄存器組寄存器R0~R12R0~R12是通用寄存器,用于數據操作。其中,R0~R7被稱為低組寄存器,R8~R12被稱為高組寄存器。寄存器R13R13為堆棧指針(SP):MSP和PSP都可被寫成R13或者SP,但在某一時刻只有一個堆棧起作用;寄存器R14R14為鏈接寄存器(LR),用于在調用函數或者子程序時保存返回地址;寄存器R15R15為程序計數器(PC),指向當前正在取址的指令地址;Cortex-M3的編程模型寄存器組特殊功能寄存器特殊功能寄存器用來設定和讀取處理器的工作狀態(tài),包括屏蔽和允許中斷;特殊寄存器不在存儲器映射的地址范圍,只能通過特殊寄存器訪問指令MSR和MRS來訪問;程序狀態(tài)寄存器組:Cortex-M3的編程模型寄存器組特殊功能寄存器中斷屏蔽寄存器組

控制寄存器Cortex-M3的異常異常異常是指打斷程序正常執(zhí)行的事件;在Arm體系結構中,中斷是異常的一種。中斷通常由外設或者外部輸入產生,在某些情況下也可由軟件觸發(fā);Cortex-M3的異常是由NVIC統(tǒng)一進行管理。NVIC可以處理多種中斷請求(IRQ)和NMI請求;NVIC支持的內部異常入口有16個,編號為0~15;編號16以上的均為外部中斷,總共有240個外部中斷源;通過IPSR可以了解到是哪一個中斷源產生了中斷信號,中斷編號數值越小的中斷源,響應優(yōu)先級別越高;Cortex-M3的異常NVIC支持中斷嵌套、向量中斷、動態(tài)優(yōu)先級調整、中斷屏蔽等。除了個別異常的優(yōu)先級已經固定外,其他異常的優(yōu)先級都是可編程的;Cortex-M3架構的異常類型和優(yōu)先級如表所示編號類型優(yōu)先級描述0N/AN/A沒有異常在運行1復位-3(最高)復位2NMI-2不可屏蔽中斷(來自外部NMI輸入腳)3HardFault-1所有其他異常處理機制無法響應的fault,包括那些被禁用或者被屏蔽的fault。用于不可恢復的系統(tǒng)故障。該異常不可屏蔽,優(yōu)先級始終為-14MemManagefault可調整存儲管理單元fault,由MPU觸發(fā)的違反訪問規(guī)則以及無效訪問的fault5BusFault可調整總線收到了錯誤響應而產生的異常,原因可能是指令預取終止或數據訪問錯誤6UsageFault可調整程序錯誤導致的異常,通常是由無效指令或者是非法的狀態(tài)轉換觸發(fā)7~10保留N/AN/A11SVC可調整執(zhí)行系統(tǒng)服務調用指令(SVC)引發(fā)的異常,該異常不可屏蔽,但優(yōu)先級可調12DebugMonitor可調整調試監(jiān)視器觸發(fā)的異常,包括斷點、數據觀察點或者外部調試請求13保留N/AN/A14PendSV可調整可掛起的系統(tǒng)請求,用于軟件觸發(fā)的中斷15SysTick可調整系統(tǒng)定時器中斷16IRQ#0可調整外部中斷#017IRQ#1可調整外部中斷#1…………255IRQ#239可調整外部中斷#239Cortex-M3的異常中斷向量表每個異常或中斷源都需要對應的處理程序,稱之為中斷服務程序(ISR),也可稱之為中斷處理程序。中斷服務程序的入口地址稱之為中斷向量,每個中斷向量占據4字節(jié)存儲空間。所有中斷服務程序的入口地址構成一個表,稱之為中斷向量表;中斷向量表中,每個中斷向量的地址偏移量等于其異常編號乘以4;Cortex-M3的異常中斷向量表Cortex-M3復位時總是從0x00000000地址開始讀取中斷向量表;中斷向量表中偏移量為0x00地址上的內容為MSP的初始值,當處理器復位時,這個值將會自動裝載到MSP;處理器復位異常的入口地址偏移量為0x04,當處理器復位時,將從這個地址取出執(zhí)行程序的開始地址并裝載到PC;通常位于0x00000000地址上的都是Flash或者ROM存儲器,這類存儲器不便于在程序執(zhí)行過程中修改中斷向量表中的內容,因此Cortex-M3架構提供了中斷向量表重定位功能;指令集和匯編語言指令集——指令系統(tǒng)由于歷史原因(從ARM7TDMI開始),ARM處理器一直支持兩種形式上相對獨立的指令集,它們分別是:32位的ARM指令集。對應處理器狀態(tài):ARM狀態(tài)支持ARM核所有的特性,具有高效、快速的特點,指令集效率高,但是代碼密度低16位的Thumb指令集。對應處理器狀態(tài):Thumb狀態(tài)具有靈活、小巧的特點,有較高的代碼密度,卻仍然保持ARM的大多數性能上的優(yōu)勢Cortex-M3內核不支持ARM指令集,而只支持Thumb-2指令集。Thumb-2指令集是Thumb指令集和ARM指令集的超集,它將16位和32位指令相結合,在代碼密度和性能之間達到了最佳平衡,在降低系統(tǒng)功耗的同時又提高了系統(tǒng)性能。指令集和匯編語言匯編指令格式匯編指令由操作碼和操作數組成,ARM匯編指令是三地址指令格式其中<>號內的項是必須的,{}號內的項是可選的。各項的說明如下:opcode:指令助記符;cond:執(zhí)行條件;(P51表4.3)S:是否影響APSR寄存器的值;(P51表4.2)Rd:目標寄存器;Rn:存放第1個操作數的寄存器;operand2:第2個操作數,可以是立即數、寄存器的值或寄存器移位值。{標號}<opcode>{<cond>}{S}<Rd>,<Rn>,<operand2>;{注釋}4.6指令集和匯編語言匯編指令格式——條件碼使用條件碼“cond”可以實現高效的邏輯操作(節(jié)省跳轉和條件語句),提高代碼效率。C代碼:If(a>b) a++;Else b++;對應的匯編代碼:CMP R0,R1 ;R0(a)與R1(b)比較ADDHI R0,R0,#1;若R0>R1,則R0=R0+1ADDLS R1,R1,#1;若R0≤R1,則R1=R1+1示例:4.6指令集和匯編語言統(tǒng)一匯編語言UAL統(tǒng)一匯編語言UAL(UnifiedAssemblerLanguage)語法機制的引入,是因為不同匯編指令集的語法格式不同,為了減輕開發(fā)工作的負擔,在引入了UAL之后,不同指令集的書寫格式就統(tǒng)一了。統(tǒng)一匯編語言UAL語法機制,從某種程度上可以理解為偽指令的使用,一個完整的匯編語言程序包含了:匯編指令+偽指令。指令集和匯編語言;文件名:TEST1.S

;功能:實現兩個寄存器相加;說明:使用ARMulate軟件仿真調試

AREA Example1,CODE,READONLY ;聲明代碼段Example1

ENTRY ;標識程序入口

CODE32 ;聲明32位ARM指令START MOV R0,#0 ;設置參數

MOV R1,#10LOOP BL ADD_SUB ;調用子程序ADD_SUB

B LOOP ;跳轉到LOOPADD_SUB

ADDS R0,R0,R1 ;R0=R0+R1 MOV PC,LR ;子程序返回

END ;文件結束

使用“;”進行注釋標號頂格寫實際代碼段聲明文件結束指令集和匯編語言例:從1加到100的累加程序AREAARMex,CODE,READONLY;AREA偽指令,定義一個名為ARMex的只讀代碼段ENTRY;偽指令,表示程序入口MOVSr2,#0x00;用于存放累加結果MOVSr1,#0x01;第一個被累加數BLOP1;LOP1為標號

LOP2ADDr2,r2,r1;標號必須頂格書寫ADDSr1,r1,#1LOP1CMPr1,#0x64BLELOP2STOPBSTOP;程序結束,進入死循環(huán)END

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論