新手入门
- 积分
- 17
- 金钱
- 17
- 注册时间
- 2016-5-6
- 在线时间
- 5 小时
|
6金钱
本帖最后由 hhdjz13813 于 2016-5-7 01:01 编辑
抱歉,此贴终结,问题已经自己解决,先读状态寄存器后读像素。
液晶屏用的是7寸正点原子V1.x的版本,CPLD方案,带8M SDRAM。单片机用的是NXP的LPC4337 204MHz M4&M0双核
不好意思哈,由于都是M4内核,都差不多,所以发到STM32F4这个版块来了,见谅。
遇到的问题:能正常写数据,写液晶像素,但是读像素数据死活读不出,读出来的都是0x0000,都要崩溃了。
测试过IO口,短接8080总线任意IO口至VCC,能读出数据,说明不是设置输入模式错误的问题,能正常操作液晶,说明不是接线问题。
根据数据手册,我的看法是
CE拉低,之后写XY坐标,我想连续读,所以写了XY坐标以及返回X的坐标。
之后把RS拉高,设置16位总线为输入模式。
RD拉低后等待,之后读取16位总线上的数据(确定这里延时够了,因为我延时加了几倍读出来的都是0x0000);
读数据后拉高RD,等待一段时间后再次拉低RD。。。循环800*480次。
这是我的源代码:
Read_Buffer=(unsigned char *)pvPortMalloc(1600); //申请1.6K字节的缓存
Address_set_simplify(0,0,799,479); //设置坐标
//设置GPIO2全部输入
for(i=0;i<16;i++)
{
Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT,2,i);
}
LCD_RS=true; //读像素
f_open(&ScreenShot,filename,FA_WRITE); //打开文件
for(i=0;i<=479;i++)
{
k=0;
for(j=0;j<=799;j++)
{
__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();
LCD_RD = false;
__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();
Read_Buffer[k]=(short int)LCD_DATA_BUS;
Read_Buffer[k+1]=((short int)LCD_DATA_BUS)>>8;
LCD_RD = true;
k+=2;
}
f_lseek(&ScreenShot,filepoint); //改变文件写入指针
f_write(&ScreenShot,Read_Buffer,1600,&write_num); //写入数据
filepoint+=write_num; //改变总写入量
}
f_close(&ScreenShot); //关闭文件
//设置GPIO2全部输出
for(i=0;i<16;i++)
{
Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT,2,i);
}
vPortFree(Read_Buffer);
如上所示,程序就是一个将读出来的整屏数据写入TF卡的程序,坐标设置程序如下:
void Address_set_simplify(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
LCD_RS=false;
LCD_DATA_BUS=0x00;
LCD_WR = false;
__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();
LCD_WR = true;
__NOP();__NOP();__NOP();__NOP();
LCD_RS=true;
LCD_DATA_BUS=(unsigned long int)y1;
LCD_WR = false;
__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();
LCD_WR = true;
__NOP();__NOP();__NOP();__NOP(); //开始y
LCD_RS=false;
LCD_DATA_BUS=0x01;
LCD_WR = false;
__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();
LCD_WR = true;
__NOP();__NOP();__NOP();__NOP();
LCD_RS=true;
LCD_DATA_BUS=(unsigned long int)x1;
LCD_WR = false;
__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();
LCD_WR = true;
__NOP();__NOP();__NOP();__NOP(); //开始x
LCD_RS=false;
LCD_DATA_BUS=0x03;
LCD_WR = false;
__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();
LCD_WR = true;
__NOP();__NOP();__NOP();__NOP();
LCD_RS=true;
LCD_DATA_BUS=(unsigned long int)x2;
LCD_WR = false;
__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();
LCD_WR = true;
__NOP();__NOP();__NOP();__NOP(); //结束x
}
首先,能确定的不是延时不够的问题,因为我把延时加了几倍都有问题。
其次,不应该是CE(LCD_CS)引脚不动作导致的问题,因为CE引脚一直都是低电平状态,坐标设置程序我确定是没问题的,因为用于像素写入一点问题都没有,延时都是正确的。
但是我觉得也不是时序问题呀,都是照着数据手册来的。
谢谢各位大神了,NXP没有FSMC接口,只能用模拟接口了,实在被整得没得法了,所以来求救,请求各位大神能给个解决方案,谢谢!谢谢!
|
|