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

1.BF531的PPI最多为16bit,若接24bit的TFT屏,只能接成565模式。这样BF531可用的PF只剩下PF0,1和2共三个引脚对不?与PPI共用的PF引脚是否就只能用做PPI数据线了?

2.若用8bit方式,332模式色彩是不是很差。若不管色彩是否可行呢?会有什么不便么?

3.我看了版主的BF53x开发板4.3寸TFT的驱动有些不明白

void InitDMA(void)
{  
int addr;
addr = &DisplayBuffer_565;           //DisplayBuffer_565[272][1440]
addr -= 1920;                                //这里为什么要减掉1920呢???????????????????????
*pDMA0_START_ADDR = addr;

*pDMA0_X_COUNT = 480;      

*pDMA0_X_MODIFY = 2;
*pDMA0_Y_COUNT = 286;          //不是272么,多出14是不是表示有14行暗线??????
*pDMA0_Y_MODIFY = 2;
*pDMA0_CONFIG = 0x1034;
}

以上DMA指向DisplayBuffer_565[272][1440] ,实际上用了565模式后,是不是只有272 * 960的数据量是有用的?

4.采用565模式后,剩下的323线一般是留高位好呢还是低位好呢?是拉高好,还是拉低好?有什么区别不?

万分感谢!



「该帖子被 blackfin 在 2012-06-11 16:43:54 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/6/11 16:40:55
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
马上闪人,来不及仔细看,明天答复。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/6/14 10:30:20
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

1. 只剩PF0,1,2可用,PF3需下拉到地。其他线只能做PPI。

2. 颜色很差,因为红绿蓝只有3种颜色,而且每种颜色区别不大,会很难看。若不管颜色,可以这样接。不使用的线接地即可。

3. 每个显示设备上下都有一些隐含的扫描场,这些场需要写数据,但不会被显示在屏上,这个液晶屏上方有4条,所以DMA多刷4条线共1920次。

液晶屏底层有一些暗线,所以PPI需要刷到286,这个数据在数据手册也能找到。

4.建议你不要采用332方式接液晶屏,颜色会严重失真。如果IO不够用,可以用PF0和PF1接口扩展一个IIC接口的IO扩展芯片。也可用EBIU接口加个锁存器,来利用锁存器锁存IO状态。

如果真是要用332方式,建议3根红线,接高位,3根绿线接高位,2根蓝线接高位,然后将不使用的线全部接地。

如果不接地,当你显示黑的时候,屏幕会出现颜色,因为低位线没有拉到地,或者你干脆把线分成几组,如红色3根线,分3组,分别是3根,3根,2根,每组用一根PPI线控制,这样也行。

不过这样接你的显示数据会非常麻烦。

如果你想节省IO,可以选用串行RGB888的液晶屏,如 PT035TN01 ,3.5寸的,这个屏RGB是依次送入,只占8根PPI线。使用起来也很方便。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/6/16 10:58:29
PPLLXZ(论坛新手)
PPLLXZ
头衔:社区公民
帮派:无帮无派
帖数:27
金钱:278
积分:32
注册时间:2012/5/25
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

#include <cdefBF518.h>

//1440=480*3
section("sdram0_bank1") unsigned char DisplayBuffer[272][1440] ;
section("sdram0_bank1") unsigned char DisplayBuffer_565[272][1440] ;
section("sdram0_bank1") unsigned char TempBuffer_img[272][1440] ;
section("sdram0_bank1") unsigned char Inputdata[391734];


void InitDMA(void)
{  
int addr;
addr = &DisplayBuffer_565;

addr -= 1920;//1920=480*2*2(共两帧,可能用于同步)

*pDMA0_START_ADDR = addr;  //起始地址:图片缓冲区最末1个字节-1920
*pDMA0_X_COUNT = 480;  //内循环数:480
*pDMA0_X_MODIFY = 2;  //内增量数:2
*pDMA0_Y_COUNT = 286;  //外循环数:286
*pDMA0_Y_MODIFY = 2;  //外增量数:2
*pDMA0_CONFIG = 0x1034;  //16Bits,2D,读内存,不开中断
}

void InitPPI(void)
{
//PPI_CONTROL=0x781E
//(1)PORT_EN=0,不启动PPI
//(2)PORT_DIR=1,输出模式
//(3)XFR_TYPE=11,需要1/2/3帧用于同步
//(4)PORT_CFG=01,需要2/3帧用于同步
//(5)FLD_SEL=0,在本应用中无意义
//(6)PACK_EN=0,不打包
//(7)SKIP_EN=0,在本应用中无意义
//(8)SKIP_EO=0,在本应用中无意义
//(9)DLEN=111,数据长度为16bits
//(10)POLC=1,PPI接口在PPI_CLK的下降沿采样数据,上升沿输出数据
//(11)POLS=0,PPI_FS1和PPI_FS2在下降沿处理
*pPPI_CONTROL = 0x781e;  
*pPPI_DELAY = 0;   //PPI_FS1动作以后,不延时就输出数据
*pPPI_COUNT = 479;   //发送每一行中包含的数量(479表示480)
*pPPI_FRAME = 286;   //PPI每帧的行数(为什么是286而不是272?)
}


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/6/18 15:07:27
PPLLXZ(论坛新手)
PPLLXZ
头衔:社区公民
帮派:无帮无派
帖数:27
金钱:278
积分:32
注册时间:2012/5/25
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

好久没来了,我的PPI打算接AD芯片所以没仔细看程序

没查WXCAT43-TG3#001R资料

我当时的理解以为1920=480*2*2(共两帧,可能用于同步)又觉得不对...

液晶屏不能保持图片吗?为什么断了电,图片就消失了,DMA是在不停的循环发送整个图片呢?还是发送一张整图就停止了


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

TFT 液晶屏没有内部的buffer存储数据,所以在显示图片时,PPIDMA必须不停的送数据,一旦DMA停止,液晶屏上的图像就会消失。

一些单片机使用的彩色液晶屏可以保留屏幕当前的图片,其速度比较慢,通常用EBIU接口或者SPI接口连接。其尺寸做不大。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/6/18 19:09:25
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
1.对于减去1920的疑问?为什么少掉4条暗线是1920呢?一条不是480*2(565色)=960么,那4条不就是4*960=3842了?还有我看了开发板的TFT屏资料如下图,有Vertical front porch参数典型值为2。应该是前面只有2条暗线所以2*480*2(565色一点为16bit = 2* 8bit)=1920。这样理解对不?
2.而Vertical cycle为286是因为:(286 =10(10-frames first) + 2(Vertical front porch) + 272(实际有效) + 2(Vertical back porch))。这样理解对不?
3.还有为什么设*pPPI_DELAY = 0;时,显示位置和颜色会有偏差。设为1就正常了呢?
上传的图片
  20121129913126.jpg [ 68.35 KB 770×488 ] (缩略时请点击查看原图)

 


上传的图片
  20121129922026.jpg [ 48.71 KB 751×426 ] (缩略时请点击查看原图)

 



「该帖子被 blackfin 在 2012-11-29 09:34:40 编辑过」

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

1. 对,应该是两条暗线,每条暗线的数据长度为480*2,之前描述有误。

2. 理解正确

3. PPI有上升沿和下降沿采样两种模式,有时候PPI时钟线走线过长,经过有延时功能的缓存buffer芯片,也可能会延迟这个时钟,通常只要设置了delay值,图像正确即可。如果你的时钟有延时,你也可以而尝试修改POLC位,看是否能把delay  1变成0。



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