<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          基于SOPC的液晶屏接口組件設(shè)計(jì)

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

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

          1 引言

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

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

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

          2 硬件設(shè)計(jì)

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

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

          從端信號(hào)與主端信號(hào)的連接用硬件描述語言描述:

          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;

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

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

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

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

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

          3 軟件設(shè)計(jì)

          組件生成后,組件文件夾的結(jié)構(gòu)如圖2所示。

          圖2 液晶屏接口組件

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

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

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

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

          lcd_3224HALinc文件夾下包含.h文件,該文件描述組件的結(jié)構(gòu)、函數(shù)聲明和驅(qū)動(dòng)程序與標(biāo)準(zhǔn)C函數(shù)的接口等,示例如下:

          #include "sys/alt_dev.h" //包含定義組件結(jié)構(gòu)的頭文件

          typedef struct alt_LCD_dev alt_LCD_dev; //定義組件結(jié)構(gòu)

          struct alt_LCD_dev

          {

          alt_dev dev;

          int base;

          };

          ……

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

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

          ……

          #define ALTERA_AVALON_LCD_INSTANCE(name, device)

          static alt_LCD_dev device =

          {

          {

          ALT_LLIST_ENTRY,

          name##_NAME,

          NULL, /* open */ //fopen可以訪問lcd

          NULL, /* close */

          NULL, /* read */

          alt_lcd_write, //fprintf將調(diào)用寫函數(shù)訪問液晶屏

          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); //訪問底層硬件

          }

          初始化程序和寫函數(shù)調(diào)用這些子程序完成對(duì)組件的初始化和各種操作。

          4 應(yīng)用

          根據(jù)液晶屏的功能及所使用的開發(fā)板,應(yīng)用系統(tǒng)的硬件結(jié)構(gòu)框圖如圖3所示。

          圖3 硬件結(jié)構(gòu)框圖

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

          #include stdio.h>

          int main(void)

          {

          FILE * fd;

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

          if(fd)

          {

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

          fclose(fd);

          }

          ……

          return 0;

          }

          通過標(biāo)準(zhǔn)C函數(shù)訪問液晶屏,程序編寫簡單,可以顯示各種圖像及字符。如果還有特殊要求,用戶可以繼續(xù)在驅(qū)動(dòng)程序中添加需要的功能。

          5 總結(jié)

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

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

          參考文獻(xiàn)

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



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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();