1.寄存器
CM3擁有R0~R15通用寄存器和一些特殊功能寄存器
R0~R12這些通用寄存器,復(fù)位初始值都是不可預(yù)料的
2.CM3有R0到R15的通用寄存器組
注:絕大部分的16位thumb只能訪問(wèn)R0到R7,而32位thumb-2可以訪問(wèn)全部寄存器
3.特殊功能寄存器
3.1程序狀態(tài)寄存器組(應(yīng)用程序PSR+中斷號(hào)PSR+執(zhí)行PSR)
3.2中斷屏蔽寄存器組:用于控制異常的除能和使能
3.3控制寄存器:用于定義特權(quán)級(jí)別和當(dāng)前使用哪個(gè)堆棧指針
4.操作模式和特權(quán)級(jí)別:
兩種操作模式(處理器模式):Handler模式和線程模式(用于區(qū)分異常服務(wù)例程的代碼和普通程序的代碼)
兩種特權(quán)等級(jí):特權(quán)級(jí)和用戶級(jí)(是指在硬件層面上對(duì)存儲(chǔ)器訪問(wèn)權(quán)限的設(shè)置)
注:CM3在運(yùn)行主程序(即線程模式)可以使用特權(quán)級(jí)別和用戶級(jí)別;但是異常服務(wù)例程(即handler模式)只能使用特權(quán)級(jí)別。當(dāng)處于線程+用戶模式時(shí)一些訪問(wèn)權(quán)限將被禁止
將代碼區(qū)分成用戶級(jí)和特權(quán)級(jí),有利于程序架構(gòu)的穩(wěn)定,如某一個(gè)用戶代碼出問(wèn)題,不會(huì)使其成為害群之狗,因?yàn)橛脩艏?jí)別的代碼是禁止對(duì)一些要害寄存器操作的。
5.異常處理
5.1CONTROL[0]=0;
5.2CONTROL[0]=1;
CONTROL[0]只有在特權(quán)級(jí)別下可以訪問(wèn),若在用戶級(jí)別想訪問(wèn)先通過(guò)"系統(tǒng)服務(wù)呼叫指令(SVC)"來(lái)觸發(fā)SVC異常,然后在該異常的服務(wù)例程中可以修改CONTROL[0]。
6.下面是各操作模式的轉(zhuǎn)換
7.異常和中斷
可以有11個(gè)系統(tǒng)異常和最多240個(gè)外部中斷(IRQ),具體芯片使用了多少要看芯片制造廠商。
作為中斷功能的強(qiáng)化,NVIC 還有一條NMI輸入信號(hào)線,具體做什么由芯片制造商決定,NMI(not masked interrupted)
8.向量表:當(dāng)一個(gè)異常被CM3內(nèi)核接受。對(duì)應(yīng)的異常Handler就會(huì)執(zhí)行,向量表用來(lái)決定Handler的入口地址。
9.CM3的雙堆棧:主堆棧(MSP)和進(jìn)程堆棧(PSP)。是由CONTROL[1]控制的。
10.復(fù)位序列:
先從0X00地址取出MSP的值再?gòu)?x04地址取出PC的初始值,0X04處存的值是復(fù)位向量,而不是跳轉(zhuǎn)指令。
此處CM3與ARM及單片機(jī)不同。以前ARM都是從0X00地址開(kāi)始執(zhí)行第一條指令,一般第一條指令都是跳轉(zhuǎn)指令
11.MSP及PC初始化的一個(gè)例程
-
寄存器
+關(guān)注
關(guān)注
31文章
5317瀏覽量
120006 -
Cortex-M3
+關(guān)注
關(guān)注
9文章
269瀏覽量
59429
原文標(biāo)題:Cortex-M3寄存器等基礎(chǔ)知識(shí)
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論