1. 程式人生 > >Cortex-M3概述

Cortex-M3概述

轉載至:https://blog.csdn.net/bulebin/article/details/74093147

MCU的主要組成有:核心、儲存器、外設。大部分剛接觸MCU的人員一般是從關注外設的使用開始,但對於要深入理解MCU工作原理,瞭解MCU的核心、儲存器這兩部分內容是很有必要的。本文將以Cortex-M3核心為例對MCU的核心做一個簡要分析。主要關注以下三個問題: 問題一、定義:Cortex-M3核心是什麼? 問題二、結構:Cortex-M3架構是怎麼樣的? 問題三、功能:Cortex-M3架構各模組各有什麼用?
下面我們來通過解答以上三個問題來初步認識Cortex-M3核心。
一、Cortex-M3核心是什麼(定義)? Cortex-M3 核心是微控制器的中央處理器單元 CPU
Cortex-M3 核心與基於 Cortex-M3 MCU區別 基於 Cortex-M3 MCU Cortex-M3+ 儲存器 + 外設等。 Cortex-M3核心通過介面匯流排的形式掛載了儲存器、外設、中斷等組成一個MCU, 如圖所示
 
二、Cortex-M3架構是怎麼樣的(結構)? 特點: 1、Cortex-M3 是一個 32 位處理器核心。內部的資料路徑是 32 位,暫存器是 32 位,儲存器介面是 32 位。 2、Cortex-M3 採用哈佛架構。擁有獨立的指令匯流排和資料匯流排,取指與資料訪問可以同時進行。 3、 支援小端模式、大端模式。 組成介紹: Cortex-M3核心的架構如下圖所示,本文我們主要關注架構圖中標了序號的模組。有:
暫存器組(①)、NVIC(②)、中斷和異常(③)、儲存器對映(④)、匯流排介面(⑤)、除錯支援(⑥)、指令集。(注:數字序號與圖中序號對應)
三、Cortex-M3架構各模組各有什麼用(功能)? 1、暫存器組(①)   1、R0-R12 :通用暫存器 R0-R12 都是 32 位通用暫存器,用於資料操作。絕大多數 16 Thumb 指令只能訪問 R0-R7 32 Thumb-2 指令可以訪問所有暫存器。 2、R13 :兩個堆疊指標。 CM3 擁有兩個堆疊指標,都是 banked ,因此任一時刻只能使用其中一個。 主堆疊指標 MSP :復位後預設使用的堆疊指標,用於作業系統核心以及異常處理例程。 程序堆疊指標 PSP :由使用者的應用程式程式碼使用。 堆疊指標的最低兩位永遠是 0 ,意味著堆疊總是 4 位元組對齊。 3、R14 :連線暫存器 當呼叫一個子程式時,由 R14 儲存返回地址。不像大多數其他處理器, ARM 為了減少訪問記憶體的次數,把返回地址直接儲存在暫存器中。這樣足以使很多隻有 1 級子程式呼叫的程式碼無需訪問記憶體(堆疊記憶體),從而提高子程式呼叫的效率。如果多於 1 級,則需要把前一級的 R14 值壓到堆疊裡。 4、R15 :程式計數暫存器 指向當前的程式地址,如果修改它的值,就能改變程式的執行流。 5、 特殊功能暫存器 PSRs :程式狀態字暫存器組 PRIMASK,FAULTMASK,BASEPRI :中斷遮蔽暫存器組 CONTROL: 控制暫存器 特殊功能暫存器的功能描述如下圖所示。 2、NVIC 巢狀向量中斷控制器(②) 1、 可巢狀中斷支援。可巢狀中斷支援,覆蓋所有的外部中斷和絕大多數系統異常。這些異常可以賦予不同的優先順序。當前優先順序被儲存在 xPSR 的專用欄位。當一個異常發生時,硬體會欄位比較該異常是否與當前的異常優先順序更高,如果發現來了更高優先順序的異常,處理器就會中斷當前的中斷服務程式,而服務新來的異常。 2、 向量中斷支援。當開始響應一箇中斷後, Cortex-M3 會自動定位一張向量表,並且根據中斷號從表中找出 ISR 的入口地址,然後跳轉過去執行。 3、 動態優先順序調整。軟體可以在執行時期更改中斷的優先順序,如果在某 ISR 中修改了自己所對應中斷的優先順序,而且這個中斷又有新的例項處於懸起中,也不會自己打斷自己,從而沒有重入風險。 4、 中斷延遲大大縮短。 Cortex-M3為了縮短中斷延遲,引入了幾個新特性,包括自動的現場保護和恢復,以及其它的措施,用於縮短中斷巢狀時的ISR間延遲。 5、 中斷可遮蔽。既可以遮蔽優先順序低於某個閾值的中斷 / 異常(設定 BASEPRI 暫存器),也可以全體封殺(設定 PRIMASK FAULTMASK 暫存器)。這是為了讓時間關鍵的任務能在死線到來前完成,而不被幹擾。
3、中斷和異常(③) Cortex-M3 的所有中斷機制都由 NVIC 實現。除了支援 240 條中斷之外, NVIC 還支援 16-4-1=11 個內部異常源(4+1個為保留),可以實現 fault 管理機制。結果, Cortex-M3 有了 256 個預定義的異常型別。 雖然 Cortex-M3 支援 240 個外中斷,但具體使用了多少個是由晶片生產商決定。 Cortex-M3 還有一個 NMI (不可遮蔽中斷)輸入腳,當它被置為有效時, NMI 服務函式會無條件地執行。   4、儲存器對映(④) Cortex-M3 支援 4GB 儲存空間。 不像其它的 ARM 架構,它們的儲存器對映由半導體廠商說的算。 Cortex-M3 預先定義了“粗線條的”儲存器對映。通過把片上外設的暫存器對映到外設區,就可以簡單地以訪問記憶體的方式來訪問這些外設的暫存器,從而控制外設的工作。不要每學一種不同的微控制器就要熟悉一種新的儲存器對映。 各個分割槽儲存器對映如下圖,有Code區(Flash區)、片上SRAM區、片上外設區、片外RAM區、片外外設區、 Cortex-M3私有外設區。   5、匯流排介面(⑤) Cortex-M3 內部有若干個匯流排介面,以使 Cortex-M3 能同時取址和訪內(訪問記憶體): 1、 指令儲存區匯流排(兩條):有兩條程式碼儲存區匯流排負責對程式碼儲存區的訪問,分別是 I-Code 匯流排和 D-Code 匯流排。前者用於取指,後者用於查表等操作。(對應架構圖中的數字序號⑴) 2、 系統匯流排用於訪問記憶體和外設。覆蓋的區域包含 SRAM 、片上外設、片外 RAM 、片外擴充套件裝置,以及系統級儲存區的部分空間。(對應架構圖中的數字序號⑵) 3、 私有外設匯流排負責一部分私有外設的訪問,主要是訪問除錯元件。它們也在系統級儲存區。(對應架構圖中的數字序號⑶)
6、除錯支援(⑥) Cortex-M3 在核心水平上搭載了若干種除錯相關的特性。最主要的就是程式執行控制,包括停機( halting )、單步執行( stepping )、指令斷點、資料觀察點、暫存器和儲存器訪問、效能速寫以及各種跟蹤機制。 目前可用的 DPs 包括 SWJ-DP ,既支援傳統的 JTAG 除錯,也支援新的序列線除錯協議 SWD  
7、指令集 Cortex-M3 只使用 Thumb-2 指令集,它允許 32 位指令和 16 位指令水乳交融,程式碼密度和處理效能兩手抓。 在過去,做 ARM 開放必須處理好兩個狀態。 32 位的 ARM 狀態和 16 位的 Thumb 狀態,這兩個狀態是井水不犯河水。當處理器在 ARM 狀態下時 2 ,所有的指令均是 32 位的,那怕是 NOP 指令,此時效能相當高。在 Thumb 狀態下,所有的指令均是 16 位的,程式碼密度提高了一倍。但是, Thumb 狀態下的指令功能是 ARM 下的一個子集,結果可能需要更多條的指令區完成相同的工作,導致處理效能下降。 為了取長補短,很多應用程式都混合使用 ARM Thumb 程式碼段。這種混合使用有額外開銷,時間和空間上都有,主要發生在狀態切換時,另一方面, ARM 程式碼和 Thumb 程式碼需要以不同的方式編譯,這也增加了軟體開發管理的複雜度。 如下圖為ARM7處理的狀態切換圖。
Cortex-M3 只使用 Thumb-2 指令集,使 Cortex-M3有幾個方面比傳統ARM處理器更先進: 1、消滅了狀態切換的額外開銷,節省了執行時間和指令空間。 2、不需要把原始碼分成ARM編譯和Thumb編譯,軟體開發的管理大大減少。 3、無需再反覆求證和測試:究竟在何時何地切換到何種狀態,程式才最有效率。   本文主要參考以下資料編寫: ·《 Cortex M3 權威指南》