摘? 要: P51XA單片機(jī)的一種簡(jiǎn)易開(kāi)發(fā)裝置的設(shè)計(jì)和制作。
關(guān)鍵詞: P51XA? 開(kāi)發(fā)裝置
?
P51XA是Philips公司的16位單片機(jī)。它對(duì)外的數(shù)據(jù)總線和內(nèi)部的結(jié)構(gòu)均為16位,其尋址空間大,最大可為16MB;它有2種工作模式——系統(tǒng)模式和用戶模式,有2個(gè)堆??臻g——系統(tǒng)堆棧和用戶堆棧,特別適用于實(shí)時(shí)多任務(wù)操作系統(tǒng);其運(yùn)行速度為標(biāo)準(zhǔn)51單片機(jī)的10~100倍,而且它的體系結(jié)構(gòu)和MCS-51兼容,匯編級(jí)的指令可以和MCS-51實(shí)現(xiàn)轉(zhuǎn)換,很容易學(xué)習(xí)和掌握,使熟悉MCS-51單片機(jī)的嵌入式系統(tǒng)的開(kāi)發(fā)人員能快速向16位微控制器轉(zhuǎn)移,以適應(yīng)復(fù)雜、快速控制的需要。但P51XA單片機(jī)的仿真器和開(kāi)發(fā)裝置種類很少,且價(jià)格昂貴。為此我們研制了一種用于P51XA的簡(jiǎn)易開(kāi)發(fā)板。開(kāi)發(fā)板采用P51XAK37,它是P51XA的一種派生產(chǎn)品,其尋址空間為1MB,內(nèi)部有32KB程序存儲(chǔ)器、512B的RAM、3個(gè)功能增強(qiáng)的定時(shí)/計(jì)數(shù)器和2個(gè)串行口。研制的開(kāi)發(fā)板還配有256KB的Flash存儲(chǔ)器和256KB的RAM,有2種工作模式——調(diào)試模式和用戶模式,2種模式可以通過(guò)外部跳線選擇。在調(diào)試模式下開(kāi)發(fā)板可以:從PC機(jī)上下載程序,在應(yīng)用程序中設(shè)置斷點(diǎn),啟動(dòng)應(yīng)用程序的運(yùn)行,從PC機(jī)的窗口觀察或設(shè)定P51XA內(nèi)部寄存的值等。在用戶模式下,上電后直接運(yùn)行應(yīng)用程序。因此它很適合用作程序的開(kāi)發(fā)、調(diào)試。又由于其體積較小也可以直接嵌入到用戶系統(tǒng)中去。本文即對(duì)開(kāi)發(fā)板的軟、硬件結(jié)構(gòu)作一介紹。
1? 開(kāi)發(fā)板硬件設(shè)計(jì)
開(kāi)發(fā)板的硬件設(shè)計(jì)主要考慮:(1)能夠提供對(duì)P51XA應(yīng)用系統(tǒng)的調(diào)試和排錯(cuò)。(2)使開(kāi)發(fā)板本身能夠像一個(gè)“大芯片”一樣嵌入到用戶的應(yīng)用系統(tǒng)中去。由于使用P51XA的目的是希望發(fā)揮16位單片機(jī)的優(yōu)勢(shì),故開(kāi)發(fā)板的設(shè)計(jì)不考慮8位工作方式,全部按工作在16位的方式下進(jìn)行設(shè)計(jì),其電路結(jié)構(gòu)如圖1所示。系統(tǒng)中擴(kuò)展了2片628128以組成256KB的數(shù)據(jù)存儲(chǔ)器,其地址從“0”開(kāi)始。開(kāi)發(fā)板擴(kuò)展了2片存儲(chǔ)器U2、U3,利用邏輯電路的控制,可以分別切換作為程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器使用。U2、U3存儲(chǔ)器可以通過(guò)跳線選擇使用RAM(如628128)或Flash(如29EE010)共組成256KB的空間,相應(yīng)地在下載程序時(shí)有“下載到RAM”和“下載到Flash”的選項(xiàng)。從PC機(jī)中下載程序時(shí),U2、U3作為數(shù)據(jù)存儲(chǔ)器使用,這時(shí)其地址安排從80000H開(kāi)始,并可以將從PC機(jī)中下傳的程序?qū)懭肫渲?。?dāng)程序下載完后可以將其切換為程序存儲(chǔ)器,作為程序存儲(chǔ)器時(shí)其地址安排為從“0”開(kāi)始。圖1中的譯碼電路產(chǎn)生存儲(chǔ)器所需的3個(gè)片選信號(hào):(1)2片RAM的片選,其地址為00000H~3FFFFH。(2)U2、U3的片選除受譯碼電路控制外還受一個(gè)D觸發(fā)器輸出的控制,使它們的地址空間可以在00000H~3FFFFH和80000H~BFFFFH之間切換。(3)由地址譯碼信號(hào)在內(nèi)部與P51XA的WRH合成后作為一個(gè)D觸發(fā)器的時(shí)鐘脈沖,可以在程序中對(duì)該地址執(zhí)行寫操作,以改變D觸發(fā)器的輸出(其用途后述)。開(kāi)發(fā)板利用P51XA的串行口0實(shí)現(xiàn)與PC機(jī)的通信。
?

