版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第2章章 Cortex-M3微處理器微處理器第2章 Cortex-M3微處理器22.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介2.2 Cortex-M3微處理器內(nèi)核體系結(jié)構(gòu)微處理器內(nèi)核體系結(jié)構(gòu)*2.3 寄存器組寄存器組*2.4 操作模式和特權(quán)級(jí)操作模式和特權(quán)級(jí)2.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器2.6 存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元2.7 總線接口總線接口2.8 調(diào)試系統(tǒng)調(diào)試系統(tǒng)2.9 指令集指令集第2章 Cortex-M3微處理器2.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介有關(guān)有關(guān)ARM:ARM在在1990年成立,當(dāng)初
2、的名字是年成立,當(dāng)初的名字是“Advanced RISC Machines Ltd.,”,當(dāng)時(shí)它是蘋果電腦、,當(dāng)時(shí)它是蘋果電腦、Acorn電腦公司、以及電腦公司、以及VLSI技術(shù)(技術(shù)(公司)三家公司的合資。公司)三家公司的合資。1991年,年,ARM推出了推出了ARM6處理器家族。處理器家族。現(xiàn)如今,現(xiàn)如今,ARM芯片的出貨量每年都比上一年多芯片的出貨量每年都比上一年多20億片以上。億片以上。ARM 從不制造和銷售具體的處理器芯片,而是把處理器的設(shè)計(jì)授從不制造和銷售具體的處理器芯片,而是把處理器的設(shè)計(jì)授權(quán)給相關(guān)的商務(wù)合作伙伴,讓他們?nèi)ジ鶕?jù)自己的強(qiáng)項(xiàng)設(shè)計(jì)具體權(quán)給相關(guān)的商務(wù)合作伙伴,讓他們?nèi)ジ鶕?jù)
3、自己的強(qiáng)項(xiàng)設(shè)計(jì)具體的芯片,就是所謂的的芯片,就是所謂的“知識(shí)產(chǎn)權(quán)授權(quán)知識(shí)產(chǎn)權(quán)授權(quán)”。3第2章 Cortex-M3微處理器4ARM架構(gòu)版本及處理器命名法架構(gòu)版本及處理器命名法2.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介圖2.1 ARM處理器架構(gòu)進(jìn)化史第2章 Cortex-M3微處理器處理器名字 架構(gòu)版本號(hào) 存儲(chǔ)器管理特性 其它特性 ARM7TDMI v4T ARM7TDMI-S v4T ARM7EJ-S v5E DSP,Jazelle ARM920T v4T MMU ARM922T v4T MMU ARM926EJ-S v5E MMU DSP,Jazelle ARM946E-S v5E M
4、PU DSP ARM966E-S v5E DSP ARM968E-S v5E DMA,DSP ARM966HS v5E MPU(可選) DSP ARM1020E v5E MMU DSP ARM1022E v5E MMU DSP ARM1026EJ-S v5E MMU 或 MPU DSP, Jazelle ARM1136J(F)-S v6 MMU DSP, Jazelle ARM1176JZ(F)-S v6 MMU+TrustZone DSP, Jazelle ARM11 MPCore v6 MMU+多處理器緩存支持 DSP ARM1156T2(F)-S v6 MPU DSP Cortex-M3
5、 v7-M MPU(可選) NVIC Cortex-R4 v7-R MPU DSP Cortex-R4F v7-R MPU DSP+浮點(diǎn)運(yùn)算 Cortex-A8 v7-A MMU+TrustZone DSP, Jazelle 52.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介ARM架構(gòu)版本及處理器命名法架構(gòu)版本及處理器命名法第2章 Cortex-M3微處理器ARMv7架構(gòu):架構(gòu):ARMv7的三個(gè)款式都以的三個(gè)款式都以Cortex作為主名。作為主名。Cortex-A(ARMv7-A):需要運(yùn)行復(fù)雜應(yīng)用程序的):需要運(yùn)行復(fù)雜應(yīng)用程序的“應(yīng)用處應(yīng)用處理器理器” 。支持大型嵌入式操作系統(tǒng),比如。支持
6、大型嵌入式操作系統(tǒng),比如Symbian(諾基(諾基亞智能手機(jī)用),亞智能手機(jī)用),Linux,以及微軟的,以及微軟的Windows CE和智能和智能手機(jī)操作系統(tǒng)手機(jī)操作系統(tǒng)Windows Mobile。Cortex-R(ARMv7-R):硬實(shí)時(shí)且高性能的處理器。面向高):硬實(shí)時(shí)且高性能的處理器。面向高端實(shí)時(shí)市場(chǎng)。像高檔轎車的組件,大型發(fā)電機(jī)控制器,機(jī)端實(shí)時(shí)市場(chǎng)。像高檔轎車的組件,大型發(fā)電機(jī)控制器,機(jī)器手臂控制器等,要求可靠性高,對(duì)事件的反應(yīng)也要極其器手臂控制器等,要求可靠性高,對(duì)事件的反應(yīng)也要極其敏捷。敏捷。 Cortex-M(ARMv7-M):面向單片機(jī)的應(yīng)用而量身定制。面):面向單片機(jī)的應(yīng)
7、用而量身定制。面向?qū)崟r(shí)控制系統(tǒng),具有低成本、低功耗、極速中斷反應(yīng)以向?qū)崟r(shí)控制系統(tǒng),具有低成本、低功耗、極速中斷反應(yīng)以及高處理效率。及高處理效率。 62.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介第2章 Cortex-M3微處理器Cortex-M3特點(diǎn)特點(diǎn)性能強(qiáng)勁:在相同的主頻下能做處理更多的任務(wù)。性能強(qiáng)勁:在相同的主頻下能做處理更多的任務(wù)。 功耗低:延長(zhǎng)了電池的壽命。功耗低:延長(zhǎng)了電池的壽命。 實(shí)時(shí)性好:能極速地響應(yīng)中斷,而且響應(yīng)中斷所需的周期數(shù)是實(shí)時(shí)性好:能極速地響應(yīng)中斷,而且響應(yīng)中斷所需的周期數(shù)是確定的。確定的。 使用方便:更簡(jiǎn)單的編程模型和更透徹的調(diào)試系統(tǒng)。使用方便:更簡(jiǎn)單的編程模型
8、和更透徹的調(diào)試系統(tǒng)。 低成本的整體解決方案:低端的低成本的整體解決方案:低端的Cortex-M3單片機(jī)甚至還賣不單片機(jī)甚至還賣不到到1美元。美元。72.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介第2章 Cortex-M3微處理器Cortex-M3特點(diǎn)特點(diǎn)Cortex-M3處理器內(nèi)核是單片機(jī)的中央處理單元(處理器內(nèi)核是單片機(jī)的中央處理單元(CPU)。)。芯片制造商得到芯片制造商得到CM3處理器內(nèi)核的使用授權(quán)后,可以把處理器內(nèi)核的使用授權(quán)后,可以把CM3內(nèi)核用在自己的硅片設(shè)計(jì)中,添加存儲(chǔ)器,外設(shè),內(nèi)核用在自己的硅片設(shè)計(jì)中,添加存儲(chǔ)器,外設(shè),I/O以及以及其它功能塊,設(shè)計(jì)出不同的單片機(jī)。其它功能
9、塊,設(shè)計(jì)出不同的單片機(jī)。82.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介第2章 Cortex-M3微處理器指令集指令集ARM處理器一直支持兩種形式上相對(duì)獨(dú)立的指令集。處理器一直支持兩種形式上相對(duì)獨(dú)立的指令集。 32位的位的ARM指令集指令集對(duì)應(yīng)處理器狀態(tài):對(duì)應(yīng)處理器狀態(tài):ARM狀態(tài)狀態(tài) 16位的位的Thumb指令集指令集對(duì)應(yīng)處理器狀態(tài):對(duì)應(yīng)處理器狀態(tài):Thumb狀態(tài)狀態(tài) 92.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介指令集演進(jìn)圖第2章 Cortex-M3微處理器指令集指令集2003年:年:Thumb-2指令集出現(xiàn),它是指令集出現(xiàn),它是Thumb的超集,它支持的超集,它支持16位和位和
10、32位指令。使得同樣工作需要的指令周期數(shù)也明顯下降位指令。使得同樣工作需要的指令周期數(shù)也明顯下降。Cortex-M3只支持只支持Thumb-2指令集。指令集。用用ARM匯編語言程序不能直接移植匯編語言程序不能直接移植到到CM3上來。上來。用用Thumb指令寫的匯編程序可以。指令寫的匯編程序可以。 102.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介Thumb-2指令集與Thumb指令集的關(guān)系第2章 Cortex-M3微處理器Cortex-M3的應(yīng)用場(chǎng)合的應(yīng)用場(chǎng)合低成本單片機(jī):用于做玩具和小電器的單片機(jī),都能使用低成本單片機(jī):用于做玩具和小電器的單片機(jī),都能使用CM3作為內(nèi)核。作為內(nèi)核。汽車電
11、子:汽車電子:CM3同時(shí)擁有非常高的性能和極低的中斷延遲,實(shí)同時(shí)擁有非常高的性能和極低的中斷延遲,實(shí)現(xiàn)實(shí)時(shí)應(yīng)用?,F(xiàn)實(shí)時(shí)應(yīng)用。數(shù)據(jù)通信:適合于很多數(shù)據(jù)通信應(yīng)用,尤其是無線數(shù)傳和數(shù)據(jù)通信:適合于很多數(shù)據(jù)通信應(yīng)用,尤其是無線數(shù)傳和Ad-Hoc網(wǎng)絡(luò),如網(wǎng)絡(luò),如ZigBee和藍(lán)牙等。和藍(lán)牙等。 112.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介第2章 Cortex-M3微處理器Cortex-M3的應(yīng)用場(chǎng)合的應(yīng)用場(chǎng)合工業(yè)控制:工業(yè)控制:CM3處理器的中斷處理能力,低中斷延遲,強(qiáng)化的處理器的中斷處理能力,低中斷延遲,強(qiáng)化的故障處理能力。故障處理能力。消費(fèi)類產(chǎn)品:高性能和消費(fèi)類產(chǎn)品:高性能和MPU機(jī)制可是
12、足以讓復(fù)雜的軟件跑起來機(jī)制可是足以讓復(fù)雜的軟件跑起來的,同時(shí)提供的存儲(chǔ)器保護(hù)。的,同時(shí)提供的存儲(chǔ)器保護(hù)。 目前在市場(chǎng)上已經(jīng)有了好多基于目前在市場(chǎng)上已經(jīng)有了好多基于Cortex-M3內(nèi)核的處理器產(chǎn)品,內(nèi)核的處理器產(chǎn)品,最便宜的還不到最便宜的還不到1美元,讓美元,讓ARM 終于比很多終于比很多8位機(jī)還便宜了。位機(jī)還便宜了。122.1 Cortex-M3微處理器簡(jiǎn)介微處理器簡(jiǎn)介第2章 Cortex-M3微處理器Cortex-M3是一個(gè)是一個(gè)32位處理器內(nèi)核。內(nèi)部的數(shù)據(jù)路徑是位處理器內(nèi)核。內(nèi)部的數(shù)據(jù)路徑是32位的位的,寄存器是,寄存器是32位的,存儲(chǔ)器接口也是位的,存儲(chǔ)器接口也是 32 位的。位的。C
13、M3 采用了哈佛結(jié)構(gòu),擁有獨(dú)立的指令總線和數(shù)據(jù)總線。采用了哈佛結(jié)構(gòu),擁有獨(dú)立的指令總線和數(shù)據(jù)總線。指令總線和數(shù)據(jù)總線共享同一個(gè)存儲(chǔ)器空間(一個(gè)統(tǒng)一的存指令總線和數(shù)據(jù)總線共享同一個(gè)存儲(chǔ)器空間(一個(gè)統(tǒng)一的存儲(chǔ)器系統(tǒng))。儲(chǔ)器系統(tǒng))。CM3提供一個(gè)可選的提供一個(gè)可選的MPU,而且在需要的情況下也可以使用,而且在需要的情況下也可以使用外部的外部的cache。CM3內(nèi)部包含許多調(diào)試組件,在硬件水平上支持調(diào)試操作。內(nèi)部包含許多調(diào)試組件,在硬件水平上支持調(diào)試操作。132.2 Cortex-M3微處理器內(nèi)核體系結(jié)構(gòu)微處理器內(nèi)核體系結(jié)構(gòu)第2章 Cortex-M3微處理器142.2 Cortex-M3微處理器內(nèi)核體
14、系結(jié)構(gòu)微處理器內(nèi)核體系結(jié)構(gòu) Cortex-M3的一個(gè)簡(jiǎn)化視圖的一個(gè)簡(jiǎn)化視圖 第2章 Cortex-M3微處理器15 Cortex-M3處理器系統(tǒng)方框圖 第2章 Cortex-M3微處理器16第2章 Cortex-M3微處理器Cortex-M3內(nèi)核內(nèi)核 中央處理器核心中央處理器核心: 取指單元、譯碼單元、寄存器組、取指單元、譯碼單元、寄存器組、ALU; 嵌套向量中斷控制器(嵌套向量中斷控制器(NVIC);); 系統(tǒng)時(shí)鐘(系統(tǒng)時(shí)鐘(SysTick)。)??偩€互聯(lián)網(wǎng)絡(luò)(總線矩陣)總線互聯(lián)網(wǎng)絡(luò)(總線矩陣)存儲(chǔ)器保護(hù)單元(存儲(chǔ)器保護(hù)單元(MPU)*跟蹤系統(tǒng)與調(diào)試接口跟蹤系統(tǒng)與調(diào)試接口172.2 Cort
15、ex-M3微處理器內(nèi)核體系結(jié)構(gòu)微處理器內(nèi)核體系結(jié)構(gòu)存儲(chǔ)程序和程序控制n存儲(chǔ)程序把指令以代碼的形式事先輸入到計(jì)算機(jī)的主存儲(chǔ)器中,這些指令按一定的規(guī)則組成程序n程序控制當(dāng)計(jì)算機(jī)啟動(dòng)后,程序就會(huì)控制計(jì)算機(jī)按規(guī)定的順序逐條執(zhí)行指令,自動(dòng)完成預(yù)定的信息處理任務(wù)n存儲(chǔ)單元地址為每個(gè)存儲(chǔ)單元編排的一個(gè)唯一的編號(hào)現(xiàn)代計(jì)算機(jī)中,主存儲(chǔ)器是字節(jié)可尋址的:主存儲(chǔ)器的每個(gè)存儲(chǔ)單元具有一個(gè)地址,保存一個(gè)字節(jié)的信息地址編號(hào)地址編號(hào)取指譯碼執(zhí)行周期n取指(Fetch)處理器從主存儲(chǔ)器讀取指令n譯碼(Decode)翻譯指令代碼的功能n執(zhí)行(Execute)執(zhí)行指令完成指令所規(guī)定的操作程序計(jì)數(shù)器程序計(jì)數(shù)器PC確定下一條指令的主
16、存地址確定下一條指令的主存地址PC具有自動(dòng)增量的能力,實(shí)現(xiàn)程序的順序執(zhí)行具有自動(dòng)增量的能力,實(shí)現(xiàn)程序的順序執(zhí)行轉(zhuǎn)移指令改變轉(zhuǎn)移指令改變PC的數(shù)值,實(shí)現(xiàn)分支、循環(huán)、調(diào)用的數(shù)值,實(shí)現(xiàn)分支、循環(huán)、調(diào)用第2章 Cortex-M3微處理器三級(jí)流水三級(jí)流水20第2章 Cortex-M3微處理器212.3 寄存器組寄存器組 寄存器(寄存器(Register)處理器內(nèi)部需要高速存儲(chǔ)單元,用于暫時(shí)存放程序處理器內(nèi)部需要高速存儲(chǔ)單元,用于暫時(shí)存放程序執(zhí)行過程中的代碼和數(shù)據(jù)執(zhí)行過程中的代碼和數(shù)據(jù)透明寄存器透明寄存器n對(duì)應(yīng)用人員不可見、不能直接控制的寄存器對(duì)應(yīng)用人員不可見、不能直接控制的寄存器可編程(可編程(Prog
17、rammable)寄存器)寄存器n具有引用名稱、供編程使用具有引用名稱、供編程使用n通用寄存器通用寄存器數(shù)量較多、使用頻度較高,具有多種用途數(shù)量較多、使用頻度較高,具有多種用途n專用寄存器專用寄存器只用于特定目的只用于特定目的D觸發(fā)器觸發(fā)器23第2章 Cortex-M3微處理器1. 通用寄存器通用寄存器R0-R12都是都是32位通用寄存器,用于數(shù)據(jù)操作。位通用寄存器,用于數(shù)據(jù)操作。R0-R7也被稱為低組寄存器。所有指令都能訪問它們。它們的也被稱為低組寄存器。所有指令都能訪問它們。它們的字長(zhǎng)全是字長(zhǎng)全是 32位,復(fù)位后的初始值是不可預(yù)料的。位,復(fù)位后的初始值是不可預(yù)料的。 R8-R12 也被稱為
18、高組寄存器。這是因?yàn)橹挥泻苌俚囊脖环Q為高組寄存器。這是因?yàn)橹挥泻苌俚?16 位位 Thumb 指令能訪問它們,指令能訪問它們,32 位的位的 thumb-2指令則不受限制。指令則不受限制。它們也是它們也是32位字長(zhǎng),且復(fù)位后的初始值是不可預(yù)料的。位字長(zhǎng),且復(fù)位后的初始值是不可預(yù)料的。242.3 寄存器組寄存器組第2章 Cortex-M3微處理器2. 堆棧指針堆棧指針R13(SP) Cortex-M3擁有兩個(gè)堆棧指針,任一時(shí)刻只能使用其中的一個(gè)。擁有兩個(gè)堆棧指針,任一時(shí)刻只能使用其中的一個(gè)。 主堆棧指針(主堆棧指針(MSP):): 復(fù)位后缺省使用的堆棧指針,用于操作系統(tǒng)內(nèi)核以及異常處理復(fù)位后缺省
19、使用的堆棧指針,用于操作系統(tǒng)內(nèi)核以及異常處理例程(包括中斷服務(wù)例程)例程(包括中斷服務(wù)例程) 進(jìn)程堆棧指針(進(jìn)程堆棧指針(PSP):): 由用戶的應(yīng)用程序代碼使用。(不處于異常服用例程中時(shí))由用戶的應(yīng)用程序代碼使用。(不處于異常服用例程中時(shí))簡(jiǎn)單的應(yīng)用程序只使用簡(jiǎn)單的應(yīng)用程序只使用MSP就夠了。就夠了。 252.3 寄存器組寄存器組第2章 Cortex-M3微處理器堆棧的說明:堆棧是一種存儲(chǔ)器的使用模型。它由一塊連續(xù)的內(nèi)堆棧的說明:堆棧是一種存儲(chǔ)器的使用模型。它由一塊連續(xù)的內(nèi)存和一個(gè)棧頂指針組成,用于實(shí)現(xiàn)存和一個(gè)棧頂指針組成,用于實(shí)現(xiàn)“后進(jìn)先出后進(jìn)先出”的緩沖區(qū)。其最的緩沖區(qū)。其最典型的應(yīng)用,
20、就是在數(shù)據(jù)處理前先保存寄存器的值,再在處理任典型的應(yīng)用,就是在數(shù)據(jù)處理前先保存寄存器的值,再在處理任務(wù)完成后從中恢復(fù)先前保護(hù)的這些值。在執(zhí)行入棧(務(wù)完成后從中恢復(fù)先前保護(hù)的這些值。在執(zhí)行入棧(PUSH )和)和出棧(出棧(POP)操作時(shí),那個(gè)通常被稱為)操作時(shí),那個(gè)通常被稱為SP的地址寄存器,會(huì)由硬的地址寄存器,會(huì)由硬件自動(dòng)調(diào)整它的值,以避免后續(xù)操作破壞先前的數(shù)據(jù)。件自動(dòng)調(diào)整它的值,以避免后續(xù)操作破壞先前的數(shù)據(jù)。26堆棧操作堆棧操作“先進(jìn)后出先進(jìn)后出FILOFILO”存取的存儲(chǔ)區(qū)域,只有一存取的存儲(chǔ)區(qū)域,只有一個(gè)數(shù)據(jù)出入口,即當(dāng)前棧頂(不斷變化)個(gè)數(shù)據(jù)出入口,即當(dāng)前棧頂(不斷變化)兩種基本操作
21、兩種基本操作數(shù)據(jù)壓進(jìn)堆棧數(shù)據(jù)壓進(jìn)堆棧PUSHPUSH數(shù)據(jù)彈出堆棧操作數(shù)據(jù)彈出堆棧操作POPPOPSPSP指定棧頂指定棧頂數(shù)據(jù)進(jìn)入堆棧,數(shù)據(jù)進(jìn)入堆棧,SPSP逐漸減小逐漸減小數(shù)據(jù)依次彈出、數(shù)據(jù)依次彈出、SPSP逐漸增大逐漸增大Word 1Word 2Word 3Word 4Word 5StackPUSHPOP第2章 Cortex-M3微處理器Cortex-M3 使用的是使用的是“向下生長(zhǎng)的滿棧向下生長(zhǎng)的滿棧”模型。堆棧指針模型。堆棧指針 SP 指向最后一個(gè)被壓入堆棧的指向最后一個(gè)被壓入堆棧的 32 位數(shù)值。在下一次壓棧時(shí)位數(shù)值。在下一次壓棧時(shí),SP 先自減先自減 4,再存入新的數(shù)值。,再存入新的
22、數(shù)值。 282.3 寄存器組寄存器組 圖 Cortex-M3堆棧的PUSH實(shí)現(xiàn)方式 圖 Cortex-M3 堆棧的 POP 實(shí)現(xiàn)方式 第2章 Cortex-M3微處理器由于由于R13的最低兩位被硬線連接到的最低兩位被硬線連接到 0,并且總是讀出并且總是讀出 0,因此,因此堆棧的堆棧的PUSH和和POP操作永遠(yuǎn)都是操作永遠(yuǎn)都是4字節(jié)對(duì)齊的。也就是說字節(jié)對(duì)齊的。也就是說他們的地址必須是他們的地址必須是0 x4, 0 x8, 0 xc,。29第2章 Cortex-M3微處理器3. 連接寄存器(連接寄存器(LR)R14:當(dāng)調(diào)用一個(gè)子程序時(shí),用當(dāng)調(diào)用一個(gè)子程序時(shí),用R14存儲(chǔ)返回地址存儲(chǔ)返回地址 ,目的
23、是為了減少,目的是為了減少訪問內(nèi)存的次數(shù)。訪問內(nèi)存的次數(shù)。302.3 寄存器組寄存器組子程序子程序:與主程序分:與主程序分開的、完成特定功能開的、完成特定功能的一段程序的一段程序當(dāng)當(dāng)主程序主程序(調(diào)用程序調(diào)用程序)執(zhí)行調(diào)用指令)執(zhí)行調(diào)用指令CALLCALL調(diào)用子程序調(diào)用子程序子程序(子程序(被調(diào)用程序被調(diào)用程序)執(zhí)行返回指令)執(zhí)行返回指令RETRET返回主程序返回主程序CALL label主程序主程序RET子程序子程序回到回到CALL指令指令后的指令處后的指令處第2章 Cortex-M3微處理器R14為程序連接寄存器為程序連接寄存器LR:在執(zhí)行:在執(zhí)行BL時(shí),時(shí),PC的返回地址自動(dòng)保的返回地址
24、自動(dòng)保存進(jìn)存進(jìn)LR。LR在子程序調(diào)用時(shí)保存子程序的返回地址。在子程序調(diào)用時(shí)保存子程序的返回地址。 main ;主程序主程序 BL function1 ; 使用使用“分支并連接分支并連接”指令調(diào)用指令調(diào)用function1 Function1 ; function1的代碼的代碼 BX LR ;函數(shù)返回,函數(shù)的最后一行函數(shù)返回,函數(shù)的最后一行LR也用于異常返回,但是在這里保存的是返回后的狀態(tài),不是也用于異常返回,但是在這里保存的是返回后的狀態(tài),不是返回的地址,異常返回是通過硬件自動(dòng)出棧彈出之前壓入的返回的地址,異常返回是通過硬件自動(dòng)出棧彈出之前壓入的PC完成的。完成的。 32第2章 Cortex-
25、M3微處理器4 .程序計(jì)數(shù)寄存器(程序計(jì)數(shù)寄存器(PC)R15:指向當(dāng)前的程序地址指向當(dāng)前的程序地址,具有自加功能具有自加功能,是程序運(yùn)行的基礎(chǔ)。如果是程序運(yùn)行的基礎(chǔ)。如果修改它的值,就能改變程序的執(zhí)行。修改它的值,就能改變程序的執(zhí)行。因?yàn)橐驗(yàn)?CM3 內(nèi)部使用了指令流水線,讀內(nèi)部使用了指令流水線,讀 PC 時(shí)返回的值是當(dāng)前時(shí)返回的值是當(dāng)前指令的地址指令的地址+4。比如說:。比如說: 0 x1000: MOV R0, PC ; R0 = 0 x1004 332.3 寄存器組寄存器組第2章 Cortex-M3微處理器4 .程序計(jì)數(shù)寄存器(程序計(jì)數(shù)寄存器(PC)R15:Cortex-M3中的指令是
26、隸屬于中的指令是隸屬于Thumb2指令集,且至少是半字對(duì)齊指令集,且至少是半字對(duì)齊的,所以的,所以PC的的LSB總是讀回總是讀回0。指令始終與字或半字邊界對(duì)齊。指令始終與字或半字邊界對(duì)齊。在編寫分支指令時(shí),無論是直接寫在編寫分支指令時(shí),無論是直接寫PC的值還是使用分支指令,都的值還是使用分支指令,都必須保證加載到必須保證加載到PC的數(shù)值是奇數(shù)(即的數(shù)值是奇數(shù)(即LSB=1),用以表明當(dāng)前指),用以表明當(dāng)前指令在令在Thumb-2狀態(tài)下執(zhí)行。狀態(tài)下執(zhí)行。342.3 寄存器組寄存器組第2章 Cortex-M3微處理器5 .特殊功能寄存器:特殊功能寄存器: 程序狀態(tài)字寄存器組(程序狀態(tài)字寄存器組(x
27、PSR) 中斷屏蔽寄存器組中斷屏蔽寄存器組(PRIMASK, FAULTMASK, BASEPRI) 控制寄存器(控制寄存器(CONTROL) 352.3 寄存器組寄存器組第2章 Cortex-M3微處理器5 .特殊功能寄存器:特殊功能寄存器: 362.3 寄存器組寄存器組寄存器 功能 xPSR 記錄ALU標(biāo)志(0標(biāo)志,進(jìn)位標(biāo)志,負(fù)數(shù)標(biāo)志,溢出標(biāo)志),執(zhí)行狀態(tài),以及當(dāng)前正服務(wù)的中斷號(hào) PRIMASK 除能所有的中斷(不可屏蔽中斷(NMI)除外) FAULTMASK 除能所有的faultNMI依然不受影響,而且被除能的faults會(huì)“上訪” 。 BASEPRI 除能所有優(yōu)先級(jí)不高于某個(gè)具體數(shù)值的
28、中斷。 CONTROL 定義特權(quán)狀態(tài),并且決定使用哪一個(gè)堆棧指針 第2章 Cortex-M3微處理器5 .特殊功能寄存器特殊功能寄存器程序狀態(tài)寄存器程序狀態(tài)寄存器程序狀態(tài)寄存器在其內(nèi)部又被分為三個(gè)子狀態(tài)寄存器:程序狀態(tài)寄存器在其內(nèi)部又被分為三個(gè)子狀態(tài)寄存器: 應(yīng)用程序應(yīng)用程序PSR(APSR) 中斷號(hào)中斷號(hào)PSR(IPSR) 執(zhí)行執(zhí)行PSR(EPSR) 372.3 寄存器組寄存器組第2章 Cortex-M3微處理器5 .特殊功能寄存器特殊功能寄存器程序狀態(tài)寄存器程序狀態(tài)寄存器應(yīng)用程序應(yīng)用程序PSR(APSR) 中斷號(hào)中斷號(hào)PSR(IPSR) 執(zhí)行執(zhí)行PSR(EPSR) 382.3 寄存器組寄存
29、器組第2章 Cortex-M3微處理器5 .特殊功能寄存器特殊功能寄存器程序狀態(tài)寄存器程序狀態(tài)寄存器392.3 寄存器組寄存器組進(jìn)位標(biāo)志CF(Carry Flag)當(dāng)加減運(yùn)算結(jié)果的最高有效位當(dāng)加減運(yùn)算結(jié)果的最高有效位有進(jìn)位有進(jìn)位(加法)或(加法)或借借位位(減法)時(shí),進(jìn)位標(biāo)志置(減法)時(shí),進(jìn)位標(biāo)志置1,即,即CF1;否則;否則CF0針對(duì)無符號(hào)整數(shù),判斷加減結(jié)果是否超出表達(dá)范圍針對(duì)無符號(hào)整數(shù),判斷加減結(jié)果是否超出表達(dá)范圍nN個(gè)二進(jìn)制位表達(dá)無符號(hào)整數(shù)的范圍:02N-1n8位:0255n16位:065535n32位:02321進(jìn)位標(biāo)志CF:舉例8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:00111010011
30、1110010110110十六進(jìn)制表達(dá):十六進(jìn)制表達(dá):3A7CB6轉(zhuǎn)換成十進(jìn)制數(shù):轉(zhuǎn)換成十進(jìn)制數(shù):58124182沒有產(chǎn)生進(jìn)位:沒有產(chǎn)生進(jìn)位:CF08 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:10101010101010100111110001111100 1 10010011000100110十六進(jìn)制表達(dá):十六進(jìn)制表達(dá):AAAA7C7C 1 12626轉(zhuǎn)換成十進(jìn)制數(shù):轉(zhuǎn)換成十進(jìn)制數(shù):1701701241242942942562563838產(chǎn)生進(jìn)位:產(chǎn)生進(jìn)位:CFCF1 1溢出標(biāo)志OF(Overflow Flag)有符號(hào)數(shù)有符號(hào)數(shù)加減結(jié)果加減結(jié)果有溢出有溢出,則,則OF1;否則;否則OF0針對(duì)有符號(hào)
31、整數(shù),判斷加減結(jié)果是否超出表達(dá)范圍針對(duì)有符號(hào)整數(shù),判斷加減結(jié)果是否超出表達(dá)范圍nN個(gè)二進(jìn)制位表達(dá)有符號(hào)整數(shù)的范圍:2N12N1-1n8位:128127n16位:3276832767n32位:2312311溢出標(biāo)志OF:舉例8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:001110100111110010110110十六進(jìn)制表達(dá):十六進(jìn)制表達(dá):3A7CB6轉(zhuǎn)換成十進(jìn)制數(shù):轉(zhuǎn)換成十進(jìn)制數(shù):58124182超出范圍:超出范圍:OF18 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:10101010101010100111110001111100 1 10010011000100110十六進(jìn)制表達(dá):十六進(jìn)制表達(dá):AAAA7C
32、7C 1 12626轉(zhuǎn)換成十進(jìn)制數(shù):轉(zhuǎn)換成十進(jìn)制數(shù):-86-861241243838沒有超出范圍:沒有超出范圍:OFOF0 0溢出標(biāo)志的判斷處理器硬件判斷規(guī)則處理器硬件判斷規(guī)則n最高位和次高位同時(shí)有進(jìn)位或同時(shí)無進(jìn)位,無溢出;最高位和次高位進(jìn)位狀態(tài)不同,有溢出人工判斷的簡(jiǎn)單規(guī)則人工判斷的簡(jiǎn)單規(guī)則n只有當(dāng)兩個(gè)相同符號(hào)數(shù)相加(含兩個(gè)不同符號(hào)數(shù)相減),而運(yùn)算結(jié)果的符號(hào)與原數(shù)據(jù)符號(hào)相反時(shí),產(chǎn)生溢出;其他情況下,不會(huì)產(chǎn)生溢出正數(shù)正數(shù)正數(shù)正數(shù)負(fù)數(shù)負(fù)數(shù)最高位最高位次高位次高位零標(biāo)志ZF(Zero Flag)運(yùn)算運(yùn)算結(jié)果為結(jié)果為0,則,則ZF1,否則,否則ZF0結(jié)果是結(jié)果是0,ZF標(biāo)志不是標(biāo)志不是0 !8 8位
33、二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:001110100011101001111100011111001011011010110110結(jié)果不是結(jié)果不是0 0,ZFZF0 08 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:10000100100001000111110001111100 1 10000000000000000結(jié)果是結(jié)果是0 0,ZFZF1 1結(jié)果結(jié)果進(jìn)位進(jìn)位符號(hào)標(biāo)志NF(Negative Flag)運(yùn)算運(yùn)算結(jié)果最高位為結(jié)果最高位為1,則,則NF1;否則;否則NF08 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:001110100011101001111100011111001 101101100110110
34、最高位最高位1 1:SFSF1 18 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:10000100100001000111110001111100 1 1 0 000000000000000最高位最高位0 0:SFSF0 0結(jié)果結(jié)果進(jìn)位進(jìn)位最高位符號(hào)位最高位符號(hào)位NF第2章 Cortex-M3微處理器5 .特殊功能寄存器特殊功能寄存器中斷屏蔽寄存器組中斷屏蔽寄存器組PRIMASK, FAULTMASK和和BASEPRI,這三個(gè)寄存器用于控,這三個(gè)寄存器用于控制異常的使能和除能。制異常的使能和除能。472.3 寄存器組寄存器組名字 功能描述 PRIMASK 這是個(gè)只有單一比特的寄存器。在它被置 1 后,就
35、關(guān)掉所有可屏蔽的異常,只剩下 NMI 和硬 fault 可以響應(yīng)。它的缺省值是 0,表示沒有關(guān)中斷。 FAULTMASK 這是個(gè)只有 1 個(gè)位的寄存器。當(dāng)它置 1 時(shí),只有 NMI 才能響應(yīng),所有其它的異常,甚至是硬 fault,也通通關(guān)掉。它的缺省值也是 0,表示沒有關(guān)異常。 BASEPRI 這個(gè)寄存器最多有 9 位(由表達(dá)優(yōu)先級(jí)的位數(shù)決定)。它定義了被屏蔽優(yōu)先級(jí)的閾值。當(dāng)它被設(shè)成某個(gè)值后,所有優(yōu)先級(jí)號(hào)大于等于此值的中斷都被關(guān)(優(yōu)先級(jí)號(hào)越大,優(yōu)先級(jí)越低)。但若被設(shè)成 0,則不關(guān)閉任何中斷,0 也是缺省值。 第2章 Cortex-M3微處理器5 .特殊功能寄存器特殊功能寄存器控制寄存器(控制寄
36、存器(CONTROL)控制寄存器有兩個(gè)用途,其一用于定義特權(quán)級(jí)別,其二用于選控制寄存器有兩個(gè)用途,其一用于定義特權(quán)級(jí)別,其二用于選擇當(dāng)前使用哪個(gè)堆棧指針。由兩個(gè)比特來行使這兩個(gè)職能。擇當(dāng)前使用哪個(gè)堆棧指針。由兩個(gè)比特來行使這兩個(gè)職能。482.3 寄存器組寄存器組位 功能 CONTROL1 堆棧指針選擇 0=選擇主堆棧指針 MSP(復(fù)位后的缺省值) 1=選擇進(jìn)程堆棧指針 PSP 在線程或基礎(chǔ)級(jí)(沒有在響應(yīng)異常),可以使用 PSP。在 handler 模式下,只允許使用 MSP,所以此時(shí)不得往該位寫 1。 CONTROL0 0=特權(quán)級(jí)的線程模式 1=用戶級(jí)的線程模式 Handler 模式永遠(yuǎn)都是特
37、權(quán)級(jí)的。 第2章 Cortex-M3微處理器5 .特殊功能寄存器特殊功能寄存器三類特殊功能寄存器,只能采用三類特殊功能寄存器,只能采用MRS(讀)和(讀)和MSR(寫)指(寫)指令進(jìn)行訪問。令進(jìn)行訪問。訪問舉例:訪問舉例: MRS R0, CONTROL ;讀;讀CONTROL到到R0 MSR CONTROL, R0 ;寫;寫R0到到CONTROL492.3 寄存器組寄存器組第2章 Cortex-M3微處理器Cortex-M3處理器支持兩種處理器的操作模式,還支持兩級(jí)特權(quán)處理器支持兩種處理器的操作模式,還支持兩級(jí)特權(quán)操作。操作。兩種操作模式分別為:處理者模式兩種操作模式分別為:處理者模式(ha
38、ndler mode)和線和線程模式(程模式(thread mode)。引入兩個(gè)模式是用于區(qū)別普通應(yīng)用程序)。引入兩個(gè)模式是用于區(qū)別普通應(yīng)用程序的代碼和異常服務(wù)例程的代碼(包括中斷服務(wù)例程的代碼)。的代碼和異常服務(wù)例程的代碼(包括中斷服務(wù)例程的代碼)。兩種特權(quán)分級(jí)分別為:特權(quán)級(jí)和用戶級(jí)。這可以提供一種存儲(chǔ)器兩種特權(quán)分級(jí)分別為:特權(quán)級(jí)和用戶級(jí)。這可以提供一種存儲(chǔ)器訪問的保護(hù)機(jī)制,使得普通的用戶程序代碼不能意外地,甚至是訪問的保護(hù)機(jī)制,使得普通的用戶程序代碼不能意外地,甚至是惡意地執(zhí)行涉及到要害的操作。惡意地執(zhí)行涉及到要害的操作。502.4 操作模式和特權(quán)級(jí)操作模式和特權(quán)級(jí)第2章 Cortex-M
39、3微處理器512.4 操作模式和特權(quán)級(jí)操作模式和特權(quán)級(jí)在在 CM3 運(yùn)行主應(yīng)用程序時(shí)(線程模式),既可以使用特權(quán)級(jí),運(yùn)行主應(yīng)用程序時(shí)(線程模式),既可以使用特權(quán)級(jí),也可以使用用戶級(jí);但是異常服務(wù)例程必須在特權(quán)級(jí)下執(zhí)行。也可以使用用戶級(jí);但是異常服務(wù)例程必須在特權(quán)級(jí)下執(zhí)行。復(fù)位后,處理器默認(rèn)進(jìn)入線程模式,特權(quán)極訪問。復(fù)位后,處理器默認(rèn)進(jìn)入線程模式,特權(quán)極訪問。在特權(quán)級(jí)下,程序可以訪問所有范圍的存儲(chǔ)器(如果有在特權(quán)級(jí)下,程序可以訪問所有范圍的存儲(chǔ)器(如果有MPU,還要在還要在MPU規(guī)定的禁地之外),并且可以執(zhí)行所有指令。規(guī)定的禁地之外),并且可以執(zhí)行所有指令。在線程模式用戶級(jí)下,對(duì)系統(tǒng)控制空間的訪
40、問將被阻止。在線程模式用戶級(jí)下,對(duì)系統(tǒng)控制空間的訪問將被阻止。第2章 Cortex-M3微處理器在特權(quán)級(jí)下的代碼可以通過置位在特權(quán)級(jí)下的代碼可以通過置位 CONTROL0來進(jìn)入用戶級(jí)。來進(jìn)入用戶級(jí)。產(chǎn)生了任何異常,處理器都將以特權(quán)級(jí)來運(yùn)行其服務(wù)例程,異常產(chǎn)生了任何異常,處理器都將以特權(quán)級(jí)來運(yùn)行其服務(wù)例程,異常返回后,系統(tǒng)將回到產(chǎn)生異常時(shí)所處的級(jí)別。返回后,系統(tǒng)將回到產(chǎn)生異常時(shí)所處的級(jí)別。用戶級(jí)下的代碼不能再試圖修改用戶級(jí)下的代碼不能再試圖修改 CONTROL0來回到特權(quán)級(jí)。來回到特權(quán)級(jí)。它必須通過一個(gè)異常它必須通過一個(gè)異常 handler,由那個(gè)異常,由那個(gè)異常 handler 來修改來修改
41、CONTROL0,才能在返回到線程模式后拿到特權(quán)級(jí)。,才能在返回到線程模式后拿到特權(quán)級(jí)。522.4 操作模式和特權(quán)級(jí)操作模式和特權(quán)級(jí)第2章 Cortex-M3微處理器從用戶級(jí)到特權(quán)級(jí)的唯一途徑就是異常:如果在程序執(zhí)行過程中從用戶級(jí)到特權(quán)級(jí)的唯一途徑就是異常:如果在程序執(zhí)行過程中觸發(fā)了一個(gè)異常,處理器總是先切換入特權(quán)級(jí),并且在異常服務(wù)觸發(fā)了一個(gè)異常,處理器總是先切換入特權(quán)級(jí),并且在異常服務(wù)例程執(zhí)行完畢退出時(shí),返回先前的狀態(tài)。例程執(zhí)行完畢退出時(shí),返回先前的狀態(tài)。532.4 操作模式和特權(quán)級(jí)操作模式和特權(quán)級(jí)第2章 Cortex-M3微處理器當(dāng)當(dāng) CONTROL0=0 時(shí),在異常(中斷)處理的始末,只
42、發(fā)生時(shí),在異常(中斷)處理的始末,只發(fā)生了處理器模式的轉(zhuǎn)換。了處理器模式的轉(zhuǎn)換。542.4 操作模式和特權(quán)級(jí)操作模式和特權(quán)級(jí)第2章 Cortex-M3微處理器若若 CONTROL0=1(線程模式(線程模式+用戶級(jí)),則在中斷響應(yīng)的始用戶級(jí)),則在中斷響應(yīng)的始末,處理器模式和特權(quán)等極都要發(fā)生變化。末,處理器模式和特權(quán)等極都要發(fā)生變化。552.4 操作模式和特權(quán)級(jí)操作模式和特權(quán)級(jí)第2章 Cortex-M3微處理器在在ARM編程領(lǐng)域中,編程領(lǐng)域中,“異常異?!迸c與“中斷中斷”都是指當(dāng)發(fā)生都是指當(dāng)發(fā)生“事件事件”時(shí),處理器改變正常執(zhí)行流,去響應(yīng)該事件的情況。時(shí),處理器改變正常執(zhí)行流,去響應(yīng)該事件的情況
43、。異常:除了外部中斷外,當(dāng)有指令執(zhí)行了異常:除了外部中斷外,當(dāng)有指令執(zhí)行了“非法操作非法操作”,或者訪,或者訪問被禁的內(nèi)存區(qū)間,因各種錯(cuò)誤產(chǎn)生的問被禁的內(nèi)存區(qū)間,因各種錯(cuò)誤產(chǎn)生的fault,以及不可屏蔽中斷,以及不可屏蔽中斷發(fā)生時(shí),都會(huì)打斷程序的執(zhí)行,這些情況統(tǒng)稱為異常。另外,程發(fā)生時(shí),都會(huì)打斷程序的執(zhí)行,這些情況統(tǒng)稱為異常。另外,程序代碼也可以主動(dòng)請(qǐng)求進(jìn)入異常狀態(tài)的(常用于系統(tǒng)調(diào)用)。序代碼也可以主動(dòng)請(qǐng)求進(jìn)入異常狀態(tài)的(常用于系統(tǒng)調(diào)用)。異常指除了外部中斷之外的異常,異常之于處理器是同步的。異常指除了外部中斷之外的異常,異常之于處理器是同步的。中斷來表示所有外部中斷,對(duì)于處理器來說是異步的中
44、斷。中斷來表示所有外部中斷,對(duì)于處理器來說是異步的中斷。562.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器第2章 Cortex-M3微處理器Cortex-M3支持大量異常,包括支持大量異常,包括16-4-1=11個(gè)系統(tǒng)異常,和最多個(gè)系統(tǒng)異常,和最多240個(gè)外部中斷(個(gè)外部中斷(IRQ)。具體使用了這)。具體使用了這240個(gè)中斷源中的多少個(gè)中斷源中的多少個(gè),則由芯片制造商決定。由外設(shè)產(chǎn)生的中斷信號(hào),除了個(gè),則由芯片制造商決定。由外設(shè)產(chǎn)生的中斷信號(hào),除了SysTick的之外,全都連接到的之外,全都連接到NVIC的中斷輸入信號(hào)線。典型情的中斷輸入信號(hào)線。典型情況下,處理
45、器一般支持況下,處理器一般支持16到到32個(gè)中斷。個(gè)中斷。NMI(不可屏蔽中斷)輸入腳:當(dāng)它被置為有效時(shí),(不可屏蔽中斷)輸入腳:當(dāng)它被置為有效時(shí),NMI服務(wù)服務(wù)例程會(huì)無條件地執(zhí)行。(在多數(shù)情況下,例程會(huì)無條件地執(zhí)行。(在多數(shù)情況下,NMI 會(huì)被連接到一個(gè)會(huì)被連接到一個(gè)看門狗定時(shí)器,有時(shí)也會(huì)是電壓監(jiān)視功能塊,以便在電壓掉至看門狗定時(shí)器,有時(shí)也會(huì)是電壓監(jiān)視功能塊,以便在電壓掉至危險(xiǎn)級(jí)別后警告處理器。)危險(xiǎn)級(jí)別后警告處理器。)572.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器第2章 Cortex-M3微處理器編號(hào) 類型 優(yōu)先級(jí) 簡(jiǎn)介 0 N/A N/A 沒有異常在運(yùn)行
46、 1 復(fù)位 -3(最高) 復(fù)位 2 NMI -2 不可屏蔽中斷(來自外部 NMI 輸入腳) 3 硬(hard) fault -1 所有被除能的 fault,都將“上訪”成硬 fault。除能的原因包括當(dāng)前被禁用,或者被 PRIMASK 或 BASPRI 掩蔽。 4 MemManage fault 可編程 存儲(chǔ)器管理 fault,MPU 訪問犯規(guī)以及訪問非法位置均可引發(fā)。企圖在“非執(zhí)行區(qū)”取指也會(huì)引發(fā)此 fault 5 總線 fault 可編程 從總線系統(tǒng)收到了錯(cuò)誤響應(yīng),原因可以是預(yù)取流產(chǎn)(Abort)或數(shù)據(jù)流產(chǎn),或者企圖訪問協(xié)處理器 6 用法(usage) Fault 可編程 由于程序錯(cuò)誤導(dǎo)致
47、的異常。通常是使用了一條無效指令,或者是非法的狀態(tài)轉(zhuǎn)換,例如嘗試切換到 ARM 狀態(tài) 7-10 保留 N/A N/A 11 SVCall 可編程 執(zhí)行系統(tǒng)服務(wù)調(diào)用指令(SVC)引發(fā)的異常 12 調(diào)試監(jiān)視器 可編程 調(diào)試監(jiān)視器(斷點(diǎn),數(shù)據(jù)觀察點(diǎn),或者是外部調(diào)試請(qǐng)求 13 保留 N/A N/A 14 PendSV 可編程 為系統(tǒng)設(shè)備而設(shè)的“可懸掛請(qǐng)求”(pendable request) 15 SysTick 可編程 系統(tǒng)滴答定時(shí)器(也就是周期性溢出的時(shí)基定時(shí)器譯注) 16 IRQ #0 可編程 外中斷#0 17 IRQ #1 可編程 外中斷#1 255 IRQ #239 可編程 外中斷#239
48、582.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器第2章 Cortex-M3微處理器當(dāng)當(dāng) CM3 內(nèi)核響應(yīng)了一個(gè)發(fā)生的異常后,對(duì)應(yīng)的異常服務(wù)例程內(nèi)核響應(yīng)了一個(gè)發(fā)生的異常后,對(duì)應(yīng)的異常服務(wù)例程(ESR)就會(huì)執(zhí)行。為了決定就會(huì)執(zhí)行。為了決定 ESR 的入口地址,的入口地址,CM3 使用了使用了“向向量表查表機(jī)制量表查表機(jī)制”。向量表其實(shí)是一個(gè)向量表其實(shí)是一個(gè) WORD(32 位整數(shù))數(shù)組,每個(gè)編號(hào)對(duì)應(yīng)位整數(shù))數(shù)組,每個(gè)編號(hào)對(duì)應(yīng)一種異常,其所存值則是該一種異常,其所存值則是該 ESR 的入口地址。的入口地址。在復(fù)位后,該寄存器的值為在復(fù)位后,該寄存器的值為 0。因此,在
49、地址。因此,在地址 0 處必須包含一處必須包含一張向量表,用于初始時(shí)的異常分配。張向量表,用于初始時(shí)的異常分配。592.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器第2章 Cortex-M3微處理器異常類型 表項(xiàng)所在地址偏移量 異常向量(該 ESR 的入口地址) 0 0 x00 復(fù)位后MSP 的初始值1 0 x04 復(fù)位 2 0 x08 NMI 3 0 x0C 硬 fault 4 0 x10 MemManage fault 5 0 x14 總線 fault 6 0 x18 用法 fault 7-10 0 x1c-0 x28 保留 11 0 x2c SVC 12 0
50、x30 調(diào)試監(jiān)視器 13 0 x34 保留 14 0 x38 PendSV 15 0 x3c SysTick 16 0 x40 IRQ #0 17 0 x44 IRQ #1 18-255 0 x48-0 x3FF IRQ #2 - #239 602.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器如果發(fā)生了異常如果發(fā)生了異常 11(SVC),則),則 NVIC 會(huì)計(jì)算出偏移移量會(huì)計(jì)算出偏移移量是是 11x4=0 x2C,然,然后從那里取出服務(wù)后從那里取出服務(wù)例程的入口地址并例程的入口地址并跳入。跳入。第2章 Cortex-M3微處理器嵌套向量中斷控制器嵌套向量中斷控制器
51、 NVIC(Nested Vectored Interrupt Controller)與內(nèi)核是緊耦合。與內(nèi)核是緊耦合。NVIC提供如下的功能:提供如下的功能: 可嵌套中斷支持可嵌套中斷支持 向量中斷支持向量中斷支持 動(dòng)態(tài)優(yōu)先級(jí)調(diào)整支持動(dòng)態(tài)優(yōu)先級(jí)調(diào)整支持 中斷延遲大大縮短中斷延遲大大縮短 中斷可屏蔽中斷可屏蔽 612.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器第2章 Cortex-M3微處理器可嵌套中斷支持可嵌套中斷支持 可嵌套中斷支持面向所有的外部中斷和絕大多數(shù)系統(tǒng)異常??汕短字袛嘀С置嫦蛩械耐獠恐袛嗪徒^大多數(shù)系統(tǒng)異常。外在表現(xiàn)是,這些異常都可以被賦予不同的優(yōu)先
52、級(jí)。當(dāng)前優(yōu)外在表現(xiàn)是,這些異常都可以被賦予不同的優(yōu)先級(jí)。當(dāng)前優(yōu)先級(jí)被存儲(chǔ)在先級(jí)被存儲(chǔ)在 xPSR 的專用字段中。的專用字段中。 當(dāng)一個(gè)異常發(fā)生時(shí),硬件會(huì)自動(dòng)比較該異常的優(yōu)先級(jí)是否比當(dāng)一個(gè)異常發(fā)生時(shí),硬件會(huì)自動(dòng)比較該異常的優(yōu)先級(jí)是否比當(dāng)前的異常優(yōu)先級(jí)更高。如果發(fā)現(xiàn)來了更高優(yōu)先級(jí)的異常,當(dāng)前的異常優(yōu)先級(jí)更高。如果發(fā)現(xiàn)來了更高優(yōu)先級(jí)的異常,處理器就會(huì)中斷當(dāng)前的中斷服務(wù)例程(或者是普通程序),處理器就會(huì)中斷當(dāng)前的中斷服務(wù)例程(或者是普通程序),而服務(wù)新來的異常。而服務(wù)新來的異常。 622.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器第2章 Cortex-M3微處理器向量中斷
53、支持向量中斷支持 當(dāng)開始響應(yīng)一個(gè)中斷后,當(dāng)開始響應(yīng)一個(gè)中斷后,CM3會(huì)自動(dòng)定位一張向量表,并會(huì)自動(dòng)定位一張向量表,并且根據(jù)中斷號(hào)從表中找出且根據(jù)中斷號(hào)從表中找出ISR的入口地址,然后跳轉(zhuǎn)過去執(zhí)的入口地址,然后跳轉(zhuǎn)過去執(zhí)行。行。動(dòng)態(tài)優(yōu)先級(jí)調(diào)整支持動(dòng)態(tài)優(yōu)先級(jí)調(diào)整支持 軟件可以在運(yùn)行時(shí)期更改中斷的優(yōu)先級(jí)。軟件可以在運(yùn)行時(shí)期更改中斷的優(yōu)先級(jí)。中斷延遲大大縮短中斷延遲大大縮短 Cortex-M3為了縮短中斷延遲,引入自動(dòng)的現(xiàn)場(chǎng)保護(hù)和恢復(fù)為了縮短中斷延遲,引入自動(dòng)的現(xiàn)場(chǎng)保護(hù)和恢復(fù)等措施,用于縮短中斷嵌套時(shí)的等措施,用于縮短中斷嵌套時(shí)的ISR間延遲。間延遲。632.5 異常、中斷、中斷向量表、中斷控制器異常
54、、中斷、中斷向量表、中斷控制器第2章 Cortex-M3微處理器中斷可屏蔽中斷可屏蔽 既可以屏蔽優(yōu)先級(jí)低于某個(gè)閾值的中斷既可以屏蔽優(yōu)先級(jí)低于某個(gè)閾值的中斷/異常異常 (設(shè)置設(shè)置BASEPRI寄存器寄存器),也可以全體屏蔽,也可以全體屏蔽(設(shè)置設(shè)置PRIMASK和和FAULTMASK寄存器寄存器)。這是為了讓時(shí)間關(guān)鍵(。這是為了讓時(shí)間關(guān)鍵(time-critical)的任務(wù)能在死線的任務(wù)能在死線 (deadline,最后期限,最后期限)到來前完成,而不被干到來前完成,而不被干擾。擾。 642.5 異常、中斷、中斷向量表、中斷控制器異常、中斷、中斷向量表、中斷控制器第2章 Cortex-M3微處理
55、器Cortex-M3支持支持4GB存儲(chǔ)空間,如圖所示被劃分成若干區(qū)域。存儲(chǔ)空間,如圖所示被劃分成若干區(qū)域。652.6 存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元第2章 Cortex-M3微處理器ARM處理器支持以下六種數(shù)據(jù)類型:處理器支持以下六種數(shù)據(jù)類型: 8位有符號(hào)和無符號(hào)字節(jié)。位有符號(hào)和無符號(hào)字節(jié)。16位有符號(hào)和無符號(hào)半字,以位有符號(hào)和無符號(hào)半字,以2字節(jié)的邊界對(duì)齊。字節(jié)的邊界對(duì)齊。32位有符號(hào)和無符號(hào)字,以位有符號(hào)和無符號(hào)字,以4字節(jié)的邊界對(duì)齊。字節(jié)的邊界對(duì)齊。 地址位于地址位于A的字由地址為的字由地址為A、A1、A2和和A3的字節(jié)組成;的字節(jié)組成; 地址位于地址位于A的半字由
56、地址為的半字由地址為A和和A1的字節(jié)組成;的字節(jié)組成; 地址位于地址位于A2的半字由地址為的半字由地址為A2和和A3的字節(jié)組成;的字節(jié)組成; 地址位于地址位于A的字由地址為的字由地址為A和和A2的半字組成。的半字組成。662.6 存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元第2章 Cortex-M3微處理器大端存儲(chǔ)模式大端存儲(chǔ)模式小端存儲(chǔ)模式(缺?。┬《舜鎯?chǔ)模式(缺?。?72.6 存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元第2章 Cortex-M3微處理器68第2章 Cortex-M3微處理器 Cortex-M3預(yù)先定義好了預(yù)先定義好了“粗線條的粗線條的”存儲(chǔ)器映射。通過存儲(chǔ)
57、器映射。通過把片上外設(shè)的寄存器映射到外設(shè)區(qū),就可以簡(jiǎn)單地以訪問內(nèi)存把片上外設(shè)的寄存器映射到外設(shè)區(qū),就可以簡(jiǎn)單地以訪問內(nèi)存的方式來訪問這些外設(shè)的寄存器,從而控制外設(shè)的工作。使得的方式來訪問這些外設(shè)的寄存器,從而控制外設(shè)的工作。使得對(duì)訪問速度可以做高度的優(yōu)化,而且對(duì)于片上系統(tǒng)的設(shè)計(jì)而言對(duì)訪問速度可以做高度的優(yōu)化,而且對(duì)于片上系統(tǒng)的設(shè)計(jì)而言更易集成。更易集成。692.6 存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元第2章 Cortex-M3微處理器存儲(chǔ)器保護(hù)單元(存儲(chǔ)器保護(hù)單元(MPU) Cortex-M3有一個(gè)可選的存儲(chǔ)器保護(hù)單元,可以對(duì)特權(quán)級(jí)訪問和有一個(gè)可選的存儲(chǔ)器保護(hù)單元,可以對(duì)特權(quán)級(jí)
58、訪問和用戶級(jí)訪問分別施加不同的訪問限制。用戶級(jí)訪問分別施加不同的訪問限制。最常見的就是由操作系統(tǒng)使用最常見的就是由操作系統(tǒng)使用MPU,以使特權(quán)級(jí)代碼的數(shù)據(jù),以使特權(quán)級(jí)代碼的數(shù)據(jù),包括操作系統(tǒng)本身的數(shù)據(jù)不被其它用戶程序弄壞。包括操作系統(tǒng)本身的數(shù)據(jù)不被其它用戶程序弄壞。MPU在保護(hù)內(nèi)存時(shí)是按區(qū)在保護(hù)內(nèi)存時(shí)是按區(qū)(region)管理的它可以把某些內(nèi)存區(qū)設(shè)管理的它可以把某些內(nèi)存區(qū)設(shè)置成只讀,從而避免了那里的內(nèi)容意外被更改;還可以在多任務(wù)置成只讀,從而避免了那里的內(nèi)容意外被更改;還可以在多任務(wù)系統(tǒng)中把不同任務(wù)之間的數(shù)據(jù)區(qū)隔離。它會(huì)使嵌入式系統(tǒng)變得更系統(tǒng)中把不同任務(wù)之間的數(shù)據(jù)區(qū)隔離。它會(huì)使嵌入式系統(tǒng)變得更
59、加可靠。加可靠。702.6 存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元存儲(chǔ)器映射、存儲(chǔ)器保護(hù)單元第2章 Cortex-M3微處理器 Cortex-M3內(nèi)部有若干個(gè)總線接口,以使內(nèi)部有若干個(gè)總線接口,以使CM3能同時(shí)取址和能同時(shí)取址和訪內(nèi)(訪問內(nèi)存),它們是:訪內(nèi)(訪問內(nèi)存),它們是: 指令存儲(chǔ)區(qū)總線(兩條)指令存儲(chǔ)區(qū)總線(兩條) 系統(tǒng)總線系統(tǒng)總線 私有外設(shè)總線私有外設(shè)總線 712.7 總線接口總線接口第2章 Cortex-M3微處理器指令存儲(chǔ)區(qū)總線(兩條)指令存儲(chǔ)區(qū)總線(兩條) 有兩條指令存儲(chǔ)區(qū)總線負(fù)責(zé)對(duì)代碼存儲(chǔ)區(qū)的訪問,分別是有兩條指令存儲(chǔ)區(qū)總線負(fù)責(zé)對(duì)代碼存儲(chǔ)區(qū)的訪問,分別是I-Code總線和總線和D-Code總線??偩€。前者用于取指,后者用于查表等操作,它們按最佳執(zhí)行速度進(jìn)行前者用于取指,后者用于查表等操作,它們按最佳執(zhí)行速度進(jìn)行優(yōu)化。優(yōu)化。 722.7 總線接口總線接口第2章 Cortex-M3微處理器系統(tǒng)總線系統(tǒng)總線 系統(tǒng)總線用于訪問內(nèi)存和外設(shè),覆蓋的區(qū)域包括系統(tǒng)總線用于訪問內(nèi)存和外設(shè),覆蓋的區(qū)域包括SRAM,片上外,片上外設(shè),片外設(shè),片外RAM,片外擴(kuò)展設(shè)備,以及系統(tǒng)級(jí)存儲(chǔ)區(qū)的部分空,片外擴(kuò)展設(shè)備,以及系統(tǒng)級(jí)存儲(chǔ)區(qū)的部分空間。間。 私有外設(shè)總線私有外設(shè)總線 負(fù)責(zé)一部分
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年環(huán)境友好型清潔生產(chǎn)技術(shù)服務(wù)合同
- 2024年陽光房裝修合同模板
- 人防門安裝工程施工合同
- 工程項(xiàng)目分包商合同書
- 二手機(jī)械設(shè)備買賣協(xié)議范本
- 權(quán)威學(xué)校聯(lián)合辦學(xué)協(xié)議書
- 裝修材料購買合同2024年
- 夫妻協(xié)議書常見問題解答
- 學(xué)生安全管理協(xié)議
- 人事派遣代理協(xié)議
- 2023屆衡南縣“五科聯(lián)考”數(shù)學(xué)試卷(含答案)
- 公司稅務(wù)管理辦法
- 競(jìng)賽培訓(xùn)專題6-整數(shù)的整除性
- 武術(shù)操《英雄少年》全套動(dòng)作教學(xué)教案
- 2022年部編四年級(jí)語文上冊(cè)專項(xiàng)選擇正確讀音
- 綠化養(yǎng)護(hù)重點(diǎn)難點(diǎn)分析及解決措施
- 2022中央機(jī)關(guān)遴選公務(wù)員筆試題
- 安全生產(chǎn)費(fèi)用提取 和使用管理制度(3篇)
- 《眼科學(xué)基礎(chǔ)》期末復(fù)習(xí)題庫含答案
- 西師版數(shù)學(xué)一年級(jí)上冊(cè)一、二單元測(cè)試題參考范本
- 夾雜物控制攻關(guān)方案
評(píng)論
0/150
提交評(píng)論