微控制器入門: MCU基本架構及運作

LET′S TRY“嵌入式系統編程”: 6之1

本課程旨在為未來的系統工程師提供基本概念。我們之前已經探討過電子電路與數位電路概論,現在終於可以開始探討位居系統核心的微控制器(MCU)。我們會先從MCU的基本結構與運作方式開始介紹,在下一次的課程中,我們將探討MCU的周邊連接裝置電路,最後則會試著於實際系統中使用MCU。

MCU: 「硬體的大腦」

大多數先進電子裝置皆包含一個(或以上)的MCU。事實上,MCU無所不在:手機沒有MCU便無法運作、電冰箱、洗衣機以及其他家電產品也裝有MCU、兒童玩具所發出的閃爍燈光也是由MCU控制。那麼,MCU在這些裝置中究竟扮演什麼角色?答案很簡單:它負責控制執行裝置運作的硬體。MCU接收按鈕、開關及感應器等元件的輸入訊號,再根據預設程式的指示與回應方式控制周邊裝置連接電路,例如馬達與顯示器等。

圖1為標準的MCU結構。MCU結合了CPU(中央處理裝置)、記憶體以及執行周邊連接裝置功能的電路系統。如果以擬人化的說法,CPU就是負責「思考」、記憶體儲存相關資訊,而周邊裝置連接功能則負責執行神經系統功能-即輸入(看、聽、感受)與反應(手腳動作等)。

圖1:MCU結構

圖1:MCU結構

我們說CPU負責「思考」並不表示CPU是有意識或具備獨立思考的能力,因為CPU的運作完全由儲存於記憶體內、依照指令順序執行的程式而決定。CPU只是以預先定義的順序讀取並執行這些指令。

這些指令並不複雜,例如:程式無法命令機器「走路」或「說話」。一般的指令或許會要求CPU「讀取記憶體中XXX位址的資料」,或者「將資料寫入至記憶體中的YYY位址」或者「相加」或「相乘」兩個數值等。然而,每個指令雖然看似簡單,卻能編排成很長的序列,用以執行許多複雜的功能。

CPU:「思考者」

圖2 說明CPU於嵌入式系統中的角色。

程式計數器(PC)

程式計數器(PC)為內部暫存器,專門儲存CPU要執行的下一個指令之記憶體位址。依照預設,每當一個指令執行之後,PC值會自動增加。PC起始值為0000,因此CPU會從位址0000的指令開始執行程式。指令執行時,PC會自動前進至0001,CPU接著便會執行位址0001的指令,然後PC再往前一個數字,以此類推至程式執行完畢。

指令解碼器

解碼器電路系統負責對記憶體所讀取的指令解碼,並利用解碼後的結果驅動MCU的計算與運作電路。實際的解碼器會比我們在 「數位電路概論:第二部」標題中所探討的解碼器更為複雜,因為解碼器需將經過編碼的指令還原至尚未編碼之原始形式。

圖2:CPU的工作

圖2:CPU的工作

算術及邏輯運算部門(ALU)

此電路系統執行算術與邏輯運算,算術運算包括加法與乘法,邏輯運算則包括AND(和)、OR(或)與位元移位。ALU是由指令解碼器控制;整體而言,ALU是由複雜的電路組合所構成。

CPU 內部暫存器

這些暫存器儲存暫時資訊。一般用途暫存器保留算術與邏輯運算結果,而限定暫存器則儲存特定類型資訊,如專門儲存旗標數值(進位旗標等)的旗標暫存器。ALU執行運算時,並不會直接運算記憶體中的數值,而是特定記憶體位址中的資料會先被複製到一般用途暫存器,然後ALU再使用該暫存器的內容計算。

CPU的運作

為了說明CPU的運作方式,以下說明CPU如何進行簡單的3+4加法運算。首先,必須將下列程式碼與資料儲存至記憶體。

位址 指令(識別欲採取動作的二進位程式碼數值)
0000 讀取記憶體位址0100的數值,並儲存至暫存器1。
0001 讀取記憶體位址0101的數值,並儲存至暫存器2。
0002 將暫存器2的數值與暫存器1的數值相加,並將結果儲存於暫存器1。
位址 資料
0100 3
0101 4

