ARMV8-M学习笔记-入门
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
說明:
本文總結的僅限于armv8-M架構,實現main extension,支持Trustzone
目錄
- 1、簡介
- 2、寄存器
- 2.1 寄存器的總結
- 2.1.1、通用寄存器,所有的都是32位:
- 2.1.2、特殊寄存器:
- 2.1.3、Memory-mapped寄存器
- 2.2 、XPSR, APSR, IPSR, and EPSR的介紹
- 2.2.1 、Interrupt Program Status Register (IPSR)
- 2.2.2 、Execution Program Status Register (EPSR)
- 2.3、CONTROL寄存器
- 4、指令集ISA
- 4、安全狀態
- 5、異常號和異常優先級
1、簡介
Cortex-M 處理器系列基于 M-Profile 架構,可為深度嵌入式系統提供低延遲和高度確定性的操作。我們最新一代的 Cortex-M 處理器是 Cortex-M55。Cortex-M55 是第一款基于 Armv8.1-M 架構的處理器,采用向量處理擴展 Arm Helium 技術。Cortex-M55 為下一代小型嵌入式設備(包括可穿戴設備、智能揚聲器等)帶來更高水平的機器學習和信號處理性能。
Cortex-M 處理器旨在支持微控制器市場
- 基于 RISC 架構,大多數指令在單個周期內執行
- 編程更簡單——整個應用程序都可以用 C 語言編程
- 所需的功能比Cortex-A少
其他 ARM 內核的寄存器和 ISA變化
- 使用的是Thumb指令,不支持 ARM 指令集(即不支持A32,不支持A64)
- 通用寄存器僅僅SP是banked
- 兩種操作模式:Thread模式和Handler模式
不同的模式和異常模型
- 只有兩種執行模式:Thread 和 Handler 模式
- 向量表由地址組成,不包含指令
- 異常自動將狀態(R0-R3、R12、LR、ReturnAddress、RETPSR)保存在堆棧上
不同的系統控制/內存布局
- 內核有一個固定的內存映射
- 無協處理器 C15 – 通過內存映射控制寄存器控制 (MRS,MSR)
ARMv8-M 是 32 位加載/存儲架構
- 唯一允許的內存訪問是加載和存儲
- 大多數內部寄存器都是 32 位寬
編程模型
兩種模式: Thread mode 和 Handler mode
在Thread mode下又有2個執行級別: privileged 和 Unprivileged
2、寄存器
2.1 寄存器的總結
2.1.1、通用寄存器,所有的都是32位:
- R0-R12 (Rn).
- R13 堆棧寄存器 (SP).
- R14 鏈接寄存器 (LR).
- R15 程序計數器 (PC)
2.1.2、特殊寄存器:
-
掩碼(MASK)寄存器:
(1)、異常掩碼寄存器:PRIMASK
(2)、優先級掩碼寄存器:BASEPRI.
(3)、錯誤掩碼寄存器:FAULTMASK -
控制寄存器:CONTROL
-
2個棧指針限制寄存器:MSPLIM 和 PSPLIM
-
程序狀態寄存器:Program Status Register (XPSR), 包含:
(1)、Application Program Status Register (APSR).
(2)、Interrupt Program Status Register (IPSR).
(3)、Execution Program Status Register (EPSR)
2.1.3、Memory-mapped寄存器
除此之外,還有一些memory-mapped的寄存器
2.2 、XPSR, APSR, IPSR, and EPSR的介紹
msr、mrs 可以分段訪問這些寄存器
2.2.1 、Interrupt Program Status Register (IPSR)
- 當PE在Thread模式時, IPSR值是0
- 當PE在Handler模式時,
(1) 當一個異常進入是IPSR 保存著正在處理的異常的異常號
(2) 當Secure state到Non-secure state 調用時,IPSR值是1 - 使用MRS指令強行修改IPSR, 不會生效的
2.2.2 、Execution Program Status Register (EPSR)
主要是EPSR.T 比特位
- 0 - 任何指令都將產生 INVSTATE錯誤 或 HardFault
- 指令集使用T32
2.3、CONTROL寄存器
- 僅僅Privileged execution狀態可以寫控制寄存器,Privileged和unPrivileged狀態都可以讀控制寄存器。
- 該體系結構需要一個Context同步事件來保證對CONTROL寄存器更改的可見性
- 當一個異常進入或者退出時,硬件會自動修改CONTROL.SPSEL, 當PE在Thread mode時CONTROL.SPSEL可用于選擇棧指針
4、指令集ISA
所有 Cortex-M 處理器都支持稱為 Thumb 的指令集。 當 Thumb-2 技術可用時,完整的 Thumb 指令集在擴展時變得相當大。 但是,不同的 Cortex-M 處理器支持 Thumb ISA 中可用的不同指令子集,如下圖所示:
4、安全狀態
- 如果實施了安全擴展,則標記為安全的內存區域和其他關鍵資源只有在 PE 以安全狀態執行時才能訪問
- 如果實施了安全擴展, 則在 Cold reset 和 Warm reset時,PE將進入Secure狀態
- 如果實施了安全擴展, 則在 Cold reset 和 Warm reset時,PE將進入NON-Secure狀態
實施了安全擴展后,下列寄存器都是banked by security:
- 通用寄存器中的R13(SP)
- 特殊寄存器中的 : MASK寄存器(PRIMASK, BASEPRI, FAULTMASK)、CONTROL 寄存器、棧指針限制寄存器(MSPLIM ,PSPLIM)
- System Control Space (SCS)
MRS 和MSR指令編碼中的bit[7]表示操作的是哪組寄存器(Secure or NON-Secure)
cortex-A Trustzone 和 cortex-M Trustzone的對比:
在cortex-M上,雙系統的切換,使用的是 Secure Gateway (SG) 指令,但只允許在特殊的memory上調用SG,即使NSC(non-secure callable)
5、異常號和異常優先級
cortex-M中內置一個Nested Vectored Interrupt Controller (NVIC) 中斷控制器
cortex-M的異常和中斷具有以下優先級
總結
以上是生活随笔為你收集整理的ARMV8-M学习笔记-入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM Cortex-M学习简介
- 下一篇: armv8-M(cortex-m) Tr