dm6446获取图像在vga显示器上显示。视频前端将YUV数据存入ddr2的buffer中,我想只显示其中的Y分量该怎么处理这些数据?
vpfe的配置如下:
VPFE_SYN_MODE = 0x00032F87; // interlaced, with VD pority as negative寄存器配置
VPFE_HD_VD_WID = 0;
VPFE_PIX_LINES = 0; //linger 720×624?
/*
* sph = 1, nph = 1440, according to page 32-33 of the CCDC spec
* for BT.656 mode, this setting captures only the 720×480 of the
* active NTSV video window
*/
VPFE_HORZ_INFO = width << 1; // Horizontal lines10110100000
VPFE_HSIZE_OFF = width << 1; // Horizontal line offset 每行需要的容量
VPFE_VERT_START = 0; // Vertical start line
VPFE_VERT_LINES = height >> 1; // Vertical lines
VPFE_CULLING = 0xFFFF00FF; // Disable cullng
/*
* Interleave the two fields */
VPFE_SDOFST = 0x00000249;//ddr中数据 的排列方式,两个场连续排列
VPFE_SDR_ADDR = buffer;//ddr2的起始地址
VPFE_CLAMP = 0;
VPFE_DCSUB = 0;
VPFE_COLPTN = 0xEE44EE44;
VPFE_BLKCMP = 0;
VPFE_FPC_ADDR = 0x86800000;//校正表入口
VPFE_FPC = 0;//需要校正的像素个数
VPFE_VDINT = 0;//arm中断类型
VPFE_ALAW = 0;
VPFE_REC656IF = 0x00000003;
/*
* Input format is Cb:Y:Cr:Y, w/ Y in odd-pixel position */
VPFE_CCDCFG = 0x00008800;//不使用swap
VPFE_FMTCFG = 0x00008000; //linger vpen=1 10位输入选6-15位
VPFE_FMT_HORZ = 0x000002D0;
VPFE_FMT_VERT = 0x00000240;//0x00000272;720*576
VPFE_FMT_ADDR0 = 0;
VPFE_FMT_ADDR1 = 0;
VPFE_FMT_ADDR2 = 0;
VPFE_FMT_ADDR3 = 0;
VPFE_FMT_ADDR4 = 0;
VPFE_FMT_ADDR5 = 0;
VPFE_FMT_ADDR6 = 0;
VPFE_FMT_ADDR7 = 0;
VPFE_PRGEVEN_0 = 0;
VPFE_PRGEVEN_1 = 0;
VPFE_PRGODD_0 = 0;
VPFE_PRGODD_1 = 0;
VPFE_VP_OUT = 0x04E22D00;//720*625
VPFE_PCR = 0x00000001; // Enable CCD
Chris Meng:
DM6446的video window必须是YUV422的数据,由于你需要显示的只是Y,也就是黑白数据,而黑白数据的UV就是0x80,你可以将UV分量用0x80替换,可以使用EDMA或者CPU实现。