主要特點
①512B片內RAM;32K片內Flash程式存儲器,具有線上編程能力和保密功能。
②時鐘發生器模組,具有32KHz晶振PLL電路,可產生各種工作頻率;8MHz內部匯流排頻率。
③增強的HC05 CPU結構;16種定址方式(比HC05多8種);16位變址暫存器和堆疊指針;存儲器至存儲器數據傳送;快速8×8乘法指令;快速16/8除法指令;擴展的循環控制功能;BCD功能。
④33根通用I/O腳,包括26根多功能I/O腳和5或7根專用I/O腳;PTA、PTC和 PTD的輸入口有可選擇的上拉電阻;PTC0—PTC4有15mA吸流和放流能力,其他口有10mA吸流和放流能力 (總體驅動電流應小於150mA);所有口有最高5mA輸入電流保護功能。
⑤增強型串列通訊口SCI;串列外圍接口SPI;兩個16位雙通道定時器接口模組(TIM1和 TIM2),每個通道可選擇為輸入捕捉、輸出比較和PWM,其時鐘可分別選為內部時鐘的1、2、4、8、16、32和64的分頻值;帶時鐘預分頻的定時基模組有8種周期性實時中斷(1、4、16、256、512、1024、2048和4096Hz),可在STOP方式時使用外部32KHz晶振周期性喚醒 CPU;8位鍵盤喚醒口。
⑥系統保護特性:計算機工作正常(COP)復位;低電壓檢測復位,可選為3V或5V操作;非法指令碼檢測復位;非法地址檢測復位。
⑦具有PDIP40、SDIP42和QFP44封裝形式。
⑧最佳化用於控制套用;最佳化支持C語言。
內部結構
單片機(以下簡稱GP32單片機)的三種封裝形式只是引腳數量和形式有所區別,其它方面是一致的。圖中I/O口是按 44引腳的GP32給出的,對於42引腳的GP32單片機則沒有PTC5、PTC6兩個引腳,對於40引腳的GP32單片機則沒有PTC5、PTC6及 PTD6/T2CH0、PTD7/T2CH1四個引腳。
從內部結構簡圖可以看出,GP32內部有以下主要部分:CPU08、存儲器、定時器接口模組、定時基模組、看門狗模組、通用I/O接口、串列通信接口 SCI、串列外設接口SPI、斷點模組、A/D轉換模組、鍵盤中斷模組、時鐘發生模組及鎖相環電路、低電壓禁止模組、復位與中斷模組、監控模組MON和系統設定模組。
引腳功能
40引腳的MC908GP32單片機的引腳圖,引腳功能分類簡介如下:(1) 電源類引腳
VDD、VSS(20腳、19腳):電源供給端。
VDDAD /VREFH、VSSAD /VREFL(31腳、32腳):內部A/D轉換器的電源供給及參考電壓輸入端。
VDDA、VSSA(1腳、2腳):時鐘發生器模組(CGM)的電源供給端。
(2) 控制類引腳
(6腳):外部低有效復位輸入或輸出腳,有內部上拉電阻。
(14腳):外部中斷輸入腳,有內部上拉電阻。
(3) I/O類引腳
PTA7/KBD7~PTA0/KBD0(40~33腳):8位通用雙向I/O口,每個可程式為鍵盤輸入腳。
PTB7/AD7~PTB0/AD0(30~23腳):8位通用雙向I/O口,也可作為8路8位A/D轉換輸入腳。
PTC4~PTC0(11~7腳):5位通用雙向I/O口。
PTD5/T1CH1~PTD0/ (22、21、18~15腳):6種特殊功能、雙向I/O口,其中T1CH1、T1CH0用於定時器模組(TIM1)。SPSCK、MOSI、MISO、 用於串列外圍接口(SPI)。
PTE0/TxD、PTE1/RxD(12腳、13腳):2位雙向I/O口或串列通訊口。
(4) 其它
CGMXFC(3腳):CGM的外部濾波電容連線腳。
OSC1、OSC2(5腳~4腳):片內振盪器引腳。
存儲器組織
CPU08 可定址64K地址空間,所以它的地址範圍是$0000~$FFFF,在這$0000~$FFFF的定址範圍內,分成多個不同區段,每個區段的作用不同。 MC908GP32單片機的存儲器組織及地址分配見圖。圖中只是畫出了64K地址空間的簡要映像。
RAM區域及其作用
用戶RAM的地址範圍是:$0040~$023F,共512位元組。這個區域既是用戶RAM,也是堆疊RAM。一般情況下,這個區域安排用戶數據和堆疊空間。由於這個空間較小,必須合理安排初始堆疊指針SP和用戶數據,更好地發揮RAM的作用。在這個區域中,有192位元組的RAM屬於第0頁,也就是地址的高8位為0,第0頁RAM的地址範圍是:$0040~$00FF,這個地址範圍定址方便,合理分配使用這些記憶體地址對實際編程很有幫助。
必須注意的是,由於堆疊也在RAM區域,且復位時SP=$00FF,位於第0頁內,所以實際編程時,可以把SP從第0頁移出,例如使之為$023F,也就是初始的SP在RAM的最高地址處,由於M68HC08系列單片機的進棧指令是使SP-1,所以是堆疊數據向低地址方向依次堆放,這樣堆疊使用的地址空間是$023F→更低地址方向。安排用戶數據時,可以從RAM的最低地址$0040向更高地址空間安排,即用戶數據使用的地址空間是$0040→更高地址方向。這樣從兩頭向中間使用,可以儘量避免兩種數據交疊,發生錯誤。但是,用戶數據不宜安排過多,要給堆疊留有足夠的空間,否則運行時可能產生錯誤。若記憶體安排較滿,必須精確計算堆疊最大可能深度,以保證程式的正常執行。
映像暫存器名及簡明含義
所謂映像暫存器,是指那些通過存儲器地址訪問的暫存器,它們不像暫存器A、H:X、SP、PC、CCR那樣直接通過其“名”來使用它,而是通過它們對應的地址來使用它們。要通過其“名”來使用它們,必須用偽指令定義它們所占用的實際地址與“名”對應。
存儲器暫存器
在MC908GP32單片機中,與Flash編程有關的暫存器有2個,它們是Flash控制暫存器(FLCR)和Flash塊保護暫存器(FLBPR)。對應的地址分別為$FE08和$FF7E,下面分別闡述這些暫存器的功能及用法。
Flash控制暫存器
FLCR的地址:$FE08,定義為:
數據位 D7 D6 D5 D4 D3 D2 D1 D0
定義 未定義 未定義 未定義 未定義 HVEN MASS ERASE PGM
復位 0 0 0 0 0 0 0 0
D7~D4位:未定義。
D3 — HVEN位:高壓允許位(High-Voltage Enable Bit)。 HVEN=1,打開電荷泵並將高電平加到Flash陣列上;HVEN=0,撤除Flash陣列上的高電平並關閉電荷泵。當PGM=1或ERASE=1時,可以通過設定HVEN將來自片內電荷泵的高壓加到Flash陣列上。
D2 — MASS位:整體擦除控制位(Mass Erase Control Bit)。該位在ERASE=1時有效,用於選擇Flash擦除操作方式:整體擦除或頁擦除。MASS=1,選擇整體擦除方式;MASS=0,選擇頁擦除方式。
D1 — ERASE位:擦除控制位(Erase Control Bit)。該位用於設定Flash編程操作為擦除操作。ERASE位與PGM位之間存在互鎖關係,無法同時被設定為1。ERASE=1,選擇擦除操作;ERASE=0,不選擇擦除操作。
D0 — PGM位:編程(寫入)控制位(Program Control Bit)。該位用於設定Flash編程操作為編程(寫入)操作,且無法與ERASE位同時為1。PGM=1,選擇寫入操作;PGM=0,不選擇寫入操作。
Flash塊保護暫存器
FLBPR的地址:$FF7E,它的內容為Flash保護區域的起始地址的14~7位,保護區域的起始地址的最高位始終為1,而保護區域的起始地址的低7位(位6~0)始終為0。對FLBPR寫入,可以設定被保護的Flash區域,它本身也是一個Flash位元組。當Flash處於保護狀態時,擦除和寫入操作都是受限制的,HVEN將無法被正常置起。Flash塊保護暫存器設定的只是保護區域的起始地址,保護區域的結束地址始終為Flash存儲區的結束地址($FFFF)。例如,設定FLBPR的值為$02(%0000 0010),則保護區域為$8100~$FFFF(%1000 0001 0000 0000 ~ %1111 1111 1111 1111)。
特別情況是:FLBPR的存儲內容為$00,整個Flash存儲區都受到保護;如果FLBPR的存儲內容為$FF,則整個Flash存儲區都可以被擦除或寫入。
只有當單片機處於運行用戶程式時,對FLBPR本身和Flash保護區域的擦寫操作保護才是有效的。復位不影響FLBPR。
需要注意的是,FLBPR的8位數據所代表的地址取決於具體型號的晶片的Flash容量。以上是對MC908GP32而言的,FLBPR設定的是16位起始地址的第14~7位(第15位恆為1);而對MC68HC908JL3而言,它們設定的是16位起始地址的第12~5位(第15~13位恆為1)。這兩種情況見表13-1。具體設定時可以根據相應晶片手冊結合要保護的區域進行計算得到。
編程過程
在HC08系列單片機中,對Flash進行擦除或寫入操作需要遵循一定的時序和步驟。對於整個MC68HC908系列的各個型號,這些步驟是一樣的,但時序要求可能略有不同,針對具體型號的Flash進行編程時應參考相應的晶片手冊。同時需要注意的是,一些型號的監控ROM內含有Flash編程子程式,用戶可直接調用,例如MC68HC908JL3;有的型號則沒有,例如MC908GP32,這種情況需自行編制子程式。下面介紹MC908GP32的Flash編程的基本操作。
頁擦除操作
下面過程可以擦除GP32的Flash存儲器的一頁(128位元組):
①$2→FLCR(1→ERASE位,0→MASS位):進行頁面擦除。
②讀Flash塊保護暫存器FLBPR。
③向被擦除的Flash頁內任意一個地址寫入任意值,為方便起見,一般向待擦除頁首地址寫入0。
④延時tnvs(>10µs)。
⑤$A→FLCR(1→HVEN位)。
⑥延時terase(>1ms)。
⑦$8→FLCR(0→ERASE位)。
⑧延時tnvh(>5µs)。
⑨$0→FLCR(0→HVEN位)。
⑩延時trcv(>1µs),完成一頁的擦除操作。
整體擦除操作
下面過程擦除GP32的整個Flash區域,以便把新的程式裝入Flash存儲器,這是套用系統研製過程中開發工具對GP32編程的準備工作。
①$6→FLCR(1→ERASE位,1→MASS位):進行整體擦除。
②讀Flash塊保護暫存器FLBPR。
③向被擦除的Flash任意一個地址寫入任意值,為方便起見,一般向首地址寫入0。
④延時tnvs(>10µs)。
⑤$E→FLCR(1→HVEN位、MASS位、ERASE位)。
⑥延時tMerase(>4ms)。
⑦$C→FLCR(0→ERASE位)。
⑧延時tnvhl(>100µs)。
⑨$0→FLCR(0→HVEN位、MASS位)。
⑩延時trcv(>1µs),完成整體擦除操作。
編程操作
MC908GP32的Flash編程操作以行(64位元組)為單位進行的。當然,一次寫入可以小於一行,但不能大於一行。對於已經寫過的部分,未經擦除不能重新寫入變更其數據,否則將引起數據出錯。寫入過程如下:
①$1→FLCR(1→PGM位)。
②讀Flash塊保護暫存器FLBPR。
③向將要寫入的Flash行內任意一個地址寫入任意值,為方便起見,一般向行首地址寫入0,這一步選定了所要編程的行,以下的目標地址必須在這一行中。
④先延時tnvs(>10µs);再將$9→FLCR(1→HVEN位)。
⑤先延時tpgs(>5µs);再將待寫數據寫入對應的Flash地址。
⑥延時tprog(>30µs),完成一個位元組的寫入(編程)工作。
⑦重複⑤、⑥,直至同一行內各位元組寫入完畢。
⑧$8→FLCR(0→PGM位)。
⑨先延時tnvh(>5µs);再將$0→FLCR(0→HVEN位)。
⑩延時trcv(>1µs)以後,完成本行寫入工作,可以讀出校驗。