?
開(kāi)發(fā)板設(shè)有3個(gè)跳線J1、J2、J3。利用它們可以選擇開(kāi)發(fā)板工作在調(diào)試模式或用戶模式。選擇調(diào)試模式時(shí),上電后進(jìn)入開(kāi)發(fā)板的監(jiān)控程序,以完成程序下載、設(shè)置斷點(diǎn)、控制程序運(yùn)行等;選擇在用戶模式時(shí),上電后自動(dòng)開(kāi)始運(yùn)行用戶程序,且監(jiān)控程序等對(duì)用戶程序完全透明。由于U2、U3可以安裝RAM也可以安裝Flash,故可以用作數(shù)據(jù)存儲(chǔ)器也可以用作程序存儲(chǔ)器,但其地址也要相應(yīng)改變,所以需要有對(duì)U2、U3的切換電路(見(jiàn)圖1)。其中J1用于選擇開(kāi)發(fā)板的工作模式,當(dāng)J1的1、2觸點(diǎn)短接將EA等拉為高電平時(shí),上電后即運(yùn)行P51XA的片內(nèi)程序,這時(shí)開(kāi)發(fā)板工作在調(diào)試模式。同時(shí)“與門1”的一個(gè)輸入端也成為高電平,使“與門1”的另一控制端可以直接控制其輸出;當(dāng)J1的2、3觸點(diǎn)短接將EA拉為低電平時(shí),上電后運(yùn)行外部存儲(chǔ)器中的程序,開(kāi)發(fā)板處于用戶模式,“與門1”的輸出用來(lái)控制U2、U3的工作方式。如圖1中所示,“與門1”的一個(gè)輸入由J1控制,若將J1拉低使“與門1”的輸出固定為低,此時(shí)U2、U3作為程序存儲(chǔ)器使用。在這種情況下,上電后運(yùn)行U2、U3中的用戶程序。若J1接高電平,則“與門1”受D觸發(fā)器的輸出所控制,從而決定U2、U3的用法。而D觸發(fā)器的D輸入端接數(shù)據(jù)總線D15,其時(shí)鐘信號(hào)由譯碼器的一個(gè)輸出控制。在監(jiān)控程序中對(duì)該地址進(jìn)行1次“寫操作”使觸發(fā)器輸出為高,這時(shí)U2、U3作為數(shù)據(jù)存儲(chǔ)器使用,可將PC機(jī)下載的程序?qū)懭險(xiǎn)2、U3中。程序下載完畢,再對(duì)此地址進(jìn)行1次寫操作使D觸發(fā)器輸出為低,此時(shí)U2、U3即用作程序存儲(chǔ)器。J2、J3用于選擇U2、U3的類型,若將J2、J3的跳線1、2,3、4分別短接,則U2、U3使用Flash存儲(chǔ)器;若將J2、J3的2、3,4、5分別短接,則U2、U3使用RAM存儲(chǔ)器。
開(kāi)發(fā)板的監(jiān)控程序固化在P51XAG37的內(nèi)部程序存儲(chǔ)器中,其存在問(wèn)題:(1)工作在調(diào)試模式時(shí),上電后進(jìn)入位于P51XAG37內(nèi)部的監(jiān)控程序,與之相重疊的外部程序存儲(chǔ)器的最低32KB空間不可訪問(wèn),因此可以將用戶程序安排在32KB以上的空間。再考慮到P51XA本身的一些特點(diǎn),用戶應(yīng)用程序的第1條指令和中斷服務(wù)程序只能定位在32KB以上和64KB以下的32KB空間內(nèi)。但進(jìn)入用戶程序后可以通過(guò)遠(yuǎn)轉(zhuǎn)移到任意位置,這樣做的惟一缺陷是浪費(fèi)了32KB的存儲(chǔ)空間。(2)P51XA的中斷矢量表位于程序存儲(chǔ)器的最低位置,下載時(shí)可將其寫入U(xiǎn)2、U3中,而本開(kāi)發(fā)板工作在調(diào)試狀態(tài)時(shí),U2、U3的最低32KB不可訪問(wèn)。解決的方法:因在下載程序的同時(shí)監(jiān)控程序也獲取了中斷矢量的有關(guān)信息,因此可在監(jiān)控程序內(nèi)重定向到真正的中斷服務(wù)程序。但如果下載程序后改變跳線為用戶模式,則復(fù)位后全部使用外部程序存儲(chǔ)器,直接運(yùn)行固化在U2、U3中的用戶程序即可。
????為方便將開(kāi)發(fā)板嵌入到目標(biāo)系統(tǒng)中使用,在開(kāi)發(fā)板的二側(cè)安裝有標(biāo)準(zhǔn)間距的插針,以引出P51XA的主要信號(hào),利用插針就可直接將開(kāi)發(fā)板插入應(yīng)用系統(tǒng)中。
2? 開(kāi)發(fā)板軟件
開(kāi)發(fā)板的軟件分為二部分:一是運(yùn)行于PC機(jī)上的開(kāi)發(fā)環(huán)境,完成編輯、編譯、連接、下載等工作;二是位于P51XA內(nèi)部的監(jiān)控程序,實(shí)現(xiàn)將PC機(jī)下載的代碼寫入開(kāi)發(fā)板上的RAM或Flash中、應(yīng)用程序的啟動(dòng)/停止、斷點(diǎn)的實(shí)現(xiàn)和P51XA內(nèi)部的狀態(tài)的觀察等。
2.1 開(kāi)發(fā)環(huán)境
為便于開(kāi)發(fā)板的使用,需要有在PC機(jī)上的開(kāi)發(fā)環(huán)境。目前僅實(shí)現(xiàn)了在DOS下工作的、簡(jiǎn)單的窗口系統(tǒng),利用簡(jiǎn)單的菜單可以完成以下工作:將編輯、編譯好的源代碼調(diào)入一個(gè)窗口,直接通過(guò)窗口在C源代碼中設(shè)置斷點(diǎn),將程序下載到開(kāi)發(fā)板中的RAM或Flash存儲(chǔ)器中,可以控制開(kāi)發(fā)板中程序開(kāi)始執(zhí)行等。當(dāng)開(kāi)發(fā)板中的程序執(zhí)行到斷點(diǎn)時(shí),可以在另一個(gè)窗口中觀察到P51XA內(nèi)部的寄存器和一些變量。源程序的編輯可以使用一些常用的編輯軟件,如DOS下的EDIT。編譯軟件使用HT—TECH的C編譯工具。這是一套工作在DOS下的P51XA編譯和連接軟件。
2.2 程序下載
源程序經(jīng)編譯、連接后生成HEX文件,將該文件通過(guò)串行口傳送給開(kāi)發(fā)板,并寫入U(xiǎn)2、U3存儲(chǔ)器中。代碼下載完成后再將有關(guān)設(shè)置斷點(diǎn)的信息(斷點(diǎn)表)下傳給開(kāi)發(fā)板。用戶程序下傳完畢后,監(jiān)控程序再將U2、U3切換為程序存儲(chǔ)器。
2.3 設(shè)定斷點(diǎn)并觀察P51XA內(nèi)部狀態(tài)
為便于程序調(diào)試,P51XA設(shè)有1條斷點(diǎn)指令BKPT,該指令只有1個(gè)字節(jié),其值為二進(jìn)制的FF。執(zhí)行這條指令將會(huì)產(chǎn)生1個(gè)斷點(diǎn)陷阱,它類似一個(gè)不可屏蔽的立即中斷。因此只需將設(shè)置斷點(diǎn)處指令的第1個(gè)字節(jié)修改為FF即可。源代碼在編譯、連接的過(guò)程中可以產(chǎn)生一個(gè)包含有調(diào)試信息的文件。從該文件中可以得到C源代碼中的變量的安排及C語(yǔ)言程序的每行相對(duì)應(yīng)的可執(zhí)行程序的物理地址等。根據(jù)這些信息可以找到在C語(yǔ)言程序中設(shè)置的斷點(diǎn)所對(duì)應(yīng)的物理地址。當(dāng)開(kāi)發(fā)板的監(jiān)控程序接到命令開(kāi)始執(zhí)行用戶程序時(shí),它首先查閱斷點(diǎn)表,并將U2、U3中相應(yīng)位置的值改為FF,然后開(kāi)始執(zhí)行用戶程序。執(zhí)行到斷點(diǎn)處后由于斷點(diǎn)陷阱,進(jìn)入相應(yīng)的服務(wù)程序,將P51XA內(nèi)部寄存器的狀態(tài)傳送給PC機(jī),在窗口中顯示出來(lái)。這時(shí)可以在窗口中修改有關(guān)寄存器的值。當(dāng)從斷點(diǎn)處繼續(xù)運(yùn)行時(shí),首先將窗口中各寄存器的值恢復(fù)到P51XA內(nèi)部狀態(tài),然后將斷點(diǎn)處被修改的值恢復(fù)為原來(lái)的代碼,從斷點(diǎn)處繼續(xù)運(yùn)行。對(duì)每一個(gè)斷點(diǎn)均按此方式處理。
2.4 啟動(dòng)應(yīng)用程序和中斷服務(wù)程序
將用戶應(yīng)用程序從PC機(jī)中下載到開(kāi)發(fā)板后,通過(guò)分析中斷矢量表,得到用戶主程序和中斷服務(wù)程序的入口地址和PSW值。因此在監(jiān)控程序中直接使用轉(zhuǎn)移指令即可開(kāi)始運(yùn)行用戶程序。而中斷的處理是:在開(kāi)發(fā)板內(nèi)部的監(jiān)控程序中為每個(gè)中斷都安排了一個(gè)簡(jiǎn)單的服務(wù)程序,但它只有PUSH和RET2條指令。PUSH指令將真正的中斷服務(wù)程序的入口地址壓入堆棧中,而執(zhí)行RET指令即進(jìn)入真正的中斷服務(wù)程序。不過(guò)這樣做的結(jié)果會(huì)使進(jìn)入中斷服務(wù)程序的時(shí)間要延遲若干個(gè)時(shí)鐘周期。
開(kāi)發(fā)板的使用方法如下:在DOS下利用常用的編輯程序書(shū)寫用戶的應(yīng)用程序,需要注意的是應(yīng)將用戶的主程序和中斷服務(wù)程序定位在32K~64KB之間。將開(kāi)發(fā)板的J2、J3跳線選擇為RAM,編譯后利用開(kāi)發(fā)板的調(diào)試軟件將其HEX文件下載到開(kāi)發(fā)板中,進(jìn)行調(diào)試。調(diào)試通過(guò)后,將U2、U3改為Flash,再將用戶程序下載到開(kāi)發(fā)板中,J1跳線選為用戶模式,上電后即可運(yùn)行用戶程序。
3? 結(jié)束語(yǔ)
本開(kāi)發(fā)板只具備一些簡(jiǎn)單的程序下載、設(shè)置斷點(diǎn)、控制用戶程序運(yùn)行、觀察P51XA的內(nèi)部狀態(tài)等功能,并且監(jiān)控程序占用了P51XA內(nèi)部的一些資源,相對(duì)于一些商業(yè)仿真器來(lái)說(shuō)功能簡(jiǎn)單了許多,在有些方面還不太成熟,需要進(jìn)一步完善。但它成本很低,在一般場(chǎng)合已夠用,為我們提供了一種簡(jiǎn)易的P51XA的開(kāi)發(fā)環(huán)境。
?
參考文獻(xiàn)
1? 梁合慶.從C到嵌入式C編程語(yǔ)言——入門、深入、實(shí)用.北京:北京航空航天大學(xué)出版社,2000
