今天在看TFT驱动,看到从TFT读写数据函数的时候,钻进牛角尖了
//写
void LCD_WR_DATA(u16 data)
{
LCD->LCD_RAM=data;
}
//读
u16 LCD_RD_DATA(void)
{
return LCD->LCD_RAM;
}
FSMC读写数据的时候,是这样的吗?
写的时候, data被写到FSMC数据线D0-15,然后到TFT。
读的时候,data被锁存到D0-15,然后呢?D0-D15的数据直接被读到了吗?这里钻进去了。
第二个问题:
TFT采用16位数据线,那么在这里为什么是8位数据呢?是因为9341的特殊性吗?我没有看9341的datasheet.
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{
if(lcddev.id==0X9341)
{
LCD_WR_REG(lcddev.setxcmd);
LCD_WR_DATA(Xpos>>8);
LCD_WR_DATA(Xpos&0XFF);
LCD_WR_REG(lcddev.setycmd);
LCD_WR_DATA(Ypos>>8);
LCD_WR_DATA(Ypos&0XFF);
}
if(lcddev.id==0||lcddev.id==0XFFFF)//读到 ID 不正确 ⑤
{
//尝试 9341 的 ID 读取
LCD_WR_REG(0XD3);
LCD_RD_DATA(); //dummy read
LCD_RD_DATA(); //读到 0X00
lcddev.id=LCD_RD_DATA(); //读取 93
lcddev.id<<=8;
lcddev.id|=LCD_RD_DATA(); //读取 41
}
|