S12單片機模塊應用及程序下載調試
清華大學(xué)Freescale單片機/DSP應用開(kāi)發(fā)研究中心 安鵬 馬偉
摘 要:本文對邀請賽選用的主控芯片MC9S12DG128單片機的一些外圍接口模塊作了介紹,包括功能上的描述和例程及初始化的過(guò)程,對一些參賽隊伍中遇到的Flash鎖死問(wèn)題也提供了解決的方案。
關(guān)鍵字: MC9S12DG128;CodeWarrior;TBDML;Flash解密
本次智能車(chē)邀請賽采用的MC9S12DG128(以下簡(jiǎn)稱(chēng)DG128)是Freescale公司推出的S12系列單片機中的一款增強型16位單片機,片內資源豐富,接口模塊包括SPI、SCI、IIC、A/D、PWM等,在汽車(chē)電子應用領(lǐng)域具有廣泛的用途。DG128在Flash存儲控制及加密方面也有很強的功能,加解密可配合第三方軟件使用。
DG128單片機采用增強型16位HCS12 CPU,片內總線(xiàn)時(shí)鐘最高可達25MHz;片內資源包括8K RAM、128K Flash、2K EEPROM; SCI、SPI、PWM串行接口模塊;脈寬調制模塊(PWM)可設置成4路8位或者2路16位,邏輯時(shí)鐘選擇頻率寬。它包括兩個(gè)8路10位精度A/D轉換器,控制器局域網(wǎng)模塊(CAN),增強型捕捉定時(shí)器并支持背景調試模式。DG128有112-pin和80-pin兩種封裝形式,80-pin封裝的單片機沒(méi)有引出用于擴展的端口,只引出了一個(gè)8路A/D接口。
常用接口模塊及外部應用
PWM(Pulse Width Modulate)模塊:PWM脈寬調制波是一種可用程序來(lái)控制波形占空比、周期、相位的波形。它在電機驅動(dòng)、D/A變換等場(chǎng)合有著(zhù)廣泛的應用。本次大獎賽使用的電機驅動(dòng)芯片為MC33886,其輸入信號即為一路PWM信號。MC33886根據PWM信號的周期和占空比來(lái)控制電機的轉向和速度。大獎賽中使用的舵機也是用PWM來(lái)控制的。PWM信號的周期大于某一域值后可驅動(dòng)舵機工作,保持周期、調節PWM的占空比即可調節舵機的轉動(dòng)方向。在沒(méi)有電機、舵機的具體參數的情況下,可寫(xiě)一個(gè)可調周期、占空比的PWM輸出程序進(jìn)行測試。
A/D(Analog/Digital)模塊:A/D模數轉換模塊內部可分為三個(gè)部分:IP總線(xiàn)接口、轉換模式控制/寄存器列表、自定義模擬量。IP總線(xiàn)接口負責該模塊與總線(xiàn)的連接,實(shí)現A/D模塊和通用I/O的目的。轉換模式控制寄存器列表中有控制該模塊的所有的寄存器。自定義模擬量負責實(shí)現模擬量到數字量的轉換。為了與外部信號同步進(jìn)行A/D轉換,A/D有一個(gè)外部觸發(fā)轉換通道,用戶(hù)可以選擇觸發(fā)方式(沿觸發(fā)、電平觸發(fā))。
A/D模塊設有時(shí)鐘分頻機制。需要用戶(hù)注意的是,A/D模塊的最大轉換時(shí)鐘為2MHz,最小轉換時(shí)鐘為500KHz,用戶(hù)需要查看自己芯片的內部總線(xiàn)時(shí)鐘,必須使得分頻以后的轉換時(shí)鐘處于兩者之間,否則可能得不到正確的轉換結果。用戶(hù)可以設定轉換結果為有符號或是無(wú)符號數。比如,對于Vrh為5.12v,Vrl為0v時(shí),輸入5.12V,8位有符號的結果是-$7F,無(wú)符號的結果是$FF。A/D模塊允許設置順序轉換,最大的順序轉換序列長(cháng)度是8。
大獎賽中車(chē)模對跑道的識別有可能會(huì )用到A/D模塊,識別電路的前端數據采集系統有很多種實(shí)現方案,如紅外發(fā)光二極管或是CMOS攝像頭來(lái)進(jìn)行數據采集。
Codewarrior軟件使用
大賽中采用Codewarrior 3.1 for HCS12作為推薦的程序編譯軟件。CodeWarrior for S12” 是面向以HC12或S12為CPU的單片機嵌入式應用開(kāi)發(fā)的軟件包。包括集成開(kāi)發(fā)環(huán)境IDE、處理器專(zhuān)家庫、全芯片仿真、可視化參數顯示工具、項目工程管理器、C交叉編譯器、匯編器、鏈接器以及調試器。在Codewarrior軟件中可以使用匯編語(yǔ)言或C語(yǔ)言,以及兩種語(yǔ)言的混合編程。
工程建立以后,需要定義裝載地址。default.prm文件用于定義目標代碼的裝載地址,用戶(hù)應當根據使用單片機的內存分配情況修改這個(gè)文件。CodeWarrior 自動(dòng)生成的 .prm 文件默認MC9S12DG128 的RAM 在:
RAM = READ_WRITE 0x0400 TO 0x1FFF;
這個(gè)默認區間必須修改,因為在這一空間有 1K 的I/O 寄存器空間 和2K EEPROM 空間。使用默認定義會(huì )丟失1K RAM 和 2K EEPROM。
我們在監控程序中修改RAM空間:
RAM = READ_WRITE 0x2000 TO 0x3FFF;
當然也可以修改到:
RAM = READ_WRITE 0x1000 TO 0x2FFF。
建議用戶(hù)采用我們的定義。
另外,我們使用:
STACKTOP 替代 STACKSIZE
因為STACKSIZE 0x100 在RAM低端留 0x100 空間,而使用 STACKTOP 0x3F00 可以將SP定義到RAM 高端。但是如果采用這種定義的方法,需要在前面定義RAM的時(shí)候,定義修改為:RAM=READ_WRITE 0x2000 TO 0x3EFF。 這樣,工程連接的時(shí)候才不會(huì )出現錯誤。
另外還需要對于工程文件中 Start12.c中函數 :
void __interrupt 0 _Startup(void) 中
#ifdef _HCS12_SERIALMON
.......
.......
#endif
兩句宏命令注釋掉,使得其中的對于EEPROM,RAM起始位置控制寄存器初始化語(yǔ)句有效。這樣,下載后程序可以運行正常。
上述修改在大獎賽的官方網(wǎng)站上已有詳細說(shuō)明。
利用監控程序下載用戶(hù)程序:
監控程序(Monitor)的主要功能是對應用系統硬件及底層軟件進(jìn)行調試,也稱(chēng)為Debug程序,是最基本的調試工具。MC9S12DG128的Flash有128K,RAM有8K,而監控程序源代碼占用不到3K FLASH,占用23字節RAM。這對用戶(hù)程序的空間影響并不大。異步串行口是要用來(lái)做與PC通訊服務(wù)的,監控程序可以用,應用程序當然也可以使用。
下載用戶(hù)程序至片內資源是監控程序的基本功能。清華大學(xué)Freescale MCU & DSP應用研發(fā)中心開(kāi)發(fā)的基于MC9S12DG128的監控程序代碼小于4KB,起始地址為$F000處,它把$FF80的中斷向量表移到EF80處,順序不變。用戶(hù)可以使用$EF80處的中斷向量表,此中斷向量表和MC9S12DG128手冊上的中斷向量表順序相同,只是從$FF80移到了$EF80。監控程序起來(lái)時(shí),如果串口在4秒內沒(méi)有收到數據,就會(huì )檢查$EFFE-$EFFF(用戶(hù)復位向量表)是否為FFFF,如果不是,說(shuō)明FLASH中有用戶(hù)程序。程序自動(dòng)調轉到$EFFE-$EFFF所指向的用戶(hù)程序。如果程序起來(lái)4秒內串口接到數據或者$EFFE-$EFFF為$FFFF,則進(jìn)入DEBUG監控程序。
該監控程序中F命令下載程序到FLASH中,可識別S1或S2格式的S19文件。按“F”鍵后,開(kāi)發(fā)板上的單片機等待接收來(lái)自串行口的數據文件。然后選擇“發(fā)送” -→“發(fā)送文本文件”,找到要下載的*.S19文件,按“打開(kāi)(O)”,這樣,就把文件下載到FLASH中去了。注意,文件類(lèi)型應選“所有文件”。待再次出現提示符說(shuō)明程序已下載完成。
從PC寄存器的地址處,開(kāi)始運行程序??梢杂肅trl P 命令修改PC指針到擬運行程序的起始地址。如果是匯編的代碼從下載地址開(kāi)始執行即可;但如果是C語(yǔ)言編譯生成的代碼,需要加29后的地址再執行。這是因為工程是從START12.C開(kāi)始執行,然后再執行用戶(hù)的main.c。這是codewarrior內部規定的。用戶(hù)只需要知道就可以了。用戶(hù)程序的入口地址是用戶(hù)在default.prm文件中定義的代碼地址加上29。
然后鍵入“G”命令。這時(shí)便可以執行用戶(hù)程序了。如果用戶(hù)程序中無(wú)法從主循環(huán)中跳出,需要停止用戶(hù)程序的時(shí)候按一下復位鍵即可。
5 利用“BDM for S12(TBDML)”調試程序
當用戶(hù)在監控程序的幫助下,熟悉了S12單片機的性能和結構,并能初步開(kāi)始軟硬件的設計后,就可以脫離監控程序了,尤其是對于一個(gè)完整的項目,就更要直接對硬件進(jìn)行調試而脫離監控程序。S12系列單片機采用BDM(Background Debug Mode,背景調試模式)調試方式。在BDM模式下主要可以實(shí)現3方面的功能:
應用程序的下載與在線(xiàn)更新
單片機內部資源的配置與修復
應用程序的動(dòng)態(tài)調試
本中心提供面向S12系列單片機的BDM工具,即“BDM for S12(TBDML)”。該工具的硬件由本中心設計,軟件采用Daniel Malik設計的TBDML(forums.freescale.com)。本文僅從用戶(hù)的角度,講述“BDM for S12(TBDML)”的使用方法以及常見(jiàn)問(wèn)題的解決辦法。詳情請登陸本中心網(wǎng)站,并下載最新版本的“BDM for S12(TBDML)”用戶(hù)手冊。
5.1 BDM for S12(TBDML)硬件設置說(shuō)明:
BDM for S12(TBDML)設計了跳線(xiàn)開(kāi)關(guān),允許用戶(hù)對BDM for S12(TBDML)進(jìn)行一些特定的設置,以此滿(mǎn)足用戶(hù)的特定要求。打開(kāi)BDM for S12(TBDML)硬件包裝盒,可以看到有3個(gè)跳線(xiàn)可以進(jìn)行設置,分別是J4、J5和J6。
BDM引腳定義(跳線(xiàn)J4)
跳線(xiàn)J4用于選擇BDM電纜的信號定義。
默認狀態(tài)為J4閉合。
當J4閉合(有跳線(xiàn))時(shí),BDM電纜的信號定義如圖1所示;
當J4斷開(kāi)(無(wú)跳線(xiàn))時(shí),BDM電纜的信號定義如圖2所示。
注意:圖3是Motorola(Freescale)對HC/S12 BDM的定義,即引腳1為BKGD信號,在這種定義方式,一旦BDM插頭被接反,則目標CPU的BKGD引腳會(huì )被短接到VDD上,由此將會(huì )造成芯片燒毀。因此,BDM for S12(TBDML)建議用戶(hù)在設計目標S12系統時(shí),采用J4斷開(kāi),即圖2所示的BDM電纜信號定義方式。為兼容過(guò)去的BDM定義,BDM for S12(TBDML)設計了圖1所示的BDM兼容模式。
目標板供電方式選擇 ( 跳線(xiàn)J5和J6)
默認狀態(tài)是目標板由+5V外部電源供電。跳線(xiàn)J5、J6用于選擇目標板的工作電壓,以及供電方式。J5、J6跳線(xiàn)具體設置如表1所示。
表1 跳線(xiàn)J5、J6設置目標板工作電壓
設置類(lèi)型 |
跳線(xiàn)J5 |
跳線(xiàn)J6 |
目標板工作電壓 |
目標板供電方式 |
1(默認) |
閉合 (有跳線(xiàn)) |
斷開(kāi) (無(wú)跳線(xiàn)) |
+5V |
自供電 |
2 |
閉合 (有跳線(xiàn)) |
閉合 (有跳線(xiàn)) |
+5V |
由BDM供電(不推薦,因為USB供電不足) |
3 |
斷開(kāi) (無(wú)跳線(xiàn)) |
閉合 (有跳線(xiàn)) |
+3.3V |
自供電 |
4 |
斷開(kāi) (無(wú)跳線(xiàn)) |
斷開(kāi) (無(wú)跳線(xiàn)) |
無(wú)效 |
5.2 安裝和使用BDM for S12(TBDML):
BDM for S12(TBDML)在PC上的配套軟件是Freescale的CodeWarrio for S12的V4.1以上的版本。用戶(hù)可調用該軟件自帶的Hiwave.exe程序,并通過(guò)BDM for S12(TBDML)來(lái)調試MC9S12各種型號單片機。當然,初次使用BDM for S12(TBDML)時(shí),用戶(hù)還需要在PC上安裝相應的驅動(dòng)程序和動(dòng)態(tài)鏈接庫。具體的使用方法,請參閱用戶(hù)手冊。
5.3 使用BDM for S12(TBDML)的常見(jiàn)問(wèn)題及解決辦法。
車(chē)模大賽啟動(dòng)之處,中心在為廣大參賽選手提供培訓的同時(shí),按照Freescale的安排,為各參賽隊提供了S12開(kāi)發(fā)系統、BDM調試功能、車(chē)模等等一系列完整的參賽資源。時(shí)隔數月,從反饋信息來(lái)看,各參賽隊基本上都能熟練地使用BDM for S12(TBDML)。但也有個(gè)別隊伍遇到了一些問(wèn)題,中心也及時(shí)進(jìn)行了解答和總結,這里簡(jiǎn)單匯總了各種問(wèn)題,以期對參賽隊伍有所幫助。
【常見(jiàn)問(wèn)題之一】正確安裝了BDM for S12(TBDML)的驅動(dòng)程序和動(dòng)態(tài)鏈接庫后,并用BDM連接了目標單片機后,在Hiwave.exe的【TBDML HCS12】菜單中,沒(méi)有出現“Flash...”項,無(wú)法對目標單片機進(jìn)行調試。
解決辦法:首先,用戶(hù)應該確保目標板供電正常,BDM for S12(TBDML)默認的電源工作方式是目標板自供電;如果,還有問(wèn)題,用戶(hù)應該打開(kāi)BDM的包裝小盒,查看跳線(xiàn)J4是否已經(jīng)短接,原因見(jiàn)上文。
【常見(jiàn)問(wèn)題之二】驅動(dòng)程序安裝正常,跳線(xiàn)也沒(méi)有問(wèn)題,目標板也供電了,但BDM還是不工作。
解決辦法:出現這一問(wèn)題,最大的可能是,用戶(hù)的CodeWarrio版本不對,沒(méi)有利用CodeWarrio V4.1以上的版本進(jìn)行調試。安裝高版本的CodeWarrio即可解決問(wèn)題。
【常見(jiàn)問(wèn)題之三】BDM調試目標板基本正常,能夠下載程序、擦除FLASH、設斷點(diǎn)調試,但是,在某次使用中FLASH突然被“鎖死”,之后目標板無(wú)法繼續使用。
解決辦法:Freescale 公司的HCS12 系列單片機具有片內FLASH 的加密功能,對于加密或保護后的FLASH,用戶(hù)是無(wú)法通過(guò)BDM 調試工具對其FLASH 進(jìn)行諸如程序擦除、讀取等操作。同時(shí),如果用戶(hù)在利用BDM 調試單片機時(shí)操作不當,同樣會(huì )使單片機出現FLASH 無(wú)法讀取、擦除和下載等問(wèn)題。我們的監控程序在$F000 到$$FFFF,這一段加了保護,但并沒(méi)有加密。即使對加了密的S12,也可以使用我們生產(chǎn)地串行接口地BDM 工具方便的解鎖和擦除。在2005 年第4 期《電子產(chǎn)品世界》雜志中,我中心曾經(jīng)撰文講述了HCS12 單片機Flash 保護和加解密的原理和注意事項。在決定擦除保護了的程序時(shí),請想好在出現單片機被鎖定的情況下有沒(méi)有能力解鎖。對于FLASH沒(méi)有進(jìn)入“保護模式”的單片機,如果利用BDM for S12 (TBDML)調試單片機,當用戶(hù)點(diǎn)擊【TBDML HCS12】菜單下的【Flash…】命令時(shí),會(huì )出現如圖12所示的正常情況。從圖中可以看出,當前目標板的單片機的FLASH_C000存儲區域已下載有程序,狀態(tài)為“Programmed”;其余模塊為空,狀態(tài)為“Blank”。因此,可以繼續對該單片機的FLASH進(jìn)行讀取、擦除Erase和下載Load等操作。但是,在出現上述FLASH加密問(wèn)題后,HCS12系列單片機就進(jìn)入了“FLASH保護模式”,即Secure Mode。這時(shí),如果利用BDM for S12(TBDML)調試單片機,當用戶(hù)點(diǎn)擊【TBDML HCS12】菜單下的【Flash…】命令時(shí),圖12中部分FLASH區域的狀態(tài)就會(huì )顯示為“Skipped”。此時(shí),用戶(hù)便無(wú)法再對FLASH進(jìn)行正常操作。因此,需要解除FLASH的“保護模式”(Secure Mode),執行Unsecure的操作。BDM for S12(TBDML)提供了Unsecure的功能,具體的操作過(guò)程較為復雜,請參閱用戶(hù)手冊。
6 結語(yǔ)
上面提到的問(wèn)題是在應用過(guò)程中發(fā)現的比較普遍的問(wèn)題。在設計之前最好能完整地閱讀幫助文檔以及芯片的數據手冊,了解各個(gè)工作狀態(tài),很多可能出現的問(wèn)題其實(shí)在數據手冊里已有明確的說(shuō)明。這樣做在程序設計的前期可能會(huì )影響一些進(jìn)度,但到后期調試階段會(huì )帶來(lái)極大的方便。至于工具使用上的問(wèn)題Freescale單片機/DSP應用開(kāi)發(fā)研究中心會(huì )及時(shí)在大賽的官方網(wǎng)站上做出相應的說(shuō)明,請大家留意。
參考文獻
1、 邵貝貝,單片機嵌入式應用的在線(xiàn)開(kāi)發(fā)方法,北京:清華大學(xué)出版社,2004
2、 MC9S12DT128,Device User Guide,Freescale semiconductor,2005.10
評論