最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Cortex-M CPU架構(gòu)基礎(chǔ)

2022-07-14 14:55 作者:信盈達(dá)  | 我要投稿

不同于老的經(jīng)典arm處理器(例如:ARM7,ARM9),ARM Cortex-M 處理器有一個非常不同的架構(gòu),Cortex-M是一個家族系列,其中包括Cortex M0/M3/M4/M7多個不同型號,每個型號之間會有些區(qū)別,例如Cortex-M4比Cortex-M3多了浮點計算功能等,但它們的編程模型基本是一致的。


寄存器簡介

Cortex-M系列CPU的寄存器組里有R0~R15共16個通用寄存器組和若干特殊功能寄存器,如圖所示:

通用寄存器組里的R13作為堆棧指針寄存器(Stack Pointer,SP);R14作為連接寄存器(Link Register,LR),用于在調(diào)用子程序時,存儲返回地址;R15作為程序計數(shù)器(Program Counter,PC),其中堆棧指針寄存器可以是主堆棧指針(MSP),也可以是進(jìn)程堆棧指針(PSP)。

特殊功能寄存器包括程序狀態(tài)字寄存器組(PSRs)、終端屏蔽寄存器組(PRIMASK、FAULTMASK、BASEPRI)、控制寄存器(CONTROL),可以通過MSR\MRS指令來訪問特殊功能寄存器,例如:

MRS? ?R0,? CONTROL? ;讀取CONTROL到R0中

MSR? ?CONTROL,? ?R0 ;寫入R0到CONTROL寄存器中

程序狀態(tài)字寄存器里保存算術(shù)與邏輯標(biāo)志,例如負(fù)數(shù)標(biāo)志,零結(jié)果標(biāo)志,溢出標(biāo)志等等。中斷屏蔽寄存器組控制Cortex-M的中斷除能??刂萍拇嫫饔脕矶x特權(quán)級別和當(dāng)前使用哪個堆棧指針。

如果是具有浮點單元的COrtex-M4或者Cortex-M7,控制寄存器也用來指示浮點單元當(dāng)前是否在使用,浮點單元包含了32個浮點通用寄存器S0-S31和特殊FPSCR寄存器(Floating point status and control register)。


操作模式和特權(quán)級別

Cortex-M引入了操作模式和特權(quán)級別的概念,分別為線程模式和處理模式,如果進(jìn)入異常或中斷處理則進(jìn)入處理模式,其他情況則為線程模式。

Cortex-M有兩個運(yùn)行級別,分別為特權(quán)級和用戶級,線程模式可以工作在特權(quán)級或者用戶級,而處理模式總工作在特權(quán)級,可通過CONTROL特殊寄存器控制,工作模式狀態(tài)切換情況如上圖所示。

Cortex-M的堆棧寄存器SP對應(yīng)兩個物理寄存器MSP和PSP,MSP為主堆棧,PSP為進(jìn)程堆棧,處理模式總是使用MSP作為堆棧,線程模式可以選擇使用MSP或PSP作為堆棧,同樣通過CONTROL特殊寄存器控制。復(fù)位后,Cortex-M默認(rèn)進(jìn)入線程模式、特權(quán)級、使用MSP堆棧。


嵌套向量中斷控制器

Cortex-M中斷控制器名為NVIC(嵌套向量中斷控制器),支持中斷嵌套功能。當(dāng)一個中斷觸發(fā)并且系統(tǒng)響應(yīng)時,處理器硬件會將當(dāng)前運(yùn)行位置的上下文寄存器自動壓入中斷棧中,這部分的寄存器包括PSR、PC、LR、R12、R3-R0寄存器。

當(dāng)系統(tǒng)正在服務(wù)一個中斷時,如果有一個更高優(yōu)先級的中斷觸發(fā),那么處理器同樣會打斷當(dāng)前運(yùn)行的中端服務(wù)程序,然后把這個中斷服務(wù)程序上下文的PSR、PC、LR、R12、R3-R0寄存器自動保存到中斷棧中。


PendSV系統(tǒng)調(diào)用

PendSV也稱為可懸起的系統(tǒng)調(diào)用,它是一種異常,可以像普通的中斷一樣被掛起,它是專門用來輔助操作系統(tǒng)進(jìn)行上下文切換的。PendSV異常會被初始化為最低優(yōu)先級的異常。每次需要進(jìn)行上下文切換的時候,會手動觸發(fā)PendSV異常,在PendSV異常處理函數(shù)中進(jìn)行上下文切換。


中斷向量表

中斷向量表是所有中斷處理程序的入口,把一個函數(shù)(用戶中斷服務(wù)程序)同一個虛擬中斷向量表中的中斷向量聯(lián)系在一起。當(dāng)中斷向量對應(yīng)中斷發(fā)生的時候,被掛起的用戶中斷服務(wù)函數(shù)程序就會被調(diào)用執(zhí)行。

在Cortex-M內(nèi)核上,所有中斷都采用中斷向量表的方式進(jìn)行處理,即當(dāng)一個中斷觸發(fā)時,處理器將直接判定是哪個中斷源,然后直接跳轉(zhuǎn)到相應(yīng)的固定位置進(jìn)行處理,每個中斷服務(wù)程序必須排列在一起放在統(tǒng)一的地址上(這個地址必須要設(shè)置到NVIC的中斷向量偏移寄存器中)。中斷向量表一般由一個數(shù)組定義或在起始代碼中給出,默認(rèn)采用起始代碼給出:

以SysTick中斷為例,在系統(tǒng)啟動代碼中,需要填上SysTick_Handler中斷入口函數(shù),然后實現(xiàn)該函數(shù)即可對SysTick中斷進(jìn)行響應(yīng)。


來源:文章來源于網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。

Cortex-M CPU架構(gòu)基礎(chǔ)的評論 (共 條)

分享到微博請遵守國家法律
慈利县| 金华市| 岚皋县| 诸暨市| 淅川县| 聊城市| 黄石市| 锦州市| 阆中市| 通辽市| 额尔古纳市| 大理市| 通化县| 临泽县| 菏泽市| 邓州市| 台湾省| 黄浦区| 西藏| 开化县| 明水县| 勐海县| 桃源县| 石渠县| 德格县| 新郑市| 安陆市| 剑阁县| 衡南县| 德阳市| 乐陵市| 闸北区| 静安区| 土默特右旗| 周口市| 兖州市| 益阳市| 清水河县| 绍兴县| 普格县| 寿光市|