您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 技术讨论区 -> BF548的pixc和ppi 一起驱动active TFT 640*... 
本帖共有784个阅读者
发表帖子 发表投票 回复主题
BF548的pixc和ppi 一起驱动active TFT 640*480 24bits
lvben5d(论坛新手)
lvben5d
头衔:社区公民
帮派:无帮无派
帖数:61
金钱:672
积分:89
注册时间:2014/3/24
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF548的pixc和ppi 一起驱动active TFT 640*480 24bits
向各位大侠前辈请教一个有关640*480的BMP图片显示问题(已经转换成640*480*3的数据),经过PIXC的处理,然后由 PPI驱动到 外部640*480 24bit TFT屏。到底图片是如何被显示的。我的想法是
:把背景和overlay 的数据放入合成器合成,等合成后,合成器会调用回调函数 来驱动PPI输出。

合成器主要代码如下:
   ADI_DEV_HANDLE     Pixc_Handle;
   ADI_DEV_2D_BUFFER  InmainBufPixc,OvrABufPixc, OvrBBuf
Pixc , OutBuf
Pixc;
ADI_DEV_BUFFER_PAIR  PixInputBufs[] = { {ADI_DEV_2D, (ADI_DEV_BUFFER*)&InmainBufPixc},
                                        {ADI_DEV_2D, (ADI_DEV_BUFFER*)&
OvrABufPixc },
                                        {ADI_DEV_BUFFER_END,                       0}};
static void PixCallback { .. .. .. }

void PixcConfig()
{
   ADI_PIXC_CONVERSION_MODE PixcMode;
   u32 Result;
   do{
      if(Result = adi_dev_open(..省略非重要 ^_^ ) != ADI_DEV_RESULT_SUCCESS)
      {  printf(".....")
      }
   }
   ADI_DEV_CMD_VALUE_PAIR PixcCFG[] =
   {
      ADI_DEV_CMD_SET_DATEFLOW_METHOD,  ADI_DEV_MODE_CHAINED; //数据流形式  
     ..省略非重要 ^_^
   }
   PixcMode.InputFrame = ADI_PIXC_FRAME_RGB888;
   PixcMode.OvrAFrame  = ADI_PIXC_FRAME_RGB888;
   PixcMode.OvrBFrame  = ADI_PIXC_FRAME_RGB888;
   PixcMode.OutPutFrame= ADI_PIXC_FRAME_RGB888;
   if(Result = adi_dev_control(Pixc_Handle, ADI_DEV_CMD_TABLE, (void*)PixcCFG) != ...)
   { printf(".....") }
   if(Result = adi_dev_control(Pixc_Handle, ADI_DEV_CMD_ENABLE_ITU656_SUPPORT, (void*)FALSE) != ...)
   { printf(".....") } //
  
   InMainBufPixc.Date         = pInMainFrame;
   InMainBufPixc.ElementWidth = 4;     //DMA数据通道为 32bit
   InMainBufPixc.Xcount       = 640/4; //一行640个像素/宽4字节 = 160次
   InMainBufPixc.Xmodify      = 4;
   InMainBufPixc.Ycount       = 480;   //行数 这里不除4
   InMainBufPixc.Ymodify      = 4;
   InMainBufPixc.CallbackParameter = NULL;
   InMainBufPixc.pNext        = NULL;  //请教?  这里的意思是否是 背景图无需更换吗? 如果我有2个以上背景图互相切换,那么就需要指向下一张图吗?

   OvrABufPixc.Date         = pOvrAFrame;
   OvrABufPixc.ElementWidth = 4;     //DMA数据通道为 32bit
   OvrABufPixc.Xcount       = 200/4; //Overlay A的 尺寸为 200 * 108
   OvrABufPixc.Xmodify      = 4;
   OvrABufPixc.Ycount       = 108;   //行数 这里不除4
   OvrABufPixc.Ymodify      = 4;
   OvrABufPixc.CallbackParameter = NULL;
   OvrABufPixc.pNext        = &OvrBBufPixc; // 为何指向 overlay B ?
   OvrBBufPixc.Date         = pOvrBFrame;
   OvrBBufPixc.ElementWidth = 4;     //DMA数据通道为 32bit
   OvrBBufPixc.Xcount       = 400/4; //Overlay A的 尺寸为 400 * 180
   OvrBBufPixc.Xmodify      = 4;
   OvrBBufPixc.Ycount       = 180;  
   OvrBBufPixc.Ymodify      = 4;
   OvrBBufPixc.CallbackParameter = NULL;
   OvrBBufPixc.pNext        =
NULL ;

   OutBufferPixc.Date         = pPixcOutFrame;
   OutBufferPixc.ElementWidth = 4;    
   OutBufferPixc.Xcount       = 640/4; //输出 640*480分辨率图片
   OutBufferPixc.Xmodify      = 4;
   OutBufferPixc.Ycount       = 480;  
   OutBufferPixc.Ymodify      = 4;
   OutBufferPixc.CallbackParameter = &OutBufferPixc; // ??
   OvrBBufPixc.pNext          =  NULL ;  

   if(Result = adi_dev_Write(Pixc_Handle, ADI_DEV_BUFFER_TABLE, (void*)PixInputBufs) != ...)
   { printf(".....") } //请高手 求解释 这里 写进去的

    if(Result = adi_dev_Read(Pixc_Handle, ADI_DEV_2D, (void*)OutBufferPixc) != ...)
   { printf(".....") } //请高手 求解释 这里
   }while(0) ;
}  

说明: pInMainFrame  = InMainFrame[640*480*3]; //把背景图的数据放在这个数组里
       pOvrAFrame    = OvrAFrame[200*108*3]  ; //Overlay A的图片信息
       pOvrBFrame    = OvrBFrame[400*180*3]  ; //Overlay B的图片信息
       pPixcOutFrame = PixcOutFrame[640*480*3];

void PixCallback( ....  )
{
  if(Result = adi_dev_control(PPI输出句柄,ADI_DEV_CMD_SET_DATAFLOW, (void*)TRUE) != ADI_DEV_RESULT_SUCCESS)  //这里是启动PPI 将图片信息输出到 TFT屏的启动吧 ??!
  {....}   
}

主要疑问: 1. 这个PixCallBack 函数执行 是否会阻塞? 因为EPPI虽然是后台 DMA驱动TFT 但是也需要一些处理?  
          2. EPPI的函数 我等会贴上 在把问题反馈

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/3/24 12:54:23
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不会,没用过ADI封的函数。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/3/25 23:01:10
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154173 Call, 1 Queries, Processed in 0.031250 second(s),