LCD驱动 学习笔记(二)[型号:SPFD5408]

本文详细介绍了使用SRAM驱动LCD的技术细节,包括SRAM与LCD之间的接口连接方式、寄存器地址与数据的写入过程,以及如何通过SRAM控制器实现LCD的驱动。此外,还分享了在FPGA平台上进行调试的经验。
刚开始学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)
{
*(volatile uint16_t *) (SRAM_LCD_CMD)= index;
}
//写寄存器数据函数
void LCD_WR_CMD(unsigned int index,unsigned int val)
{
*(volatile uint16_t *) (SRAM_LCD_CMD)= index;
*(volatile uint16_t *) (SRAM_LCD_DATA)= val;
}
SRAM_LCD_CMD是写寄存器,此时RS=0,告诉LCD我在总线上输出数据的是寄存器的地址
SRAM_LCD_DATA是写数据,此时RS=1,告诉LCD我在总线上输出地数据是寄存器的数据或者GRAM的数据.
接下来说说SRAM_LCD_CMD和SRAM_LCD_DATA的地址确定。
首先是SRAM_LCD_CMD。这个要看LCD的CS管脚接到哪个SRAM的片选上面,由此来确定的基地址。
SRAM_LCD_DATA则是根据LCD的RS接到SRAM的哪根地址线上,还有一点就是屏的数据类型。
对于数据类型为8bit来说,如果RS接到A0上,SRAM_LCD_DATA = SRAM_LCD_CMD+1。An的话 则SRAM_LCD_DATA = SRAM_LCD_CMD | 1<<n

如果数据类型为16bit。那地址线中的1对应的是基址中的2byte。SRAM_LCD_DATA = SRAM_LCD_CMD | (1<<n)*2

LCD可以清屏了。来说说调试遇到的问题吧。由于公司在做芯片开发,所以我是在FPGA板子上跑程序的。

SRAM----------------------------LCD

CE--------------------------------CS

A[0:24]---------------------------RS

DATA-----------------------------DATA 数据线

OE--------------------------------RD

WE-------------------------------WR

RESET--------------------------RESET

管脚对应差不多是这样子。我用的LCD型号是SPFD5408,从datasheet上看,

1、

需要 将RST管脚先拉低至少1ms 然后再拉高。这就意味着reset需要接在板子的复位key上。

2、LCD屏的数据类型是16bit。贴上一图,


这个表上表达的意义是,当使用16位数据宽度的外部存储器时,内部的HADDR[25:1]被移位输出到外部总线A24~A0上,内部的HADDR[0]不输出。

A0不接,所以SRAM上的A1相当于A2,1 <<n ----> 1 << (n+1)


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值