基于组件与Avalon总线、液晶屏的接口设计

点击SW Files标签,添加系统所需要的文件,包括两个头文件,一个C文件,选择文件类型,将它们包含在不同的文件夹下,这样就可以通过标准的C语言函数来访问组件了。

最后一步点击Component Wizard,为组件取名,点击Finish完成设计。

3 、软件设计

组件生成后,组件文件夹的结构如图2所示。

lcd_3224\inc文件夹下包含_regs.h文件,该文件定义硬件接口,例如:

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

写参数有三个,base为组件的基地址,0表示地址偏移量,data为要写入的数据,重新定义后在源代码中可以使用自定义的名字对组件进行操作。

lcd_3224\hdl文件夹下包含.v文件,该文件描述组件的接口信号。

lcd_3224\HAL\inc文件夹下包含.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_3224\HAL\src文件夹下包含源代码,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所示。

在SOPC Builder中添加组件生成硬件系统,将结果下载到开发板。打开Nios II IDE创建软件工程,进行软件的编写,其中部分程序如下: