1.寄存器架構
CM3擁有R0~R15通用寄存器和一些特殊功能寄存器spa
R0~R12這些通用寄存器,復位初始值都是不可預料的線程
2.CM3有R0到R15的通用寄存器組3d
注:絕大部分的16位thumb只能訪問R0到R7,而32位thumb-2能夠訪問所有寄存器指針
3.特殊功能寄存器blog
3.1程序狀態寄存器組(應用程序PSR+中斷號PSR+執行PSR)進程
3.2中斷屏蔽寄存器組:用於控制異常的除能和使能硬件
3.3控制寄存器:用於定義特權級別和當前使用哪一個堆棧指針權限
4.操做模式和特權級別:程序
兩種操做模式(處理器模式):Handler模式和線程模式(用於區分異常服務例程的代碼和普通程序的代碼)
兩種特權等級:特權級和用戶級(是指在硬件層面上對存儲器訪問權限的設置)
注:CM3在運行主程序(即線程模式)能夠使用特權級別和用戶級別;可是異常服務例程(即handler模式)只能使用特權級別。當處於線程+用戶模式時一些訪問權限將被禁止
將代碼區分紅用戶級和特權級,有利於程序架構的穩定,如某一個用戶代碼出問題,不會使其成爲害羣之狗,由於用戶級別的代碼是禁止對一些要害寄存器操做的。
5.異常處理
5.1CONTROL[0]=0;
5.2CONTROL[0]=1;
CONTROL[0]只有在特權級別下能夠訪問,若在用戶級別想訪問先經過"系統服務呼叫指令(SVC)"來觸發SVC異常,而後在該異常的服務例程中能夠修改CONTROL[0]。
6.下面是各操做模式的轉換
7.異常和中斷
能夠有11個系統異常和最多240個外部中斷(IRQ),具體芯片使用了多少要看芯片製造廠商。
做爲中斷功能的強化,NVIC 還有一條NMI輸入信號線,具體作什麼由芯片製造商決定,NMI(not masked interrupted)
8.向量表:當一個異常被CM3內核接受。對應的異常Handler就會執行,向量表用來決定Handler的入口地址。
9.CM3的雙堆棧:主堆棧(MSP)和進程堆棧(PSP)。是由CONTROL[1]控制的。
10.復位序列:
先從0X00地址取出MSP的值再從0x04地址取出PC的初始值,0X04處存的值是復位向量,而不是跳轉指令。
此處CM3與ARM及單片機不一樣。之前ARM都是從0X00地址開始執行第一條指令,通常第一條指令都是跳轉指令
11.MSP及PC初始化的一個例程