📄 video_test.c
字号:
///////////////Create by liuxu 2007.03.08
#include "davincievm_i2c.h"
////////////////////////注意中断!!!!!!!!!!!!!!
#define TVP5146_I2C_ADDR 0x20
Uint8 p;
Uint16 temp;
Uint32 temp1,temp2[5];
/* ------------------------------------------------------------------------ *
* *
* tvp5146_rset *
* *
* Set codec register regnum to value regval *
* *
* ------------------------------------------------------------------------ */
void tvp5146_rset( Uint8 regnum, Uint8 regval )
{
Uint8 cmd[2];
cmd[0] = regnum; // 8-bit Register Address
cmd[1] = regval; // 8-bit Register Data
DAVINCIEVM_I2C_write( TVP5146_I2C_ADDR, cmd, 2 );
}
/* ------------------------------------------------------------------------ *
* *
* tvp5146_rget *
* *
* Return value of codec register regnum *
* *
* ------------------------------------------------------------------------ */
Uint8 tvp5146_rget( Uint8 regnum )
{
Uint8 cmd[2];
cmd[0] = regnum; // 8-bit Register Address
cmd[1] = 0; // 8-bit Register Data
DAVINCIEVM_I2C_write( TVP5146_I2C_ADDR, cmd, 1 );
DAVINCIEVM_I2C_read ( TVP5146_I2C_ADDR, cmd, 1 );
p=I2C_ICDRR;
return cmd[0];
}
/* ------------------------------------------------------------------------ *
* *
* tvp5146_init( ) *
* *
* Initialize the TVP5146 *
* *
* ------------------------------------------------------------------------ */
void tvp5146_init( )
{
DAVINCIEVM_waitusec( 1000 );
PINMUX0=0x03000000;
PINMUX1=0x00000080;
DAVINCIEVM_waitusec( 1000 ); // wait 1 msec
/*
I2C_ICMDR=0xCE00;
I2C_ICIMR=0x0;
I2C_ICPSC=0x3B;
I2C_ICCLKL=0x1EF;
I2C_ICCLKH=0x1EF;
I2C_ICCNT=0x2;
I2C_ICSAR=0x20;
I2C_ICEMDR=0x1;
I2C_ICMDR=0xCE20;
*/
// tvp5146_rset(0x19,0x10);
//tvp5146_rget(0x19);
//printf("P is %x\n",p);
DAVINCIEVM_waitusec( 1000 );
tvp5146_rset(0x4A,0x00);
//tvp5146_rget(0x4A);
tvp5146_rset(0x19,0x03); // Initalize TVP5146, must do after power on
//tvp5146_rget(0x19);
tvp5146_rset(0x82,0x1C);
//tvp5146_rget(0x82);
tvp5146_rset(0x1C,0x03);
//tvp5146_rget(0x1C);
tvp5146_rset(0x03,0x01);
//tvp5146_rget(0x03);
tvp5146_rset(0x1D,0xFF); // dtg_y_sync1 setup tri-level sync
//tvp5146_rget(0x1D);
tvp5146_rset(0x1E,0x49); // dtg_y_sync2
//tvp5146_rget(0x1E);
tvp5146_rset(0x1F,0xB6); // dtg_y_sync3
//tvp5146_rget(0x1F);
tvp5146_rset(0x20,0xFF); // dtg_cbcr_sync1
//tvp5146_rget(0x20);
tvp5146_rset(0x21,0xFF); // dtg_cbcr_sync2
//tvp5146_rget(0x21);
tvp5146_rset(0x22,0xFF); // dtg_cbcr_sync3
//tvp5146_rget(0x22);
tvp5146_rset(0x23,0x13); // dtg_y_sync_upper
//tvp5146_rget(0x23);
tvp5146_rset(0x24,0x15); // dtg_cbcr_sync_upper
//tvp5146_rget(0x24);
tvp5146_rset(0x25,0x28); // dtg_spec_a use spec registers to set up horizontal timing
//tvp5146_rget(0x25);
tvp5146_rset(0x26,0x6E); // dtg_spec_b
//tvp5146_rget(0x26);
tvp5146_rset(0x27,0x28); // dtg_spec_c
//tvp5146_rget(0x27);
tvp5146_rset(0x28,0x04); // dtg_spec_d
//tvp5146_rget(0x28);
tvp5146_rset(0x2A,0x04); // dtg_spec_e
//tvp5146_rget(0x2A);
tvp5146_rset(0x2B,0xC0); // dtg_spec_h_msb
//tvp5146_rget(0x2B);
tvp5146_rset(0x2C,0x00); // dtg_spec_h_lsb
//tvp5146_rget(0x2C);
tvp5146_rset(0x2F,0x6E); // dtg_spec_k_lsb
//tvp5146_rget(0x2F);
tvp5146_rset(0x30,0x00); // dtg_spec_k_msb
//tvp5146_rget(0x30);
tvp5146_rset(0x34,0x06); // dtg_total_pixel_msb 1650 pixels per line
//tvp5146_rget(0x34);
tvp5146_rset(0x35,0x72); // dtg_total_pixel_lsb
//tvp5146_rget(0x35);
tvp5146_rset(0x36,0x00); // dtg_linecnt_msb
//tvp5146_rget(0x36);
tvp5146_rset(0x37,0x01); // dtg_linecnt_lsb
//tvp5146_rget(0x37);
///////liuxu said :模式选择应该注意的地方
//tvp5146_rset(0x38,0x82); // dtg_mode select 720p mode (defines vertical structure the video frame)
tvp5146_rset(0x38,0x83);
//tvp5146_rget(0x38);
tvp5146_rset(0x39,0x27); // dtg_frame_field_msb 2EEh for 750 lines per frame
//tvp5146_rget(0x39);
tvp5146_rset(0x3A,0xEE); // dtg_frame_size_lsb
//tvp5146_rget(0x3A);
tvp5146_rset(0x3B,0xFF); // dtg_field_size_lsb
//tvp5146_rget(0x3B);
DAVINCIEVM_waitusec( 2000 );
//dtg2 liuxu!!!!!!!!!!!!!!!!!!!!!!!!!!!!
tvp5146_rset(0x4A,0x48);
tvp5146_rset(0x4F,0x30);
tvp5146_rset(0x50,0x0);
//tvp5146_rget(0x50);
tvp5146_rset(0x51,0x22);
//tvp5146_rget(0x51);
tvp5146_rset(0x58,0x6);
//tvp5146_rget(0x58);
tvp5146_rset(0x59,0x1A);
//tvp5146_rget(0x59);
tvp5146_rset(0x5A,0xEA);
//tvp5146_rget(0x5A);
tvp5146_rset(0x5B,0xEF);
//tvp5146_rget(0x5B);
tvp5146_rset(0x68,0x21);
tvp5146_rget(0x68);
printf("P is %x\n",p);
tvp5146_rset(0x69,0x01);
//tvp5146_rget(0x69);
DAVINCIEVM_waitusec( 2000 );
tvp5146_rset(0x79,0x00); // dtg_hs_in_dly_msb adjusts horizontal input delay
//tvp5146_rget(0x79);
tvp5146_rset(0x7A,0x00); // dtg_hs_in_dly_lsb
//tvp5146_rget(0x7A);
tvp5146_rset(0x7B,0x00); // dtg_vs_in_dly_msb adjust vertical input delay
//tvp5146_rget(0x7B);
tvp5146_rset(0x7C,0x00); // dtg_vs_in_dly_lsb
//tvp5146_rget(0x7C);
//以上会出现问题的地方:同步电平,延时delay,generic模式选择,输入同步的极性。
DAVINCIEVM_waitusec( 5000 ); // wait 4 msec
}
/* ------------------------------------------------------------------------ *
* *
* vpbe_init( ) *
* *
*
* *
* ------------------------------------------------------------------------ */
void vpbe_init()
{
//huan di fang
VPSS_CLK_CTRL=0x0000001A;
VPBE_PCR =0x0;
//////////////////////OSD section
OSD_MODE=0x0;
OSD_BASEPX=0x104;
OSD_BASEPY=0x19;
//window setup
OSD_VIDWIN0XP=0x0;
OSD_VIDWIN0YP=0x0;
OSD_VIDWIN0XL=0x500;
OSD_VIDWIN0YL=0x2D0;
OSD_VIDWIN0ADR=0x81000000;
OSD_VIDWIN0OFST=0x50;
OSD_VIDWINMD=0x0002;
OSD_MISCCTL=0x0;
OSD_VIDWINMD=0x0003;
////////////////////VENC section
VENC_VMOD=0x0011;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!liuxu notice up!
//VENC_VIOCTL=0x2000;
VENC_VIOCTL=0x2001;
//prefilter!!!!
VENC_VDPRO=0x0800;
//同步输出,低电平有效
VENC_SYNCCTL=0x000f;
VENC_HSPLS=0x2A;
VENC_VSPLS=0x5;
VENC_HINT=0x671;
VENC_HSTART=0x104;
VENC_HVALID=0x500;
VENC_VINT=0x2ED;
VENC_VSTART=0x19;
VENC_VVALID=0x2D0;
VENC_HSDLY=0x0;
VENC_VSDLY=0x0;
//CbCr
VENC_YCCCTL=0x00;
VENC_LCDOUT=0x01;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VENC_DCLKCTL=0x8FF;
VENC_DCLKPTN0=0xFFFFFFFF;
VENC_DCLKPTN1=0xFFFFFFFF;
VENC_DCLKPTN2=0xFFFFFFFF;
VENC_DCLKPTN3=0xFFFFFFFF;
VENC_DCLKPTN0A=0xFFFFFFFF;
VENC_DCLKPTN1A=0xFFFFFFFF;
VENC_DCLKPTN2A=0xFFFFFFFF;
VENC_DCLKPTN3A=0xFFFFFFFF;
/*
VENC_DCLKCTL=0xFF;
VENC_DCLKPTN0=0xaaaa;
VENC_DCLKPTN1=0xaaaa;
VENC_DCLKPTN2=0xaaaa;
VENC_DCLKPTN3=0xaaaa;
VENC_DCLKPTN0A=0xaaaa;
VENC_DCLKPTN1A=0xaaaa;
VENC_DCLKPTN2A=0xaaaa;
VENC_DCLKPTN3A=0xaaaa;
*/
//VENC_DCLKHS
//VENC_DCLKHSA
//VENC_DCLKHR
//VENC_DCLKVS
//VENC_DCLKVR
//VENC_VSTAT=
VENC_VSTARTA=0x19;
//VENC_OSDCLK0
VENC_OSDCLK1=0xF;
VENC_HVLDCL0=0x0;
VENC_HVLDCL1=0x0;
//VENC_OSDHADV
}
/* ------------------------------------------------------------------------ *
* *
* video_loopback_test( ) *
* *
* *
* *
* ------------------------------------------------------------------------ */
Int16 video_loopback_test( )
{
Uint32 i;
tvp5146_init( );
DAVINCIEVM_waitusec( 3000 ); // wait 1 msec
vpbe_init(); // Setup Back-End
DAVINCIEVM_waitusec( 3000 ); // wait 1 msec
for(;;)
{
for(i=0; i<720*640; i++)
{
//*((Uint32*)(0x81000000+i*4))=0x51F0515A;
*((Uint32*)(0x81000000+i*4))=0x0;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -