NiosⅡ嵌入式处理器在LCD显示系统设计中的应用

时间:2022-05-29 08:29:27

NiosⅡ嵌入式处理器在LCD显示系统设计中的应用

摘 要: Altera公司的Nios嵌入式软核处理器以其成本低廉,设计灵活等特点,在嵌入式应用领域得到了广泛的应用,同时LCD也越来越多地在各种仪器仪表和测控系统中作为人机界面和显示模块。论述利用SOPC技术实现了一种基于Nios嵌入式软核处理器的液晶显示屏的软、硬件设计方案,并给出了对该液晶屏进行控制的硬件接口电路、软件编写流程以及相应程序。

关键词: FPGA; Nios; LCD; 嵌入式处理器

中图分类号: TN873?34 文献标识码: A 文章编号: 1004?373X(2013)19?0151?03

0 引 言

LCD液晶显示满足嵌入式系统日益提高的要求,特别在工业控制和消费电子领域,具有稳定可靠、成本低、功耗小、控制驱动方便、接口简单易用、模块化结构紧凑、体积小和重量轻等优点。Nios Ⅱ是一种可配置的16/32位RISC处理器,它结合丰富的外设专用指令和硬件加速单元可以低成本地提供极度灵活和功能强大的SOPC 系统,开发者根据实际需要自行整合。Altera公司所有主流FPGA 器件都支持Nios Ⅱ。将LCD驱动与Nios Ⅱ相结合可以得到一个扩展性强、通用的IP核,从而解决不同型号液晶屏之间的驱动差异问题。

1 NiosⅡ软核处理器和SOPC设计

NiosⅡ核用占用不到一半的FPGA资源,可计算增加1倍以上的信息。NiosⅡ嵌入式处理器性能超过200 DMIPS,32位数据和地址、采用32位指令、32个外部中断源和32位通用寄存器;Nios Ⅱ支持几十个外设选项,开发者能够选择合适的外设,获得最合适的处理器、外设和接口组合。

现在,在一片FPGA芯片上可以实现如MCU、DSP、PCI总线控制和各种控制算法等复杂的功能。FPGA芯片密度已达到百万门级,由于FPGA芯片密度的提高和EDA开发工具的不断更新,利用FPGA器件实现SOC已成为可能,这项技术称为嵌入式SOPC技术。SOPC技术既具有基于ASIC的系统级芯片设计的特征,又具有基于模板级设计的特征,具有了可重构性、高效自动化的设计方法。Altera推出的Nios Ⅱ为设计者提供了FPGA优化的嵌入式处理器,以及为SOPC设计了一套综合解决方案[1?2]。

Nios Ⅱ处理器具有完善的软件开发套件,包括集成开发环境(IDE)、编译器、MC调试器、TCP/IP协议栈和实时操作系统(RTOS)。设计者能够用Altera Quartus Ⅱ开发软件中的SOPC Builder系统开发工具创建用户定制的CPU和外设电路,获得设计需要的处理器系统。利用SOPC Builder开发工具创建专用的处理器系统,需要进行SOPC的嵌入式处理器芯片内部资源的选择和软件设计。SOPC Builder工具通过加载Nios Ⅱ软核和接口的定义来配置一个高集成度的SOPC系统的嵌入式处理器芯片[3?4]。

图1是一个液晶显示的SOPC系统的Nios Ⅱ处理器,主要端口包括复位信号、全局输入时钟和一些I/O端口。因Nios Ⅱ是在FPGA芯片内实现的,那么它既可以通过FPGA的引脚连到外部设备,也可以直接连到FPGA芯片内的其他电路上。FPG内未被使用的资源仍然同样可以被配置成为其他的模块使用,从而实现系统的SOC集成。

2 液晶屏控制器的选择

这里使用的是一块YM12864J的液晶显示模块,它已集成了SED1330作为液晶显示屏的控制器,与同类产品相比其主要特点有:

(1)有较强功能的I/O控制器;

(2)指令简单;

(3)8位并行I/O口;

(4)文本和图形方式混合显示。

YM12864J的I/O接口见表1。

3 FPGA与LCD的接口电路

本设计选择的液晶显示屏已经和控制器集成在了一起,电路就比较简单,只有FPGA芯片和液晶控制模块的连接。这里有两种方案可以考虑,第一种是把液晶显示模块当作外部存储器,利用Ext_Shared_Bus的数据和地址总线对其进行控制;第二种是把LCD接口当作普通的外部设备GPIO进行操作,通过对I/O口的操作来控制LCD的数据以及读、写使能,片选。一般地,对于不太复杂的系统,把外部设备看作是普通PIO是比较简单的方法,所以在这里采用第二种方案,Nios与LCD模块的接口电路如图2所示。

4 系统软件设计

系统硬件上电复位后,初始化函数会对硬件层进行初始化配置,包括I/O口的方向配置。在对系统硬件层正确的初始化以后,可以通过Nios将数据直接送至SED1330显示缓冲区,应用层函数会对液晶的控制器发送控制命令和显示数据,然后液晶屏就会显示用户想要显示的内容[5?6],本设计应用层设计了一些基本的显示函数,可以显示字符,汉字和简单的图形,用户只需调用一些显示函数就可以显示内容,系统的软件设计流程如图3所示。