◇步驟1:CPU啟動時,會擷取儲存於程式計數器指定位址的指令:在此案例中為位址0000,接著則會進行解碼,然後執行指令。在本範例中,指令告知CPU取得記憶體位址0100的數值,然後將其寫入暫存器1。

  • 暫存器1的數值變化: 0→3
  • 先執行指令,以便程式計數器自動前進至0001。

◇步驟2:CPU擷取儲存於位址0001(程式計數器中的新數值)的指令,然後解碼、執行。程式計數器則繼續增加數值。

  • 暫存器2:0→4
  • PC:0001→0002

◇步驟3:CPU擷取儲存於位址0002(程式計數器中的新數值)的指令,然後解碼、執行。指令告知CPU相加暫存器1與2的內容,然後將結果寫入暫存器1。

  • 暫存器1:3→7
  • PC:0002→0003

暫存器1現在保留3+4的總和,也就是7,如此便完成加法。如您所見,CPU透過按照順序執行簡單的運算執行程式。

記憶體:「商店」

MCU的記憶體用於儲存程式碼與資料,記憶體主要有兩種類型:ROM與RAM。

ROM(唯讀記憶體)

即使關閉電源,此記憶體仍會保留內容。ROM記憶體只能讀取,無法刪除或覆寫。ROM通常用於儲存啟動程式(開啟電源或重設後立即執行)以及儲存可透過執行程式自由存取的常數。
瑞薩電子許多MCU皆使用快閃記憶體取代ROM。快閃記憶體與ROM一樣皆可在關閉電源時保留內容,但與ROM不同的是快閃記憶體中保留的內容可被覆寫。

RAM(隨機存取記憶體)

此記憶體可任意重新寫入,但缺點在於電源關閉時,內容便會遺失。RAM主要用於儲存程式變數。
許多單晶片MCU(*1)使用靜態RAM(SRAM)作為內建RAM。SRAM具備兩大優點:支援更快的存取速度、不需定期更新整理。缺點則是內部電路系統複雜,無法在晶片有限空間內容納大量內容。SRAM不適合用於實作大容量記憶體。


SRAM的替代品稱為DRAM(動態RAM)。DRAM由於結構簡單,可在小型空間內提供大容納量。標準的DRAM尺寸會比標準SRAM尺寸略大,但於單一晶圓上要整合DRAM與高速邏輯相當不易,也因此單晶片MCU中通常不會使用DRAM。DRAM通常與晶片連接,作為周邊連接裝置的電路系統。


(*1)實作於單一LSI(大型積體)晶片上的MCU,該晶片上裝有CPU、ROM、RAM、振盪器電路系統、定時器電路系統、序列連接介面以及其他元件。若晶片也含系統的主要周邊連接裝置電路系統,便稱為「系統LSI」。

 

我們為什麼要使用MCU?

我們迅速地說明為什麼當今許多裝置皆使用MCU。舉例來說,請先想像可讓LED燈泡在按下電燈開關時亮起的電路。圖3便是此類不使用MCU的電路設計,該簡易電路共有三個元件:LED、開關與電阻器。

图3:不安装单片机的LED电路

圖3:不使用MCU的LED燈泡電路

 

相反的,圖4則為使用MCU的電路設計。

很明顯的,這樣的設計較為複雜。如果另一個版本簡易許多,為什麼要花額外的時間與金錢開發較為複雜的設計?我們來想想另一個狀況!假設我們後來決定修改圖3的電路運作,讓LED燈泡在開關按下之後的特定時間才開始閃爍。

對於採用MCU的電路而言,我們只需要改一下程式,完全不需要動到設計。但沒有採用MCU的電路就必須重新設計-增設計算時間的計時器IC、邏輯IC以及實作邏輯的FPGA等。因此,採用MCU可更方便改變裝置的運作與新增功能,這就是目前許多裝置皆採用MCU的原因-因為MCU讓事情更簡單。

 

图4:安装单片机的LED电路图

圖4:使用MCU的LED燈泡電路

在MCU概論的單元2中,我們將探討MCU的周邊連接裝置電路系統。期待您下一次的參與。