淺談ARM Cortex-M0

轉自:http://www.51hei.com/bbs/dpj-40117-1.html

一、引言

  ARM公司在2009年初發布了其嵌入式處理器系列中最小型、最低功耗的CortexM0處理器。CortexM0低功耗、高效能與極精簡程式程式碼的特性,能應用於各種微控制器(MCU)中,並可讓研發業者以8位的價位創造32位的效能,並進一步將傳統的8位和16位的處理器推進至更高效能、更低功耗的32位處理器。

二、關於CortexM0

  ARM一改其傳統的命名法則,以Cortex來為其全新的微處理器系列命名。在這個系列中,核心採用全新的ARMv7架構,引進了許多革命性的突破與創新,並首次由單一款式延伸成3種款式,並各自定義其相對應的架構,分別為CortexA(ARMv7A)、CortexR(ARMv7R)、CortexM(ARMv7M)。CortexA系列適於高效能的開放應用平臺,CortexR系列適於實時訊號處理控制系統,而CortexM系列則瞄準了對成本和功耗敏感卻又有高效能需求的嵌入式應用領域,成為在微控制器、工業控制系統、汽車控制系統及無線網路等各種手持應用系統中的最佳解決方案。
CortexM0是CortexM家族中的微處理器核心,其擁有最低閘數、最低功耗以及強悍效能的優異表現。CortexM0為32位、3級流水線RISC處理器,其核心與ARM7同為馮·諾依曼(Von Neumann)架構,採指令和資料共享同一匯流排的設計。作為新一代的微處理器,CortexM0在整體的設計架構上進行了許多改革與創新,如折中效率和程式程式碼密度的全新指令集架構(ISA)、事先定義的系統儲存器地址映像(system
address map)、改善效率並增強確定性的巢狀向量中斷系統(NVIC)與不可遮蔽中斷(NMI)、全新的硬體除錯單元等等,都帶給了使用者全新的體驗和更便利、更有效率的操作。

  CortexM0其核心架構為ARMv6M,為CortexM家族架構ARMv7M的一個子集,去除了許多複雜的支援,所以大幅降低基本核心之門數至12K,從而擁有極低之動態功耗85 μW/Hz。而在低成本、低功耗的前提下,由於採用了全新的指令集架構Thumb2 指令集,CortexM0並沒有犧牲掉應有的效能,其運算能力可以達到0.9
DMIPS/MHz,而與其他的16位與8位處理器相比,由於CortexM0的運算效能大幅提高,所以在同樣任務的執行上CortexM0只需較低的執行速度,而大幅降低了整體的動態功耗。

三、指令集Thumb2

  在傳統的ARM7TDMI處理器系統中,系統重置後都是從ARM狀態/指令集開始執行,處理器核心可以根據特定的應用需求切換到Thumb狀態/指令集執行。ARM指令集為一32位長度之指令碼,由於指令碼長度較長,所以指令集都可以是有條件的執行,以獲得較出色的效能。Thumb指令集為一16位長度之指令碼,為ARM指令集之子集,程式程式碼密度提高了一倍,但可能需要更多的指令去執行相同的任務,所以造成了效能的下降。程式設計者可以根據不同的需求在兩種狀態下切換,以在程式程式碼效能和密度中取得平衡,但在狀態切換中會有額外的程式執行,導致效能進一步的下降。另外ARM和Thumb指令集需要以不同方式編譯,而增加的軟體開發管理上的複雜度。Thumb2指令集則是一全新的技術,為一16位和32位指令碼的結合,兩種長度的指令碼可共存於同一模式。所以全新的Thumb2技術結合了16位指令集高程式程式碼密度與32位指令集高效能的各自優點,並免去了狀態切換之複雜度,而提升了整體的效能。

  CortexM0同時支援了Thumb和部分的Thumb2指令集,核心不論是在正常程式執行還是處理中斷異常模式均保持在單一Thumb狀態下執行,免去了不必要的狀態切換,大幅地節省了執行時間和指令碼大小。

四、系統儲存器地址映像

  CortexM0核心採用一個系統儲存器地址映像,為高達4 GB的可定址儲存空間提供簡單和固定的映像機制。這個儲存器映像機制為程式程式碼、SRAM、外部記憶體和外圍裝置提供了預先定義的專用地址。在傳統的ARM微處理器架構中,並沒有預先定義好儲存器映像地址,而是由各家晶片製造商自行定義和設計,因此即使採用了相同的核心處理器,卻有完全不同的儲存器映像地址,給相互間程式程式碼移植帶來了很大困難。CortexM0則是預先定義好了完整的儲存器地址映像表,詳細載明瞭每個區間地址記憶體儲器的作用和特性,但也預留了某些區域給各家廠商自行設計。這種預先定義的映像關係,使得各家廠商可以對存取速度從事高度的優化,而且對於單晶片上的系統設計而言更易整合。

