DM6437 OSD调试记录

DM6437 VPBE中的OSD学习记录,记录OSD模块看下来的大致感受。
下图为整体框图
这里写图片描述
在window 0 下面还有一层background 定义寄存器为:VPBE_OSD_MODE
最后的8位为颜色索引,对应ROM CLUT中的256种颜色。我用的是LCD屏显示,分辨率为800*480;
配置过的代码参考`

void vpbe_init( Uint32 buffer0, Uint32 buffer1, Uint32 width, Uint32 height, Uint32 cb_enable )
{
        VPSS_CLK_CTRL       = 0x000000019;   
        // Enable DAC and VENC clock, both at 27 MHz
        VPBE_PCR            = 0;             
        // No clock div, clock enable
        /*
         * Setup OSD
         */
        VPBE_OSD_TRANSPVAL = 0;

/*****************************************************/

        VPBE_OSD_MODE       = 0x00000000+104;   
        // Blackground color blue using clut in ROM0
        VPBE_OSD_OSDWIN0MD  = 0;            
        // Disable both osd windows and cursor window
        VPBE_OSD_OSDWIN1MD  = 0;
        VPBE_OSD_RECTCUR    = 0;

        VPBE_OSD_VIDWIN0OFST = width >> 4;
        VPBE_OSD_VIDWIN0ADR = buffer0;
        VPBE_OSD_BASEPX     = BASEP_X;   
        VPBE_OSD_BASEPY     = BASEP_Y;
        VPBE_OSD_VIDWIN0XP  = 0;
        VPBE_OSD_VIDWIN0YP  = 0;
        VPBE_OSD_VIDWIN0XL  = width;

        VPBE_OSD_VIDWIN0YL  = height;
        VPBE_OSD_MISCCTL    = 0;    
        //change the color if set bit 7 ,but don't know the principle

        VPBE_OSD_OSDWIN0ADR = (Uint32)resizer_degree;
        VPBE_OSD_OSDWIN0OFST = 40;

        VPBE_OSD_OSDWIN0XP = 100;
        VPBE_OSD_OSDWIN0YP = 100;

        VPBE_OSD_OSDWIN0XL = 20*32;
        VPBE_OSD_OSDWIN0YL = 240;
        VPBE_OSD_OSDWIN0MD = 0x20c5;

        VPBE_OSD_OSDWIN1MD = 0;

        VPBE_OSD_VIDWINMD   = 0x00000001;   
        // Disable vwindow 1 and enable vwindow 0



// Field mode with no up-scaling

        //VPBE_VENC_VMOD  = 0x00000043;   
        // Standard PAL interlaced output
        VPBE_VENC_VMOD  = 0x00002053|(0 << 4);   
        // Standard PAL interlaced output

        VPBE_VENC_VIDCTL = 0x00002000|(0 << 4);
        VPBE_VENC_LCDOUT = 0x00000001;

        VPBE_VENC_DCLKCTL = 0x0000001;
        VPBE_VENC_DCLKPTN0 = 0x1;   //   

        VPBE_VENC_HSPLS = 1*2;// 40*2
        VPBE_VENC_HINT = 862*2-1;// 1056*2 - 1
        VPBE_VENC_HSTART = 46*2; // (40 + 4)*2
        VPBE_VENC_HVALID = 800*2; // 800*2

        VPBE_VENC_VSPLS = 1;// 10
        VPBE_VENC_VINT = 522-1;//0x20C; // 525 - 1
        VPBE_VENC_VSTART = 23;//0xc; // 10 + 2
        VPBE_VENC_VVALID = 480;//0x1E0;  // 480  

    //  VPBE_VENC_HSDLY = 1;
    //  VPBE_VENC_VSDLY = 1;



        VPBE_VENC_SYNCCTL = 0xf|(0 << 11); 
        //Set HSYNC, VSYNC as active low

        VPBE_VENC_RGBCTL = 0x0|(1 << 10);

        VPBE_VENC_VDPRO     =  0 << 8|(0 << 9)|(0 << 11);

        VPBE_VENC_DACTST    = 0|(0xf << 12);    
        //DAC Power-down mode
        VPBE_VENC_DACSEL    = 0x000000;
}

上面除了OSD模块还有VENC模块的一些代码。对于OSD来讲,需要设定好整个画布的基准地址,才有参照。这里需要注意的,不能为0有范围寄存器说明有写。预计和HS、VS的脉冲时间有关。
接下来除了默认的缺省值,下面几个寄存器进行配置:
VPBE_OSD_VIDWIN0OFST //偏移地址
VPBE_OSD_VIDWIN0ADR //起始地址
VPBE_OSD_VIDWIN0XP //X方向起点
VPBE_OSD_VIDWIN0YP //Y方向起点
VPBE_OSD_VIDWIN0XL //X方向像素点长度
VPBE_OSD_VIDWIN0YL //Y方向像素点长度

对于OSD0两种不同模式:
在bitmap模式下(bit8):
VPBE_OSD_OSDWIN0XL、VPBE_OSD_OSDWIN0OFST 关系记录
VPBE_OSD_OSDWIN0XL表示有多少个像素点,一个像素点为8bit
VPBE_OSD_OSDWIN0OFST则为第一行地址和次行地址偏移。只知道地址偏移
单位为32,若其值为1则表示为1*32byte个偏移量
例:
VPBE_OSD_OSDWIN0OFST = 1;
VPBE_OSD_OSDWIN0XL = 1*32;

在RGB565 模式下:
VPBE_OSD_OSDWIN0XL表示有多少个像素点,一个像素点为16bit
则对于上例需要修改如下:
VPBE_OSD_OSDWIN0OFST = 2;
VPBE_OSD_OSDWIN0XL = 1*32;
可以看到VPBE_OSD_OSDWIN0OFST 的值增加了一倍,是由于一行为1*32个像素点、占用1*32*2byte;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值