摘要:本文介绍依据SOPC的液晶屏接口组件的规划办法。运用SOPC Builder中的组件编辑器(Component Editor)完结液晶屏接口规划。文中体系介绍组件的硬件和软件的规划办法,该办法可将硬件笼统为软件,让开发者不必了解硬件结构就能够运用硬件,以规范C言语函数来操作组件,运用方便,具有灵敏性、高效性和低本钱的特色。
关键字:SOPC;组件编辑器;液晶屏
1 导言
传统的外设操作运用I/O接口办法,在硬件工程中,需求规划与外设相连的I/O接口,在软件工程中,需求用户编写I/O接口程序对外设进行初始化,设置相应的外设寄存器,这样的作业在每次新建一个工程后,都得重复进行,因而增加了开发的本钱。
运用Altera公司供给的Component Editor东西能够规划契合时序要求的外设接口,而且能够将用户开发驱动程序与Nios II HAL(硬件笼统层)体系库集成在一起,构成Nios II的接口组件,在体系生成的时分,对外设进行初始化设置。这样在建立新工程时,只需将接口组件增加到体系就能够了,对组件的拜访也变得轻松,使得代码可重复运用。
Nios II HAL体系库是一个轻量级实时环境,供给一个组件驱动接口,使得程序与底层硬件通讯。HAL API(运用程序接口)与ANSI C规范库集成在一起,答运用户经过类C库函数拜访设备和文件,例如printf()、fopen()和fwrite()等,这样其他开发者无需知道底层硬件结构就能够对组件进行操作。
2 硬件规划
在SOPC Builder中翻开Component Editor,在HDL Files标签下增加硬件描绘言语编写的文件,将其设定为顶层模块,该文件描绘了组件与Avalon总线的接口以及组件与液晶屏的接口,体系主动对文件进行剖析和模仿。
点击Signals标签,体系主动读取硬件描绘言语文件中的信号,用户只需设置接口信号和信号类型。接口信号包含主端信号和从端信号,主端信号与Avalon总线相连,包含iDATA、iADDRESS、iWR_N和iCS_N等,信号类型依次为writedata、address、write_n和chipselect_n等,从端信号与LCD相连,包含LCD_DATA、LCD_ADDRESS、LCD_RD_N、LCD_WR_N和LCD_CS_N等,信号类型均为export。
从端信号与主端信号的衔接用硬件描绘言语描绘:
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;
因为一直对液晶屏进行写操作,不进行读操作,所以信号LCD_RD_N置1。
点击Interfaces标签,将接口设置为从类型,地址挑选Registers类型,Avalon Slave Timing能够设置接口的时序,如图1所示。
图1 液晶屏写时序
点击SW Files标签,增加体系所需求的文件,包含两个头文件,一个C文件,挑选文件类型,将它们包含在不同的文件夹下,这样就能够经过规范的C言语函数来拜访组件了。
最终一步点击Component Wizard,为组件取名,点击Finish完结规划。
3 软件规划
组件生成后,组件文件夹的结构如图2所示。
图2 液晶屏接口组件
lcd_3224inc文件夹下包含_regs.h文件,该文件界说硬件接口,例如:
#define IOWR_ LCD_DATA(base, data) IOWR(base, 0, data)
写参数有三个,base为组件的基地址,0表明地址偏移量,data为要写入的数据,从头界说后在源代码中能够运用自界说的姓名对组件进行操作。
lcd_3224hdl文件夹下包含.v文件,该文件描绘组件的接口信号。
lcd_3224HALinc文件夹下包含.h文件,该文件描绘组件的结构、函数声明和驱动程序与规范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); //声明写函数
……
#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将调用写函数拜访液晶屏
NULL, /* lseek */
NULL, /* fstat */
NULL, /* ioctl */
},
name##_BASE
}
lcd_3224HALsrc文件夹下包含源代码,mk文件是主动生成的,源代码首要包含初始化程序、.h文件所声明的alt_lcd_write和一些子程序,例如:
static void lcd_write_data(alt_LCD_dev * dev, unsigned char data) //子程序
{
unsigned int base = dev->base; //基地址由SOPC Builder主动生成
IOWR_ LCD_DATA(base, data); //拜访底层硬件
}
初始化程序和写函数调用这些子程序完结对组件的初始化和各种操作。
4 运用
依据液晶屏的功用及所运用的开发板,运用体系的硬件结构框图如图3所示。
图3 硬件结构框图
在SOPC Builder中增加组件生成硬件体系,将成果下载到开发板。翻开Nios II IDE创立软件工程,进行软件的编写,其间部分程序如下:
#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;
}
经过规范C函数拜访液晶屏,程序编写简略,能够显现各种图画及字符。假如还有特殊要求,用户能够持续在驱动程序中增加需求的功用。
5 总结
本文具体介绍了液晶屏接口组件的规划办法,中心部分是硬件描绘言语文件的编写、时序的规划以及驱动程序的编写。调试成功后,能够把组件文件夹放到体系组件文件夹下,这样就能够重复运用。关于运用程序开发者,不必了解硬件结构就能够运用规范C函数操作组件,使得开发简洁方便,节省了时刻和本钱,是一种高效、灵敏和低本钱的开发办法。
本文作者立异点:和传统的外设接口办法比较,接口组件的运用极大当地便了接口的硬件和软件规划,是高效灵敏的接口办法。
参考文献
[1] 任爱芬、初秀琴、常存等,依据FPGA的嵌入式体系的规划,西安:西安电子科技大学出版社,2004
[2] 郭书军、王玉花、葛纫秋,嵌入式处理器原理及运用,北京:清华大学出版社,2004
[3] 李洋洋,依据CPLD的DSP和液晶模块接口规划,微计算机信息,2004年,第1期