STM32F4 编程手册学习1_编程模型
STM32F4 programming manual_1
1. 處理器模式與特權等級
處理器模式分為以下兩種:
線程模式:
用來執行應用軟件;
處理器從reset出來時,進入線程模式;
CONTROL寄存器控制軟件的執行狀態時特權的還是非特權的。處理模式:
用來處理異常;
完成異常處理后,進入線程模式;
該模式下,軟件運行在特權等級上。
特權等級有以下兩種:
非特權:
對于MSR、MRS指令受限的權限,不能使用CPS指令;
不能使用系統定時器、NVIC、系統控制塊;
對于部分內存和外設的訪問受限
必須使用SVC指令來執行超級訪問者調用以控制特權等級的軟件特權:
可以使用所有指令,訪問所有資源。
可以寫CONTROL寄存器來改變軟件執行的特權等級。
2. 棧
處理器使用向下增長的棧,這意味著棧指針指向棧內存的最后一個成員。當處理器將數據壓入棧時,首先將棧指針減小相應的字節數,然后將數據寫入棧指針所指的內存地址。處理器使用了兩個的棧main stack和process stack,他倆擁有棧指針的獨立拷貝。
在線程模式下,CONTROL寄存器控制處理器使用哪個棧(main stack or process stack)。在處理模式下,處理器總是使用 main stack。
| 線程模式 | 運行應用 | 特權 或 非特權 | main stack or process stack |
| 處理模式 | 處理異常 | 總是特權 | main stack |
3. 核心寄存器
通用寄存器
R0-R12 是32位通用寄存器,其中R0-R3四個寄存器可用于參數傳遞與結果返回。棧指針SP
R13用于存儲棧指針,在線程模式下,CONTROL寄存器的bit[1]表示使用哪個棧(main stack or process stack)。
bit[1] = 0: 使用主棧main stack pointor(MSP), 這是reset時設置的值,也就是默認值。
bit[1] = 1:使用process stack pointor(PSP)
reset時,MSP被裝載0x00000000.鏈接寄存器LR
R14用于存儲鏈接指針,主要是在發生函數調用的場合,LR寄存器存儲子函數的返回地址。發生指令跳轉時,如BL指令,首先將PC中地址存入LR寄存器中,然后將跳轉目的地址存到PC中。
reset時,該值被置為0xFFFFFFFFF.程序計數器PC
R15用于存儲當前程序地址,reset時該寄存器裝載reset向量的地址,這在地址 0x00000004的位置。
reset時,bit[0]的值被裝載到EPSR的T位,而且必須為1。程序狀態寄存器PSR,該寄存器內存在幾個互斥的位域可分別用以下寄存器表示。(同一個物理地址,幾個不同名字)
應用程序狀態寄存器 APSR
中斷程序狀態寄存器 IPSR
異常程序狀態寄存器 EPSR
- CONTROL 寄存器
該寄存器控制在線程模式下使用哪個棧以及軟件運行的特權等級
指示FPU狀態是否激活
處理模式下,處理器總是使用MSP的,因此處理器會忽略對寄存器bit[1]的寫入操作。
在OS環境中,建議線程運行在線程模式下使用PSP(process stack);kernel和異常處理使用MSP(main stack)。
默認情況下,線程模式使用MSP(main stack)。可以通過下面兩種方式將棧指針切換到PSP。
- 使用MSR指令,將CONTROL寄存器的bit[1]設置為1
- 異常返回到線程模式時,使用一個合適的EXC_RETURN值。
當改變棧指針時,軟件必須在使用MSR指令后,立即使用ISB指令。這保證了ISB指令之后的指令使用新的棧指針。
ISR指令是指令同步屏障(instruction synchronization barrier),它刷新了處理器的管道線,導致該指令之后的指令都要重新fetch。這條指令不會改變標志位。The Cortex microcontroller software interface standard (CMSIS)
該標準定義了如下內容
- 訪問外設的方式
- 定義異常向量的方式
- 核心外設寄存器的名字
- 核心異常向量的名字
- 使用RTOS內核的設備無關接口,包括調試模式
CMSIS包含了Cortex-M4處理器核心外設的地址和數據結構定義
簡化了軟件開發過程
本文圖表引用自《PM0214: STM32F3, STM32F4 and STM32L4 Series Cortex?-M4 programming manual》
本文參考ST官方文檔《PM0214: STM32F3, STM32F4 and STM32L4 Series Cortex?-M4 programming manual》
轉載于:https://www.cnblogs.com/gexin/p/7610341.html
總結
以上是生活随笔為你收集整理的STM32F4 编程手册学习1_编程模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #1413 : Rikka with S
- 下一篇: python中的 set 中的元素