STM32的這些經(jīng)典功能你真的掌握了嗎_第1頁(yè)
STM32的這些經(jīng)典功能你真的掌握了嗎_第2頁(yè)
STM32的這些經(jīng)典功能你真的掌握了嗎_第3頁(yè)
STM32的這些經(jīng)典功能你真的掌握了嗎_第4頁(yè)
STM32的這些經(jīng)典功能你真的掌握了嗎_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

首先,在學(xué)習(xí)Cortex-M3時(shí),我們必須要知道必要的縮略語(yǔ)。

整理如下:AMBA:先進(jìn)單片機(jī)總線架構(gòu)

ADK:AMBA設(shè)計(jì)套件AHB:先進(jìn)高性能總線

AHB-AP:AHB訪問(wèn)端口APB:先進(jìn)外設(shè)總線

ARMARM:ARM架構(gòu)參考手冊(cè)ASIC:行業(yè)領(lǐng)域?qū)S眉呻娐?/p>

ATB:先進(jìn)跟蹤總線BE8:字節(jié)不變式大端模式

CPI:每條指令的周期數(shù)DAP:調(diào)試訪問(wèn)端口

DSP:數(shù)字信號(hào)處理(器)DWT:數(shù)據(jù)觀察點(diǎn)及跟蹤

ETM:嵌入式跟蹤宏單元FPB:閃存地址重載及斷點(diǎn)FSR:fault狀態(tài)寄存器HTM:CoreSightAHB跟蹤宏單元ICE:在線仿真器

IDE:集成開發(fā)環(huán)境IRQ:中斷請(qǐng)求(通常是外中斷請(qǐng)求)ISA:指令系統(tǒng)架構(gòu)

ISR:中斷服務(wù)例程ITM:儀器化跟蹤宏單元

JTAG:連接點(diǎn)測(cè)試行動(dòng)組(一個(gè)關(guān)于測(cè)試和調(diào)試接口的標(biāo)準(zhǔn))LR:連接寄存器LSB:最低有效位MSB:最高有效位LSU:加載存儲(chǔ)單元MCU:微控制器單元MPU:存儲(chǔ)器保護(hù)單元MMU:存儲(chǔ)器管理單元MSP:主堆棧指針NMI:不可屏蔽中斷NVIC:嵌套向量中斷控制器PC:程序計(jì)數(shù)器PPB:私有外設(shè)總線同時(shí),還要如下規(guī)定:數(shù)值1.4''hC,0x123

都表示16進(jìn)制數(shù)

2.#3表示數(shù)字3(e.g.,IRQ#3

就是指3號(hào)中斷)

3.#immed_12表示一個(gè)12位的立即數(shù)

4.

寄存器位。通常是表示一個(gè)位段的數(shù)值,例如

bit[15:12]

表示位序號(hào)從15往下數(shù)到12,這一段的數(shù)值。寄存器訪問(wèn)類型

1.

R

表示只讀

2.

W表示只寫

3.

RW

表示可讀可寫(前3條好像地球人都知道)

4.

R/Wc

表示可讀,但是寫訪問(wèn)將使之清0Cortex-M3芯片簡(jiǎn)介1、芯片的基本結(jié)構(gòu)如下圖2、關(guān)于ARMv7的知識(shí)了解在這個(gè)版本中,內(nèi)核架構(gòu)首次從單一款式變成3種款式??钍紸:設(shè)計(jì)用于高性能的“開放應(yīng)用平臺(tái)”——越來(lái)越接近電腦了??钍絉:用于高端的嵌入式系統(tǒng),尤其是那些帶有實(shí)時(shí)要求的——又要快又要實(shí)時(shí)。

