wso75839840 发表于 2010-8-7 11:01:23

CPLD驱动4.3寸TFT显示颜色问题

各位DX好,刚开始接触CPLD。
参考这位DX的代码,驱动我的4.3寸TFT,分辨率为480*272。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4180358&bbs_page_no=1&search_mode=4&search_text=wso75839840&bbs_id=9999
代码就改了一下。换了一个时钟。我是的54M的。
用STM32驱动的,送入CPLD数据为16位。SRAM这512K的。
下面是我STM32的代码。

1. 当写入65280个点(一半的屏)为红色。再写入32640个点(4分之一屏)为蓝色。
显示的时候上半屏正常,但下面的4分之一不是蓝色,而是紫色。
我换了其它颜色也是。感觉第一次的颜色总是保留下来了。

开始我以为是CPLD刷数据时,buffer没有清0.后面改了一下还是这样。
不知道为什么。

2. 如果要显示前景色和背景色,是刷两次屏吗?第一次刷背景色,第二次定点刷前景色?
   那样的话SRAM中就要保存两屏的数据了。是不是我想错了。

void Send_Data(u16 data,u8 n)
{

        Set_Cs;
        if(n==1) Set_Rs;
        else if(n==0) Clr_Rs;       
        Data_Convert(data);
        Clr_Cs;       
}

void Data_Convert(u16 data)
{
        //GPIOE->ODR=GPIOE->ODR|(data&0xF0)<<3;
        //GPIOD->ODR=GPIOD->ODR|(data&0x0C)>>2;
        //GPIOD->ODR=GPIOD->ODR|(data&0x03)<<14;
        GPIOD->ODR=GPIOD->ODR|(data&0x0C)>>2;
        GPIOD->ODR=GPIOD->ODR|(data&0x03)<<14;
        GPIOE->ODR=GPIOE->ODR|(data&0x1FF0)<<3;       
        GPIOD->ODR=GPIOD->ODR|(data&0xE000)>>5;
}

void TFT_test(void)
{
        u16 i;
        u16 j;
      for(i=0;i<65280;i++)                  //65280
        {
           Send_Data(0x001F,1);                                    
           for(j=0;j<50;j++);                  
        }
       
        //Send_Data(0x001F,0);
        //for(j=0;j<50;j++);

        for(i=0;i<32640;i++)
        {
           Send_Data(0xF800,1);                                    
           for(j=0;j<50;j++);
       
        }
}

flyforyou85 发表于 2010-8-7 11:25:54

lz
==============================你用什么芯片驱动的,能上个图片吗

zxky001 发表于 2010-8-7 14:52:38

www.mcutech.cncpld+sram

wso75839840 发表于 2010-8-7 20:31:22

回复【1楼】flyforyou85
-----------------------------------------------------------------------

我是用EPM570驱动的,方案是PPA2001的方案,按照他的原理图画的板子。

问题解决了!呵呵,开始一直以为是CPLD程序的事,就一直查。

后来发现是STM32程序的问题。没次发数据的时候没有清0.

加两句就可以了。

void Data_Convert(u16 data)
{
GPIOD->ODR=0x0000;
GPIOE->ODR=0x0000;
GPIOD->ODR=GPIOD->ODR|(data&0x0C)>>2;
GPIOD->ODR=GPIOD->ODR|(data&0x03)<<14;
GPIOE->ODR=GPIOE->ODR|(data&0x1FF0)<<3;
GPIOD->ODR=GPIOD->ODR|(data&0xE000)>>5;
}
页: [1]
查看完整版本: CPLD驱动4.3寸TFT显示颜色问题