




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、嵌入式系統(tǒng)原理與實(shí)驗(yàn) 第第6 6章章 嵌入式系統(tǒng)和嵌入式系統(tǒng)和Cortex-M3Cortex-M36.1 ARM系統(tǒng)概述6.2 Cortex-M3/M4概述6.3 Cortex-M3/M4基礎(chǔ)6.4 存儲(chǔ)器系統(tǒng)6.5 指令集6.6 存儲(chǔ)器保護(hù)單元1嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.1 ARM6.1 ARM系統(tǒng)概述系統(tǒng)概述1985年,Roger Wilson和Steve Furber設(shè)計(jì)了第一代32位、6M Hz的處理器,做出了一臺(tái)RISC指令集的計(jì)算機(jī),簡稱ARM(Acorn RISC Machine)ARM的由來。1990年,Acorn公司正式改組為ARM計(jì)算機(jī)公司。ARM公司生產(chǎn)的芯片,稱為ARM
2、芯片。ARM公司的業(yè)務(wù)一直是出售IP核。 最成功的ARM7TDMI已經(jīng)有數(shù)億片售出。ARM控股的ARM處理器家庭的突出例子包括ARM7, ARM9, ARM11 and Cortex。2嵌入式系統(tǒng)原理與實(shí)驗(yàn) ARMARM處理器架構(gòu)發(fā)展進(jìn)程3嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.2 Cortex-M3/M46.2 Cortex-M3/M4概述概述4嵌入式系統(tǒng)原理與實(shí)驗(yàn) 32-bit微處理器: 32-bit 數(shù)據(jù)、寄存器組、存儲(chǔ)器接口。 哈佛架構(gòu):獨(dú)立的指令總線和數(shù)據(jù)總線。 存儲(chǔ)空間:4GB。 寄存器:寄存器 (R0 到 R15) 和 特殊功能寄存器。 運(yùn)行模式:線程模式和處理模式;特權(quán)級和用戶級。 中斷和異
3、常:內(nèi)置嵌套向量中斷控制器;支持11 種系統(tǒng)異常外加240 種外部 IRQ。 總線接口:若干總線接口允許 Cortex-M3 同時(shí)取指令和取數(shù)據(jù)。 MPU:一個(gè)可選的存儲(chǔ)器保護(hù)單元允許對特權(quán)訪問和用戶程序訪問制定訪問規(guī)則。 指令集:Thumb-2 指令集;允許 32位指令和16位指令被同時(shí)使用。 固定的內(nèi)部調(diào)試組件:提供調(diào)試操作支持和像斷點(diǎn)調(diào)試這樣的功能。5嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6Thumb-2指令集與Thumb指令集的關(guān)系嵌入式系統(tǒng)原理與實(shí)驗(yàn) 7基于Cortex-M3/M4的微處理器芯片ARM設(shè)計(jì)嵌入式系統(tǒng)原理與實(shí)驗(yàn) 通用寄存器通用寄存器1. R0R7 (低寄存器): 可以被所有 16-bi
4、t Thumb 指令和所有 32-bit Thumb-2 指令訪問。2. R8R12 (高寄存器):可以被所有 Thumb-2 指令但不能被所有 Thumb 指令訪問。 86.3 Cortex-M3/M4 6.3 Cortex-M3/M4 基礎(chǔ)基礎(chǔ)6.3.1 6.3.1 寄存器組寄存器組嵌入式系統(tǒng)原理與實(shí)驗(yàn) 9堆棧指針堆棧指針R13 是堆棧指針。兩個(gè)堆棧指針在同一時(shí)間只有一個(gè)可見。堆棧指針的最低兩位總是0, 這意味著他們總是字對齊。1. 主堆棧指針(MSP) : 這是默認(rèn)的堆棧指針?;?qū)懽鱏P_main2. 進(jìn)程堆棧指針(PSP) : 被常規(guī)的應(yīng)用程序代碼所使用?;?qū)懽鱏P_process嵌入
5、式系統(tǒng)原理與實(shí)驗(yàn) 匯編語言的語法: PUSH R0 ; R13=R13-4, then MemoryR13=R0 POP R0 ; R0=MemoryR13, then R13=R13+4可以在一條指令中PUSH或POP多個(gè)寄存器:subroutine_1 PUSH R0-R7, R12, R14 ; Save registers ; Do your processing POP R0-R7, R12, R14 ; Restore registers BX R14 ; Return to calling function10嵌入式系統(tǒng)原理與實(shí)驗(yàn) 連接寄存器連接寄存器R14R14 是連接寄存器
6、(LR)。 當(dāng)一個(gè)子程序或函數(shù)被調(diào)用時(shí),LR用來存儲(chǔ)返回的程序計(jì)數(shù)器。示例:Main ; Main programBL func1 ; Call function1 ; PC = function1 ; LR = next instruction ; program codefunc1BX LR ; Return11嵌入式系統(tǒng)原理與實(shí)驗(yàn) 程序計(jì)數(shù)器程序計(jì)數(shù)器R15R15 是程序計(jì)數(shù)器??梢栽趨R編語言中通過R15或PC訪問。示例:示例:0 x1000 : MOV R0, PC ; R0 = 0 x100412嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.3.2 6.3.2 特殊功能寄存器特殊功能寄存器在Cortex
7、-M3/M4處理器中的特殊寄存器包括: 1. 程序狀態(tài)寄存器 (PSRs)2. 中斷屏蔽寄存器(PRIMASK, FAULTMASK, and BASEPRI)3. 控制寄存器 (CONTROL)13嵌入式系統(tǒng)原理與實(shí)驗(yàn) 程序狀態(tài)寄存器程序狀態(tài)寄存器 (PSRs) (PSRs)程序狀態(tài)寄存器可以分為三個(gè)狀態(tài)寄存器:1. 應(yīng)用 PSR (APSR) 負(fù)、零、進(jìn)/借、溢、飽和(用于飽和運(yùn)算)2. 中斷 PSR (IPSR)3. 執(zhí)行 PSR (EPSR) ICI/IT: ICI指令/IT指令狀態(tài)位;T總為1313029282726:252423:2019:1615:109 8 7 6 5 4:0
8、xPSRNZCVQICI/ITTICI/ITException No.14313029282726:252423:2019:1615:10987654:0APSRNZCVQIPSRException No.EPSRICI/ITTICI/IT嵌入式系統(tǒng)原理與實(shí)驗(yàn) 中斷屏蔽寄存器中斷屏蔽寄存器PRIMASKPRIMASK、FAULTMASK FAULTMASK 和和 BASEPRI BASEPRI用來開放/禁用異常Cortex-M3/M4 中斷屏蔽寄存器中斷屏蔽寄存器寄存器名描 述PRIMASK一個(gè)1-bit 寄存器。1:僅允許NMI 和硬件默認(rèn)異常,所有其他的中斷和異常將被屏蔽;0:開放中斷FA
9、ULTMASK一個(gè)1-bit 寄存器。1:僅允許NMI, 所有中斷和默認(rèn)異常處理包括硬件異常被忽略。BASEPRI一個(gè)9位寄存器。它定義了屏蔽優(yōu)先級。 當(dāng)設(shè)置為某值時(shí), 所有大于或等于該值的中斷被屏蔽(值越大,優(yōu)先級越低)。全為0(默認(rèn)值):不屏蔽任何中斷。15嵌入式系統(tǒng)原理與實(shí)驗(yàn) 控制寄存器控制寄存器被用來定義特權(quán)級和堆棧指針的選擇。這個(gè)寄存器有兩位。Cortex-M3/M4 控制寄存器控制寄存器位功能CONTROL1 堆棧指針選擇0=選擇主堆棧指針MSP(復(fù)位后缺省值)1=選擇進(jìn)程堆棧指針PSP在線程或基礎(chǔ)級(沒有在響應(yīng)異常),可以使用PSP。在handler 模式下,只允許使用MSP,所
10、以此時(shí)不得往該位寫1。CONTROL0 0=特權(quán)級的線程模式1=用戶級的線程模式handler 模式永遠(yuǎn)都是特權(quán)級的。16嵌入式系統(tǒng)原理與實(shí)驗(yàn) CONTROL1 CONTROL1在Cortex-M3中, 在處理者模式中CONTROL1 位總是0 (MSP)。但是, 在線程或基本級別,它可以為0或1。 CONTROL0 CONTROL0CONTRL0 位只在特權(quán)狀態(tài)可寫。使用MRS和MSR指令來訪問控制寄存器: MRS r0, CONTROL ; Read CONTROL register into R0 MSR CONTROL, r0 ; Write R0 into CONTROL regis
11、ter17嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.3.36.3.3 操作模式操作模式兩種模式和兩種特權(quán)等級。操作模式?jīng)Q定處理器運(yùn)行正常程序或運(yùn)行異常處理程序。特權(quán)用戶當(dāng)運(yùn)行一個(gè)異常(中斷)程序處理者模式錯(cuò)誤的用法當(dāng)運(yùn)行主應(yīng)用程序線程模式線程模式在在Cortex-M3/M4中中的操作模式和權(quán)限級別的操作模式和權(quán)限級別18特權(quán)級別提供了一種機(jī)制來保障訪問存儲(chǔ)器的關(guān)鍵區(qū)域,同時(shí)還提供了一個(gè)基本的安全模式。通過寫Control register0=1,軟件在特權(quán)訪問級別可以使程序轉(zhuǎn)換到用戶訪問級別。 用戶程序不能夠通過寫控制寄存器直接變回特權(quán)狀態(tài)。它要經(jīng)過一個(gè)異常處理程序設(shè)置Control register0=0使
12、得處理器切換回特權(quán)訪問級別。嵌入式系統(tǒng)原理與實(shí)驗(yàn) 19特權(quán)級和處理器模式轉(zhuǎn)換圖特權(quán)級線程模式特權(quán)級handler模式用戶級線程模式嵌入式系統(tǒng)原理與實(shí)驗(yàn) 當(dāng)CONTROL0=0 時(shí),在異常處理的始末,只發(fā)生了處理器模式的轉(zhuǎn)換。20線程模式 handler模式 線程模式(特權(quán)級) (特權(quán)級) (特權(quán)級)線程模式 handler模式 線程模式(用戶級) (特權(quán)級) (用戶級)若CONTROL0=1(線程模式+用戶級),則在中斷響應(yīng)的始末, 處理器模式和特權(quán)等極都要發(fā)生變化。嵌入式系統(tǒng)原理與實(shí)驗(yàn) 21CortexM3/M4 支持大量異常,包括1641=11 個(gè)系統(tǒng)異常,和最多240 個(gè)外部中斷簡稱IR
13、Q。具體使用了這240 個(gè)中斷源中的多少個(gè),則由芯片制造商決定。由外設(shè)產(chǎn)生的中斷信號,除了SysTick 的之外,全都連接到NVIC 的中斷輸入信號線。當(dāng)一個(gè)發(fā)生的異常被CM3 內(nèi)核接受,對應(yīng)的異常handler 就會(huì)執(zhí)行。為了決定handler 的入口地址,CM3 使用了“向量表查表機(jī)制”。向量表的存儲(chǔ)位置是可以設(shè)置的,通過NVIC 中的一個(gè)重定位寄存器來指出向量表的地址。復(fù)位后,該寄存器的值為0。因此,在地址0 處必須包含一張向量表,用于初始時(shí)的異常分配。6.3.4 6.3.4 向量表向量表嵌入式系統(tǒng)原理與實(shí)驗(yàn) 22異常類型 偏移地址 優(yōu)先級異常向量 00 x00N/AMSP的開始值 10
14、 x04-3(最高)復(fù)位 20 x08-2NMI30 x0C-1硬件故障 40 x10可編程存儲(chǔ)器管理故障 50 x14可編程總線故障 60 x18可編程程序錯(cuò)誤導(dǎo)致的故障 7-100 x1C-0 x28 N/A保留 110 x2C可編程執(zhí)行系統(tǒng)服務(wù)調(diào)用指令引發(fā)的異常SVC120 x30可編程調(diào)試監(jiān)視器 130 x34N/A保留 140 x38可編程為系統(tǒng)設(shè)備而設(shè)的可懸掛請求PendSV150 x3C可編程系統(tǒng)滴答定時(shí)器 SysTick160 x40可編程IRQ#0可編程2550 x3FF可編程IRQ#239向量表結(jié)構(gòu)向量表結(jié)構(gòu)嵌入式系統(tǒng)原理與實(shí)驗(yàn) 棧的基本操作棧的基本操作在寄存器中的數(shù)據(jù)可以
15、通過PUSH操作保存到棧內(nèi)存并且通過POP操作在稍后恢復(fù)到寄存器.當(dāng)PUSH/POP 指令執(zhí)行時(shí),SP 指針的值也跟著自減/自增。主程序 .; R0 = X, R1 = Y, R2 = Z BL function1; Back to main program; R0 = X, R1 = Y, R2 = Z . ; next instructionsfunction1PUSH R0 ; store R0 to stack & adjust SPPUSH R1 ; store R1 to stack & adjust SPPUSH R2 ; store R2 to stack &a
16、mp; adjust SP . ; Executing task (R0, R1 and R2 ; could be changed)POP R2 ; restore R2 and SP re-adjustedPOP R1 ; restore R1 and SP re-adjustedPOP R0 ; restore R0 and SP re-adjustedBX LR ; Return 236.3.5 6.3.5 棧內(nèi)存操作棧內(nèi)存操作嵌入式系統(tǒng)原理與實(shí)驗(yàn) Cortex-M3/M4 Cortex-M3/M4 的堆棧實(shí)現(xiàn)的堆棧實(shí)現(xiàn)24嵌入式系統(tǒng)原理與實(shí)驗(yàn) 25在在Cortex-M3/M4Cort
17、ex-M3/M4中中的兩種堆棧模式的兩種堆棧模式Cortex-M3/M4 有兩個(gè)堆棧指針: 主堆棧指針 (MSP) 和進(jìn)程堆棧指針(PSP)。被使用的SP 寄存器由CONTROL CONTROL 11控制。CONTROL 1 = 0: 使用使用MSP線程模式 handler模式 線程模式(使用MSP) (使用MSP) (使用MSP)線程模式 handler模式 線程模式(使用PSP) (使用MSP) (使用PSP)CONTROL 1 = 1: 線程模式使用線程模式使用PSPHandler模式使用模式使用MSP嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.3.6 6.3.6 復(fù)位序列復(fù)位序列處理器復(fù)位后,它會(huì)從存儲(chǔ)
18、器中讀取兩個(gè)字:1.從地址 0 x0000 0000 處取出MSP 的初始值。2.從地址 0 x0000 0004 處取出PC 的初始值這個(gè)值是復(fù)位向量,LSB 必須是1。然后從這個(gè)值所對應(yīng)的地址處取指。26 MSP 的初始值必須是堆棧內(nèi)存的末地址加1。例:如果堆棧區(qū)域在0 x20007C000 x20007FFF之間,則MSP 的初始值就必須是0 x20008000。 對于不同的開發(fā)工具,需要使用不同的格式來設(shè)置MSP 初值和復(fù)位向量(一般由開發(fā)工具自行計(jì)算)。嵌入式系統(tǒng)原理與實(shí)驗(yàn) 27初始MSP 及PC 初始化的一個(gè)范例 MSP =堆棧內(nèi)存末地址+1 PC 初始化=啟動(dòng)代碼的首地址+1(C
19、M3在Thumb狀態(tài)執(zhí)行)嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.4.1 6.4.1 Cortex-M3/M4Cortex-M3/M4存儲(chǔ)器系統(tǒng)功能概述存儲(chǔ)器系統(tǒng)功能概述 存儲(chǔ)器映射是預(yù)定義的,并且還規(guī)定好了哪個(gè)位置使用哪條總線。 Cortex-M3/M4的存儲(chǔ)器系統(tǒng)支持所謂的“位帶”(bitband)操作。通過它,實(shí)現(xiàn)了對單一比特的原子操作。位帶操作僅適用于一些特殊的存儲(chǔ)器區(qū)域中。 Cortex-M3/M4的存儲(chǔ)器系統(tǒng)支持非對齊訪問和互斥訪問。這兩個(gè)特性是直到了v7M 時(shí)才出來的。 Cortex-M3/M4的存儲(chǔ)器系統(tǒng)支持小端配置和大端配置。286.4 6.4 存儲(chǔ)器系統(tǒng)存儲(chǔ)器系統(tǒng)嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6
20、.4.2 6.4.2 內(nèi)存映射內(nèi)存映射 Cortex-M3/M4 處理器有一個(gè)固定的存儲(chǔ)映射。這一點(diǎn)極大地方便了軟件在各種CM3 單片機(jī)間的移植。例:各款CM3 單片機(jī)的NVIC 和MPU 都在相同的位置布設(shè)寄存器,使得它們變得通用。 一些存儲(chǔ)單元被分配給了私有外設(shè),比如調(diào)試組件。這個(gè)地址段被稱為“私有外設(shè)區(qū)”。私有外設(shè)區(qū)的組件包括:n閃存地址重載及斷點(diǎn)單元(FPB)n數(shù)據(jù)觀察點(diǎn)單元(DWT)n指令跟蹤宏單元(ITM)n嵌入式跟蹤宏單元(ETM)n跟蹤端口接口單元(TPIU)nROM 表29嵌入式系統(tǒng)原理與實(shí)驗(yàn) Cortex-Cortex-M3/M4 M3/M4 預(yù)定義預(yù)定義 內(nèi)存映射內(nèi)存映射
21、30嵌入式系統(tǒng)原理與實(shí)驗(yàn) SRAM: SRAM: 0.5 GB。 SRAM存儲(chǔ)范圍是用來連接內(nèi)部的SRAM。 片上外設(shè)片上外設(shè): : 0.5 GB,支持 bit-band 別名并且可以通過系統(tǒng)總線接口訪問。外部外部 RAM: RAM: 1 GB。允許執(zhí)行程序。外部設(shè)備外部設(shè)備: : 1 GB。不允許執(zhí)行程序。系統(tǒng)級組件系統(tǒng)級組件+ + 內(nèi)部專用的外圍總線內(nèi)部專用的外圍總線+ + 外部私有外設(shè)總線外部私有外設(shè)總線+ + 供應(yīng)商特定系供應(yīng)商特定系統(tǒng)外設(shè)統(tǒng)外設(shè): : 0.5 GB.31嵌入式系統(tǒng)原理與實(shí)驗(yàn) 私有外設(shè)總線私有外設(shè)總線: : 1. AHB 私有外設(shè)總線,只針對 Cortex-M3 內(nèi)部
22、AHB 外設(shè),它們是:NVIC, FPB, DWT 和ITM。2. APB 私有外設(shè)總線,既用于CM3 內(nèi)部的APB 設(shè)備,也用于外部設(shè)備(這里的“外部”是對內(nèi)核而言)。NVIC 所處的區(qū)域叫做“系統(tǒng)控制空間(SCS)”,在SCS 里的還有SysTick、MPU 以及代碼調(diào)試控制所用的寄存器。32嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.4.3 6.4.3 內(nèi)存訪問屬性內(nèi)存訪問屬性 Cortex-M3/M4 在定義了存儲(chǔ)器映射之外,還為存儲(chǔ)器的訪問規(guī)定了4 種屬性,分別是:可否緩沖(Bufferable)可否緩存(Cacheable)可否執(zhí)行(Executable)可否共享(Sharable) 如果配了MPU
23、,則可以通過它配置不同的存儲(chǔ)區(qū),并且覆蓋缺省的訪問屬性。33嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.4.4 6.4.4 默認(rèn)內(nèi)存訪問權(quán)限默認(rèn)內(nèi)存訪問權(quán)限 Cortex-M3/M4 有一個(gè)缺省的存儲(chǔ)訪問許可,它能防止用戶代碼訪問系統(tǒng)控制存儲(chǔ)空間,保護(hù)NVIC、MPU 等關(guān)鍵部件。缺省訪問許可在下列條件時(shí)生效:沒有配備 MPU配備了 MPU,但MPU被除能 如果啟用了MPU,則MPU 可以在地址空間劃出若干區(qū)域,并為每個(gè)區(qū)規(guī)定不同的訪問許可權(quán)限。 當(dāng)一個(gè)用戶級訪問被阻止時(shí),會(huì)立即產(chǎn)生一個(gè)總線異常。34嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.4.5 Bit-Band6.4.5 Bit-Band操作操作 Cortex-M3/M4
24、支持位帶操作,可以使用普通的加載/存儲(chǔ)指令來對單一的比特進(jìn)行讀寫。 在CM3中,有兩個(gè)區(qū)中實(shí)現(xiàn)了位帶:SRAM 區(qū)的最低1MB 范圍片內(nèi)外設(shè)區(qū)的最低1MB 范圍 這兩個(gè)區(qū)中的地址除了可以像普通的RAM 一樣使用外,它們還都有自己的“位帶別名區(qū)”,位帶別名區(qū)把每個(gè)比特膨脹成一個(gè)32 位的字。 它們可以通過一個(gè)單獨(dú)的被稱為bit-band alias的存儲(chǔ)區(qū)域被訪問。35嵌入式系統(tǒng)原理與實(shí)驗(yàn) 位通過位通過Bit-Band AliasBit-Band Alias訪問訪問Bit-Band Region Bit-Band Region 36嵌入式系統(tǒng)原理與實(shí)驗(yàn) 寫操作1. 不使用Bit-Band: LD
25、R R0, =0 x20000000 ; Setup address LDR R1, R0 ; Read ORR.W R1, #0 x4 ; Modify bit STR R1, R0 ; Write back result2. 使用Bit-Band: LDR R0, =0 x22000008 ; Setup address MOV R1, #1 ; Setup data STR R1, R0 ; Write37嵌入式系統(tǒng)原理與實(shí)驗(yàn) 讀操作:1. 使用 Bit-Band: LDR R0, =0 x20000000 ; Setup address LDR R1, R0 ; Read UBFX.W
26、 R1, R1, #2, #1 ; Extract bit22. 使用 Bit-Band: LDR R0, =0 x22000008 ; Setup address LDR R1, R0 ; Read38嵌入式系統(tǒng)原理與實(shí)驗(yàn) SRAM SRAM 區(qū)域的區(qū)域的Bit-Band Bit-Band 地址重映射地址重映射外設(shè)存儲(chǔ)區(qū)外設(shè)存儲(chǔ)區(qū) Bit-Band Bit-Band 地址重映射地址重映射 Bit-Band 區(qū)域 別名等效0 x20000000 bit00 x22000000 bit00 x20000000 bit10 x22000004 bit00 x20000000 bit20 x2200
27、0008 bit00 x20000000 bit310 x2200007C bit00 x20000004 bit00 x22000080 bit00 x20000004 bit310 x220000FC bit00 x200FFFFC bit310 x23FFFFFC bit0Bit-Band 區(qū)域 別名等效0 x40000000 bit00 x42000000 bit00 x40000000 bit10 x42000004 bit00 x40000000 bit20 x42000008 bit00 x40000000 bit310 x4200007C bit00 x40000004 bit
28、00 x42000080 bit00 x40000004 bit310 x420000FC bit00 x400FFFFC bit310 x43FFFFFC bit039嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.4.6 6.4.6 未對齊傳遞未對齊傳遞Cortex-M3/M4 支持在單一的訪問中使用非(地址)對齊的傳送,數(shù)據(jù)存儲(chǔ)器的訪問無需對齊。在Cortex-M3/M4 中,非對齊的數(shù)據(jù)傳送只發(fā)生在常規(guī)的數(shù)據(jù)傳送指令中,如LDR/LDRH/LDRSH。其它指令則不支持,包括: 多個(gè)數(shù)據(jù)的加載/存儲(chǔ)(LDM/STM) 堆棧操作 PUSH/POP 互斥訪問(LDREX/STREX)。如果非對齊會(huì)導(dǎo)致一個(gè)用法fa
29、ult 位帶操作。因?yàn)橹挥?LSB 有效,非對齊的訪問會(huì)導(dǎo)致不可預(yù)料的結(jié)果。Cortex-M3/M4把非對齊的訪問轉(zhuǎn)換成若干個(gè)對齊的訪問,這種轉(zhuǎn)換動(dòng)作由處理器總線單元來完成。通過若干個(gè)對齊的訪問來實(shí)現(xiàn)一個(gè)非對齊的訪問,會(huì)需要更多的總線周期。40嵌入式系統(tǒng)原理與實(shí)驗(yàn) 41字長, 地址不是4的倍數(shù)Byte 3Byte 2Byte 1Byte 0Address N+431:24Address N23:1615:87:0Byte 3Byte 2Byte 1Byte 0Address N+431:2423:1615:8Address N7:0Byte 3Byte 2Byte 1Byte 0Address
30、 N+431:2423:16Address N15:87:0嵌入式系統(tǒng)原理與實(shí)驗(yàn) 半字長, 其地址不是2的倍數(shù)42Byte 3Byte 2Byte 1Byte 0Address N+4Address N15:87:0Byte 3Byte 2Byte 1Byte 0Address N+415:8Address N7:0嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.4.7 6.4.7 互斥訪問互斥訪問 互斥體在多任務(wù)環(huán)境中使用,也在中斷服務(wù)例程和主程序之間使用,用于給任務(wù)申請共享資源(如一塊共享內(nèi)存)。 互斥:在某個(gè)(排他型)共享資源被一個(gè)任務(wù)擁有后,直到這個(gè)任務(wù)釋放它之前,其它任務(wù)是不得再訪問它的。 為建立一個(gè)互斥
31、體,需定義一個(gè)標(biāo)志變量,指示其對應(yīng)的共享資源是否已經(jīng)被某任務(wù)擁有。當(dāng)另一個(gè)任務(wù)欲取得此共享資源時(shí),它要先檢查這個(gè)互斥體,以獲知共享資源是否被使用。 在互斥訪問操作下,允許互斥體所在的地址被其它總線 訪問,也允許被其它運(yùn)行在本機(jī)上的任務(wù)訪問,但是CM3 能夠“駁回”有可能導(dǎo)致競態(tài)條件的互斥寫操作。 互斥訪問分為加載和存儲(chǔ), 相應(yīng)的指令對包括:LDREX/STREX、LDREXH/STREXH、LDREXB/STREXB,分別對應(yīng)于字/半字/字節(jié)。43嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.4.86.4.8 端模式Cortex-M3/M4 支持小端模式和大端模式。44Address, SizeBits 31-2
32、4Bits 23-16Bits 15-8Bits 7-00 x1000, 字Data7:0Data15:8Data23:16Data31:240 x1000, 半字Data7:0Data15:80 x1002, 半字Data7:0Data15:80 x1000, 字節(jié)Data7:00 x1001, 字節(jié)Data7:00 x1002, 字節(jié)Data7:00 x1003, 字節(jié)Data7:0Cortex-M3/M4 Cortex-M3/M4 ( (字節(jié)不變字節(jié)不變大端大端): ): 存儲(chǔ)器視圖存儲(chǔ)器視圖嵌入式系統(tǒng)原理與實(shí)驗(yàn) 注意點(diǎn): 在復(fù)位時(shí)確定使用哪種端模式的,且運(yùn)行時(shí)不得更改。 指令預(yù)取永遠(yuǎn)使
33、用小端模式,在配置控制存儲(chǔ)空間的訪問也永遠(yuǎn)使用小端模式。 外部私有總線地址區(qū)0 xE0000000 至0 xE00FFFFF 也永遠(yuǎn)使用小端模式。 可以使用REV/REVH指令來完成端模式的轉(zhuǎn)換。45嵌入式系統(tǒng)原理與實(shí)驗(yàn) 6.5.1 6.5.1 匯編語言基礎(chǔ)匯編語言基礎(chǔ) 匯編指令的最典型書寫模式如下所示:標(biāo)號 ;可選,它必須頂格寫。用于匯編器計(jì)算程序轉(zhuǎn)移地址。操作碼 操作數(shù)1, 操作數(shù)2, ;前面須有至少一個(gè)空白符MOV R0, #0 x12 ; R0=0 x12,立即數(shù)必須以“#”開頭MOV R1, #A ; R1=字母 A 的ASCII 碼 可以使用EQU 指示字來定義常數(shù),然后在代碼中使
34、用它們NVIC_IRQ_SETEN0 EQU 0 xE000E100 ;常數(shù)定義必須頂格寫NVIC_IRQ0_ENABLE EQU 0 x1 LDR R0, =NVIC_IRQ_SETEN0 ;在這里的LDR 是個(gè)偽指令,它會(huì)被匯編器 ;轉(zhuǎn)換成一條“相對PC 的加載指令” MOV R1, #NVIC_IRQ0_ENABLE ; 把立即數(shù)傳送到指令中 STR R1, R0 ; *R0=R1,執(zhí)行此指令后IRQ #0 被使能466.56.5指令集指令集嵌入式系統(tǒng)原理與實(shí)驗(yàn) DCI 編譯器指示字:對匯編器不能識別的特殊指令助記符,可查出該指令的確切二進(jìn)制機(jī)器碼,然后使用DCI 。例:BKPT 指令的機(jī)器碼是0 xBE00,即可以按如下格式書寫 DCI 0 xBE00 ; 斷點(diǎn)(BKPT),這是16 位指令。 DCI 也必須空格寫 DCB /DCD:定義一串字節(jié)常數(shù)/ 32 位整數(shù)。它們最常被用來在代碼中書寫表格。例如: LDR R3, =MY_NUMBER ; R3= MY_NUMBER LDR R4, R3 ; R4= *R3 LDR R0, =HELLO_TE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CCBD 18-2022品牌評價(jià)中餐菜系
- T/CAQI 27-2017中小學(xué)教室空氣質(zhì)量規(guī)范
- T/CAQI 213-2021飲用水處理裝置除病毒功能技術(shù)規(guī)范
- 蘇寧java開發(fā)工程師面試題及答案
- 亞信java面試題及答案2025年
- 繪畫光影考試題及答案
- 廣東選調(diào)面試題及答案
- 公益崗招聘面試題及答案
- 基礎(chǔ)考試題庫及答案
- 機(jī)器檢驗(yàn)面試題及答案
- 人教版(2024)小學(xué)數(shù)學(xué)一年級下冊《歡樂購物街》教學(xué)設(shè)計(jì)及反思
- 2025年生豬屠宰獸醫(yī)衛(wèi)生檢疫人員考試題(附答案)
- 電子商務(wù)教師資格證提升策略試題及答案
- 杭州市蕭山區(qū)部分校教科版六年級下冊期末考試科學(xué)試卷(解析版)
- 土地測量服務(wù)投標(biāo)方案(技術(shù)方案)
- 2025年醫(yī)院會(huì)計(jì)筆試試題及答案
- 服務(wù)流程操作說明手冊
- 城市規(guī)劃設(shè)計(jì)合作框架協(xié)議
- 公司增資擴(kuò)股方案設(shè)計(jì)報(bào)告
- 短視頻運(yùn)營實(shí)習(xí)計(jì)劃
- 考前最后一課
評論
0/150
提交評論