This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM368视屏输出的问题



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;
}

  • 你好!

    1. 从显示来看VENC_HSTART和 VENC_VSTART还需要调整。这些参数应该在屏的spec里面有描述的。请对照看一下。

    2. 一般情况下,在同步信号来了以后会有一段无效数据,在有效数结束以后也会有一段无效数据,所以请再对比屏的spec看看 VENC_HINTVL和 VENC_VINTVL的配置是否正确。

    VPBE usre guide里面的figure78/79要好好理解一下如何和和屏的时序对应。

     

  • 好的,谢谢您的回复,目前这个问题已经解决。

    1:花屏的原因是因为Buffer的指针错误,源于开发板提供的代码中对寄存器的宏定义出错。

    2:同步信号来了以后的无效数据长度和屏的相关参数有联系,同时Video Windows做相应的位置偏移,即解决问题。