款式M:用于深度嵌入的,單片機(jī)風(fēng)格的系統(tǒng)中。介紹A:用于高性能的“開放應(yīng)用平臺(tái)”,應(yīng)用在那些需要運(yùn)行復(fù)雜應(yīng)用程序的處理器。支持大型嵌入式操作系統(tǒng)。R:用于高端的嵌入式系統(tǒng),要求實(shí)時(shí)性的。M:用于深度嵌入的、單片機(jī)風(fēng)格的系統(tǒng)中。3、Cortex-M3處理器的舞臺(tái)高性能+高代碼密度+小硅片面積,使得CM3大面積地成為理想的處理平臺(tái),主要應(yīng)用在以下領(lǐng)域:(1)低成本單片機(jī)(2)汽車電子(3)數(shù)據(jù)通信(4)工業(yè)控制(5)消費(fèi)類電子產(chǎn)品4、Cortex-M3概覽(1)簡(jiǎn)介Cortex-M3是一個(gè)32位處理器內(nèi)核。內(nèi)部的數(shù)據(jù)路徑是32位的,寄存器是32位的,存儲(chǔ)器接口也是32位的。CM3采用了哈佛結(jié)構(gòu),擁有獨(dú)立的指令總線和數(shù)據(jù)總線,可以讓取指與數(shù)據(jù)訪問(wèn)并行不悖。這樣一來(lái)數(shù)據(jù)訪問(wèn)不再占用指令總線,從而提升了性能。為實(shí)現(xiàn)這個(gè)特性,CM3內(nèi)部含有好幾條總線接口,每條都為自己的應(yīng)用場(chǎng)合優(yōu)化過(guò),并且它們可以并行工作。但是另一方面,指令總線和數(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的簡(jiǎn)化圖(3)寄存器組

處理器擁有R0-R15的寄存器組,其中R13最為堆棧指針SP,SP有兩個(gè),但是同一時(shí)刻只能有一個(gè)可以看到,這就是所謂的“banked”寄存器。a、R0-R12都是32位通用寄存器,用于數(shù)據(jù)操作。但是注意:絕大多數(shù)16位Thumb指令只能訪問(wèn)R0-R7,而32位Thumb-2指令可以訪問(wèn)所有寄存器。

b、Cortex-M3擁有兩個(gè)堆棧指針,然而它們是banked,因此任一時(shí)刻只能使用其中的一個(gè)。

主堆棧指針(MSP):復(fù)位后缺省使用的堆棧指針,用于操作系統(tǒng)內(nèi)核以及異常處理例程(包括中斷服務(wù)例程)

進(jìn)程堆棧指針(PSP):由用戶的應(yīng)用程序代碼使用。---堆棧指針的最低兩位永遠(yuǎn)是0,這意味著堆??偸?字節(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)Cortex-M3處理器支持兩種處理器的操作模式,還支持兩級(jí)特權(quán)操作。

兩種操作模式分別為:處理者模式和線程模式(threadmode)。引入兩個(gè)模式的本意,是用于區(qū)別普通應(yīng)用程序的代碼和異常服務(wù)例程的代碼——包括中斷服務(wù)例程的代碼。

Cortex-M3的另一個(gè)側(cè)面則是特權(quán)的分級(jí)——特權(quán)級(jí)和用戶級(jí)。這可以提供一種存儲(chǔ)器訪問(wèn)的保護(hù)機(jī)制,使得普通的用戶程序代碼不能意外地,甚至是惡意地執(zhí)行涉及到要害的操作。處理器支持兩種特權(quán)級(jí),這也是一個(gè)基本的安全模型。在CM3運(yùn)行主應(yīng)用程序時(shí)(線程模式),既可以使用特權(quán)級(jí),也可以使用用戶級(jí);但是異常服務(wù)例程必須在特權(quán)級(jí)下執(zhí)行。復(fù)位后,處理器默認(rèn)進(jìn)入線程模式,特權(quán)極訪問(wèn)。在特權(quán)級(jí)下,程序可以訪問(wèn)所有范圍的存儲(chǔ)器(如果有MPU,還要在MPU規(guī)定的禁地之外),并且可以執(zhí)行所有指令。

在特權(quán)級(jí)下的程序可以為所欲為,但也可能會(huì)把自己給玩進(jìn)去——切換到用戶級(jí)。一旦進(jìn)入用戶級(jí),再想回來(lái)就得走“法律程序”了——用戶級(jí)的程序不能簡(jiǎn)簡(jiǎn)單單地試圖改寫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í)。

事實(shí)上,從用戶級(jí)到特權(quán)級(jí)的唯一途徑就是異常:如果在程序執(zhí)行過(guò)程中觸發(fā)了一個(gè)異常,處理器總是先切換入特權(quán)級(jí),并且在異常服務(wù)例程執(zhí)行完畢退出時(shí),返回先前的狀態(tài)。

