位置:51电子网 » 技术资料 » 嵌入式系统

基于嵌入式Linux的 TFT LCD IP及驱动的设计

发布时间:2008/5/27 0:00:00 访问次数:425

系统总体设计方案

本系统的总体设计框图如图1所示。

图1 系统框图

  nios ii处理器在sdram中开辟帧缓冲(frame buffer),可以是单缓冲也可以是双缓冲。以单缓冲为例。处理器将一帧图像数据(640×480×2bytes,rgb565,16bit)存入帧缓冲,然后将帧缓冲的首地址写入到lcd控制器,并启动lcd控制器。该控制器自动从传来的首地址处开始读取数据,并按照tft的格式输出。图中各模块由 avalon bus连接在一起。avalon bus是一种简单的总线结构,nios ii处理器和各种外设都是通过avalon bus连接在一起。由图1可以看出,作为slaver的sdram controller分别要受到processor 和lcd controller的控制,为了解决总线冲突,avalon bus自动在有冲突的接口上加入了arbitrator这样一个仲裁模块,用于合理分配总线时间,用户通过改变每个模块的权值来改变对其分配总线时间的多少。在这个系统中,sdram controller是影响整个系统性能的关键。以sdram时钟频率为100mhz计算,16bit的sdram其数据总带宽为200mbyte/s, 640×480×2bytes×60hz的tft lcd要占用36mbyte/s左右的带宽,这对于还要处理其他任务的处理器来说是很大的影响。

  lcd控制器的fpga实现

  avalon bus slaver从总线接口模块实现

  avalon从总线接口负责处理器与lcd控制器的接口控制,lcd控制器在整个系统中作为从设备,nios ii通过该接口对控制寄存器进行设置,控制lcd。

  lcd从模块有四个32bit的可读写寄存器,用于控制lcd控制器的工作和指示其工作状态。

avalon bus dma master主设备接口模块实现

  avalon bus dma master负责按照控制模块的指令,读取sdram中的数据,并写入到fifo中,其核心部分是dma地址累加器。当条件满足时,地址累加器开始在 100mhz的时钟下以4为单位开始累加用于生成读取sdram的地址。读完一帧的数据后,自动复位到首地址,继续累加。

  主设备接口采用带延迟的主设备读传输模式,在这种传输模式下,即使没有接收到上一次的有效数据,主设备也可以发起下一次读命令。当 waitrequest信号无效(低电平)时,主设备可以连续的发起读命令,当waitrequest信号有效(高电平)时,主设备开始等待,直到其变为低电平。当readdatavalid信号有效(高电平)时,表示读数据有效,此时主设备可以锁存数据口上的有效数据。这里没有使用flush信号, flush信号会清除前面一切未完成的读命令。avalon总线保证数据的输出顺序与主设备要求的顺序一致(即与主设备地址输出顺序一致)。 readdatavalid信号可以作为fifo的wrreq信号,这样可以直接将读出来的数据写入到fifo中。当前地址等于尾地址时,则复位累加器,使之重新开始从首地址累加。地址累加器代码模块如图3。

图2 lcd bsf图

图3 设备接口模块bsf图

fifo模块实现

  fifo的作用是对dma输出的图像数据进行缓存,以匹配时序控制模块的输出速度。fifo大小暂定为4096×16bit,在实际设计时,再根据系统需要以及资源状况做出适当调整。原则是,在系统资源允许的情况下,将fifo大小尽量设置大点。

  fifo由dma控制器写入数据,写入时钟为100mhz;由lcd控制器的时序发生模块读出数据,读出时钟为pclk,即lcd的像素点扫描频率,通常取25mhz。在独立的写时钟和读时钟作用下,fifo可以提供rdusedw[11:0]信号,用于指示fifo中已经使用掉的容量。系统可以设置一个上限和一个下限,当fifo中的数据量高于上限或低于下限时,控制器暂停dma传输或启动dma传输,用以保证系统性能。

  在本例应用中,将wrclk接系统时钟(100mhz),wrreq接master_readdatavalid,data接writedata,即可完成dma的数据写入操作;将rdclk接12.5mhz(因为tft的时钟为25mhz,数据宽度为16bit,而fifo的宽度为32bit,所以用一半的时钟12.5mhz去读取fifo,然后依次输出32bit的高16bit和低16bit),rdreq由时序发生模块控制,即可在每个 rdclk的上升沿读出一个数据到q。aclr接~reset_n,可以完成复位操作。当然,所有信号都受controller_gobit的控制。

  fifo设计采用了quartus ii自带的fifo宏模块,自动生成所需要的模块,供调用。

lcd 时序发生器设计模块实现

  时序发生器用于产生tft所需的时序,将图像数据按特定的时序输出。每种控制器的设计关键就是时序设计,本文专门针对三菱公司的aa084vc05液晶屏,图4,图5是其时序图。

