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