Cortex-M0系統(tǒng)控制塊(SCB)是內(nèi)核外設(shè)的主要模塊之一,提供系統(tǒng)控制以及系統(tǒng)執(zhí)行信息,包括配置,控制,上報(bào)系統(tǒng)異常等。
為了提高軟件效率,CMSIS簡化了SCB寄存器表示,在CMSIS中系統(tǒng)控制寄存器結(jié)構(gòu)體:
typedefstruct {__IMuint32_tCPUID;/*!
一、CPUID
CPUID基地址寄存器包含處理器型號、版本等相關(guān)信息,是只讀的,可以通過應(yīng)用軟件、調(diào)試器和燒錄器等獲取處理器的類型和版本信息。
Address: 0xE000ED00 Reset value: 0x410CC200
這個(gè)地方CPUID與我們經(jīng)常提到的MCU的96位UID不同,CPUID是處理器的ID號,由Arm提供并實(shí)現(xiàn),通過CPUID可以知道內(nèi)核型號及版本等信息。
而96位UID是MCU產(chǎn)品ID,屬于MM32,由上海靈動微電子股份有限公司提供并按照一定的規(guī)則實(shí)現(xiàn),96位的產(chǎn)品唯一身份標(biāo)識所提供的參考號碼對任意一個(gè)系列微控制器,在任何情況下都是唯一的。
用戶在何種情況下,都不能修改這個(gè)身份標(biāo)識。MCU還有一個(gè)DEV_ID編碼,這個(gè)ID定義了MCU的器件號和硅片版本號,它是DBG_MCU的一個(gè)組成部分,并且映射到外部APB總線上。SW 調(diào)試口(2個(gè)引腳) 或通過用戶代碼都可以訪問此編碼。
DEV_ID地址:0x40013400 只支持32位訪問,只讀。
在CMSIS驅(qū)動庫中,可以直接使用“ SCB->CPUID ” 獲取處理器ID。讀取MM32F0130的CPUID、UID和DEV_ID如下所示:
CPUID (0x410CC200)解析處理器信息:
二、ICSR (Interrupt Control and State Register)
提供:
NMI異常的設(shè)置掛起位
為PendSV和SysTick異常設(shè)置掛起和清除掛起位
表示:
正在處理的異常的異常編號
是否有被搶占的活動異常
最高優(yōu)先級未決異常的異常編號
是否有任何中斷待處理
Address: 0xE000ED04 Reset value: 0x0000 0000
ICSR中的某些控制位僅供調(diào)試使用,大多數(shù)情況下,應(yīng)用程序只會用ICSR來控制或者檢查系統(tǒng)異常掛起狀態(tài)。
PendSV(可掛起的系統(tǒng)調(diào)用)異常對 OS 操作非常重要,其優(yōu)先級可以通過編程設(shè)置??梢酝ㄟ^將中斷控制和壯態(tài)寄存器 ICSR 的 bit28掛起位置1來觸發(fā)PendSV中斷。與SVC異常不同,它是不精確的,因此它的掛起狀態(tài)可在更高優(yōu)先級異常處理內(nèi)設(shè)置,且會在高優(yōu)先級處理完成后執(zhí)行。
利用該特性,若將PendSV設(shè)置為最低的異常優(yōu)先級,可以讓PendSV異常處理在所有其他中斷處理完成后執(zhí)行,這對于上下文切換非常有用,也是各種OS設(shè)計(jì)中的關(guān)鍵。在具有嵌入式OS的典型系統(tǒng)中,處理時(shí)間被劃分為了多個(gè)時(shí)間片。通過向中斷控制和狀態(tài)寄存器 ICSR 的 bit28 寫入1掛起PendSV來啟動PendSV中斷,如果中斷啟用且有編寫 PendSV 異常服務(wù)函數(shù)的話,則內(nèi)核會響應(yīng) PendSV 異常,去執(zhí)行PendSV 異常服務(wù)函數(shù),這樣就可以在PendSV中斷服務(wù)函數(shù)中進(jìn)行任務(wù)切換了。
三、AIRCR (Application Interrupt and Reset Control Register)
AIRCR為數(shù)據(jù)訪問和系統(tǒng)的復(fù)位控制提供字節(jié)序狀態(tài)。
要寫入該寄存器,您必須寫入0x05FA VECTKEY 字段,否則處理器將忽略寫入。
Address: 0xE000ED0C Reset value: 0xFA05 0000
任何對該寄存器的寫操作,都必須將0x05FA寫入到AIRCR[30:16],否則寫操作將無效,若需要半字讀取,需要寫入0xFA05。
應(yīng)用程序中系統(tǒng)執(zhí)行軟復(fù)位函數(shù):
__STATIC_INLINEvoidNVIC_SystemReset(void) {__DSB();//確保所有未完成的內(nèi)存訪問包括緩沖寫入在重置之前完成 SCB->AIRCR=((0x5FAUL<
四、SCR (System Control Register)
SCR 控制進(jìn)入和退出低功耗狀態(tài)的特性。
Address: 0xE000ED10 Reset value: 0x0000 0000
審核編輯:劉清
-
處理器
+關(guān)注
關(guān)注
68文章
19740瀏覽量
232918 -
寄存器
+關(guān)注
關(guān)注
31文章
5401瀏覽量
122808 -
CMSIS
+關(guān)注
關(guān)注
0文章
40瀏覽量
12162 -
Cortex-M0
+關(guān)注
關(guān)注
4文章
125瀏覽量
39224 -
中斷控制
+關(guān)注
關(guān)注
0文章
26瀏覽量
8957
原文標(biāo)題:Cortex-M0中斷控制和系統(tǒng)控制(四)
文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
靈動微課堂 (第176講) | Cortex-M0中斷控制和系統(tǒng)控制(二)
靈動微課堂 (第178講) | Cortex-M0中斷控制和系統(tǒng)控制(四)
恩智浦推出基于Cortex-M0微控制LPC1100微控制器
新唐科技推出基于Cortex-M0內(nèi)核的32位MCU
TinyM0配套教程】LPC1100系列Cortex-M0最小系統(tǒng)設(shè)計(jì)

TinyM0配套教程LPC1100系列Cortex-M0最小系統(tǒng)設(shè)計(jì)

基于ARM Cortex-M0核的MCU設(shè)計(jì)及應(yīng)用

Cortex-M0中斷控制和系統(tǒng)控制(二)

Cortex-M0中斷控制和系統(tǒng)控制
全球最強(qiáng)性能Cortex-M0 MCU誕生!
Cortex-M0中斷控制和系統(tǒng)控制知識點(diǎn)
敏矽微電子Cortex-M0學(xué)習(xí)筆記02——Cortex-M0開發(fā)環(huán)境的建立及調(diào)試

評論