您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]BF53x接TFT疑问
本帖共有582个阅读者
发表帖子 发表投票 回复主题
[求助]BF53x接TFT疑问
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]BF53x接TFT疑问

板主的BF53x开发板的相关初始化程序如下:

void InitDMA(void)
{  
int addr;
addr = &DisplayBuffer_565;
addr -= 1920;
*pDMA0_START_ADDR = addr;

*pDMA0_X_COUNT = 480; //每行共480个点
*pDMA0_X_MODIFY = 2; //每行共发送480个16bit数据,故此为2(2*8bit),因为转化为565模式,所以每行只需480*2个字节
*pDMA0_Y_COUNT = 286; //共286行,其中14行为无效的
*pDMA0_Y_MODIFY = 2;
*pDMA0_CONFIG = 0x1034; //16bit DMA模式
}

void InitPPI(void)
{
*pPPI_CONTROL = 0x781e; //16-PPI
*pPPI_DELAY = 0;  
*pPPI_COUNT = 479; //480-1
*pPPI_FRAME = 286;  
}

void InitTimer(void)
{
*pTIMER1_PERIOD  = 525;
*pTIMER1_WIDTH  = 41;
*pTIMER1_CONFIG  = 0x00a9;
*pTIMER2_PERIOD  = 150150;
*pTIMER2_WIDTH  = 5250;
*pTIMER2_CONFIG  = 0x00a9;
}

//RGC888转RGB565,转后存于DisplayBuffer_565(大小480*3*272)中。但只有前面480*2*272有效
void RGB888_RGB565(unsigned char *src, int src_len, unsigned char *dst)
{
    int i = 0;
    int j = 0;
    
    if (src_len % 3 != 0)
    {
        return;
    }
    for (i = 0; i < src_len; i += 3)
    {
         dst[j+1] = src[i+2] &0xf8;   //B
         dst[j+1] |= ((src[i+1]>>5) & 0x07); //GH
         dst[j] = ((src[i+1]<<3) & 0xe0);   //GL  
         dst[j] |= ((src[i]>>3) &0x1f);  //R
        j += 2;
    }
}

问题:如果我PPI用8bit模式(R-3 G-3 B-2)屏也是一样的屏。那此时初始化要怎么变呢?万分感谢!


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/7/3 12:50:16
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

void InitDMA(void)
{  
int addr;
addr = &DisplayBuffer_565;
addr -= 1920;
*pDMA0_START_ADDR = addr;

*pDMA0_X_COUNT = 480; //每行共480个点
*pDMA0_X_MODIFY = 1;
*pDMA0_Y_COUNT = 286; //共286行,其中14行为无效的
*pDMA0_Y_MODIFY = 1;
*pDMA0_CONFIG = 0x1030; //8bit DMA模式
}

void InitPPI(void)
{
*pPPI_CONTROL = 0x401e; //8-PPI
*pPPI_DELAY = 0;  
*pPPI_COUNT = 479; //480-1
*pPPI_FRAME = 286;  
}

void InitTimer(void)
{
*pTIMER1_PERIOD  = 525;
*pTIMER1_WIDTH  = 41;
*pTIMER1_CONFIG  = 0x00a9;
*pTIMER2_PERIOD  = 150150;
*pTIMER2_WIDTH  = 5250;
*pTIMER2_CONFIG  = 0x00a9;
}


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/7/4 1:11:32
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

谢谢Andy!但是有一点设置不明白。如下是PPI_CONTROL和液晶屏PDF中的数据传输时序。

看液晶屏PDF,应该VSYNC和HSYNC是下降沿有效,而数据是在DCLK上升沿有效的。这样PPI_CONTROL最高位不是应该设置为1么?即*pPPI_CONTROL = 0xc01e;但是这样设置后,显示不正常了。为什么呢?是不是我理解有误呢?谢谢!

上传的图片
  2012741704433.jpg [ 50.27 KB 767×354 ] (缩略时请点击查看原图)

 


上传的图片
  201274171833.jpg [ 44.51 KB 639×549 ] (缩略时请点击查看原图)

 


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/7/4 17:06:09
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

液晶屏在下降沿采数据时,就要要求处理器提前发送,通常要求处理器提前半个周期,所以处理器要选择在上升沿发出数据,这样在下降沿阶段,采到的数据才是稳定,准确的,如果处理器在下降沿发送数据,而液晶屏又在上升沿采集数据,这时液晶屏可能采到的是处理器未更新的数据,导致数据错误。

个人理解,无实据参考。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/7/5 12:13:34
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154626 Call, 1 Queries, Processed in 0.031250 second(s),