LPC2294的實時時鐘顯示工程設(shè)計分析
關(guān)鍵詞 LPC2294 ARM嵌入式系統(tǒng)啟動代碼RTC模塊 定時器模塊VFD模塊PT6311
引 言
嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)于應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)有復(fù)雜和簡單之分。通常代碼量少的系統(tǒng)完成的功能有限,可以不使用嵌人式操作系統(tǒng),直接在裸機上開發(fā),使用的開發(fā)工具可以是匯編語言和C語言;復(fù)雜的嵌入式系統(tǒng)推薦使用嵌入式操作系統(tǒng)。
ARM(Advarlced RISC Machine)是設(shè)計這種處理器內(nèi)核的公司的名字,ARM核并非芯片。ARM核與其他部件,如RAM、ROM、片內(nèi)外設(shè),組合在一起才構(gòu)成現(xiàn)實的芯片。ARM作為一類微處理器的通稱,作為一種低功耗、高性能的32位嵌入式微處理器,現(xiàn)在已經(jīng)被廣泛應(yīng)用在各個領(lǐng)域中。
ARM應(yīng)用的開發(fā)工具主要包括集成開發(fā)環(huán)境IDE、評估板和JTAG仿真器等。國內(nèi)使用較多的IDE為ARM公司的SDT、ADS以及英蓓特公司的Embest IDE。仿真器有ARM公司的Muti-ICE和英蓓特公司的Embest系列ARM JTAG仿真器等。
可以在PC機上開發(fā)一個嵌入式系統(tǒng),利用集成開發(fā)環(huán)境編寫并編譯鏈接產(chǎn)生ARM處理器執(zhí)行代碼。然后用仿真器等調(diào)試工具調(diào)試,并下載代碼到硬件上,如圖1所示。
在嵌入式系統(tǒng)的編程開發(fā)過程中,技術(shù)難點主要在于系統(tǒng)引導程序的編寫。為此提供一個較完整的小工程,詳細分析在ARM7基礎(chǔ)上開發(fā)嵌入式系統(tǒng)時引導程序的關(guān)鍵代碼,并簡要介紹應(yīng)用程序的主要函數(shù)。
LPC2294是基于一個支持實時仿真和跟蹤的16/32位ARM7TDMI-SCPU,帶有256 KB嵌入的高速Flash存儲器。它有極低的功耗、多個32位定時器、RTC模塊、WDT模塊等。
本文主要是在以LPC2294為核心的ARM小系統(tǒng)中,在不采用操作系統(tǒng)的情況下,試編寫了一個工程,并下載到該開發(fā)板的外部存儲器(該開發(fā)板的片外存儲器為4 MB片外32位數(shù)據(jù)總線寬度Flash存儲器),接上VFD顯示模塊后,脫機運行時,顯示實時時鐘成功。
該工程利用ADS開發(fā)軟件,在CodeWarrior IDE集成開發(fā)環(huán)境下,編寫編譯并使用AXD和技創(chuàng)公司的techorICE仿真器訶試,并下載程序,VFD模塊采用PT6311驅(qū)動芯片。
工程的程序主要分兩部分:系統(tǒng)引導(BOOT)部分和應(yīng)用程序部分。
1 系統(tǒng)引導部分
系統(tǒng)引導(BOOT)是芯片復(fù)位后進入應(yīng)用程序之前執(zhí)行的一段代碼,主要是為運行應(yīng)用程序提供基本的運行環(huán)境,對系統(tǒng)硬件和軟件運行環(huán)境進行初始化。這些工作是用匯編語言和C語言完成的,是嵌入式系統(tǒng)中應(yīng)用程序的開頭部分,與應(yīng)用程序一起固化在ROM中,并首先在系統(tǒng)上運行。
設(shè)計好系統(tǒng)引導(BOOT)是設(shè)計嵌入式程序的關(guān)鍵,也是系統(tǒng)能夠正常工作的前提。系統(tǒng)引導(BOOT)所執(zhí)行的操作主要依賴于CPU內(nèi)核的類型,以及正在開發(fā)的嵌入式系統(tǒng)軟件中需要使用的CPU芯片上的資源。針對該款芯片和應(yīng)用程序的系統(tǒng)引導(B00T)代碼的流程如圖2所示。
以下按在片內(nèi)RAM調(diào)試該工程時,順序出現(xiàn)的啟動代碼的有關(guān)文件,給出關(guān)鍵代碼分析:;中斯向量表,給出CPU芯片出現(xiàn)異常時應(yīng)該轉(zhuǎn)去執(zhí)行的程序
系統(tǒng)引導模塊完成各種初始化工作后,用一條跳轉(zhuǎn)指令進入C的主入口Main,從此控制權(quán)移交給了C應(yīng)用程序。
2 應(yīng)用程序部分
對于該工程中使用到的LPC2294芯片里的各個模塊,如I/O端口、RTC、TIMERl,應(yīng)該首先在相應(yīng)函數(shù)中對該模塊里的各個寄存器全部進行初始化,這樣脫機運行時才能順利顯示。
下面簡要介紹一下main.c主程序里用到的各主要函數(shù)。
hitVfdl312();
該函數(shù)首先初始化LPC2294的P0口全部為GPIO口。本工程中設(shè)置PO.6與P0.7、P0.8為輸出,并在硬件連接上分別接到PT6311模塊的數(shù)據(jù)線、片選線、時鐘線,然后利用P0.6與P0.7、P0.8送出數(shù)據(jù)到VFD模塊,初始化VFD,舔加初始化數(shù)據(jù)。實際上初始化為空格,然后全部點亮VFD。
RTCIni();
初始化實時時鐘并啟動RTC。
TIMERl_InitTimef();
初始化定時器1,設(shè)置每過1ms產(chǎn)生1次中斷,即置位定時器里IR中的MR0位;并復(fù)位定時器計數(shù)器TC。
TIMERl_StartTimer();
使定時器1離開復(fù)位狀態(tài),并開始計時。
pollint();
設(shè)置變量_mSet、_10mSct、_100mSct,其數(shù)值代表的單位分別為1ms,10ms,110ms。隨著定時器1的不斷置位中斷和復(fù)位,它們的數(shù)值也相應(yīng)產(chǎn)生變化。
GetTime();
每過1s,讀一下RTC里的時間,送到VFD緩沖區(qū)。
UpdateVfdl312();
每過100ms,讀取VFD緩沖區(qū)里的數(shù)值,刷新VFD顯示。
結(jié)語
把該工程應(yīng)用于基于LPC2294的開發(fā)板外部存儲器后,能夠脫機運行,VFD實時時鐘全部點亮,并且顯示時間正確。
LPC2294適用于開發(fā)稅控設(shè)備。稅控設(shè)備上有較多的模塊,VFD客顯模塊是其中之一,可用來顯示時間。
這個工程是一個較完整的工程,可以在該工程上擴展稅控機的其他模塊和應(yīng)用程序等。不需要改動啟動代碼,只需在mian.c和其他應(yīng)用程序中添加相應(yīng)的函數(shù)。以期以后開發(fā)成一個完整的稅控機系統(tǒng)。