當前信息時代,信息的獲取最終要通過顯示來實現人、機交換,由于DSP在高速信號采集、音頻處理、圖像處理等控制領域無處不在,而液晶顯示器以其高畫質、功耗低、接口控制方便、良好的可視化人機界面等優點,廣泛應用在便攜式智能儀器儀表的終端顯示,成為測量結果和人機對話的重要工具。本文提出了一種以TMS320LF2407A為核心的智能測試儀器,通過DSP芯片TMS32OLF2407A與液晶控制芯片SED1335的接口,實現對液晶顯示器MSP-G320240的控制,并介紹了相關的硬件、軟件設計。
1.DSP芯片及液晶顯示器的性能特點
1.1 TMS320LF2407A
TMS320LF2407A是TI公司推出的一款定點DSP芯片,是目前TMSC2000家族中集成度高、性能最強的芯片,除了具有一般DSP改進的哈佛結構、多總線結構和流水線結構等優點外,它還采用高性能靜態CMOS技術,電壓從5V降為3.3V,減少了功耗;40MIPS的執行速度使得指令周期縮短到25ns,提高了計算能力和控制器的實時控制能力;片內集成了32KB的閃存、1.5KB的數據/程序RAM、544B雙口RAM(DRAM)和2KB的單口RAM(SARAM)、16通道10位500ns的A/D轉換器、CAN控制器模塊、串行通信接口(SCI)模塊、16位串行外部設備接口(SPI)模塊、看門狗(WD)定時器模塊、兩個事件管理模塊(EVA和EVB)等,如此功能強大的功能使得TMS320LF2407A可以滿足各種智能儀器的PWM接口和I/O功能,提高系統的性能,簡化外部硬件電路的設計。
1.2 SED1335控制器
SED1335是由日本EPSON公司生產的一款LCD控制器,具有較強功能的I/O緩沖器,指令功能豐富,在同類產品中是功能最強大的,硬件結構可分為MPU接口、控制部分和驅動LCD部分,結構如圖1所示。
D0~D7為數據總線,WR為寫選通信號,RD為讀選通信號,CS為器件選通信號,RES為復位信號,A0決定是數據還是指令。
SED1335的接口部分由指令輸入緩沖器、數據輸入緩沖器、數據輸出緩沖器和標志寄
存器組成。通過引腳的電平設置可選擇適配8080系列和M6800系列MPU的等兩種操作時序電路。
SED1335的控制部分由振蕩器、功能邏輯電路、顯示RAM管理電路、字符庫及其管理電路以及產生驅動時序的時序發生器等組成。可以在很高的工作頻率下迅速解譯由MPU發來的各類代碼,顯示可以分為字符、圖形和文本三種方式。
SED1335的驅動部分具有各顯示區的合成顯示能力、傳輸數據的組織功能及產生液晶顯示模塊所需時序的功能。SED1335用4位并行方式向液晶顯示器傳輸數據。
SED1335控制器具有13條指令,多數指令帶有參數,參數值可由用戶根據所控制的液晶顯示模塊的特征和顯示的需要來設置。
使用內置SED1335控制器的液晶顯示器時,用戶無需了解SED1335對液晶器的顯示驅動、點陣掃描、顯示存儲器管理等操作,這一切都會由SED1335自動進行。因此只需清楚SED1335的各種數據指令格式、顯示存儲器的區間劃分和接口引腳的功能定義即可。
1.3 MSP-G320240液晶顯示器
MSP-G320240是TRULY公司生產的圖形點陣式液晶顯示器,點陣數為320×240,電路結構框圖如圖2所示。
從圖2可知,MSP-G320240由液晶顯示控制器SED1335(m1)、驅動電路(m2、m3)、顯示存儲器(m4 )以及液晶屏(m5)4部分組成,構成完整的顯示系統模塊。其中,m1通過其m4間的數據總線、地址總線、讀/寫控制線和片選控制線來實現對32KB顯示RAM的管理,即對文本顯示區、圖像顯示區以及內藏字符發生器的管理。
MSP-G32O24O的所有控制器、掃描電路和顯示RAM 集成于液晶屏背面,其采用的是外接小型逆變器背光。該LCD模塊單電源供電,而有些型號的LCD需要負電源。SED1335控制器是整個顯示系統的核心。它不僅能顯示文字,還能顯示曲線、圖形,并且通過選擇文本與圖形之間的邏輯“與”、“或”、“異或”等組合實現反顯、閃爍、滾屏、翻頁、動畫等多種顯示功能。另外,還具有光標自動移動功能和多種光標顯示功能。
2.硬件接口電路設計
TMS320LF2407與LCD模塊MSP-G320240接口如圖3所示。
TMS320LF2407是3.3V電源器件,而MSP-G320240是5V電源供電,由于TMS320LF2407有時需要將數據寫入控制器,有時又要從控制器中讀數據,因此數據總線上的信號流是雙向的,如果把兩者直接相連,數據的流向可能會對TMS320LF2407造成損害。解決這個問題有兩種方法:第一,系統中使用可以兼容3.3V和5V的可編程邏輯器件(CPLD),如MAX7000,通過它來連接SED1335與TMS320LF2407;第二,可以采用74LVC4245進行總線電平轉換。管腳DIR置“0”時,3.3V電平的數據A經電平轉換后,變成了5V電平的數據B,與LCD控制器準備接收的數據相匹配。OE管腳與DSP的地址線A22連接,用來分配LCD的總線地址,當OE為低電平有效時,DSP選通與液晶顯示器通信的一路,此時,為了避免總線沖突,應暫時將其余與DSP通信的地址線關閉。
為了提高DSP對控制器的驅動能力,且適合電平要求,SED1335的4個控制口CS、A0、WR和RD通過非門74HC04分別與DSP的I/O口連接,與I/O 口連接的控制端CS可以一直為低電平,保證DSP選通SED1335,這4個控制口通過不同的組合可以實現寫指令代碼、寫參數、讀參數及顯示數據等。
由于LCD模塊需要負電壓驅動才能工作,所以LCD驅動電壓VEE接負壓(約-19V),該負壓由DC-DC變換器提供, Vadj接在電位器的中心抽頭上,通過調節該電位器來改變Vadj,進行液晶對比度的調整。使用的CCFL背光(冷陰極發光)器件有背光燈管,點背光時需用CXA—L1OAN逆變器,它由5V直流電壓供電,輸出交流電壓來驅動背景光。
3.軟件設計
DSP在很多方面不同于單片機,所以在軟件設計時應該注意幾個方面:
3.1速度匹配
由于TMS320LF2407A的速度高達到40MIPS,而SEED1335的晶振頻率為1MHZ~10MHZ之間,液晶控制芯片難與DSP同步。解決的方法有2種:一是在每一條指令間加入延時,一般為1μs以上;二是設置DSP中的等待狀態寄存器WSGR,增加等待狀態的方法解決2個器件的速度匹配問題。
3.2訪問I/O空間
因為將SED1335的地址放在DSP的I/O空間,必須知道如何訪問它。在此介紹一下在C語言編程中訪問DSP的I/O空間的方法。在TI公司針對24XX系列DSP的優化C語言中有一個關鍵字ioport,可以方便地訪問I/O空間。
ioport type porthexnum
type表示數據類型如char、int等,porthexnum 表示端口地址,十六進制數表示。
如:ioport unsigned port10; //port10表示地址為1OH的I/O空間變量
通過這個定義,在程序中port10可以和其它變量一樣的讀和寫,例如:
portl0=a: // 把變量a的值賦給地址為10H的I/O變量port10
b=portl0: // 把地址為10H的I/O變量port10的值賦給變量b
在程序中可以采用更直觀的定義,#define LCDPORT portl0
因此我們可以定義出DSP訪問SED1335的指令和數據地址:
#define LCDPORTDATA port6;
#define LCDPORTCMD port7;
ioport unsigned int port6; //定義數據地址
ioport unsigned int port7; //定義指令地址
3.2 初始化SED1335
初始化的作用是根據LCD結構對LCD模塊進行參數設置,同一種類LCD模塊的參數設置基本上大同小異,因為參數設置是根據LCD模塊的結構來決定的。對于MSP-G320240,這里給出它的SYSTEM SET和SCROLL參數。SYSTEM SET指令是SED1335的軟件初始化指令,SCROLL指令用來設置顯示RAM區的起始地址及所占有的顯示行數。
SYSTEM SET的8個參數:30H,87H,07H,27H,41H,EFH,28H,00H;
SCROLL的10個參數:00H,00H,F0H,80H,25H,F0H,00H,4BH,00H,00H;
由于本設計中的液晶顯示沒有用DSP的數據線,而是用DSP的I0口來模擬液晶控制器的時序。因此,用I0口來模擬SED1335的讀寫時序重要,SED1335的讀寫時序有M8080和M6800兩種,本設計選用M8080時序,其時序如圖4所示。
3.3 液晶顯示
液晶顯示模塊的初始化流程見圖5所示。
若采用圖形方式顯示文本、圖形和字符,顯示特性有些區別,但是實質上是一樣的,都是對LCD屏上特定的區域寫入相關的數據,這些數據以數組的形式事先建立在程序的開頭處,在顯示這些漢字、字符與圖形時把數據寫入顯示RAM中,所以可以建立一個通用的函數來顯示字符、文本與圖形。這個函數形式如下:
void display_block (unsigned int *pblock,unsigned int addr,unsigned int block_x,unsigned int block_y)
{
unsigned int x,y,*p;
p=pbolck;
for(x=0;x<block_x;x++)
{
setcsr(addr+x); /* setcsr(addr)是根據addr的值設置光標地址的函數 */
LcdCommand=0×4F; /* 設置光標向下移動 */
LcdCommand=0×42; /* 數據寫入指令 */
for(y=0;y<block_y;y++)
{
LcdData=*p;
p++;
}
}
}
這里pblock是指向存有顯示數據的數組的頭指針,addr是要顯示的區域的左上角地址,block_x和block_y是顯示區域的橫向與縱向的大小。下面用這個函數顯示一個漢字:
首先在程序的開頭處加入這個漢字的字模數據,以數組的形式出現:
unsigned char hanzi[]={0×53,0×65,0×76,0×69,0×63,0×65,0×72,0×20,0×54,0×45,0×4c,O×3a,0×00,0×30,0×31,O×30,0×36,0×32,0×37,0×38,0×30,0×38,0×36,0×36};
然后確定這個漢字要顯示的位置地址,如顯示RAM的2367處,因為是漢字,一般是16×16大小,所以調用這個函數:
display_block(hanzi,2367,2,16);
4.結束語
本文提出的基于DSP控制的液晶顯示器適用于多種點陣規格的顯示器使用,加之其內部固化的字符發生器可產生160種字模,以及具有通過改變指令參數可實現圖像的閃爍、翻轉、移動等特點,因此非常適用于各種便攜式系統顯示終端的設計,有著廣泛的應用前景。
參考文獻:
[1]李維褪,郭強.液晶顯示應用技術[M].北京:電子工業出版社,2000.
[2]蘇濤,藺麗華,盧光躍等.DSP實用技術[M].西安:電子科技大學出版社,2002.
[3]李文江,張巖,汪玉風.內置HD61202點陣式液晶顯示模塊接口設計與編程[J].液晶與顯示,2004,19(2):138-142.
[4]趙立生,杜安,張偉.MSP-G320240 DBCW-21IN大規模點陣式LCD與PIC單片機接口技術[J].液晶與顯示,2004,19(6):479-482.