基于Nios II的非一般模式類設備設計與集成
摘要:在Nios II的開發過程中,硬件抽象層提供多種一般模式類設備,使得開發者可以高效的在系統中添加并使用這些設備。然而對不屬于一般模式類的新設備的使用將不能按照原有的設計方法進行系統開發。為此,需要根據Nios II內部總線規范提供一個設備驅動,并按照SOPC Builder要求集成到硬件抽象層中。通過設計并集成非字符型液晶顯示模塊得出結論:任何非一般模式類設備均可加載到Nios II系統中并能正常工作。
關鍵詞:液晶顯示;Nios II;Avalon總線;設備集成
中圖法分類號:TN911.72 ;TP319 文獻標識碼:A 文章編號:
Design and integration of special device based on Nios II
MA Sen,LV Yue,LI Zhi-ping
(College of Information Engineering,Capital Normal University,Beijing 100037,China)
Abstract: During the development process of Nios II, hardware abstract layer provided a variety generic device model classes. The developer can make efficient use of the system and added to the equipment. However, such models do not fall within the general use of the new equipment. It will not be in accordance with the original design of systems development methods. To solve this problem, a device driver which in accordance with the Nios II internal bus norms have to been provided, and integrate into HAL with requirements of SOPC Builder. Through the design and integration of non-Character LCD module, the results show that: any new equipment can included in the Nios II system and to normal work.
Key Words: LCD modulate;Nios II;Avalon bus;Device integration
引言
液晶顯示器具有低工作電壓、功耗小、重量輕、厚度薄、長壽命、無電磁輻射、不耀眼、抗干擾性好、抗震性能好、有效顯示面積大、適于大規模集成電路直接驅動等優良特點[1]。已被廣泛應用于各種儀器儀表、電子設備及控制領域中,成為測量結果顯示和人機對話的重要工具。液晶顯示器按其功能可分為筆段式和點矩陣式液晶顯示器,后者又可以分為字符點陣式和圖形點陣式液晶顯示器。圖形點陣式液晶顯示器不僅可顯示數字、字符等內容,還能顯示漢字和任意圖形。但此類液晶顯示屏屬于非一般模式類設備,在Nios II中不能直接開發使用。
1 SOPC設計與嵌入式Nios II處理器
片上可編程系統(SOPC)是PLD(可編程邏輯)技術優勢的新延伸,其特點:開發周期短,靈活性強,較低的開發費用等。Altera將SOPC開發過程與功能強大的Quartus II工具相結合的SOPC Builder是一個強有力的創建基于處理器、外設和存儲器的系統開發工具,使得工程師進行SOPC設計時只需要點幾個按鈕,就可以選擇和配置處理器及其外設,并把它們同系統的其余部分進行連接。新工具也允許設計人員全程介入研發的過程,從而獲得更為細致的控制。
Nios II是一個32位RISC嵌入式處理器。具有超過200 DMIP的性能。由于處理器是軟核形式,具有很大的靈活性,可以在多種系統設置組合中進行選擇,達到性能、特性和成本目標。Nios II處理器可定制特性集并且方便配置系統性能擁有無與倫比的靈活性。
對于一個全新的外部設備,Nios II有更好的解決方案快速的掌握它的控制方法。按照設備的電器要求,使用Nios II的已有的基本控制設備(例如通用輸入輸出端口PIO)掌握新設備的控制特性與方法。當充分理解新設備的特性后就可以按照Nios II的硬件抽象層(HAL)的定義方法,編寫新設備的驅動將其集成到Nios II中。這樣在今后的開發中在SOPC Builder中就可以像其他設備一樣增添這個新設備,Nios II軟核生成后會自動加載此設備的設備驅動。這樣提高了新設備的二次使用時的開發效率[2]。
以下是液晶屏顯示模塊接口的設計與集成過程。
2 液晶顯示模塊的設計
2.1 液晶顯示簡介
GM12864A是帶顯示存儲器的圖形液晶顯示器。它的內部是由兩塊KS0108B作為列顯示控制器和一片KS0107B作為行顯示控制器組成。顯示屏上各像素點的顯示狀態與顯示存儲器的各位相互對經,顯示存儲器的數據直接作為圖形顯示的驅動信號。顯示數據為“1”,相應的像素點變亮[3]。液晶屏結構如圖1所示。
圖1 液晶屏GM12864A的結構圖
GM12864A的接口引腳有15根,其中2個控制線,2個片選線,8根數據線,1根使能及電源引腳。具體如表1描述。
引腳號 |
引腳名稱 |
引腳類型 |
引腳說明 |
1 |
VCC |
Power |
電源 |
2 |
GND |
Ground |
地線 |
3 |
RS |
I |
控制 |
4 |
R/W |
I |
讀寫控制 |
5 |
E |
I |
使能 |
6 |
DB0 |
I/O |
數據線[0~7](雙向數據總線) |
7 |
DB1 |
I/O |
-- |
8 |
DB2 |
I/O |
-- |
9 |
DB3 |
I/O |
-- |
10 |
DB4 |
I/O |
-- |
11 |
DB5 |
I/O |
-- |
12 |
DB6 |
I/O |
-- |
13 |
DB7 |
I/O |
-- |
14 |
CS1 |
I |
片選信號1 |
15 |
CS2 |
I |
片選信號2 |
表1 液晶屏GM12864A的引腳說明
了解液晶屏的引腳后還要對它的指令進行詳細的分析,因為液晶屏的控制主要是通過指令完成的。GM12864A的指令表如表2所示。
指令 |
RS |
R/W |
DB0 |
DB1 |
DB2 |
DB3 |
DB4 |
DB5 |
DB6 |
DB7 |
讀狀態字 |
0 |
1 |
Busy |
0 |
ON/OF |
Res |
0 |
0 |
0 |
0 |
顯示開關 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1/0 |
設置行 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
行(0 ~ 7) | ||
設置列 |
0 |
0 |
0 |
1 |
列(0 ~ 63) | |||||
寫數據 |
1 |
0 |
數據(DB0 ~ DB7) |
表2 液晶屏GM12864A的指令表
2.2 PIO類的介紹
設計初始階段主要的目的在于充分了解新設備的特性與控制方法,為之后的設備集成打好基礎。因此采用通用的輸入輸出控制接口(PIO)直接對液晶屏的引腳進行控制。{{分頁}}
Nios II中PIO分為三大類:輸入(I)、輸出(O)和三態(Tri)。PIO通過Avalon總線與Nios II相連接[4]。如圖2所示。
圖2 通用輸入輸出接口與Nios II的連接
2.3 接口的設計
在Quartus II中新建一個工程,芯片類型選擇Cyclone 1C6Q240C8。設置畫面如圖3所示。
圖3 芯片設置界面
工程創建完成后在SOPC Builder中定制Nios II處理器。液晶屏顯示器驅動接口在設計初步作為普通的外部設備,用PIO進行操作。所以為系統增添所需要的PIO借口。設計完成后如圖4所示。
定制結束后生成Nios II處理器模塊。生成后回到Quartus II中進行系統頂層結構的設計。通過SOPC Builder生成的Nios II模塊需要一個時鐘和一個復位輸入端,輸出與定制時所設計的一致。增添相應的輸入輸出引腳。頂層結構如圖5所示。
圖5 液晶屏控制系統頂層結構
將控制系統編譯,液晶屏與芯片的接口連接電路如圖6所示。
圖6 液晶屏與FPGA的接口電路
2.4軟件設計
利用SOPC Builder開發工具創建專用的處理器系統的硬件后,SOPC Builder還為編寫操作這些片上硬件的軟件代碼提供了一個Nios II集成開發環境(IDE),這個軟件開發環境包括語言的頭文件、外圍接口的驅動以及實時操作系統的內核,可完成整個軟件工程的編輯、編譯、調試和下載等過程,極大地提高了軟件的開發效率。
液晶屏顯示流程如圖7所示。
圖7 液晶屏顯示流程
根據液晶屏顯示原理,編寫三個函數如下,函數Busy_Check()檢查液晶屏是否為忙LCD_Command_Write(alt_u8 Command)函數用來寫命令。LCD_Data_Write(alt_u8 Data)函數用來寫數據。 void Busy_Check()
{
alt_u8 temp=0x00; //狀態變量
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS1_BASE, 0); //給CS1賦值
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS2_BASE, 1); //給CS2賦值
IOWR_ALTERA_AVALON_PIO_DATA(LCD_RS_BASE, 0); //給RS賦值
IOWR_ALTERA_AVALON_PIO_DATA(LCD_RW_BASE, 1); //給RW賦值
IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 1); //給E賦值
IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DB_BASE,0x00);
temp = IORD_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE);//讀取狀態字
IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 0);
IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DB_BASE,0xff);
BUSY=temp&0x80; //將狀態賦BUSY
}
void LCD_Command_Write(alt_u8 m_Command)
{
if (!BUSY) //判斷是否為忙
{
IOWR_ALTERA_AVALON_PIO_DATA(LCD_RS_BASE, 0);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_RW_BASE, 0);
IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DB_BASE,0xff);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, m_Command);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 0);
}
}
void LCD_Data_Write(alt_u8 m_Data)
{
if (!BUSY) //判斷是否為忙
{
IOWR_ALTERA_AVALON_PIO_DATA(LCD_RS_BASE, 1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_RW_BASE, 0);
IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DB_BASE,0xff);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, m_Data);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_E_BASE, 0);
}
}
2.5 漢字顯示設計實踐
顯示屏是信息輸出的載體,為了更好的達到良好交互效果,嘗試通過Nios II的液晶屏顯示借口進行漢字顯示的實踐。 {{分頁}}
根據對漢字的使用頻繁程度的研究,把漢字分為高頻字,常用字,次常用字,罕見字和死字。正常使用的漢字達15000個。1981年我國頒布了GB2312-80的方案,集合成漢字基本字符集(共6763個)。國標GB2312-80在漢字操作系統中是以漢字庫的形式提供的。漢字庫結構作了統一規定,即將字庫分成94個區,每個區有94個漢字每個漢字在漢字庫中有確定的區和位的編號。每個漢字在字庫中是以點陣字模形式存儲的,如一般采用16
評論