版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第三講Cortex-M3基礎(chǔ)Cortex-M3基礎(chǔ)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ù)訪問不再占用指令總線,從而提升了性能。內(nèi)容提要寄存器組異常和中斷操作模式和特權(quán)極別存儲(chǔ)器映射總線接口指令集復(fù)位3.1寄存器組
Cortex‐M3處理器擁有R0‐R15的寄存器組。R0-R12:通用寄存器
R0‐R12都是32位通用寄存器,用于數(shù)據(jù)操作。但是注意:絕大多數(shù)Thumb指令只能訪問R0‐R7。R13:堆棧指針
Cortex‐M3擁有兩個(gè)堆棧指針,任一時(shí)刻只能使用其中的一個(gè)。主堆棧指針(MSP):復(fù)位后缺省使用的堆棧指針,用于操作系統(tǒng)內(nèi)核以及異常處理。進(jìn)程堆棧指針(PSP):由用戶的應(yīng)用程序代碼使用。R14:連接寄存器當(dāng)調(diào)用一個(gè)子程序時(shí),為了減少訪問內(nèi)存的次數(shù),由R14存儲(chǔ)返回地址,把返回地址直接存儲(chǔ)在寄存器中,這與其他大多數(shù)其它處理器都不一樣。只有1級(jí)子程序調(diào)用的代碼無需訪問內(nèi)存,從而提高了子程序調(diào)用的效率。如果多于1級(jí),則需要把前一級(jí)的R14
值壓到堆棧里。在ARM編程時(shí),應(yīng)盡量只使用寄存器保存中間結(jié)果,迫不得以時(shí)才訪問內(nèi)存。R15:程序計(jì)數(shù)寄存器(PC)
指向當(dāng)前的程序地址。如果修改它的值,就能改變程序的執(zhí)行。寄存器特殊功能寄存器
Cortex‐M3還在內(nèi)核上搭載了若干特殊功能寄存器,包括:程序狀態(tài)字寄存器組PSRs;中斷屏蔽寄存器組PRIMASK,FAULTMASK,BASEPRI;控制寄存器CONTROL。程序狀態(tài)寄存器(PSRs或xPSR)
程序狀態(tài)寄存器在其內(nèi)部又被分為三個(gè)子狀態(tài)寄存器:應(yīng)用程序PSR(APSR)中斷號(hào)PSR(IPSR)執(zhí)行PSR(EPSR)這3個(gè)寄存器即可以單獨(dú)訪問,也可以組合訪問(2個(gè)組合,3個(gè)組合都可以),當(dāng)使用三合一的方式訪問時(shí),應(yīng)使用名字“xPSR”或者“PSRs”。PRIMASK:屏蔽所有的中斷——當(dāng)然了,不可屏蔽NMI。FAULTMASK:屏蔽所有的fault——NMI依然不受影響B(tài)ASEPRI:屏蔽所有優(yōu)先級(jí)不高于某個(gè)具體數(shù)值的中斷。中斷屏蔽寄存器組控制寄存器(CONTROL)控制寄存器用于還用于定義特權(quán)級(jí)別和堆棧指針的選擇。特殊功能寄存器操作指令只能被專用的MSR和MRS指令訪問。MRS<gp_reg>,<special_reg>功能:讀特殊功能寄存器的值到通用寄存器。MSR<special_reg>,<gp_reg>
功能:寫通用寄存器的值到特殊功能寄存器。3.2異常與中斷在ARM編程領(lǐng)域中,凡是打斷程序順序執(zhí)行的事件,都被稱為異常(exception)。除了外部中斷外,當(dāng)有指令執(zhí)行了“非法操作”,或者訪問被禁的內(nèi)存區(qū)間,因各種錯(cuò)誤產(chǎn)生的fault,以及不可屏蔽中斷發(fā)生時(shí),都會(huì)打斷程序的執(zhí)行,這些情況統(tǒng)稱為異常。在不嚴(yán)格的情況下,異常與中斷也可以混用。程序代碼也可以主動(dòng)請(qǐng)求進(jìn)入異常狀態(tài)的(常用于系統(tǒng)調(diào)用)。CM3的所有中斷機(jī)制都由NVIC實(shí)現(xiàn)。除了支持240個(gè)外中斷之外,NVIC還支持16‐4‐1=11個(gè)內(nèi)部異常源。雖然CM3是支持240個(gè)外中斷的,但具體使用了多少個(gè)是由芯片生產(chǎn)商決定。NMICM3還有一個(gè)NMI(不可屏蔽中斷)輸入腳。當(dāng)它被置為有效時(shí),NMI服務(wù)程序會(huì)無條件地執(zhí)行,NMI究竟被拿去做什么,還要視處理器的設(shè)計(jì)而定。在多數(shù)情況下,NMI會(huì)被連接到一個(gè)看門狗定時(shí)器,有時(shí)也會(huì)是電壓監(jiān)視功能塊,以便在電壓掉至危險(xiǎn)級(jí)別后警告處理器。NMI可以在任何時(shí)間被激活。向量表當(dāng)一個(gè)發(fā)生的異常被CM3內(nèi)核接受,對(duì)應(yīng)的異常handler(處理程序)就會(huì)執(zhí)行。為了決定handler(程序)的入口地址,CM3使用了“向量表機(jī)制”。這里使用一張向量表。向量表其實(shí)是一個(gè)WORD(32位整數(shù))數(shù)組,每個(gè)下標(biāo)對(duì)應(yīng)一種異常,該下標(biāo)元素的值則是該異常handler的入口地址。在復(fù)位后,該寄存器的值為0。因此,在地址0處必須包含一張向量表,用于初始時(shí)的異常分配。舉例如果發(fā)生了異常11(SVC),則NVIC會(huì)計(jì)算出偏移移量是11x4=0x2C,然后從那里取出服務(wù)程序的入口地址并跳入。0號(hào)異常的功能則是個(gè)另類,它并不是什么入口地址,而是給出了復(fù)位后MSP的初值。嵌套向量中斷控制器(NVIC)Cortex‐M3在內(nèi)核上搭載了一顆中斷控制器—嵌套向量中斷控制器NVIC(NestedVectoredInterruptController)。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ù)新來的異常,這個(gè)過程立即搶占。向量中斷支持
當(dāng)開始響應(yīng)一個(gè)中斷后,CM3會(huì)自動(dòng)定位一張向量表,并且根據(jù)中斷號(hào)從表中找出ISR的入口地址,然后跳轉(zhuǎn)過去執(zhí)行。不需要像以前的ARM那樣,由軟件來分辨到底是哪個(gè)中斷發(fā)生了,也無需半導(dǎo)體廠商提供私有的中斷控制器來完成這種工作。這樣會(huì)使中斷延遲時(shí)間大為縮短。中斷源識(shí)別當(dāng)CPU響應(yīng)中斷、保護(hù)斷點(diǎn)之后,就要進(jìn)行中斷源的識(shí)別,即尋找中斷源,找到相應(yīng)的中斷服務(wù)程序入口。識(shí)別中斷源有三種方法:查詢法、向量法和強(qiáng)置程序計(jì)數(shù)器法(已被淘汰)。查詢法
通過程序來查詢是哪一個(gè)中斷源提出的中斷請(qǐng)求。過程:在CPU響應(yīng)中斷之后,對(duì)所有的中斷,都進(jìn)入到這個(gè)查詢流程。先看中斷源1是否提出請(qǐng)求,若是,轉(zhuǎn)去執(zhí)行中斷源1的中斷服務(wù)程序;否則再看中斷源2是否提出請(qǐng)求,若是,轉(zhuǎn)去執(zhí)行中斷源2的中斷服務(wù)程序。否則繼續(xù)查看后面的中斷源…。查詢的順序決定了中斷的優(yōu)先級(jí)。當(dāng)發(fā)現(xiàn)一個(gè)中斷源提出中斷請(qǐng)求后,就轉(zhuǎn)去執(zhí)行相應(yīng)的服務(wù)程序,而不再繼續(xù)向下查找,不管它們是否也提出了請(qǐng)求。中斷源1的級(jí)別最高,中斷源2的級(jí)別次之,中斷源n的級(jí)別最低。
查詢法的優(yōu)缺點(diǎn)查詢法的優(yōu)點(diǎn)是硬件簡單,程序?qū)哟畏置?,只要改變程序中的查詢次序即可改變中斷源的中斷?yōu)先級(jí),而不必變更硬件連接。其缺點(diǎn)是速度慢(從CPU響應(yīng)中斷到進(jìn)入中斷服務(wù)的時(shí)間較長),實(shí)時(shí)性差,特別是當(dāng)中斷源較多時(shí),尤為突出。此外,查詢要占用CPU時(shí)間,降低了CPU的使用效率。向量法(矢量法)
這是一種硬件方法,早期系統(tǒng)中稱之為中斷向量,向量法因此得名。該方法是在CPU發(fā)出中斷響應(yīng)信號(hào)后,由硬件確定當(dāng)前所有請(qǐng)求中級(jí)別最高的中斷源的中斷標(biāo)識(shí)碼。中斷標(biāo)識(shí)碼是中斷源的識(shí)別標(biāo)志,可用來形成相應(yīng)的中斷服務(wù)程序的人口地址或存放中斷服務(wù)程序的首地址。該方法需要硬件支持。用向量法識(shí)別中斷源不占用CPU額外的時(shí)間,在中斷響應(yīng)周期即可完成,所以得到廣泛的應(yīng)用。
3.3操作模式和特權(quán)級(jí)別Cortex‐M3處理器支持兩種處理器的操作模式,支持兩級(jí)特權(quán)操作。操作模式兩種操作模式分別為:處理器模式(handlermode)和線程模式(threadmode)。引入兩個(gè)模式的目的,是用于和區(qū)別異常服務(wù)例程的代碼和普通應(yīng)用程序的代碼。特權(quán)極別特權(quán)的分級(jí)——特權(quán)級(jí)和用戶級(jí)。這可以提供一種存儲(chǔ)器訪問的保護(hù)機(jī)制,使得普通的用戶程序代碼不能意外地,甚至是惡意地執(zhí)行涉及到要害的操作。處理器支持兩種特權(quán)級(jí),這也是系統(tǒng)一個(gè)基本的安全模型。3.4存儲(chǔ)器映射
Cortex‐M3支持4GB存儲(chǔ)空間。由芯片供應(yīng)商定義外部私有外設(shè)總線內(nèi)部私有外設(shè)總線片外外設(shè)片上外設(shè)片外RAM閃存地址重載及斷點(diǎn)單元(FPB)數(shù)據(jù)觀察點(diǎn)單元(DWT)儀器化跟蹤宏單元(ITM)嵌入式跟蹤宏單元(ETM)跟蹤端口接口單元(TPIU)ROM表相關(guān)解釋
CM3的地址空間是4GB,程序可以在代碼區(qū)、內(nèi)部SRAM區(qū)或者外部RAM區(qū)中執(zhí)行。但是因?yàn)橹噶羁偩€與數(shù)據(jù)總線是分開的,最理想的是把程序放到代碼區(qū),從而使取指和數(shù)據(jù)訪問各自使用自己的總線。說明:
內(nèi)部SRAM區(qū)的大小是512MB,用于讓芯片制造商連接片上的SRAM。在這個(gè)區(qū)的下部,有一個(gè)1MB的位帶區(qū),該位帶區(qū)還有一個(gè)對(duì)應(yīng)的32MB的“位帶別名(alias)區(qū)”。(對(duì)比8051的只有128個(gè)位)。位帶區(qū)對(duì)應(yīng)的是最低的1MB地址范圍,而位帶別名區(qū)里面的每個(gè)字對(duì)應(yīng)位帶區(qū)的一個(gè)比特。位帶操作只適用于數(shù)據(jù)訪問,不適用于取指。通過位帶的功能,輕松訪問位帶區(qū)的每一位,像訪問普通內(nèi)存一樣地使用它們。說明:
地址空間的另一個(gè)512MB
范圍由片上外設(shè)(的寄存器)使用。這個(gè)區(qū)中也有一條32MB的位帶別名,以便于快捷地訪問外設(shè)寄存器。例如,可以方便地訪問各種控制位和狀態(tài)位。要注意的是,外設(shè)內(nèi)不允許執(zhí)行指令。說明:
還有兩個(gè)1GB的范圍,分別用于連接外部RAM
和外部設(shè)備區(qū),它們之中沒有位帶。兩者的區(qū)別在于外部RAM區(qū)允許執(zhí)行指令,而外部設(shè)備區(qū)則不允許。說明:
最后還剩下0.5GB
,CM3內(nèi)核的閨房就在這里面,包括了系統(tǒng)級(jí)組件,內(nèi)部私有外設(shè)總線,外部私有外設(shè)總線,以及由芯片提供者定義的系統(tǒng)外設(shè)。說明:
位帶操作支持了位帶操作后可以使用普通的指令來對(duì)單一的比特進(jìn)行讀寫。在CM3中,有兩個(gè)區(qū)中實(shí)現(xiàn)了位帶操作。其中一個(gè)是SRAM區(qū)的最低1MB
范圍,第二個(gè)則是片內(nèi)外設(shè)區(qū)的最低1MB范圍。這兩個(gè)區(qū)中的地址除了可以像普通的RAM一樣使用外,它們還都有自己的“位帶別名區(qū)”,位帶別名區(qū)把每個(gè)比特膨脹成一個(gè)32位的字。當(dāng)你通過位帶別名區(qū)訪問這些字時(shí),就可以達(dá)到訪問原始比特的目的。位帶操作的概念其實(shí)30年前就有了,8051單片機(jī)開創(chuàng)的先河。這里的位帶操作是8051位尋址區(qū)的威力大幅加強(qiáng)版。CM3使用如下術(shù)語來表示位帶存儲(chǔ)的相關(guān)地址位帶區(qū):支持位帶操作的地址區(qū);位帶別名:對(duì)別名地址的訪問最終作用到帶區(qū)的訪問上(注意:這中途有一個(gè)作地址映射過程)。支持位帶操作的兩個(gè)內(nèi)存區(qū)的范圍0x2000_0000‐0x200F_FFFF(SRAM區(qū)中的最低1MB)0x4000_0000‐0x400F_FFFF(片上外設(shè)區(qū)中的最低1MB)對(duì)于SRAM位帶區(qū)的某個(gè)比特,記它所在字節(jié)地址為A,位序號(hào)為n(0<=n<=7),則該比特在別名區(qū)的地址為:
AliasAddr=0x22000000+((A‐0x20000000)*8+n)*4=0x22000000+(A‐0x20000000)*32+n*4對(duì)于片上外設(shè)位帶區(qū)的某個(gè)比特,記它所在字節(jié)的地址為A,位序號(hào)為n(0<=n<=7),則該比特在別名區(qū)的地址為:AliasAddr=0x42000000+((A‐0x40000000)*8+n)*4=0x42000000+(A‐0x40000000)*32+n*43.5總線接口
系統(tǒng)總線用于訪問內(nèi)存和外設(shè),覆蓋的區(qū)域包括SRAM,片上外設(shè),片外RAM,片外外設(shè)等。CM3處理器的總線接口是基于AHB和APB協(xié)議的,它們的規(guī)格在AMBA規(guī)格書中給出。I-Code總線
I‐Code總線是一條基于AHB總線協(xié)議的32位總線,負(fù)責(zé)在0x0000_0000–0x1FFF_FFFF
之間的取指操作。取指以字的長度執(zhí)行,即使是對(duì)于16位指令也如此。因此CPU內(nèi)核可以一次取出兩條16位Thumb指令。D-Code總線
D‐Code總線也是一條基于AHB總線協(xié)議的32位總線,負(fù)責(zé)在0x0000_0000–0x1FFF_FFFF之間的數(shù)據(jù)訪問操作。系統(tǒng)總線系統(tǒng)總線也是一條基于AHB總線協(xié)議的32
位總線,負(fù)責(zé)在0x2000_0000–0xDFFF_FFFF和0xE010_0000–0xFFFF_FFFF之間的所有數(shù)據(jù)傳送,取指和數(shù)據(jù)訪問都算上。外部私有外設(shè)總線
這是一條基于APB總線協(xié)議的32位總線。此總線來負(fù)責(zé)0xE004_0000–0xE00F_FFFF之間的私有外設(shè)訪問。但是,由于此APB存儲(chǔ)空間的一部分已經(jīng)被TPIU、ETM以及ROM表用掉了,就只留0xE004_2000‐E00F_F000這個(gè)區(qū)間用于配接附加的(私有)外設(shè)。調(diào)試訪問端口總線
調(diào)試訪問端口總線接口是一條基于“增強(qiáng)型APB規(guī)格”的32位總線,它專用于掛接調(diào)試接口,例如SWJ‐DP和SW‐DP。典型的連接方式Cortex-M3處理器系統(tǒng)方框圖存儲(chǔ)器保護(hù)單元(MPU)
Cortex‐M3有一個(gè)可選的存儲(chǔ)器保護(hù)單元。配上它之后,就可以對(duì)特權(quán)級(jí)訪問和用戶級(jí)訪問分別施加不同的訪問限制。最常見的就是由操作系統(tǒng)使用MPU,以便使特權(quán)級(jí)代碼的數(shù)據(jù)(包括操作系統(tǒng)本身的數(shù)據(jù))不被其它用戶程序弄壞。MPU在保護(hù)內(nèi)存時(shí)是按區(qū)管理的。它可以把某些內(nèi)存region設(shè)置成只讀,從而避免了那里的內(nèi)容意外被更改;還可以在多任務(wù)系統(tǒng)中把不同任務(wù)之間的數(shù)據(jù)區(qū)隔離??傊?,它會(huì)使嵌入式系統(tǒng)變得更加健壯(Robust),更加可靠(很多行業(yè)標(biāo)準(zhǔn),尤其是航空的,就規(guī)定了必須使用MPU來行使保護(hù)職能。)3.6指令集Cortex‐M3只使用Thumb‐2指令集。在過去,做ARM開發(fā)必須處理好兩個(gè)狀態(tài)。它們是:32位的ARM狀態(tài)和16位的Thumb狀態(tài)。當(dāng)處理器在ARM狀態(tài)下時(shí),所有的指令均是32位的(哪怕只是個(gè)”NOP”指令),此時(shí)性能相當(dāng)高。而在Thumb狀態(tài)下,所有的指令均是16位的,代碼密度提高了一倍。不過,thumb狀態(tài)下的指令功能只是ARM下的一個(gè)子集,結(jié)果可能需要更多條的指令去完成相同的工作,導(dǎo)致處理性能下降。為了取長補(bǔ)短,很多應(yīng)用程
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年山西省晉中市單招職業(yè)傾向性考試題庫及參考答案詳解1套
- 2026年商丘學(xué)院單招綜合素質(zhì)考試題庫及答案詳解一套
- 2026年銅仁職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案詳解一套
- 2026年常州紡織服裝職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫帶答案詳解
- 2026年無錫科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及參考答案詳解1套
- 2026年貴州省黔東南苗族侗族自治州單招職業(yè)傾向性測試題庫參考答案詳解
- 2026年河北科技工程職業(yè)技術(shù)大學(xué)單招職業(yè)傾向性測試題庫帶答案詳解
- 2026年開封文化藝術(shù)職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及參考答案詳解
- 2026年福建信息職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性考試題庫附答案詳解
- 2026年遂寧能源職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案詳解一套
- 高效能人士提高辦事效率七個(gè)習(xí)慣學(xué)員
- VTE風(fēng)險(xiǎn)評(píng)估與預(yù)防措施
- 鐵塔公司考試認(rèn)證題庫(按專業(yè))-3室分專業(yè)
- 2019國家安全知識(shí)競賽試題試題及答案大全(共471題)
- 高中英語語法專項(xiàng) 詞性轉(zhuǎn)換(構(gòu)詞法)練習(xí)試題高考例句
- DL-T 2092-2020 火力發(fā)電機(jī)組電氣啟動(dòng)試驗(yàn)規(guī)程
- 合成生物學(xué)與基因回路課件
- 專題十-復(fù)合場課件
- 智慧樹知到《走進(jìn)故宮》2019期末考試答案
- 樂隊(duì)指揮教案
- 高出作業(yè)吊籃驗(yàn)收表
評(píng)論
0/150
提交評(píng)論