论文部分内容阅读
摘 要:NiosII嵌入式处理器以其设计灵活的优点在嵌入式领域中得到广泛应用。文中阐述了一种基于NiosII的液晶显示屏滚屏显示控制模块,给出硬件原理图与部分软件代码。该方案对于NiosII系统的开发具有借鉴意义。
关键词:LCD;NiosII;SOPC
Based on the NiosII processor LCD roller screen design
YU Yang, SUN Jin-hui
(Chinese people's Armed Police Forces Academy Foundation Department,
Hebei Langfang 065000)
Abstract: NiosII embedded processor with its flexible design advantages in embedded are widely used in the field. This paper describes a NiosII based liquid crystal display screen scroll screen display control module, gives the hardware schematic diagram and software code. The scheme for NiosII system development is had draw lessons from a meaning.
Keywords: LCD;NiosII;SOPC
Nios II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS。Altera的Stratix 、Stratix GX、 Stratix II和 Cyclone系列FPGA全面支持Nios II处理器。Nios II系列包括3种产品,Nios II/f(快速,最高的系统性能,中等FPGA使用量);Nios II/s(标准,高性能,低FPGA使用量);Nios II/e(经济低性能,最低的FPGA使用量)。这3种产品具有32位处理器的基本结构单元——32位指令大小,32位数据和地址路径,32位通用寄存器和32个外部中断源;使用同样的指令集架构(ISA);100%二进制代码兼容,设计者可以根据系统需求的变化更改CPU,选择满足性能和成本的最佳方案,而不会影响已有的软件投入。另外,Nios II系列支持60多个外设选项,开发者能够选择合适的外设,获得最合适的处理器、外设和接口组合。本文采用CycloneTM器件中的EP1C6Q240C8来实现 LCD的滚屏设计。
1 系统硬件结构
本系统的硬件结构如图1所示。
1.1 处理器
本文系统中的处理器选用的是Altera 公司提供的Cyclone 系列EP1C6Q240C8。该芯片采用240 脚的PQFP(即Plastic Quad Flat Package,塑料方块平面封装)封装,提供185 个I/O 接口。该芯片拥有6030个LES;可提供239616 bit的RAM;芯片内部还自带有2 个锁相环,可以在高速运行的时候保证系统时钟信号的稳定性。
1.2 EPCS配置器件
Altera串行配置器件是工业级低成本的配置器件。它们是基于高效,低成本的要求而设计的产品,提供在系统编程(ISP)和多次编程能力,在价格敏感的大批量应用中,Altera的串行配置器件是Cyclone系列FPGA理想的配置器件,也是配置Cyclone系列FPGA最简单的方法,能够使 FPGA 和配置器件以最低的价格实现完整的可编程芯片系统 (SOPC) 解决方案。标准型配置器件,包括EPC2、EPC1、EPC1441、EPC1213、EPC1064和EPC1064V。本文使用EPC2配置器件。使用时,首先使用下载电缆将计算机生成的FPGA配置文件*.Sof使用programmer烧入EPC2配置器件中,然后由EPC2配置器件控制配置时序对FPGA进行配置,一次烧写即可重复使用,编程完后可以脱离计算机工作。
1.3 FLASH
对于较为复杂的SOPC(System-on-a-Program mable-chip)即可编程片上系统,用户程序和需要下载的文件一般较大,用EPCS来存储是不现实的。本文根据设计的具体要求采用FLASH来存储16*16的汉字点阵字库和保存工程文件.elf。一个汉字需用16×16点阵显示,一个字节(Byte)有8位(bit),一位代表一个点,故一个字节只能表示8个点,一个16×16点阵的汉字要占32(2×16)个字节。3755个一级汉字共需3755×32=120160 Byte,所以一级汉字字库需占117 kB存储空间;工程文件.elf较小,大约为40 kB;另外,为了满足未来扩充汉字字库的需要,因此,选择存储容量为2 Mbit的FLASH作为只读存储器,并可使用flash programmer将*.elf和需要下载的文件烧入FLASH中。
1.4 随机存储器
在SOPC开发中,随机存储器(RAM)主要是为了存放可执行代码和程序中用到的变量。由于所采用的处理器中的RAM的存储容量较小,根据本文中设计电路的要求,采用1048 kbit的外部SRAM。
1.5 液晶显示模块
液晶显示模块是由控制器、行驱动器、列驱动器和液晶显示屏等器件构成。其核心部件LCD控制器是可编程接口芯片,它一方面提供与微控制器(即NIOS处理器)的接口,一方面连接行/列驱动器。通过对可编程接口芯片编程来实现对LCD的操作控制。本文采用的接口可编程芯片是T6963C来控制单色点阵图形液晶LCD。 T6963C是一种内置控制器的图形液晶显示模块,其面向显示存储器的引脚有8根数据线(D7~D0)、16根地址线(AD15~AD0)和4根控制线,最多能管理64 KB大小的显示存储器。T6963C单屏可以达到640×128,双屏可以达到640×256。
2 软件设计
使用NIOS对LCD进行控制主要是通过对LCD的控制器进行编程来实现的,在本文中采用T6963c控制器,其软件方案流程图如图2所示。
2.1 LCD初始化
LCD模块的初始化就是对LCD模块的寄存器进行初始化,也就是对LCD控制器当中的寄存器写入要预设的数据,设置好LCD的特性。LCD模块的初始化包括地址指针设置,显示区域设置,显示方式设置,显示状态设置。其软件实现主要依据表1指令来实现。
T6963C模块的控制指令可带有0个、1个或2个参数。在执行每条指令时都是先送入参数(如果有的话),再送入指令代码。设计软件时无论输入哪种指令,首先进行以下操作,
(1)设置数据总线为输出模式输出
IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DB_BASE,0xff); //数据总线:输出
(2)设置片选信号有效
IOWR_ALTERA_AVALON_PIO_DATA (LCD_ CS_BASE,0);
(3)设置写信号有效
IOWR_ALTERA_AVALON_PIO_DATA (LCD_ WR_BASE,0);
然后根据不同指令,编写程序。
对于无参数指令,
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,1); //选择命令,即T6963C内部通过一根地址线来确定两个寄存器,当地址线为低电平,选择DATA寄存器;当地址线为高电平,则选择COMMAND/STATUS寄存器。
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,无参数指令);
对于一个参数指令,首先输入参数,然后输入指令,即
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,0); //选择数据
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,参数数据);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,1); //选择命令
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,指令);
对于两个个参数指令,首先输入2个参数,然后输入指令,即
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,0); //选择数据
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,参数数据1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,参数数据2);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,1); //选择命令
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,指令)。
2.2 显示汉字
汉字显示的基本方法有两种,即文本显示方式和图形显示方式。二者显示的方法不同,但都必须先在程序区设定汉字的字模数据。
本文采用的是图形方式下显示汉字,使用的液晶显示屏是240*128。该液晶显示屏横向的8个点即8×1点阵(也称图形显示单位)是一个字节数据,每个字节在显示缓冲区中均有对应的地址,液晶屏幕的左上角横向8个点对应液晶模块显示缓冲区的首地址。16*16点阵汉字对应32个图形显示单位。采用图形显示方式时,根据汉字的存储规律将32个图形显示单位信息写入存储单元,则对应的位置就会显示出汉字。
在显示汉字时,关键是确定要读取的存储单元的位置。本文中采用的汉字存储方式是按照区位的顺序排列的,前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:
94*(区号-1)+(位号-1)(1)
这是以汉字为单位得到的该汉字在汉字库中的位置,由此可得到16*16点阵字库以字节为单位的该汉字在汉字库中的位置:
(94*(区号-1)+(位号-1))*32(2)
这样通过将字模数据逐个字节地写入图形显示区,即可在显示屏上坐标为(X,Y)处顺序显示出汉字。软件实现如下。
alt_u32 m_Addr=图形区地址高八位*256+图形区地址高八位+y*30+x;
alt_u32 i;
alt_u32 *Font_Addr=(alt_u32*)((内码/256-0xa1)*94+(内码%256)-0xa1)*32;
for(i=0;i<8;)
{
IOWR_ALTERA_AVALON_PIO_DATA (LCD_CD_BASE,0); //设置当前地址
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, m_Addr&0xff);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, m_Addr/256);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,1);
IOWR_ALTERA_AVALON_PIO_DATA (LCD_DB_BASE, 0x24);
IOWR_ALTERA_AVALON_PIO_DATA (LCD_CD_BASE,0); //读取第一个字节 IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, Font_Addr [i++]);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, 0xc0);
IOWR_ALTERA_AVALON_PIO_DATA (LCD_CD_BASE,0); //读取第二个字节
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, Font_Addr[i++]);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE, 1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, 0xc4);
m_Addr+=30;
}
2.3 LCD滚屏设计
定时间、定间隔地修改文本显示区与图形显示区首地址将会产生显示画面滚动显示效果。软件实现如下:
Delay(自行设定延时时间);
alt_u32 Text_stadd;
alt_u8 Text_stadd_newL,Text_stadd_newH;// 调整后的文本显示区低8位地址和高8位地址
Text_stadd_new=文本区地址高8位*256+文本区地址低8位+0x14 //0x14表示每行可显示30个字符
Text_stadd_newL= Text_stadd_new/256;
Text_stadd_newH= Text_stadd_new%256;
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, Text_stadd_newL);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, Text_stadd_newH);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,1);
IOWR_ALTERA_AVALON_PIO_DATA (LCD_DB_BASE,40H)。
图形显示区首地址的调整方法同文本区的调整方法相同。
3 结束语
本文阐述基于NiosⅡ嵌入式处理器控制液晶显示器的硬件设计方案和软件设计方法,充分体现了NiosⅡ嵌入式处理器在LCD设计中的灵活性。
参考文献
[1] 周立功.SOPC嵌入式系统基础教程,北京航空航天大学出版社,2006.
[2] 侯建军,郭勇.SOPC技术基础教程, 北京交通大学,2008.
[3] 王伟,卢博友,刁修慧,刘平.基于嵌入式系统的LCD汉字显示,微计算机信息,2008.[17]
关键词:LCD;NiosII;SOPC
Based on the NiosII processor LCD roller screen design
YU Yang, SUN Jin-hui
(Chinese people's Armed Police Forces Academy Foundation Department,
Hebei Langfang 065000)
Abstract: NiosII embedded processor with its flexible design advantages in embedded are widely used in the field. This paper describes a NiosII based liquid crystal display screen scroll screen display control module, gives the hardware schematic diagram and software code. The scheme for NiosII system development is had draw lessons from a meaning.
Keywords: LCD;NiosII;SOPC
Nios II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS。Altera的Stratix 、Stratix GX、 Stratix II和 Cyclone系列FPGA全面支持Nios II处理器。Nios II系列包括3种产品,Nios II/f(快速,最高的系统性能,中等FPGA使用量);Nios II/s(标准,高性能,低FPGA使用量);Nios II/e(经济低性能,最低的FPGA使用量)。这3种产品具有32位处理器的基本结构单元——32位指令大小,32位数据和地址路径,32位通用寄存器和32个外部中断源;使用同样的指令集架构(ISA);100%二进制代码兼容,设计者可以根据系统需求的变化更改CPU,选择满足性能和成本的最佳方案,而不会影响已有的软件投入。另外,Nios II系列支持60多个外设选项,开发者能够选择合适的外设,获得最合适的处理器、外设和接口组合。本文采用CycloneTM器件中的EP1C6Q240C8来实现 LCD的滚屏设计。
1 系统硬件结构
本系统的硬件结构如图1所示。
1.1 处理器
本文系统中的处理器选用的是Altera 公司提供的Cyclone 系列EP1C6Q240C8。该芯片采用240 脚的PQFP(即Plastic Quad Flat Package,塑料方块平面封装)封装,提供185 个I/O 接口。该芯片拥有6030个LES;可提供239616 bit的RAM;芯片内部还自带有2 个锁相环,可以在高速运行的时候保证系统时钟信号的稳定性。
1.2 EPCS配置器件
Altera串行配置器件是工业级低成本的配置器件。它们是基于高效,低成本的要求而设计的产品,提供在系统编程(ISP)和多次编程能力,在价格敏感的大批量应用中,Altera的串行配置器件是Cyclone系列FPGA理想的配置器件,也是配置Cyclone系列FPGA最简单的方法,能够使 FPGA 和配置器件以最低的价格实现完整的可编程芯片系统 (SOPC) 解决方案。标准型配置器件,包括EPC2、EPC1、EPC1441、EPC1213、EPC1064和EPC1064V。本文使用EPC2配置器件。使用时,首先使用下载电缆将计算机生成的FPGA配置文件*.Sof使用programmer烧入EPC2配置器件中,然后由EPC2配置器件控制配置时序对FPGA进行配置,一次烧写即可重复使用,编程完后可以脱离计算机工作。
1.3 FLASH
对于较为复杂的SOPC(System-on-a-Program mable-chip)即可编程片上系统,用户程序和需要下载的文件一般较大,用EPCS来存储是不现实的。本文根据设计的具体要求采用FLASH来存储16*16的汉字点阵字库和保存工程文件.elf。一个汉字需用16×16点阵显示,一个字节(Byte)有8位(bit),一位代表一个点,故一个字节只能表示8个点,一个16×16点阵的汉字要占32(2×16)个字节。3755个一级汉字共需3755×32=120160 Byte,所以一级汉字字库需占117 kB存储空间;工程文件.elf较小,大约为40 kB;另外,为了满足未来扩充汉字字库的需要,因此,选择存储容量为2 Mbit的FLASH作为只读存储器,并可使用flash programmer将*.elf和需要下载的文件烧入FLASH中。
1.4 随机存储器
在SOPC开发中,随机存储器(RAM)主要是为了存放可执行代码和程序中用到的变量。由于所采用的处理器中的RAM的存储容量较小,根据本文中设计电路的要求,采用1048 kbit的外部SRAM。
1.5 液晶显示模块
液晶显示模块是由控制器、行驱动器、列驱动器和液晶显示屏等器件构成。其核心部件LCD控制器是可编程接口芯片,它一方面提供与微控制器(即NIOS处理器)的接口,一方面连接行/列驱动器。通过对可编程接口芯片编程来实现对LCD的操作控制。本文采用的接口可编程芯片是T6963C来控制单色点阵图形液晶LCD。 T6963C是一种内置控制器的图形液晶显示模块,其面向显示存储器的引脚有8根数据线(D7~D0)、16根地址线(AD15~AD0)和4根控制线,最多能管理64 KB大小的显示存储器。T6963C单屏可以达到640×128,双屏可以达到640×256。
2 软件设计
使用NIOS对LCD进行控制主要是通过对LCD的控制器进行编程来实现的,在本文中采用T6963c控制器,其软件方案流程图如图2所示。
2.1 LCD初始化
LCD模块的初始化就是对LCD模块的寄存器进行初始化,也就是对LCD控制器当中的寄存器写入要预设的数据,设置好LCD的特性。LCD模块的初始化包括地址指针设置,显示区域设置,显示方式设置,显示状态设置。其软件实现主要依据表1指令来实现。
T6963C模块的控制指令可带有0个、1个或2个参数。在执行每条指令时都是先送入参数(如果有的话),再送入指令代码。设计软件时无论输入哪种指令,首先进行以下操作,
(1)设置数据总线为输出模式输出
IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DB_BASE,0xff); //数据总线:输出
(2)设置片选信号有效
IOWR_ALTERA_AVALON_PIO_DATA (LCD_ CS_BASE,0);
(3)设置写信号有效
IOWR_ALTERA_AVALON_PIO_DATA (LCD_ WR_BASE,0);
然后根据不同指令,编写程序。
对于无参数指令,
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,1); //选择命令,即T6963C内部通过一根地址线来确定两个寄存器,当地址线为低电平,选择DATA寄存器;当地址线为高电平,则选择COMMAND/STATUS寄存器。
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,无参数指令);
对于一个参数指令,首先输入参数,然后输入指令,即
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,0); //选择数据
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,参数数据);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,1); //选择命令
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,指令);
对于两个个参数指令,首先输入2个参数,然后输入指令,即
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,0); //选择数据
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,参数数据1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,参数数据2);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ CD_BASE,1); //选择命令
IOWR_ALTERA_AVALON_PIO_DATA(LCD_ DB_BASE,指令)。
2.2 显示汉字
汉字显示的基本方法有两种,即文本显示方式和图形显示方式。二者显示的方法不同,但都必须先在程序区设定汉字的字模数据。
本文采用的是图形方式下显示汉字,使用的液晶显示屏是240*128。该液晶显示屏横向的8个点即8×1点阵(也称图形显示单位)是一个字节数据,每个字节在显示缓冲区中均有对应的地址,液晶屏幕的左上角横向8个点对应液晶模块显示缓冲区的首地址。16*16点阵汉字对应32个图形显示单位。采用图形显示方式时,根据汉字的存储规律将32个图形显示单位信息写入存储单元,则对应的位置就会显示出汉字。
在显示汉字时,关键是确定要读取的存储单元的位置。本文中采用的汉字存储方式是按照区位的顺序排列的,前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:
94*(区号-1)+(位号-1)(1)
这是以汉字为单位得到的该汉字在汉字库中的位置,由此可得到16*16点阵字库以字节为单位的该汉字在汉字库中的位置:
(94*(区号-1)+(位号-1))*32(2)
这样通过将字模数据逐个字节地写入图形显示区,即可在显示屏上坐标为(X,Y)处顺序显示出汉字。软件实现如下。
alt_u32 m_Addr=图形区地址高八位*256+图形区地址高八位+y*30+x;
alt_u32 i;
alt_u32 *Font_Addr=(alt_u32*)((内码/256-0xa1)*94+(内码%256)-0xa1)*32;
for(i=0;i<8;)
{
IOWR_ALTERA_AVALON_PIO_DATA (LCD_CD_BASE,0); //设置当前地址
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, m_Addr&0xff);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, m_Addr/256);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,1);
IOWR_ALTERA_AVALON_PIO_DATA (LCD_DB_BASE, 0x24);
IOWR_ALTERA_AVALON_PIO_DATA (LCD_CD_BASE,0); //读取第一个字节 IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, Font_Addr [i++]);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, 0xc0);
IOWR_ALTERA_AVALON_PIO_DATA (LCD_CD_BASE,0); //读取第二个字节
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, Font_Addr[i++]);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE, 1);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, 0xc4);
m_Addr+=30;
}
2.3 LCD滚屏设计
定时间、定间隔地修改文本显示区与图形显示区首地址将会产生显示画面滚动显示效果。软件实现如下:
Delay(自行设定延时时间);
alt_u32 Text_stadd;
alt_u8 Text_stadd_newL,Text_stadd_newH;// 调整后的文本显示区低8位地址和高8位地址
Text_stadd_new=文本区地址高8位*256+文本区地址低8位+0x14 //0x14表示每行可显示30个字符
Text_stadd_newL= Text_stadd_new/256;
Text_stadd_newH= Text_stadd_new%256;
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, Text_stadd_newL);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_DB_BASE, Text_stadd_newH);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,1);
IOWR_ALTERA_AVALON_PIO_DATA (LCD_DB_BASE,40H)。
图形显示区首地址的调整方法同文本区的调整方法相同。
3 结束语
本文阐述基于NiosⅡ嵌入式处理器控制液晶显示器的硬件设计方案和软件设计方法,充分体现了NiosⅡ嵌入式处理器在LCD设计中的灵活性。
参考文献
[1] 周立功.SOPC嵌入式系统基础教程,北京航空航天大学出版社,2006.
[2] 侯建军,郭勇.SOPC技术基础教程, 北京交通大学,2008.
[3] 王伟,卢博友,刁修慧,刘平.基于嵌入式系统的LCD汉字显示,微计算机信息,2008.[17]