[收稿日期]2008年6月20日
[作者簡介]許向南(1978~ ):男,吉林榆樹人,空軍航空大學飛行基礎訓練基地基礎部電工電子教研室,助教。于研(1980~ ):男,吉林長春人,空軍航空大學飛行基礎訓練基地基礎部電工電子教研室,助教。
[摘 要]LCD(Liquid Crystal Display)是液晶顯示器,由于LCD的控制必須使用專用的驅動電路,而且LCD面板的接線需要特殊的技巧,加上LCD面板結構較脆弱,因此一般不會單獨使用,而是將LCD面板、驅動電路組合成一個LCM模塊(Liquid Crystal Display Moulde,簡稱LCM)。LCM是一種很省電的顯示系統,常用于數字或微型計算機控制的系統,作為簡易的人機接口。
本文介紹一種基于NIOSll的LCM的控制方法。利用SoPC技術,在NIOSll系統中添加相應的I/O端口實現對LCM的控制。
[關鍵詞]NIOSII LCM FPGA
[中圖分類號]TP
[文獻標識碼]A
[文章編號]1009-5489(2008)07-0218-02
一、NIOSⅡ嵌入式軟核處理器
NiosⅡ是一種采用流水線技術、單指令流的RISC處理器,其大部分指令可以在一個時鐘周期內完成。NiosⅡ處理器又是一種軟核CPU,專門針對Altera的可編程邏輯器件,以及片上可編程系統的設計思想,做了相應優化。作為一種可配置的通用RISC處理器,它可以與用戶自定義邏輯(user logic)結合構成SOC系統,并下載到Altera的可編程器件中去。32位Nios軟核,結合外部閃存,以及大容量存儲器,可構成一個功能強大的32位嵌入式處理器系統。
在Altera的Nios嵌入式處理器中,用戶可以在Nios指令系統中增加用戶自定義指令,以增強起對強實時軟件算法的處理能力。用戶自定義指令可以通過單周期,或多周期操作來完成復雜的處理任務。另外,增加的用戶自定義指令同樣可以訪問存儲器,或Nios系統外的邏輯。采用用戶自定義指令,用戶可以把一個復雜的標準指令序列,簡化為一條用硬件實現的單個指令。這一特性可以用于多種情況,例如對數字信號處理(DSP)、數據包處理,以及計算密集型軟件進行優化。
二、GDM12864A液晶顯示器
LCD GDM12864A是帶顯示存儲器的圖形液晶顯示列驅動控制器。它的特點是內置64×64位的顯示存儲器,顯示屏上各像素點的顯示狀態與顯示存儲器的各位數據—一對應,顯示存儲器的數據直接作為圖形顯示的驅動信號。顯示數據為“1”,相應的像素點顯示;顯示數據為“0”,相應的像素點就不顯示。同時GDM12864A配備了一套顯示存儲器的管理電路和與計算機接口電路,允許計算機直接訪問顯示存儲器,也就是說GDM12864A可以直接與計算機的總線連接。GDM12864A的主要特性為:
(1)擁有64×64位(512字節)的顯示存儲器,其數據直接作為顯示驅動信號;
(2)8位并行數據接口,適配M6800系列時序;
(3)64路列驅動輸出;
(4)簡單的操作指令顯示開關設置,顯示起始行設置,地址指針設置和數據讀/寫等指令;
(5)低功耗,在顯示期間功耗最大為2mW;
(6)寬電壓工作 Vcc=2.7V~5.5V Vee=OV~-10V。

三、硬件電路設計
在sopc builder中添加l個8位的LCD_DATA[7..0],5個1位的LCD_CS1,LCD_CS2,LCD_RS,LCD_RW,LCD_E。再設置led—data的屬性為雙向三態“Tri_state”,其他5個信號的屬性設為“out-Put only”。

四、LCD的軟件設計
嵌入式系統地軟件開發可分為2部分:應用程序開發和驅動程序開發。應用程序開發是用戶軟件開發的主要部分,包括系統的主程序main和其他子程序。應用程序實現與系統設備的通信主要是通過C的標準庫或系統庫API。驅動程序的開發是編寫供應用程序訪問設備的程序。驅動程序直接和底層硬件的宏定義打交道。
為了方便用戶編程,NIOSⅡ IDE為用戶提供了設備的驅動程序,這就是硬件抽象層(HAL)系統庫。用戶只用利用HAL提供的各種函數就可以編寫應用程序。HAL系統庫在NiosⅡ IDE中創建一個新程序時,由IDE基于用戶在SOPC Builder中創建的NiosⅡ處理器系統自動生成。
由此可以看出,用戶程序是架構在硬件抽象層和C標準函數庫上,這說明用戶程序要訪問硬件設備至少有4種方法:
(1)調用C標準庫函數;
(2)調用硬件抽象層的API函數;
(3)調用設備驅動程序;
(4)直接訪問設備寄存器。
前兩種方法的抽象層度最高,可移植性最好;后兩種額外開銷少。在本文中采用的是第一種方法,程序如下。
//寫指令代碼(左)
void l_w_code(char l_code)
{
check_busy();
LCD_E=1;
LCD_RW=0;
LCD_RS=0;
LCD_CS2=1;
LCD_CS1=0;
LCD_DATA=l_code;
LCD_E=1;
LCD_E=0;
}
//寫顯示數據(左)
void l_w_data(char l_data)
{
check_busy();
LCD_E=1;
LCD_RW=0;
LCD_RS=1;
LCD_CS2=1;
LCD_CS1=0;
LCD_DATA=l_data;
LCD_E=1;
LCD_E=0;
}
其他程序由于篇幅原因略去。
五、結束語
本文闡述基于NIOSⅡ嵌入式處理器控制液晶顯示器的硬件設計和軟件設計方案。利用FPGA的可編程邏輯資源,按照系統功能的需求來添加接口功能模塊,既能實現系統的功能,又能降低系統的成本和功耗。這樣就使得FPGA靈活的硬件設計與處理器的強大軟件功能有機的結合在一起,高效地實現SoPC系統。
[參考文獻]
[1]周立功:《SOPC嵌人式系統基礎教程》,北京航空航天大學出版社2006年版。
[2]李晶皎:《液晶顯示器的C語言程序設計》,北京科學出版社2005年版。
[3]羅苑棠:《CPLD/FPGA常用模塊與綜合系統設計實例精講》,電子工業出版社2007年版。