DM6437 OSD调试记录

来源:互联网 发布:绘制网络计划图软件 编辑:程序博客网 时间:2024/06/16 02:27

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
原创粉丝点击