海思vo用户时序配置

1、 配置时序

sample中只需要设置为User时序即可,如下图:

用户时序的结构体:

typedef struct tagVO_SYNC_INFO_S

{

HI_BOOL bSynm; /* sync mode(0:timing,as BT.656; 1:signal,as LCD) */

HI_BOOL bIop; /* interlaced or progressive display(0:i; 1:p) */

HI_U8 u8Intfb; /* interlace bit width while output */

HI_U16 u16Vact ; /* vertical active area */

HI_U16 u16Vbb; /* vertical back blank porch */

HI_U16 u16Vfb; /* vertical front blank porch */

HI_U16 u16Hact; /* herizontal active area */

HI_U16 u16Hbb; /* herizontal back blank porch */

HI_U16 u16Hfb; /* herizontal front blank porch */

HI_U16 u16Hmid; /* bottom herizontal active area */

HI_U16 u16Bvact; /* bottom vertical active area */

HI_U16 u16Bvbb; /* bottom vertical back blank porch */

HI_U16 u16Bvfb; /* bottom vertical front blank porch */

HI_U16 u16Hpw; /* horizontal pulse width */

HI_U16 u16Vpw; /* vertical pulse width */

HI_BOOL bIdv; /* inverse data valid of output */

HI_BOOL bIhs; /* inverse horizontal synch signal */

HI_BOOL bIvs; /* inverse vertical synch signal */

} VO_SYNC_INFO_S;

SDK默认的PAL时序:

{0,0,0, 288,22,2 ,720,132,12, 1, 288,23,2, 126,3, 0,0,0}

上面部分属性,与显示通道的总体控制寄存器DHDCTRL0x205ca000)是对应的。

常用到的属性是如下:

这里u16Vbb隔行输出时是指顶场垂直消隐后肩,逐行输出时:垂直消隐后肩加垂直脉冲的宽度,单位是行。u16Vfbu16Vbb对应,指的是,两者加在一起的和应该一个定值的。u16Hbb水平消隐后肩u16Hfb是水平消隐前肩单位为像素,两者加起来的和也应该是为一定的值。所以我们一般可以通过修改这两对值,来实现画面在一定的范围内,在显示器上的上下左右移动。可以通过接口配置,也可以直接修改寄存器VbbVfbDHDVSYNC寄存器0x205ca004对应,HbbHfbDHDHSYNC1寄存器0x205ca008DHDHSYNC2寄存器0x205ca00c对应)

u16Bvbb隔行输出时,底场垂直消隐后肩,u16Bvfb隔行输出时,底场垂直消隐前肩,单位为行这里注意,如果是隔行输出,修改了顶场图像的前后肩,则应该对应修改底场图像的前后肩,否则可能出现图像抖动。

2、配置时钟

我们以3531为例,在一些特殊分辨率,像640x480@60,在vo设备中没有支持这个时序,但是HDMI有支持这个时序,所以可以用vo的用户时序来实现,只需要配置好上吗的User 时序和HDMI后,配置相应的vo的时钟。就可以正常输出。

3-3 Hi3531 PLL 与各功能模块对应关系

这里可以看到,对于VDP模块,是由VPLL0VPLL1来分配时钟。其中注意的是VPLL12分频后作为VDP HD/HDMI源时钟

一、这里,首先需要确认的是,当前的芯片,HDMI 时钟源选择

例如,跑./sample_vio 0 读取寄存器0x20030038,结果如下:

值为:0x02017cfe

对应的第22位的值为0,所以此HDMI时钟选择,为HD0

对应的第1719位的值为000,所以此HD0的时钟选择为VPLL1 DIV2时钟

所以如果需要配置的时钟为VPLL1

二,计算VPLL1各个寄存器的值

Hi3531芯片手册中,表3-4列出了方法,这里我举一个例子

以配置VPLL1 为例,VPLL1 输出FOUTPOSTDIV 2 分频给VDP 模块

最终的VO时钟是FOUTPOSTDIV = FOUTVCO / (pstdiv1 x pstdiv2)

FOUTVCO = 24 x (fbdiv + frac / 2^24) /refdiv

pstdiv1pstdiv2fbdivfracrefdiv的值,都将通过配置进寄存器。

这里,refdiv为分频系数,像在配置VPLL1的时候,文档中写到二分频后作为VDP HD/HDMI源时钟。所以refdiv2.

FOUTVCO的值有要求,应该大于等于800MHz,小于等于2.4GHz

frac一般都配置为0

所以需要进行凑的数,就是fbdivpstdiv1 pstdiv2

这三个变量的意义如下:

PERI_CRG40x20030010)寄存器的

PERI_CRG50x20030014)寄存器的

由上面的值得知,我们在搭配的时候,pstdiv1 pstdiv2的取值范围是07.

例如当HDMI需要输出640x480@60的时候,需要的时钟是50.4M

FOUTPOSTDIV = 24 x fbdiv + frac / 2^24 / refdiv / pstdiv1 x pstdiv2

50.4M = 24 x 84 + 0 / 2^24 / 2 / 4 x 5

所以fbdiv = 84frac = 0refdiv = 2pstdiv1 = 4pstdiv2 = 5.

综上,修改的寄存器值为:

将地址为0x20031010的值修改为0x25000000

地址为0x20030014的值修改为0x006C2054

这样就配置出了640x480的时钟。

Frank.

《海思vo用户时序配置.doc》
将本文的Word文档下载,方便收藏和打印
推荐:
下载文档
热门推荐
相关推荐