图4 水平时序图

系统总体设计方案

本系统的总体设计框图如图1所示。

图1 系统框图

  nios ii处理器在sdram中开辟帧缓冲(frame buffer),可以是单缓冲也可以是双缓冲。以单缓冲为例。处理器将一帧图像数据(640×480×2bytes,rgb565,16bit)存入帧缓冲,然后将帧缓冲的首地址写入到lcd控制器,并启动lcd控制器。该控制器自动从传来的首地址处开始读取数据,并按照tft的格式输出。图中各模块由 avalon bus连接在一起。avalon bus是一种简单的总线结构,nios ii处理器和各种外设都是通过avalon bus连接在一起。由图1可以看出,作为slaver的sdram controller分别要受到processor 和lcd controller的控制,为了解决总线冲突,avalon bus自动在有冲突的接口上加入了arbitrator这样一个仲裁模块,用于合理分配总线时间,用户通过改变每个模块的权值来改变对其分配总线时间的多少。在这个系统中,sdram controller是影响整个系统性能的关键。以sdram时钟频率为100mhz计算,16bit的sdram其数据总带宽为200mbyte/s, 640×480×2bytes×60hz的tft lcd要占用36mbyte/s左右的带宽,这对于还要处理其他任务的处理器来说是很大的影响。

  lcd控制器的fpga实现

  avalon bus slaver从总线接口模块实现

  avalon从总线接口负责处理器与lcd控制器的接口控制,lcd控制器在整个系统中作为从设备,nios ii通过该接口对控制寄存器进行设置,控制lcd。

  lcd从模块有四个32bit的可读写寄存器,用于控制lcd控制器的工作和指示其工作状态。

avalon bus dma master主设备接口模块实现

  avalon bus dma master负责按照控制模块的指令,读取sdram中的数据,并写入到fifo中,其核心部分是dma地址累加器。当条件满足时,地址累加器开始在 100mhz的时钟下以4为单位开始累加用于生成读取sdram的地址。读完一帧的数据后,自动复位到首地址,继续累加。

  主设备接口采用带延迟的主设备读传输模式,在这种传输模式下,即使没有接收到上一次的有效数据,主设备也可以发起下一次读命令。当 waitrequest信号无效(低电平)时,主设备可以连续的发起读命令,当waitrequest信号有效(高电平)时,主设备开始等待,直到其变为低电平。当readdatavalid信号有效(高电平)时,表示读数据有效,此时主设备可以锁存数据口上的有效数据。这里没有使用flush信号, flush信号会清除前面一切未完成的读命令。avalon总线保证数据的输出顺序与主设备要求的顺序一致(即与主设备地址输出顺序一致)。 readdatavalid信号可以作为fifo的wrreq信号,这样可以直接将读出来的数据写入到fifo中。当前地址等于尾地址时,则复位累加器,使之重新开始从首地址累加。地址累加器代码模块如图3。

图2 lcd bsf图

图3 设备接口模块bsf图

fifo模块实现

  fifo的作用是对dma输出的图像数据进行缓存,以匹配时序控制模块的输出速度。fifo大小暂定为4096×16bit,在实际设计时,再根据系统需要以及资源状况做出适当调整。原则是,在系统资源允许的情况下,将fifo大小尽量设置大点。

  fifo由dma控制器写入数据,写入时钟为100mhz;由lcd控制器的时序发生模块读出数据,读出时钟为pclk,即lcd的像素点扫描频率,通常取25mhz。在独立的写时钟和读时钟作用下,fifo可以提供rdusedw[11:0]信号,用于指示fifo中已经使用掉的容量。系统可以设置一个上限和一个下限,当fifo中的数据量高于上限或低于下限时,控制器暂停dma传输或启动dma传输,用以保证系统性能。

  在本例应用中,将wrclk接系统时钟(100mhz),wrreq接master_readdatavalid,data接writedata,即可完成dma的数据写入操作;将rdclk接12.5mhz(因为tft的时钟为25mhz,数据宽度为16bit,而fifo的宽度为32bit,所以用一半的时钟12.5mhz去读取fifo,然后依次输出32bit的高16bit和低16bit),rdreq由时序发生模块控制,即可在每个 rdclk的上升沿读出一个数据到q。aclr接~reset_n,可以完成复位操作。当然,所有信号都受controller_gobit的控制。

  fifo设计采用了quartus ii自带的fifo宏模块,自动生成所需要的模块,供调用。

lcd 时序发生器设计模块实现

  时序发生器用于产生tft所需的时序,将图像数据按特定的时序输出。每种控制器的设计关键就是时序设计,本文专门针对三菱公司的aa084vc05液晶屏,图4,图5是其时序图。

图4 水平时序图

-->
相关IC型号

热门点击

 

推荐技术资料

DFRobot—玩的就是
    如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!