基于TMS320F2812的液晶顯示的設計
引言
本文引用地址:http://dyxdggzs.com/article/173883.htm近年來(lái),DSP芯片在高速數據處理中得到了廣泛的應用。TMS320F2812是美國德州儀器公司(TI公司)專(zhuān)門(mén)為工業(yè)應用而設計的新一代DSP處理器。該芯片采用了高性能的32位中央處理器、哈佛總線(xiàn)結構,高性能靜態(tài)CMOS技術(shù),主頻最高可達150MHZ(時(shí)鐘周期6.67ns);具有外部存儲器接口XINTF,可擴展多達1MB的存儲空間。但是這種高速器件與慢速外設之間的接口產(chǎn)生了問(wèn)題。一般來(lái)說(shuō),DSP與慢速外設的接口訪(fǎng)問(wèn)有兩種方式:直接訪(fǎng)問(wèn)方式和間接訪(fǎng)問(wèn)方式。間接訪(fǎng)問(wèn)是用DSP的數字I/O口來(lái)控制慢速外設,用軟件編程來(lái)模擬外設的接口時(shí)序,加入相應的等待延時(shí)來(lái)實(shí)現;而直接訪(fǎng)問(wèn)是將慢速外設與DSP特定的XINTF區相連,通過(guò)增加相應的內部等待狀態(tài)來(lái)實(shí)現時(shí)序上的匹配。TMS320F2812有多達56個(gè)獨立的可編程、多用途雙向數字I/O口,本文將利用這些I/O口,通過(guò)軟件編程模擬慢速液晶控制器ST7920的讀寫(xiě)時(shí)序,實(shí)現與液晶通信。
1 FYD12842-0402B液晶顯示模塊簡(jiǎn)介
點(diǎn)陣式液晶顯示模塊是一種集顯示、控制與驅動(dòng)為一體的顯示器件,在設計中我們采用的是成都市飛宇達實(shí)業(yè)有限公司生產(chǎn)的液晶顯示模塊FYD12864-0402B,內置ST7920液晶控制器。
FYD12864-0402B是一種具有4位/8位并行、2線(xiàn)或3線(xiàn)串行多種接口方式,內部含有國標一級、二級簡(jiǎn)體中文字庫的點(diǎn)陣圖形液晶顯示模塊。其顯示分辨率為128 64,內置8192個(gè)16*16點(diǎn)漢字,和128個(gè)16*8點(diǎn)ASCII字符集,強大的字庫省去了很多自行編碼的麻煩;該模塊不僅可以顯示8 行16 16點(diǎn)陣的漢字,利用其靈活的接口方式和簡(jiǎn)單、方便的操作指令,還可構成全中文人機交互圖形界面;其內置了DC~DC轉換電路,無(wú)需外加負電壓,無(wú)需片選信號,簡(jiǎn)化了軟件設計。
總之,由該模塊構成的液晶顯示方案與同類(lèi)型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結構或顯示程序都要簡(jiǎn)潔得多,具體可以參看FYD12864-0402B的使用手冊。
2.1 間接硬件接口設計
TMS320F2812與ST7920的間接硬件接口設計如圖1所示。ST7920并、串口方式可選,當PSB置高時(shí)為并行方式,置低時(shí)為串口方式。本例在實(shí)際應用中僅使用8位并口的通訊模式,故將PSB接固定高電平。RESET為液晶復位引腳,低電平有效。V0與VOUT以圖1中方式相連可以調節LCD的對比度。本設計用TMS320F2812的GPIOA0~7作為數據接口,GPIOB0、GPIOB1分別與RS、R/W相連作為控制信號,其具體控制功能如表1所示。E為ST7920的使能信號,將其與GPIOB2相連,E=1時(shí),配合R進(jìn)行讀數據或指令;當E=1 時(shí),配合/W進(jìn)行寫(xiě)數據或指令。
圖1 TMS320F2812與ST7920的硬件接口電路
另外,在本設計中,TMS320F2812的I/O口只能接受最大3.3V的電壓,而液晶的輸出電壓有5V,因此在兩者之間需要進(jìn)行電平轉換。
2.2 DSP與ST7920的軟件接口設計
DSP和液晶模塊的接口包括2部分操作:DSP讀液晶模塊狀態(tài)的操作;DSP向液晶模塊寫(xiě)數據和指令的操作。這些操作的實(shí)現是參考液晶模塊的時(shí)序圖,產(chǎn)生滿(mǎn)足這些時(shí)序的接口控制邏輯。液晶的時(shí)序圖如圖2所示。
(b) ST7920讀資料時(shí)序圖
圖2 ST7920讀寫(xiě)時(shí)序圖
其中,TC=1200(MIN),TPW=140(MIN),TR=TF=25(MAX),TAS=10(MIN),TAH=20(MIN),TDSW=40(MIN),TH=20(MIN),TDDR=100(MAX)(單位均為ns)
從時(shí)序圖可以看出,ST7920的RS、R/W可以同步操作,讀寫(xiě)操作是由使能信號E完成的,因此,在軟件設計中關(guān)鍵是要設計出合理的E信號,以滿(mǎn)足ST7920的讀/寫(xiě)時(shí)序。要實(shí)現對ST7920的正確讀寫(xiě)必須使F2812的I/O口模擬時(shí)序注意滿(mǎn)足以下條件:
(1) 在讀寫(xiě)時(shí),必須使E信號,即IOPB2保持高信號140ns以上
(2) 在寫(xiě)操作時(shí)IOPA0~IOPA7的數據必須在E信號變?yōu)榈碗娖角氨3?0ns以上
(3) 在讀、寫(xiě)兩個(gè)數據之間的間隔必須大于1200ns。
此外,ST7920有內部標志忙標志BF,BF=1表示模塊在進(jìn)行內部操作,此時(shí)模塊不接受外部指令和數據;BF=0時(shí),模塊為準備狀態(tài),隨時(shí)可接受外部指令和數據。因此,在送出一個(gè)指令前需檢查BF標志位,如不檢查,則在前一個(gè)指令和這個(gè)指令中間必須延遲一段較長(cháng)的時(shí)間,等待前一個(gè)指令確定執行完成。從程序的可移植性和通用性方面考慮,本設計選用了C語(yǔ)言進(jìn)行軟件模塊的設計實(shí)現。另外,在軟件的編寫(xiě)上采用了結構體、共用體的方法,以結構體成員的形式來(lái)訪(fǎng)問(wèn)寄存器的某一位或者某幾位。相比以前使用的宏定義方式,這種方式實(shí)現了對寄存器位域的獨立訪(fǎng)問(wèn),為寄存器提供了更加靈活和高效的訪(fǎng)問(wèn)手段,也大大提高了代碼的可讀性、可靠性和可維護性?,F給出程序如下:
void writeINS (int INS ) //DSP向液晶寫(xiě)入命令
{
checkBF();//測試BF位是否忙
EALLOW;
GpioMuxRegs. GPADIR.all=0x00ff;//設GPIOA0~7為輸出引腳
EDIS;
GpioDataRegs. GPBDAT.bit.GPIOB0=0;
GpioDataRegs. GPBDAT.bit.GPIOB1=0;//寫(xiě)指令到LCD,RS=0,R/W=0
GpioDataRegs. GPADAT.all=INS;//輸出指令
GpioDataRegs. GPBDAT.bit.GPIOB2=1;//E=1
Delay1();//延時(shí)140ns以上
GpioDataRegs. GPBDAT.bit.GPIOB2=0;//E=0,指令寫(xiě)入LCD
}
void writeDATA(int data) //向液晶寫(xiě)入數據
{
checkBF();//測試BF位是否忙
EALLOW;
GpioMuxRegs. GPADIR.all=0x00ff;//設GPIOA0~7為輸出引腳
EDIS;
GpioDataRegs. GPBDAT.bit.GPIOB0=1;
GpioDataRegs. GPBDAT.bit.GPIOB1=0;//寫(xiě)數據到LCD,RS=1,R/W=0
GpioDataRegs. GPADAT.all=data;//輸出數據
GpioDataRegs. GPBDAT.bit.GPIOB2=1;//E=1
Delay1();//延時(shí)140ns以上
GpioDataRegs. GPBDAT.bit.GPIOB2=0;//E=0,數據寫(xiě)入LCD
}
評論