刚开始学LCD驱动,以为是通常的做法,就是GPIO来驱动LCD。但是不一样,这次是在FPGA板子上,SRAM来驱动LCD。查了些资料,这种方法类似于FSMA驱动LCD。
对于MCU总线来说,LCD只有2个地址,分别对应RS=0,RS=1两种情况。
1、RS=0 写命令
2、RS=1 写数据
Write_Reg分为2步:写命令(寄存器地址);写数据(寄存器数据)
Read_Reg分页2步:写命令(寄存器地址);读数据(寄存器数据)
所有的寄存器地址和寄存器数据,以及 GRAM数据都是通过数据线完成传输的,而不是SRAM的地址.这是容易搞混的一个地方.LCD的SRAM地址只有一根 ,就是RS。
因为我们是用SRAM驱动LCD,所以时序都是MCU自动完成的。开始的时候很不理解“自动”的含义,到后来查了些资料,稍微懂了一点。
读存储器一般是SRAM控制器使能片选CS,在地址总线上输出地址,RD=0,WR=1,然后存储器响应这些信号在数据总线上输出数据,然后SRAM在数据总线上读取该数据.
写存储器一般是SRAM控制器使能片选CS,在地址总线上输出地址,在数据总线上输出数据,RD=1,WR=0,然后存储器响应这些信号把数据总线上的数据写入内部存储单元.
#define SRAM_LCD_DATA ((uint32_t)0x60020000) //disp Data ADDR
#define SRAM_LCD_CMD ((uint32_t)0x60000000) //disp Reg ADDR
//写寄存器地址函数
void LCD_WR_REG(unsigned int index)
{
对于MCU总线来说,LCD只有2个地址,分别对应RS=0,RS=1两种情况。
1、RS=0 写命令
2、RS=1 写数据
Write_Reg分为2步:写命令(寄存器地址);写数据(寄存器数据)
Read_Reg分页2步:写命令(寄存器地址);读数据(寄存器数据)
所有的寄存器地址和寄存器数据,以及 GRAM数据都是通过数据线完成传输的,而不是SRAM的地址.这是容易搞混的一个地方.LCD的SRAM地址只有一根 ,就是RS。
因为我们是用SRAM驱动LCD,所以时序都是MCU自动完成的。开始的时候很不理解“自动”的含义,到后来查了些资料,稍微懂了一点。
读存储器一般是SRAM控制器使能片选CS,在地址总线上输出地址,RD=0,WR=1,然后存储器响应这些信号在数据总线上输出数据,然后SRAM在数据总线上读取该数据.
写存储器一般是SRAM控制器使能片选CS,在地址总线上输出地址,在数据总线上输出数据,RD=1,WR=0,然后存储器响应这些信号把数据总线上的数据写入内部存储单元.
#define SRAM_LCD_DATA ((uint32_t)0x60020000) //disp Data ADDR
#define SRAM_LCD_CMD ((uint32_t)0x60000000) //disp Reg ADDR
//写寄存器地址函数
void LCD_WR_REG(unsigned int index)
{