(1)簡介 Cortex-M3是一個(gè) 32位處理器內(nèi)核。內(nèi)部的數(shù)據(jù)路徑是 32位的,寄存器是 32位的,存儲(chǔ)器接口也是 32 位的。CM3 采用了哈佛結(jié)構(gòu),擁有獨(dú)立的指令總線和數(shù)據(jù)總線,可以讓取指與數(shù)據(jù)訪問并行不悖。這樣一來數(shù)據(jù)訪問不再占用指令總線,從而提升了性能。為實(shí)現(xiàn)這個(gè)特性, CM3內(nèi)部含有好幾條總線接口,每條都為自己的應(yīng)用場(chǎng)合優(yōu)化過,并且它們可以并行工作。但是另一方面,指令總線和數(shù)據(jù)總線共享同一個(gè)存儲(chǔ)器空間(一個(gè)統(tǒng)一的存儲(chǔ)器系統(tǒng))。 比較復(fù)雜的應(yīng)用可能需要更多的存儲(chǔ)系統(tǒng)功能,為此CM3提供一個(gè)可選的MPU,而且在需要的情況下也可以使用外部的 cache。另外在CM3中,Both小端模式和大端模式都是支持的。 (2)Cortex-M3的簡化圖 file:///C:/Users/%E9%83%AD%E6%99%93%E5%A8%9F/AppData/Local/Temp/ksohtml/wps78DB.tmp.png (3)寄存器組 處理器擁有R0-R15的寄存器組,其中R13最為堆棧指針SP,SP有兩個(gè),但是同一時(shí)刻只能有一個(gè)可以看到,這就是所謂的“banked”寄存器。 file:///C:/Users/%E9%83%AD%E6%99%93%E5%A8%9F/AppData/Local/Temp/ksohtml/wps78DC.tmp.png a、R0-R12都是 32位通用寄存器,用于數(shù)據(jù)操作。但是注意:絕大多數(shù) 16位Thumb指令只能訪問R0-R7,而 32位 Thumb-2指令可以訪問所有寄存器。 b、Cortex-M3擁有兩個(gè)堆棧指針,然而它們是 banked,因此任一時(shí)刻只能使用其中的一個(gè)。 主堆棧指針(MSP):復(fù)位后缺省使用的堆棧指針,用于操作系統(tǒng)內(nèi)核以及異常處理例程(包括中斷服務(wù)例程) 進(jìn)程堆棧指針(PSP):由用戶的應(yīng)用程序代碼使用。 堆棧指針的最低兩位永遠(yuǎn)是0,這意味著堆棧總是4字節(jié)對(duì)齊的。 c、R14:連接寄存器--當(dāng)呼叫一個(gè)子程序時(shí),由R14存儲(chǔ)返回地址 d、R15:程序計(jì)數(shù)寄存器--指向當(dāng)前的程序地址,如果修改它的值,就能改變程序的執(zhí)行流(這里有很多高級(jí)技巧) e、Cortex-M3還在內(nèi)核水平上搭載了若干特殊功能寄存器,包括 程序狀態(tài)字寄存器組(PSRs) 中斷屏蔽寄存器組(PRIMASK, FAULTMASK, BASEPRI) 控制寄存器(CONTROL) file:///C:/Users/%E9%83%AD%E6%99%93%E5%A8%9F/AppData/Local/Temp/ksohtml/wps78ED.tmp.png Cortex-M3處理器支持兩種處理器的操作模式,還支持兩級(jí)特權(quán)操作。 兩種操作模式分別為:處理者模式和線程模式(thread mode)。引入兩個(gè)模式的本意,是用于區(qū)別普通應(yīng)用程序的代碼和異常服務(wù)例程的代碼——包括中斷服務(wù)例程的代碼。 Cortex-M3 的另一個(gè)側(cè)面則是特權(quán)的分級(jí)——特權(quán)級(jí)和用戶級(jí)。這可以提供一種存儲(chǔ)器訪問的保護(hù)機(jī)制,使得普通的用戶程序代碼不能意外地,甚至是惡意地執(zhí)行涉及到要害的操作。處理器支持兩種特權(quán)級(jí),這也是一個(gè)基本的安全模型。 file:///C:/Users/%E9%83%AD%E6%99%93%E5%A8%9F/AppData/Local/Temp/ksohtml/wps78FE.tmp.png 在 CM3 運(yùn)行主應(yīng)用程序時(shí)(線程模式),既可以使用特權(quán)級(jí),也可以使用用戶級(jí);但是異常服務(wù)例程必須在特權(quán)級(jí)下執(zhí)行。復(fù)位后,處理器默認(rèn)進(jìn)入線程模式,特權(quán)極訪問。在特權(quán)級(jí)下,程序可以訪問所有范圍的存儲(chǔ)器(如果有 MPU,還要 在MPU規(guī)定的禁地之外),并且可以執(zhí)行所有指令。 在特權(quán)級(jí)下的程序可以為所欲為,但也可能會(huì)把自己給玩進(jìn)去——切換到用戶級(jí)。一旦進(jìn)入用戶級(jí),再想回來就得走“法律程序”了——用戶級(jí)的程序不能簡簡單單地試圖改寫 CONTROL寄存器就回到特權(quán)級(jí),它必須先“申訴”:執(zhí)行一條系統(tǒng)調(diào)用指令(SVC)。這會(huì)觸發(fā)SVC異常,然后由異常服務(wù)例程(通常是操作系統(tǒng)的一部分)接管,如果批準(zhǔn)了進(jìn)入,則異常服務(wù)例程修改 CONTROL寄存器,才能在用戶級(jí)的線程模式下重新進(jìn)入特權(quán)級(jí)。信盈達(dá),扣扣:一以七捂捂吧就領(lǐng)久要! 事實(shí)上,從用戶級(jí)到特權(quán)級(jí)的唯一途徑就是異常:如果在程序執(zhí)行過程中觸發(fā)了一個(gè)異常,處理器總是先切換入特權(quán)級(jí),并且在異常服務(wù)例程執(zhí)行完畢退出時(shí),返回先前的狀態(tài)。 通過引入特權(quán)級(jí)和用戶級(jí),就能夠在硬件水平上限制某些不受信任的或者還沒有調(diào)試好的程序,不讓它們隨便地配置涉及要害的寄存器,因而系統(tǒng)的可靠性得到了提高。進(jìn)一步地,如果配了 MPU,它還可以作為特權(quán)機(jī)制的補(bǔ)充——保護(hù)關(guān)鍵的存儲(chǔ)區(qū)域不被破壞,這些區(qū)域通常是操作系統(tǒng)的區(qū)域。 (4)內(nèi)建的嵌套向量中斷控制器 Cortex-M3 在內(nèi)核水平上搭載了一顆中斷控制器——嵌套向量中斷控制器 NVIC(Nested Vectored Interrupt Controller)。它與內(nèi)核有很深的“親密接觸”——與內(nèi)核是緊耦合的。 NVIC提供如下的功能: · 可嵌套中斷支持 · 向量中斷支持 · 動(dòng)態(tài)優(yōu)先級(jí)調(diào)整支持 · 中斷延遲大大縮短 · 中斷可屏蔽 可嵌套中斷支持: 可嵌套中斷支持的作用范圍很廣,覆蓋了所有的外部中斷和絕大多數(shù)系統(tǒng)異常。外在表現(xiàn)是,這些異常都可以被賦予不同的優(yōu)先級(jí)。當(dāng)前優(yōu)先級(jí)被存儲(chǔ)在 xPSR 的專用字段中。當(dāng)一個(gè)異常發(fā)生時(shí),硬件會(huì)自動(dòng)比較該異常的優(yōu)先級(jí)是否比當(dāng)前的異常優(yōu)先級(jí)更高。如果發(fā)現(xiàn)來了更高優(yōu)先級(jí)的異常,處理器就會(huì)中斷當(dāng)前的中斷服務(wù)例程(或者是普通程序),而服務(wù)新來的異常——即立即搶占。 向量中斷支持: 當(dāng)開始響應(yīng)一個(gè)中斷后,CM3會(huì)自動(dòng)定位一張向量表,并且根據(jù)中斷號(hào)從表中找出 ISR的入口地址,然后跳轉(zhuǎn)過去執(zhí)行。不需要像以前的 ARM那樣,由軟件來分辨到底是哪個(gè)中斷發(fā)生了,也無需半導(dǎo)體廠商提供私有的中斷控制器來完成這種工作。這么一來,中斷延遲時(shí)間大為縮短。
|