<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于SOPC的液晶屏接口組件設計

基于SOPC的液晶屏接口組件設計

作者: 時(shí)間:2016-10-22 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:本文介紹基于組件的設計方法。利用 Builder中的組件編輯器(Component Editor)實(shí)現設計。文中系統介紹組件的硬件和軟件的設計方法,該方法可將硬件抽象為軟件,讓開(kāi)發(fā)者不必了解硬件結構就可以使用硬件,以標準C語(yǔ)言函數來(lái)操作組件,使用方便,具有靈活性、高效性和低成本的特點(diǎn)。
關(guān)鍵字:;組件編輯器;

1 引言

傳統的外設操作使用I/O方式,在硬件工程中,需要設計與外設相連的I/O接口,在軟件工程中,需要用戶(hù)編寫(xiě)I/O接口程序對外設進(jìn)行初始化,設置相應的外設寄存器,這樣的工作在每次新建一個(gè)工程后,都得重復進(jìn)行,因此增加了開(kāi)發(fā)的成本。

利用Altera公司提供的Component Editor工具可以設計符合時(shí)序要求的外設接口,并且可以將用戶(hù)開(kāi)發(fā)驅動(dòng)程序與Nios II HAL(硬件抽象層)系統庫集成在一起,形成Nios II的接口組件,在系統生成的時(shí)候,對外設進(jìn)行初始化設置。這樣在建立新工程時(shí),只需將接口組件添加到系統就可以了,對組件的訪(fǎng)問(wèn)也變得輕松,使得代碼可重復利用。

Nios II HAL系統庫是一個(gè)輕量級實(shí)時(shí)環(huán)境,提供一個(gè)組件驅動(dòng)接口,使得程序與底層硬件通信。HAL API(應用程序接口)與ANSI C標準庫集成在一起,允許用戶(hù)通過(guò)類(lèi)C庫函數訪(fǎng)問(wèn)設備和文件,例如printf()、fopen()和fwrite()等,這樣其他開(kāi)發(fā)者無(wú)需知道底層硬件結構就可以對組件進(jìn)行操作。

2 硬件設計

在SOPC Builder中打開(kāi)Component Editor,在HDL Files標簽下添加硬件描述語(yǔ)言編寫(xiě)的文件,將其設定為頂層模塊,該文件描述了組件與Avalon總線(xiàn)的接口以及組件與液晶屏的接口,系統自動(dòng)對文件進(jìn)行分析和模擬。

點(diǎn)擊Signals標簽,系統自動(dòng)讀取硬件描述語(yǔ)言文件中的信號,用戶(hù)只需設置接口信號和信號類(lèi)型。接口信號包括主端信號和從端信號,主端信號與Avalon總線(xiàn)相連,包括iDATA、iADDRESS、iWR_N和iCS_N等,信號類(lèi)型依次為writedata、address、write_n和chipselect_n等,從端信號與LCD相連,包括LCD_DATA、LCD_ADDRESS、LCD_RD_N、LCD_WR_N和LCD_CS_N等,信號類(lèi)型均為export。

從端信號與主端信號的連接用硬件描述語(yǔ)言描述:

assign LCD_DATA = iDATA;

assign LCD_ADDRESS = iADDRESS;

assign LCD_RD_N = 1;

assign LCD_WR_N = iWR_N;

assign LCD_CS_N = iCS_N;

由于始終對液晶屏進(jìn)行寫(xiě)操作,不進(jìn)行讀操作,所以信號LCD_RD_N置1。

點(diǎn)擊Interfaces標簽,將接口設置為從類(lèi)型,地址選擇Registers類(lèi)型,Avalon Slave Timing可以設置接口的時(shí)序,如圖1所示。

圖1 液晶屏寫(xiě)時(shí)序

點(diǎn)擊SW Files標簽,添加系統所需要的文件,包括兩個(gè)頭文件,一個(gè)C文件,選擇文件類(lèi)型,將它們包含在不同的文件夾下,這樣就可以通過(guò)標準的C語(yǔ)言函數來(lái)訪(fǎng)問(wèn)組件了。

最后一步點(diǎn)擊Component Wizard,為組件取名,點(diǎn)擊Finish完成設計。

3 軟件設計

組件生成后,組件文件夾的結構如圖2所示。

圖2 液晶屏接口組件

lcd_3224inc文件夾下包含_regs.h文件,該文件定義硬件接口,例如:

