在許多層面上,MCU與MPU是沒有明確分別的。那么,不同名稱的MCU與MPU不太明顯的分別究竟在那里?答案可能在整合度上:MPU追求較高的運(yùn)算力、較豐富的硬件資源,以及硬件架構(gòu)組態(tài)上的設(shè)計彈性,所以整合度較松;相對的,MCU則是以整合度為第一優(yōu)先,盡可能將運(yùn)算、記憶、接口等一并容納,資源與彈性反成次要考慮。不僅硬件如此,就連軟件也類似,例如操作系統(tǒng)就有多任務(wù)操作系統(tǒng)與嵌入式操作系統(tǒng)(有時也是實時操作系統(tǒng))之別,多任務(wù)操作系統(tǒng)講究同時執(zhí)行多個程序,并將效能與資源進(jìn)行最佳化調(diào)配,相對的嵌入(實時)操作系統(tǒng)則以少數(shù)專精工作的效率與反應(yīng)為重。
更進(jìn)一步說,MCU不只有基礎(chǔ)硬件資源的濃縮整合,也針對控制應(yīng)用所需的功效進(jìn)行整合,這些功效在MCU內(nèi)多以外圍型態(tài)提供。若能善用這些外圍功效,就可發(fā)揮戲劇性效益。
一般輸出入接口
GPIO(General Purpose I/O;GPIO)看似平凡無奇,其實仍有差異,例如I/O規(guī)劃是逐埠(Port)設(shè)定還是逐腳位(Pin)設(shè)定?操控上也類似,是逐埠操控或逐腳位操控?很明顯,逐腳位比逐埠更能細(xì)膩、靈活地運(yùn)用資源。再來是接腳的輸出方式,最好能輸出各種邏輯電壓電平,并具有開汲極(Open Drain)、三態(tài)浮接(Hi-Z)等彈性,輸入上可選擇讀取邏輯拴鎖(Latch)值或接腳邏輯電位。此外,接腳的電源(Source)、汲入(Sink)電流承受應(yīng)盡量高,如此可讓扇出(Fan-Out)、扇入(Fan-In)數(shù)增加,甚或直接驅(qū)動LED,但卻不需要使用額外的界接處理。
中斷(Interrupt)
中斷的優(yōu)劣絕不是單純以中斷源的多寡來論斷,更需要去考慮中斷的機(jī)制設(shè)計。事實上,MCU的中斷結(jié)構(gòu)普遍比MPU簡單,中斷源的數(shù)目多半與內(nèi)建外圍數(shù)接近,中斷的仲裁也以事先的2階、4階優(yōu)先權(quán)設(shè)定為主,而少有中斷事發(fā)時才通過數(shù)值讀取來分析該中斷的優(yōu)先層次,同時中斷向量地址、堆棧深度等也多采固定制,即中斷源與中斷向量地址直接對應(yīng),不需要再用程序去分析。堆棧內(nèi)存以專屬型態(tài)存在,獨立于程序、數(shù)據(jù)存儲器之外,深度多在簡單的2、5、8階左右。另外,MCU的不可屏蔽型中斷(Non-Maskable Interrupt;NMI)也采固定、簡單式設(shè)計,一般只有重置腳位(Reset;RST)、看門狗定時器(Watchdog Timer;WDT)等才能觸發(fā)NMI,較少提供可彈性規(guī)劃配置的NMI。
定時器(Timer;TMR)、計數(shù)器(Counter)
計時計數(shù)是最基礎(chǔ)的MCU功效外圍,各款MCU差異不大,但依然有些細(xì)節(jié)差異,例如能否彈性選擇遞增制或遞減制、計時計數(shù)的位數(shù)、觸發(fā)源的選擇彈性、選擇電平(High/Low Level)觸發(fā)或邊沿(Rising/Fall Edge)觸發(fā)、計滿后能否自動重新加載(Auto-reload)設(shè)定值、有否提供預(yù)除(Pre-Scale)選擇等。
比較、捕捉、脈寬調(diào)變輸出(CCP)
“比較(Compare)、捕捉(Capture)、脈寬調(diào)變輸出(Pulse Width Modulation;PWM)”等三種功效簡單說即是計時計數(shù)器的衍生應(yīng)用,“比較”類似一種定時定值輸出;“捕捉”則類似賽跑用的秒表,用來計算起迄過程中所耗歷的時間或次數(shù)。由于經(jīng)常以三合一功效模塊來實現(xiàn),所以簡稱CCP。至于CCP多半用于哪些應(yīng)用?以MCU業(yè)者示范的應(yīng)用說明而言,大致有超聲波測距、模糊(Fuzzy)邏輯式的氣流控制、ADPCM、步進(jìn)馬達(dá)控制、D類功率放大等。
可編程計數(shù)器陣列(PCA)
PCA(Programmable Counter Array)是各種計時計數(shù)器應(yīng)用的更廣義、彈性設(shè)計,讓計時計數(shù)等硬件資源獲得更靈活的調(diào)撥、配置,有些甚至可以配置成看門狗定時器(如SST公司FlashFlex51系列中的SST89E/V554RC、SST89E/V564RD,或如Winbond的W78ERD2、W78IRD2)。
即時時鐘(RTC)
即時時鐘(Real-Time Clock;RTC)指的就是真實世界的日期、時間,使用32.768kHz的振蕩頻率運(yùn)作,不僅提供給控制程序所需的“年月日時”等信息,也能充當(dāng)?shù)湫偷亩〞r器來使用,以設(shè)定的時間來產(chǎn)生周期性的中斷信號,或是充當(dāng)MCU核心的省電鬧鐘,在MCU進(jìn)入省電的輕度休眠狀態(tài)時,RTC依然可維持清醒地正常運(yùn)作,并在設(shè)定的省電時間超時、到期后喚醒MCU核心。既然RTC要隨時更新真實世界的日期、時間,所以必須全天候不停休地運(yùn)作,即便應(yīng)用系統(tǒng)、MCU等都斷電停機(jī)也必須持續(xù)運(yùn)作,因此使用RTC通常會搭配電池設(shè)計,以便維持全時性運(yùn)作,或在系統(tǒng)重新送電后,于初始階段能自外部取得最新的日期、時間等信息。
UART、USART、EUSART、AUSART
通用型通步串行收發(fā)器(UART)也是MCU經(jīng)常內(nèi)建的一項外圍功能,與其說是外圍功能,不如說是MCU與外界的另一種溝通、傳輸接口,UART可以規(guī)劃成各種產(chǎn)業(yè)界的現(xiàn)行串行傳輸標(biāo)準(zhǔn),如RS/EIA-232、RS/EIA-422、RS/EIA-485等。要提醒的是,串行傳輸需要包率產(chǎn)生器(Baud Rate Generator)的輔助才能運(yùn)作,通常會挪用MCU內(nèi)部的定時器來充當(dāng)包率產(chǎn)生器,一旦被挪用,原有可用于計時計數(shù)器應(yīng)用的資源就會減少,在應(yīng)用資源規(guī)劃時需要事先注意。另外,控制應(yīng)用也可能有異步串行傳輸?shù)男枨,所以也有MCU業(yè)者提出可彈性選擇同步與異步的串行傳輸,此稱為USART。在USART后又有一種強(qiáng)化改進(jìn)型的EUSART(Enhanced USART),主要是增加了包率快慢的自動監(jiān)測(auto baud rate detect)機(jī)制,增加此機(jī)制可讓原有的USART規(guī)劃成符合LIN接口的傳輸標(biāo)準(zhǔn)。不過,即便沒有EUSART,以USART為基礎(chǔ)再搭配控制程序的編寫,也是可以實現(xiàn)LIN接口及其傳輸,只是要耗用較多的MCU運(yùn)算效能,且傳輸速率受限于MCU運(yùn)算效能,更嚴(yán)格地說,以GPIO腳位為串行傳輸接口,整個傳輸收發(fā)程序與處理都用控制程序編寫,也是可以實現(xiàn)串行傳輸,只是會大量耗占MCU的運(yùn)算效能。
另外,今日的串行傳輸應(yīng)用已鮮少是一對一(對等)互連,而是一對多(一主多仆)、多對多(無主)的聯(lián)機(jī),如此經(jīng)常要先傳遞地址信息,待另一端有響應(yīng)時才正式進(jìn)行數(shù)據(jù)傳遞,而UART/USART/EUSART并沒有提供尋址方面的方便性,地址信息的收發(fā)程序與串行數(shù)據(jù)的收發(fā)程序相同,如此也會過度耗占MCU的程序運(yùn)算,為此MCU業(yè)者提出了AUSART(Addressable USART),可簡化過去用程序操控的尋址程序。
I2C/MI2C、SPI、Microwire
除了可彈性規(guī)劃調(diào)整的USART外,MCU也經(jīng)常內(nèi)建一些現(xiàn)成常用的串行接口,最典型有I2C、SPI及Microwire,雖然I2C是由NXP提出,SPI由Freescale提出,Microwire由NS提出,但今日幾乎各業(yè)者都普遍使用。另外,也有一些是MCU業(yè)者自行提出,但卻不如I2C、SPI、Microwire普及,以自家MCU內(nèi)建為多的串行接口,如MAXIM/Dallas Semiconductor的3-Wire、1-Wire界面等。其它也有更貼近產(chǎn)業(yè)應(yīng)用的傾向,如PC、外圍等信息相關(guān)的控制應(yīng)用會內(nèi)建USB,車用相關(guān)則會內(nèi)建CAN、LIN,音源應(yīng)用有關(guān)者則有I2S、AC''97、SP/DIF等,電池管理或組態(tài)管理則有SMBus,PC傳統(tǒng)兼容應(yīng)用則有LPC。
并列式受控埠(PSP)
PSP是指Parallel Slave Port,即是將MCU當(dāng)成受控的外圍芯片來運(yùn)用,其它欲操控MCU的主控芯片只需使用最傳統(tǒng)的8位并列接口,便可讓主控芯片(Master)、受控(Slave)芯片進(jìn)行傳輸、操控。從某種角度看,PSP讓MCU轉(zhuǎn)化成8255之類的外圍I/O芯片,但卻可通過MCU的控制程序與外圍機(jī)制讓操控更具變化性。不過,內(nèi)建PSP功效的MCU不多,主要是Microchip的PIC16系列,如PIC16C65B、PIC16C765、PIC16C774等。