通過(guò)引入特權(quán)級(jí)和用戶級(jí),就能夠在硬件水平上限制某些不受信任的或者還沒(méi)有調(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(NestedVectoredInterruptController)。它與內(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)來(lái)了更高優(yōu)先級(jí)的異常,處理器就會(huì)中斷當(dāng)前的中斷服務(wù)例程(或者是普通程序),而服務(wù)新來(lái)的異?!戳⒓磽屨?。

向量中斷支持:

當(dāng)開始響應(yīng)一個(gè)中斷后,CM3會(huì)自動(dòng)定位一張向量表,并且根據(jù)中斷號(hào)從表中找出ISR的入口地址,然后跳轉(zhuǎn)過(guò)去執(zhí)行。不需要像以前的ARM那樣,由軟件來(lái)分辨到底是哪個(gè)中斷發(fā)生了,也無(wú)需半導(dǎo)體廠商提供私有的中斷控制器來(lái)完成這種工作。這么一來(lái),中斷延遲時(shí)間大為縮短。(5)存儲(chǔ)器映射Cortex-M3支持4G存儲(chǔ)空間,具體分配如下圖:

(6)總線接口Cortex-M3內(nèi)部有若干個(gè)總線接口,以使CM3能同時(shí)取址和訪內(nèi)(訪問(wèn)內(nèi)存),它們是:

指令存儲(chǔ)區(qū)總線(兩條)

系統(tǒng)總線私有外設(shè)總線有兩條代碼存儲(chǔ)區(qū)總線負(fù)責(zé)對(duì)代碼存儲(chǔ)區(qū)的訪問(wèn),分別是I-Code總線和D-Code總線。前者用于取指,后者用于查表等操作,它們按最佳執(zhí)行速度進(jìn)行優(yōu)化。

系統(tǒng)總線用于訪問(wèn)內(nèi)存和外設(shè),覆蓋的區(qū)域包括SRAM,片上外設(shè),片外RAM,片外擴(kuò)展設(shè)備,以及系統(tǒng)級(jí)存儲(chǔ)區(qū)的部分空間。

私有外設(shè)總線負(fù)責(zé)一部分私有外設(shè)的訪問(wèn),主要就是訪問(wèn)調(diào)試組件。它們也在系統(tǒng)級(jí)存儲(chǔ)區(qū)。

(7)存儲(chǔ)器保護(hù)單元(MPU)

Cortex-M3有一個(gè)可選的存儲(chǔ)器保護(hù)單元。配上它之后,就可以對(duì)特權(quán)級(jí)訪問(wèn)和用戶級(jí)訪問(wèn)分別施加不同的訪問(wèn)限制。當(dāng)檢測(cè)到犯規(guī)(violated)時(shí),MPU就會(huì)產(chǎn)生一個(gè)fault異常,可以由fault異常的服務(wù)例程來(lái)分析該錯(cuò)誤,并且在可能時(shí)改正它。

MPU有很多玩法。最常見(jiàn)的就是由操作系統(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)變得更加健壯,更加可靠(很多行業(yè)標(biāo)準(zhǔn),尤其是航空的,就規(guī)定了必須使用MPU來(lái)行使保護(hù)職能——譯注)。(8)Cortex-M3的簡(jiǎn)評(píng)1、高性能許多指令都是單周期的——包括乘法相關(guān)指令。并且從整體性能上,Cortex-M3比得過(guò)絕大多數(shù)其它的架構(gòu)。

指令總線和數(shù)據(jù)總線被分開,取值和訪內(nèi)可以并行不悖。Thumb-2的到來(lái)告別了狀態(tài)切換的舊世代,再也不需要花時(shí)間來(lái)切換于32位ARM狀態(tài)和16位Thumb狀態(tài)之間了。這簡(jiǎn)化了軟件開發(fā)和代碼維護(hù),使產(chǎn)品面市更快。

Thumb-2指令集為編程帶來(lái)了更多的靈活性。許多數(shù)據(jù)操作現(xiàn)在能用更短的代碼搞定,這意味著Cortex-M3的代碼密度更高,也就對(duì)存儲(chǔ)器的需求更少。

取指都按32位處理。同一周期最多可以取出兩條指令,留下了更多的帶寬給數(shù)據(jù)傳輸。

Cortex-M3的設(shè)計(jì)允許單片機(jī)高頻運(yùn)行(現(xiàn)代半導(dǎo)體制造技術(shù)能保證100MHz以上的速度)即使在相同的速度下運(yùn)行,CM3的每指令周期數(shù)(CPI)也更低,于是同樣的MHz下可以做更多的工作;另一方面,也使同一個(gè)應(yīng)用在CM3上需要更低的主頻。2、先進(jìn)的中斷處理功能內(nèi)建的嵌套向量中斷控制器支持240條外部中斷輸入。向量化的中斷功能大大減少了中斷延遲,因?yàn)椴辉谛枰浖ヅ袛嘀袛嘣?。中斷的嵌套也是在硬件水平上?shí)現(xiàn)的,不需要軟件代碼來(lái)實(shí)現(xiàn)。Cortex-M3在進(jìn)入異常服務(wù)例程時(shí),自動(dòng)壓棧了R0-R3,R12,LR,PSR和PC,并且在返回時(shí)自動(dòng)彈出它們,這多清爽!既加速了中斷的響應(yīng),也再不需要匯編語(yǔ)言代碼了NVIC支持對(duì)每一路中斷設(shè)置不同的優(yōu)先級(jí),使得中斷管理極富彈性。最粗線條的實(shí)現(xiàn)也至少要支持8級(jí)優(yōu)先級(jí),而且還能動(dòng)態(tài)地被修改。優(yōu)化中斷響應(yīng)還有兩招,它們分別是“咬尾中斷機(jī)制”和“晚到中斷

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論