初始化函数的作用对液晶显示器的控制器发送初始化命令。发送指令的方法如下:根据I/O的配置,先将命令数据送到与SED1330控制器的命令口相连的I/O口,然后把该命令的参数依次送到数据口地址。初始化代码如下:

该程序主要包括头文件lcd.h及主程序hello_world.c。

头文件lcd.h的主要程序如下:

void lcd_cmd_set(alt_u8 u8_side,alt_u8 u8_cmd)

{ alt_u8 i;

lcd_status(u8_side);

//check u8_side status and side is enable

LCD_RS_L();

LCD_WR_L();

LCD_OUT_SET();

LCD_ENABLE(); //Enable the LCD

LCD_DAT_OUT(u8_cmd); for(i=0;i

//delay for enable

LCD_DISABLE(); for(i=0;i

//delay for enable }

void lcd_data_write(alt_u8 u8_side,alt_u8 u8_dat)

{ alt_u8 i;

lcd_status(u8_side);

LCD_RS_H();

LCD_WR_L();

LCD_OUT_SET();

LCD_ENABLE(); // Enable the LCD

LCD_DAT_OUT(u8_dat);

LCD_ENABLE(); for(i=0;i

//delay for enable

LCD_DISABLE(); for(i=0;i

//delay for enable }

void lcd_on_off(alt_u8 u8_side,alt_u8 u8_on_off)

{ lcd_cmd_set(u8_side,(u8_on_off & 0x01)|0x3e); }

void lcd_line_set(alt_u8 u8_side,alt_u8 u8_line_num)

{ alt_u8 line_num;

if(u8_line_num>0x3f)

line_num = 0x3f;

else

line_num = u8_line_num;

lcd_cmd_set(u8_side,line_num|0xc0); }

void lcd_set_page(alt_u8 u8_side,alt_u8 u8_page_num)

{ lcd_cmd_set(u8_side,(u8_page_num & 0x7)|0xb8); }

void lcd_set_colum(alt_u8 u8_side,alt_u8 u8_colum)

{ lcd_cmd_set(u8_side,(u8_colum & 0x3f)|0x40); }

void lcd_write_dat(alt_u8 u8_page,alt_u8 u8_colum,alt_u8 u8_dat)

{ alt_u8 u8_side=0,colum;

if(u8_colum>0x3f && u8_colum

{ u8_side = 1; colum = u8_colum-64;

//write on the right screen }

if(u8_colum>=0 && u8_colum

{ colum = u8_colum;

lcd_set_page(u8_side,u8_page);

lcd_set_colum(u8_side,colum);

lcd_data_write(u8_side,u8_dat); }

void printf_hz(alt_u8 h,alt_u8 l,alt_u8 hz[32])

{ alt_u8 i;

for(i=0;i

{ lcd_write_dat(h*2,l+i,hz[i]);

lcd_write_dat(h*2+1,l+i,hz[i+16]); } }

主程序hello_world.c如下:

int main (void) //word 中存放汉字字模

{ printf_hz(3,i,_word1);

printf_hz(3,i+16,_word2);

printf_hz(3,i+32,_word3);

printf_hz(3,i+48,_word4);

printf_hz(3,i+64,_word5);

printf_hz(3,i+80,_word6);

printf_hz(3,i+96,_word7);

printf_hz(3,i+112,_word8);

return 0; }

当所有代码设计完成并仿真调试成功后,在Quartus Ⅱ软件中将完整的项目进行编译,也就是将硬件配置信息与代码软件信息编译在一起,并通过并口电缆最终下载到EP2C8T144C8芯片中,得到系统显示结果信息清晰,稳定。

5 结 语

本文利用SOPC技术实现了基于NiosⅡ嵌入式处理器的LCD 显示系统设计,从设计中可以看出采用NiosⅡ嵌入式软核处理器与使用NiosⅡIDE 集成开发环境进行软硬件开发的灵活性和优越性,且本文介绍的设计思路与实例开发对解决不同型号液晶屏之间的驱动具有通用性。

参考文献

[1] 潘松,黄继业.SOPC技术实用教程[M].北京:清华大学出版社,2005.

[2] 周立功.SOPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2006.

[3] 沈振乾,孔冰,常海峰.基于Nios嵌入式软核处理器的LCD控制方法研究[J].天津工业大学学报,2006,25(4):94?96.

[4] 占荣,康勇.基于Nios嵌入式软核处理器的液晶显示屏控制[J].自动化技术与应用,2005,24(4):125?128.

[5] 孙恺,程世恒.NiosⅡ系统开发设计与应用实例[M].北京:北京航空航天大学出版社,2007.

[6] 王晓迪,张景秀.SOPC系统设计与实践[M].北京:北京航空航天大学出版社,2008.

上一篇:玻璃纤维桩与金属铸造桩修复磨牙残根残冠的临... 下一篇:寻找合适的基准时钟分配