摘 要: Altera公司的Nios嵌入式軟核處理器以其成本低廉,設計靈活等特點,在嵌入式應用領域得到了廣泛的應用,同時LCD也越來越多地在各種儀器儀表和測控系統中作為人機界面和顯示模塊。論述利用SOPC技術實現了一種基于Nios嵌入式軟核處理器的液晶顯示屏的軟、硬件設計方案,并給出了對該液晶屏進行控制的硬件接口電路、軟件編寫流程以及相應程序。
關鍵詞: FPGA; Nios; LCD; 嵌入式處理器
中圖分類號: TN873?34 文獻標識碼: A 文章編號: 1004?373X(2013)19?0151?03
0 引 言
LCD液晶顯示滿足嵌入式系統日益提高的要求,特別在工業控制和消費電子領域,具有穩定可靠、成本低、功耗小、控制驅動方便、接口簡單易用、模塊化結構緊湊、體積小和重量輕等優點。Nios Ⅱ是一種可配置的16/32位RISC處理器,它結合豐富的外設專用指令和硬件加速單元可以低成本地提供極度靈活和功能強大的SOPC 系統,開發者根據實際需要自行整合。Altera公司所有主流FPGA 器件都支持Nios Ⅱ。將LCD驅動與Nios Ⅱ相結合可以得到一個擴展性強、通用的IP核,從而解決不同型號液晶屏之間的驅動差異問題。
1 NiosⅡ軟核處理器和SOPC設計
NiosⅡ核用占用不到一半的FPGA資源,可計算增加1倍以上的信息。NiosⅡ嵌入式處理器性能超過200 DMIPS,32位數據和地址、采用32位指令、32個外部中斷源和32位通用寄存器;Nios Ⅱ支持幾十個外設選項,開發者能夠選擇合適的外設,獲得最合適的處理器、外設和接口組合。
現在,在一片FPGA芯片上可以實現如MCU、DSP、PCI總線控制和各種控制算法等復雜的功能。FPGA芯片密度已達到百萬門級,由于FPGA芯片密度的提高和EDA開發工具的不斷更新,利用FPGA器件實現SOC已成為可能,這項技術稱為嵌入式SOPC技術。SOPC技術既具有基于ASIC的系統級芯片設計的特征,又具有基于模板級設計的特征,具有了可重構性、高效自動化的設計方法。Altera推出的Nios Ⅱ為設計者提供了FPGA優化的嵌入式處理器,以及為SOPC設計了一套綜合解決方案[1?2]。
Nios Ⅱ處理器具有完善的軟件開發套件,包括集成開發環境(IDE)、編譯器、MC調試器、TCP/IP協議棧和實時操作系統(RTOS)。設計者能夠用Altera Quartus Ⅱ開發軟件中的SOPC Builder系統開發工具創建用戶定制的CPU和外設電路,獲得設計需要的處理器系統。利用SOPC Builder開發工具創建專用的處理器系統,需要進行SOPC的嵌入式處理器芯片內部資源的選擇和軟件設計。SOPC Builder工具通過加載Nios Ⅱ軟核和外圍接口的定義來配置一個高集成度的SOPC系統的嵌入式處理器芯片[3?4]。
圖1是一個液晶顯示的SOPC系統的Nios Ⅱ處理器,主要端口包括復位信號、全局輸入時鐘和一些I/O端口。因Nios Ⅱ是在FPGA芯片內實現的,那么它既可以通過FPGA的引腳連到外部設備,也可以直接連到FPGA芯片內的其他電路上。FPGA片內未被使用的資源仍然同樣可以被配置成為其他的模塊使用,從而實現系統的SOC集成。
2 液晶屏控制器的選擇
這里使用的是一塊YM12864J的液晶顯示模塊,它已集成了SED1330作為液晶顯示屏的控制器,與同類產品相比其主要特點有:
(1)有較強功能的I/O控制器;
(2)指令簡單;
(3)8位并行I/O口;
(4)文本和圖形方式混合顯示。
YM12864J的I/O接口見表1。
3 FPGA與LCD的接口電路
本設計選擇的液晶顯示屏已經和控制器集成在了一起,外圍電路就比較簡單,只有FPGA芯片和液晶控制模塊的連接。這里有兩種方案可以考慮,第一種是把液晶顯示模塊當作外部存儲器,利用Ext_Shared_Bus的數據和地址總線對其進行控制;第二種是把LCD接口當作普通的外部設備GPIO進行操作,通過對I/O口的操作來控制LCD的數據以及讀、寫使能,片選。一般地,對于不太復雜的系統,把外部設備看作是普通PIO是比較簡單的方法,所以在這里采用第二種方案,Nios與LCD模塊的接口電路如圖2所示。
4 系統軟件設計
系統硬件上電復位后,初始化函數會對硬件層進行初始化配置,包括I/O口的方向配置。在對系統硬件層正確的初始化以后,可以通過Nios將數據直接送至SED1330顯示緩沖區,應用層函數會對液晶的控制器發送控制命令和顯示數據,然后液晶屏就會顯示用戶想要顯示的內容[5?6],本設計應用層設計了一些基本的顯示函數,可以顯示字符,漢字和簡單的圖形,用戶只需調用一些顯示函數就可以顯示內容,系統的軟件設計流程如圖3所示。
初始化函數的作用對液晶顯示器的控制器發送初始化命令。發送指令的方法如下:根據I/O的配置,先將命令數據送到與SED1330控制器的命令口相連的I/O口,然后把該命令的參數依次送到數據口地址。初始化代碼如下:
該程序主要包括頭文件lcd.h及主程序hello_world.c。
頭文件lcd.h的主要程序如下:
void lcd_cmd_set(alt_u8 u8_side,alt_u8 u8_cmd)
{ alt_u8 i;
lcd_status(u8_side);
//check u8_side status and side is enable
LCD_RS_L();
LCD_WR_L();
LCD_OUT_SET();
LCD_ENABLE(); //Enable the LCD
LCD_DAT_OUT(u8_cmd); for(i=0;i<10;i++);
//delay for enable
LCD_DISABLE(); for(i=0;i<10;i++);
//delay for enable }
void lcd_data_write(alt_u8 u8_side,alt_u8 u8_dat)
{ alt_u8 i;
lcd_status(u8_side);
LCD_RS_H();
LCD_WR_L();
LCD_OUT_SET();
LCD_ENABLE(); // Enable the LCD
LCD_DAT_OUT(u8_dat);
LCD_ENABLE(); for(i=0;i<10;i++);
//delay for enable
LCD_DISABLE(); for(i=0;i<10;i++);
//delay for enable }
void lcd_on_off(alt_u8 u8_side,alt_u8 u8_on_off)
{ lcd_cmd_set(u8_side,(u8_on_off 0x01)|0x3e); }
void lcd_line_set(alt_u8 u8_side,alt_u8 u8_line_num)
{ alt_u8 line_num;
if(u8_line_num>0x3f)
line_num = 0x3f;
else
line_num = u8_line_num;
lcd_cmd_set(u8_side,line_num|0xc0); }
void lcd_set_page(alt_u8 u8_side,alt_u8 u8_page_num)
{ lcd_cmd_set(u8_side,(u8_page_num 0x7)|0xb8); }
void lcd_set_colum(alt_u8 u8_side,alt_u8 u8_colum)
{ lcd_cmd_set(u8_side,(u8_colum 0x3f)|0x40); }
void lcd_write_dat(alt_u8 u8_page,alt_u8 u8_colum,alt_u8 u8_dat)
{ alt_u8 u8_side=0,colum;
if(u8_colum>0x3f u8_colum<128)
{ u8_side = 1; colum = u8_colum-64;
//write on the right screen }
if(u8_colum>=0 u8_colum<=0x3f)
{ colum = u8_colum;
lcd_set_page(u8_side,u8_page);
lcd_set_colum(u8_side,colum);
lcd_data_write(u8_side,u8_dat); }
void printf_hz(alt_u8 h,alt_u8 l,alt_u8 hz[32])
{ alt_u8 i;
for(i=0;i<16;i++)
{ lcd_write_dat(h*2,l+i,hz[i]);
lcd_write_dat(h*2+1,l+i,hz[i+16]); } }
主程序hello_world.c如下:
int main (void) //word 中存放漢字字模
{ printf_hz(3,i,_word1);
printf_hz(3,i+16,_word2);
printf_hz(3,i+32,_word3);
printf_hz(3,i+48,_word4);
printf_hz(3,i+64,_word5);
printf_hz(3,i+80,_word6);
printf_hz(3,i+96,_word7);
printf_hz(3,i+112,_word8);
return 0; }
當所有代碼設計完成并仿真調試成功后,在Quartus Ⅱ軟件中將完整的項目進行編譯,也就是將硬件配置信息與代碼軟件信息編譯在一起,并通過并口電纜最終下載到EP2C8T144C8芯片中,得到系統顯示結果信息清晰,穩定。
5 結 語
本文利用SOPC技術實現了基于NiosⅡ嵌入式處理器的LCD 顯示系統設計,從設計中可以看出采用NiosⅡ嵌入式軟核處理器與使用NiosⅡIDE 集成開發環境進行軟硬件開發的靈活性和優越性,且本文介紹的設計思路與實例開發對解決不同型號液晶屏之間的驅動具有通用性。
參考文獻
[1] 潘松,黃繼業.SOPC技術實用教程[M].北京:清華大學出版社,2005.
[2] 周立功.SOPC嵌入式系統基礎教程[M].北京:北京航空航天大學出版社,2006.
[3] 沈振乾,孔冰,常海峰.基于Nios嵌入式軟核處理器的LCD控制方法研究[J].天津工業大學學報,2006,25(4):94?96.
[4] 占榮,康勇.基于Nios嵌入式軟核處理器的液晶顯示屏控制[J].自動化技術與應用,2005,24(4):125?128.
[5] 孫愷,程世恒.NiosⅡ系統開發設計與應用實例[M].北京:北京航空航天大學出版社,2007.
[6] 王曉迪,張景秀.SOPC系統設計與實踐[M].北京:北京航空航天大學出版社,2008.