五、巢狀式向量中斷系統

  巢狀式向量中斷系統(NVIC)是CortexM0另一個令人注目的創新設計,它可以依據使用者不同的需求進行高度配置。CortexM0中的NVIC支援16個系統異常(exception,部分為系統保留)與最多32個外部中斷(interrupt,外部中斷支援數量由晶片設計商自行配置)供晶片設計商使用,搭配4級優先權的設定並藉助NVIC與CortexM0核心緊密的結合為整個系統提供豐富且實時的中斷處理能力。

  CortexM0採用一個事先定義的向量表,屬於程式程式碼的一部分,向量表定義了堆疊的起始地址和各個異常/中斷的入口地址。當某個中斷被接受之後,CortexM0通過內部匯流排從向量表中獲取其地址來執行。硬體支援的向量化中斷功能大幅地縮短了進入中斷的延遲,提高了程式效能,因為程式不再需要判斷中斷來源和進行必要的暫存器堆疊,完全由硬體自動完成。當異常發生時,程式狀態暫存器(PSR)、程式計數器(PC)、連結暫存器(LR)和R0~R3、R12等通用暫存器將自動被存進堆疊;同時,處理器從中斷向量表中讀取出相對應的中斷服務程式地址,並獲取中斷服務程式的第一條指令。一旦堆疊儲存和取指完成後,中斷服務或異常處理程式便開始執行,展現了極高且確切的效能。隨後在中斷服務程式結束前,相關暫存器將自動從堆疊中取出,原本中斷了的正常程式也因此恢復執行,完全不需要軟體的介入。由於可以在硬體中處理堆疊操作,CortexM0避免了傳統的C語言中斷服務程式中為了完成堆疊處理所要編寫的彙編程式,這使應用程式的開發變得更加簡單與便利。另外,值得一提的是,CortexM0還支援了所謂的TailChaining和LateArrival先進技術,大幅改善了傳統ARM微處理器在相異的中斷請求互動發生時的處理效率,縮短了中斷延遲,進一步提升了CortexM0在實時系統的處理能力。

六、與ARM7TDMI 之比較

  基於ARM7核心的微處理器在過去幾十年襲捲了32位MCU市場,在此將CortexM0和這位師出同門的老大哥加以比較,使大家清楚它們的差異。

七、新唐科技NuMicro家族

  微控制器(MCU)廠商新唐科技(Nuvoton Technology Inc.)前身為華邦電子邏輯事業群,近期推出以ARM CortexM0為核心的32位微控制器——NuMicro家族。該家族採用ARM公司最新發布的最小型、最低功耗、低門數、精簡程式程式碼的CortexM0處理器,內建各種模擬與混合訊號元件以及多種高速通訊能力裝置,執行效能約為傳統8051的72倍。基於Keil開發環境下,客戶很容易從8051升級至NuMicro來創造產品價值與競爭力。

  NuMicro家族的成員包括了四大系列,NUC100系列、NUC120系列、NUC130系列、NUC140系列。其核心CortexM0的執行頻率為50 MHz,具有先進的巢狀向量中斷控制(NVIC)、喚醒中斷控制(WIC)、單週期32位乘法器與Serial Wire硬體除錯單元支援等優異特性,並擁有Sleep與PowerDown不同的節能模式;並且配置了一個遞減計數24位SysTick
Timer,它可定時產生中斷,提供理想的計時功能來驅動實時作業系統或其他預定的任務。此家族配備了多達128 KB的快閃記憶體和16 KB的SRAM,外圍裝置提供了高達12位、800 ksps的8 通道ADC、多組UART、SPI、I2C與USB2.0等高速匯流排等介面。其他外設則包括至多80個GPIO腳、4組通用計數器/定時器、RTC、看門狗定時器與PWM、CAN匯流排控制器豐富的外圍裝置可供客戶依需求搭配使用,並提供多種封裝樣式供選擇。

八、總結

  CortexM0核心的邏輯閘數很少,非常適合低成本、低功耗要求的應用。由於支援全新的Thumb2指令集,免除了狀態間的切換,增強了整體效能,提升了程式程式碼密度,簡化了軟體的開發與維護,縮短了產品的開發時間。CortexM0內建除錯系統,在支援傳統的JTAG基礎上,開發了更新更好的Serial
Wire除錯介面,並配置了多達4個斷點和2個觀察點。CortexM0已獲得ARM微控制器開發套Keil RealView MDK的支援,結合了ARM RealView編譯工具以及強大完善的Keil uVision IDE與Debugger工具。CortexM0擁有許多實時作業系統與第三方工具的支援,包括IAR Systems、Mentor Graphics等。該處理器並向上相容於其家族系列中的產品開發工具以及二進位制程式程式碼,保證其程式程式碼未來的移植和發展性。相信在不久的未來,CortexM0將在整個微控制器市場和嵌入式應用系統中大放光彩。