帳號:
密碼:
最新動態
產業快訊
CTIMES / 文章 /
微控制器核心技術
 

【作者: 誠君】   2002年02月05日 星期二

瀏覽人次:【19606】

微控制器(microcontroller)又稱作MCU(Micro-Control Unit)或簡稱μC;因為 Microchip公司生產了一系列的microPIC微控制器,故簡稱PIC(Programmable IC),所以,也有人將微控制器稱作PIC。微控制器的內部架構簡單、價格低廉,已經被廣泛地應用於電子資訊產品。


最近因為無線寬頻和資訊家電產品的流行,不同類型的微控制器也和其它元件結合,例如:基頻晶片、DSP等,均被應用在可連上網際網路、WLAN、藍芽等新產品上。


與微處理器比較

微控制器有別於微處理器(microprocessor),如(圖一)所示,一般用途的微處理器或通用處理器(Gereral -Purpose Processor;GPP)只具有CPU而沒有其它單元,記憶體、計時器(timer)、輸出入埠....等資源都需外接。


微控制器則具有這些基本單元,雖然這些資源都不是很多,但是它五臟俱全,足夠應用於電子消費產品。正因為它的資源有限,而且在它出廠時,這些資源就已經被固定了,所以,應用產品開發者是無法改變它的。在挑選以微處理器或微控制器來「挑大樑」時,須依成本、功能、設計複雜度等方面來考量,而且這個選擇或許會深深地影響產品開發商的未來發展,所以必須相當謹慎。


與ASP比較

另一方面,特殊應用處理器(Application Specific Processor;ASP)最近也常被應用,它具有CPU和一些內建的資源,可是它是針對特殊應用而設計的,例如:HDTV、ADSL、Cable Modem....等,和微控制器相比,ASP的內建資源比微控制器多,在三者之中,ASP的價格一般是比較貴的。


不過因為它的應用在同領域中比較開放(亦即任一公司都能應用它,故無侵犯智財權的問題),所以,與應用上較封閉的特殊應用晶片(Application Specific IC;ASIC)比較起來,它又便宜許多。而且ASP也比ASIC通用,在客戶要求快速出貨的壓力和需求之下,許多新型的MCU或PIC和ASP也被設計生產出來,它們已經成為電子產品製造業者最常使用的處理器了。


CPU與MCU

CPU

CPU是任何處理器的核心,微控制器的運算都是經過它完成的。簡言之,CPU必須做兩件最基本的工作:找取(fetch)和執行(execute)。所有CPU都具有記錄器、算數邏輯單元(Arithmetic/Logic Unit;ALU)、程式計數器(Program Counter;PC)、和指令解碼器(instruction decoder)。


ALU負責加法、減法、乘法、除法、和AND、OR、NOT的運算;指令解碼器就像一本字典,能解釋CPU所找到的指令的意義;指令解碼器能解釋的指令越多,需要的電晶體數目就越多、設計也就越複雜。在程式計數器內儲存著指令的位址,實際上,這個位址是記憶體(ROM或RAM)的位址。


CPU讀取程式計數器內的值,並將此值置於位址匯流排(address bus)上,當CPU啟動「讀取數據的信號」(data READ signal)時,「記憶體位址等於程式計數器內的值的記憶體位址內的值會被置於數據匯流排上」。前一個「」內的描述很饒舌吧,這是「指標」(pointer:)的觀念,用簡單的圖說可以表示成(表一)。CPU會利用位址匯流排在記憶體位址1400處找取,找到的值就是B0。B0會被放在數據匯流排上,送給CPU。CPU會使用指令解碼器將BO解碼成可執行的指令,最後,CPU執行這個指令。


表一 CPU讀取程式計數器內的值

程式計數器內的值 指標 記憶體位址 記憶體位址內的值
1400 -> 1400 B0

數據匯流排和位址匯流排

數據匯流排和位址匯流排都是CPU和其周邊元件的橋樑。它們的關係如(圖一)所示。


數據匯流排

數據匯流排是用來傳收進出CPU的數據,數據匯流排越大,數據傳輸量就越大,CPU的處理能力也就越強。微控制器一般都是使用8位元大小的數據匯流排,亦即,其數據匯流排一次可傳收一個位元組。數據匯流排是雙向的,因為CPU必須使用它來傳送和接收數據。


位址匯流排

位址匯流排是用來標示連接在CPU上的記憶體和周邊裝置的位址。位址匯流排數目越大,CPU可連接的周邊裝置和記憶體數量就越多。


計算公式為:


