⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 video_test.c

📁 TI公司视频解码芯片THS8200的驱动
💻 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 + -