#define IOWR_ LCD_DATA(base, data) IOWR(base, 0, data)

寫(xiě)參數有三個(gè),base為組件的基地址,0表示地址偏移量,data為要寫(xiě)入的數據,重新定義后在源代碼中可以使用自定義的名字對組件進(jìn)行操作。

lcd_3224hdl文件夾下包含.v文件,該文件描述組件的接口信號。

lcd_3224HALinc文件夾下包含.h文件,該文件描述組件的結構、函數聲明和驅動(dòng)程序與標準C函數的接口等,示例如下:

#include "sys/alt_dev.h" //包含定義組件結構的頭文件

typedef struct alt_LCD_dev alt_LCD_dev; //定義組件結構

struct alt_LCD_dev

{

alt_dev dev;

int base;

};

……

void alt_lcd_init(alt_LCD_dev * dev); //聲明初始化函數

int alt_lcd_write(alt_fd * fd, const char* ptr, int len); //聲明寫(xiě)函數

……

#define ALTERA_AVALON_LCD_INSTANCE(name, device)

static alt_LCD_dev device =

{

{

ALT_LLIST_ENTRY,

name##_NAME,

NULL, /* open */ //fopen可以訪(fǎng)問(wèn)lcd

NULL, /* close */

NULL, /* read */

alt_lcd_write, //fprintf將調用寫(xiě)函數訪(fǎng)問(wèn)液晶屏

NULL, /* lseek */

NULL, /* fstat */

NULL, /* ioctl */

},

name##_BASE

}

lcd_3224HALsrc文件夾下包含源代碼,mk文件是自動(dòng)生成的,源代碼主要包括初始化程序、.h文件所聲明的alt_lcd_write和一些子程序,例如:

static void lcd_write_data(alt_LCD_dev * dev, unsigned char data) //子程序

{

unsigned int base = dev->base; //基地址由SOPC Builder自動(dòng)生成

IOWR_ LCD_DATA(base, data); //訪(fǎng)問(wèn)底層硬件

}

初始化程序和寫(xiě)函數調用這些子程序完成對組件的初始化和各種操作。

4 應用

根據液晶屏的功能及所使用的開(kāi)發(fā)板,應用系統的硬件結構框圖如圖3所示。

圖3 硬件結構框圖

在SOPC Builder中添加組件生成硬件系統,將結果下載到開(kāi)發(fā)板。打開(kāi)Nios II IDE創(chuàng )建軟件工程,進(jìn)行軟件的編寫(xiě),其中部分程序如下:

#include stdio.h>

int main(void)

{

FILE * fd;

fd = fopen(/dev/lcd”, “w”); //lcd為SOPC Builder中的名字

if(fd)

{

fprintf(fd, “parameter”); //調用alt_lcd_write

fclose(fd);

}

……

return 0;

}

通過(guò)標準C函數訪(fǎng)問(wèn)液晶屏,程序編寫(xiě)簡(jiǎn)單,可以顯示各種圖像及字符。如果還有特殊要求,用戶(hù)可以繼續在驅動(dòng)程序中添加需要的功能。

5 總結

本文詳細介紹了液晶屏接口組件的設計方法,核心部分是硬件描述語(yǔ)言文件的編寫(xiě)、時(shí)序的設計以及驅動(dòng)程序的編寫(xiě)。調試成功后,可以把組件文件夾放到系統組件文件夾下,這樣就可以重復使用。對于應用程序開(kāi)發(fā)者,不用了解硬件結構就可以使用標準C函數操作組件,使得開(kāi)發(fā)簡(jiǎn)便快捷,節省了時(shí)間和成本,是一種高效、靈活和低成本的開(kāi)發(fā)方法。

本文作者創(chuàng )新點(diǎn):和傳統的外設接口方式相比,接口組件的使用極大地方便了接口的硬件和軟件設計,是高效靈活的接口方式。

參考文獻

[1] 任愛(ài)芬、初秀琴、常存等,基于FPGA的嵌入式系統的設計,西安:西安電子科技大學(xué)出版社,2004
[2] 郭書(shū)軍、王玉花、葛紉秋,嵌入式處理器原理及應用,北京:清華大學(xué)出版社,2004
[3] 李洋洋,基于CPLD的DSP和液晶模塊接口設計,微計算機信息,2004年,第1期



關(guān)鍵詞: SOPC 液晶屏 接口

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>