DM368视屏输出模块只有OSD和VENC。感觉比VPFE难调多了,我想点一块640x480的屏,Vsync和Hsync都已经吧时序调好了,但数据一致对不上,屏幕显示不正确。
附件是出来的图像,并附上VPBE的配置,请大拿们帮着看看,谢了
static void vpbe_init( Uint32 colorbar_loopback_mode, Uint32 ntsc_pal_mode, Uint32 output_mode )
{
Uint32 video_buffer = 0x84600000;
Uint32 basep_x;
Uint32 basep_y;
Uint32 width;
Uint32 height;
Uint32 test;
if ( ntsc_pal_mode == NTSC )
{
basep_x = 122;
basep_y = 18;
width = 640;
height = 480;
}
else
{
basep_x = 132;
basep_y = 22;
width = 720;
height = 480;
}
/*
* Setup clocking / DACs
*/
VDAC_CONFIG = 0x081141CF; // Take DACs out of power down mode
VPSS_CLKCTL = 0x0000000B; // Enable DAC and VENC clock, both at 27 MHz
VPSS_VPBE_CLK_CTRL = 0x00000011; // Select enc_clk*1, turn on VPBE clk
/*
* Setup OSD
*/
OSD_MODE = 0x000000fc; // Blackground color blue using clut in ROM0
OSD_OSDWIN0MD = 0; // Disable both osd windows and cursor window
OSD_OSDWIN1MD = 0;
OSD_RECTCUR = 0;
OSD_VIDWIN0OFST= ((video_buffer>>19)&0x1E00) | width >> 4; //bit 12~9 store high 4bit 31~28
OSD_VIDWINADH = (video_buffer >> 21)&0x7F; //bit 6~0 store hight 7bit 27~21
OSD_OSDWIN0ADL = (video_buffer >> 5)&0xFFFF; //bit 15~0 stor 16bit 20~5
OSD_BASEPX = 126;
OSD_BASEPY = 3;
OSD_VIDWIN0XP = 0;
OSD_VIDWIN0YP = 0;
OSD_VIDWIN0XL = width;
OSD_VIDWIN0YL = height;
OSD_VIDWINMD = 0x00000001; // Disable vwindow 1 and enable vwindow 0
// Frame mode with no up-scaling
/*
* Setup VENC
*/
if ( ntsc_pal_mode == NTSC )
// VENC_VMOD = 0x00000003; // Standard NTSC interlaced output
VENC_VMOD = 0x00000013; // liyan change to No stardar video mode 130203
else
VENC_VMOD = 0x00000043; // Standard PAL interlaced output
VENC_HSPLS = 126; //HDW
VENC_VSPLS = 3; //VDW
// VENC_HINTVL = width-1; //PPLN
VENC_HINTVL = width + VENC_HSPLS - 1; //PPLN
VENC_HSTART = VENC_HSPLS; //SPH
VENC_HVALID = width; //LNH
VENC_VINTVL = height + VENC_VSPLS - 1; //LPFR
VENC_VSTART = VENC_VSPLS; //SLV
VENC_VVALID = height; //LNV
VENC_HSDLY = 0;
VENC_VSDLY = 0;
VENC_CMPNT |= 0x8000;
VENC_YCCCTL = 0x10;
// VENC_VDPRO = colorbar_loopback_mode << 8;
VENC_VDPRO |= 0x200; // 100% Color bars
// VENC_VDPRO |= 0x40; // liyan change that YUV change to RGB
// VENC_VIOCTL |= 0x6000; //VCLK output enable
VENC_CLKCTL = 0x11;
VENC_SYNCCTL |= 0x3;
/*
* Choose Output mode
*/
if ( output_mode == COMPOSITE_OUT )
VENC_DACSEL = 0x00000000;
else if ( output_mode == SVIDEO_OUT )
VENC_DACSEL = 0x00004210;
}