CPU支援的位址總數=2x,
x=位址匯流排線的數目(address lines)。

微控制器一般都是使用16位元大小的位址匯流排,所以,其位址總數是65536或64Kbytes,亦即一般微控制器的CPU可支援64Kbytes的記憶體空間(包含ROM和RAM)。位址匯流排是單向的,因為CPU使用它來傳送位址。


記錄器

微控制器內的記錄器是CPU的暫存裝置,所以,也稱作暫存器。它儲存了將被CPU處理的數據(data)或這些數據的位址。大多數微控制器之記錄器是8位元(bit)大小,不過,也有4或16位元大小,一般所謂的8位元或4位元微控制器,就是指微控制器的記錄器大小是8位元或4位元,或者說微控制器能處理的唯一數據型態(data type)是8位元或4位元。


位元組塊

若為8位元,就表示此微控制器的CPU每次找取(fetch)一個字元(CHAR)或一個位元組(BYTE),韌體設計人員必須將大於8位元的數據拆解成數個介於00H到FFH(或十進位的0到255)之間的字元或位元組數據,這些位元組數據稱作「位元組塊」(byte-sized chunks)。


每個CPU記錄器都有一個名稱,一般而言,有累加器(Accumulator;A)、B、R0~R7記錄器、數據指標器(Data Pointer;DPTR)、程式計數器、TL0和TH0(計時用)、P0(輸出入埠用)、旗標記錄器(Program Status Word;PSW)、堆疊指標器(Stack Pointer:SP)......等。


它們會與CPU、ROM、RAM、輸出入埠和其它硬體介面配合,一起完成程式運算工作。其實,不管使用何種處理器,GPP或ASP或MCU(μC或PIC),認識它們內部的記錄器是一切應用設計的起點。相對的,對晶片設計者而言,規劃記錄器是晶片系統設計的第一步。


《圖一 微處理器(A)和微控制器(B)的區別》
《圖一 微處理器(A)和微控制器(B)的區別》

ROM

內建於微控制器的唯讀記憶體(on-chip ROM)大小,依照不同的廠牌而各有不同。例如:80C51、8751、AT8951有4K bytes的ROM;AT89C52有8K bytes的ROM;DS5000-32有32 bytes的ROM;目前,也有通用的64K bytes微控制器,這些高階的微控制器大多內建有EEPROM或FLASH或ROM。這些ROM是用來儲存韌體(firmware)程式碼的,所以,也稱作「程式碼空間」(code space)。


兩種微控制器之應用

8031 MCU

如果設計者事先不知未來開發出來的程式大小為何,此時,設計者可以選擇8031微控制器,因為它的ROM大小為零,這可讓設計者彈性地選擇不同大小的ROM或FLASH或EEPROM,並以外接的方式連接到8031的輸出入埠。


當微控制器開機(power up)時,Vcc電壓加在重置(RESET)接腳上,此時,程式計數器(PC)的值是0000H,因此,第一個指令運算碼(opcode)必須位於0000H,後續的運算元(operand)則位於0001H。


8051 MCU

8051微控制器在開機時,會自動地執行ROM裡的韌體程式(booting),這是因為它在韌體程式開頭使用了ORG指令,其它類型的微控制器也必須使用此類型的指令來開啟系統。這種類似PC內基本輸出入系統(BIOS)的自動執行功能,幾乎是所有處理器必備的功能。


在PC開機時,它的CPU會先執行BIOS ROM裡的韌體程式,以偵測週邊裝置的種類和特性,並啟動這些週邊裝置。最後,交由作業系統執行自動執行檔(autoexec.bat)將系統完全開啟。較複雜的微控制器系統雖沒有作業系統,但是,它仍然會依照韌體程式的指令偵測和啟動週邊裝置。


應用工程(AE)的重要性

一般而言,晶片設計商都會提供開發用的參考工板和韌體樣版程式。不過,由於通用型微控制器價格低廉,所以很少有提供參考工板,僅免費提供韌體樣版程式;甚至不提供任何韌體,此時微控制器裡的ROM應該是空白的。由於大多數通用型微控制器的程式設計工作並不困難,而且其使用手冊或市面上販售的書籍都有詳細的解說可以參考,所以韌體設計者無須擔心。


驗證設計

晶片設計商驗證複雜的微控制器前後(before & after tape out),也必須自行設計硬體驗證程式和供客戶參考的工板及韌體樣版程式,這些程式可事先燒錄於模擬用的FPGA裡,等檢驗無誤後,就要燒錄到微控制器的ROM裡,做最後的確認。若在驗證過程中發現了問題或瑕疵,就要退回重新設計,重覆執行設計和驗證的流程,直到確認無誤為止。


