OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5095|回复: 1

问一个用模拟8080总线读取正点原子7寸液晶(CPLD方案)的像素点失败的问题。

[复制链接]

1

主题

7

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-5-6
在线时间
5 小时
发表于 2016-5-6 22:03:12 | 显示全部楼层 |阅读模式
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,能读出数据,说明不是设置输入模式错误的问题,能正常操作液晶,说明不是接线问题。


根据数据手册,我的看法是
捕获.JPG
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接口,只能用模拟接口了,实在被整得没得法了,所以来求救,请求各位大神能给个解决方案,谢谢!谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-5-7 22:23:47 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 03:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表