這些都是系統整合或應用工程(Application Engineer;AE)的工作,在晶片設計過程中,它是屬於後段工程,所以有些主管稱它是售後服務(post-service)或行銷後段(post-sale)工作。


權責劃分不夠

因此,有些公司將這個工作隸屬於客戶服務部門,有別於使用VHDL或verilog設計晶片的研發部門。甚至國內有些小型的晶片設計公司將客戶的需求和規格制定等行銷前段(pre-sale)的工作都納入客戶服務部門,使得系統整合或AE工程師每天為了要解決客戶的抱怨和投訴,而無暇認真地設計參考工板及韌體樣版程式。


為了提高產品最後的滿意度和品質,應該避免這種責任區分不清的做法。總之,由於微控制器市場競爭日趨激烈,如何提高客戶滿意度和降低成本壓力,已經成為廠商們須嚴肅面對的課題。而重視系統整合和應用評估工作正是提高客戶滿意度的不二法門。


RAM

不管是微控制器內的RAM或其外部的RAM,都是用來儲存數據或數據的位址,因此RAM也稱作「數據空間」。


不同微控制器內的RAM大小各不相同,以8051為例,共有128 bytes,這些記憶體被區分成三個群組:


00H到1FH

從00H到1FH共有四個記錄器組(register bands)或32 bytes,每組大小是8 bytes。00H到07H為第一組,稱作bank 0;08H到0FH為第二組,稱作bank 1;10H到17H為第三組,稱作bank 2;18H到1FH為第四組,稱作bank 3。


每一套記錄器組都有8個記錄器,分別是R0、R1、R2、R3、R4、R5、R6、R7。當8051開機時,若程式碼的存取位置是以R0~R7表示,則bank 0的R0~R7將是內定(default)被擷取的記錄器。


應用特色

若要轉換記錄器組,則必須改變旗標記錄器(PSW)bit 3和bit 4的值(RS0和RS1),這可利用SETB和CLR指令來達成,如表二所示,RS0和RS1的內定值都是0,當CPU執行"SETB PSW.4"時,RS1的值會變成1,RS0的值則維持0,查表一可知,此時,程式已經選擇了Bank 2,其RAM位址為10H到17H,而R0~R7的位址也會因此改變。


表二:改變8051 PSW位元值可轉換記錄器組

 

 

 

RS1(PSW.4)

 

RS0(PSW.3)

Bank 0

0

0

Bank 1

0

1

Bank 2

1

0

Bank 3

1

1


20H到2FH

從20H到2FH共16 bytes,供「單一位元擷取」(bit-addressable access)用。


微控制器的最大優點就是它能讀寫一個通訊埠裡的單一位元(single-bit)、一個RAM記憶體位址、部份記錄器(例如:A、B、PSW...等)裡的單一位元。


應用特色

大多數微處理器都和Pentium一樣,它們的輸出入埠是位元組導向(byte-oriented),亦即若要改變單一位元的值,必須先擷取8個位元。在微控制器內,所有運算碼皆是位元組導向,而ROM只能儲存程式碼,所以,CPU和ROM一般都不具「單一位元擷取」的功能。


30H到7FH

從30H到7FH共80 bytes,一般稱作「塗鴉板」(scratch pad),作為不同程式間共同使用的區域。此區域可儲存從輸出入埠傳來的數據或任何廣域數據(global data)或廣域參數(global parameters);使用C語言時,可在.c或.h檔起始位置宣告許多廣域變數和參數,這些廣域變數和參數就儲存在這個「塗鴉板」裡。


之所以稱為「塗鴉板」,是因為不同程式可以讀取或改寫這些變數或參數的值,使它成為不同程式間交換數據(data exchange)的地方,這就好像任何人都可以在「塗鴉板」上寫字一樣,作者和文字內容都不受到限制,而且,作者們還可欣賞彼此的創作內容,因此得到這麼「俗」的名字。


應用特色

任何處理器系統都需要這個「塗鴉板」,有些非微控制器晶片雖然沒有「塗鴉板」的RAM,卻有「塗鴉板」的記錄器(Scratch Pad Register;SPR),這SPR類似「塗鴉板」的RAM,主要是用來暫存數據(temporary data storage)的,有時也可用來控制其它記錄器的開啟和關閉。


堆疊記錄器(SP)和RAM

「堆疊」(stack)是RAM記憶體的一部份,CPU用它來暫時儲存數據和位址。因為在微控制器中,可暫存資訊的記錄器數目有限,所以,必須使用這些堆疊空間。在CPU中有堆疊記錄器,用來表示目前堆疊的位址。例如:8051中的堆疊記錄器是8-bit大小,所以,理論上,堆疊記憶體的總容量應該是00H到FFH。不過,因為8051的RAM大小一般只有128 bytes,而且,必須留給輸出入埠和其它介面使用。


一般而言,當8051開機時,堆疊記錄器的值是07H,這表示RAM記憶體位址08H是第一個堆疊。當8051開機時,SP=07H,PUSH 6會將R6裡的值25H放到堆疊裡,此堆疊在第二記錄器組(Register Bank 1)裡08H的位置上,亦即SP=08H。


當PUSH 1時,SP=09H,在R1裡的值12H會被放到RAM記憶體位址09H的位置,此時,R1和R6可供其它用途,因此可節省記憶體的空間。當需要使用這些暫存值時,可利用POP指令從堆疊中將暫存值一一讀出。


此外,CPU也利用堆疊來暫存緊鄰在CALL指令下一行的指令位址或者說當時程式計數器裡的值,等執行子程式完畢返回(return)後,CPU就可從堆疊中得知下一個要執行的指令位置。


位址模式(addressing modes)

因為數據可能儲存在記錄器、記憶體中、或藉由程式立即給值(immediate value),所以CPU必須使用各種方法擷取這些數據,這些擷取數據的方法就稱作「位址模式」。任何一種微處理器都有位址模式,這些模式在微處理出廠時就已經固定了,韌體設計者是無法改變它們的。


常見位址模式

常見的「位址模式」有五種:立即位址模式、記錄器位址模式、直接位址模式、記錄器間接位址模式、索引位址模式(indexed addressing mode)。


1. 立即位址模式:例如:MOV A, #25H。符號#必須在程式給的值前面。


2. 記錄器位址模式:例如:MOV A, R0


來源和目的記錄器的位元大小必須相同。記錄器和累加器間可以移動


(MOV)數據,但是,MOV R4 R5是錯誤的,必須使用直接位址模式:


MOV 4 5才行。


3. 直接位址模式:在8051中,RAM除了在位址30~7FH的區域(塗鴉板)以外,其餘都是記錄器組,每個記錄器組裡面有8個記錄器,它們是R0~R7。直接位址模式可以直接使用位址0~7來分別表示它們。例如:MOV A, 4等同於MOV A, R4。直接位址模式只能擷取微控制器內的RAM和記錄器位置。


4. 記錄器間接位址模式:使用記錄器R0和R1來儲存RAM的位址,數據其實是在此RAM位址裡面。這就是C語言裡「參考」(reference)的觀念,C語言的符號是&,組合語言的符號是@。例如:MOV A, @R0。


5. 索引位址模式:簡言之,就是利用DPTR記錄器來暫存內部或外部記憶體的位址。


結語

微控制器的技術雖然簡單,可是也不是一兩天就能學會。除本文介紹的以外,還包含:計時器/計數器、I/O埠的控制、中斷(interrupt)處理、串列埠通訊、週邊裝置控制等,限於篇幅無法全部說明。不過只要設計者用心,不管是設計微控制器的核心元件或應用微控制器控制週邊,大體而言,都是非常容易的。


相關文章
意法半導體的邊緣AI永續發展策略:超越MEMS迎接真正挑戰
為嵌入式系統注入澎湃動力 開啟高效能新紀元
嵌入式系統的創新:RTOS與MCU的協同運作
STM32MP25系列MPU加速邊緣AI應用發展 開啟嵌入式智慧新時代
STM32 MCU產品線再添新成員 STM32H7R/S與STM32U0各擅勝場
comments powered by Disqus
相關討論
  相關新聞
» 巴斯夫與Fraunhofer研究所共慶 合作研發半導體產業創新方案10年
» 工研院IEK眺望2025:半導體受AI終端驅動產值達6兆元
» ASM攜手清大設計半導體製程模擬實驗 亮相國科會「科普環島列車」
» 嚴苛環境首選 – 強固型MPT-7100V車載電腦
» SEMI提4大方針增台灣再生能源競爭力 加強半導體永續硬實力


刊登廣告 新聞信箱 讀者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 遠播資訊股份有限公司版權所有 Powered by O3  v3.20.2048.3.142.252.185
地址:台北數位產業園區(digiBlock Taipei) 103台北市大同區承德路三段287-2號A棟204室
電話 (02)2585-5526 #0 轉接至總機 /  E-Mail: webmaster@ctimes.com.tw