ADV7513 1080p60 output

Hello

We have a request regarding HDMI product ADV7513.

The engineer is evaluating this chip on their own PCB.

He is going to use it as an HDMI converter however he cannot achieve the required result.

 

Their mode:

 

Input: 1080p25 4:2:2 YCrCb 8bit embeded sync

Output: They need 1080p60.

 

Is it possible to implement?

 

They just have at the output 1080p25. May be they have some errors in the coding? Please find it att

Regards

Evgeny

{
auto temp = readReg( 0x41 );
// temp |= 1<<1;// генерация SYNC adjust enable
temp &= ~(1<<6);
writeReg( 0x41, temp );
}
writeReg( 0x48, 0x00);
writeReg( 0x49, 0xa8);
writeReg( 0x4c, 0x00);
//
// // fixed registers that must be set on power up
writeReg( 0x96, 0xa4);
writeReg( 0x98, 0x03);
writeReg( 0x99, 0x02);

writeReg( 0x9a, 0xe0 );
writeReg( 0x9C, 0x30 );
writeReg( 0x9d, 0x61 );//0x61

writeReg( 0xA2, 0xA4 );
writeReg( 0xA3, 0xA4 );
writeReg( 0xA5, 0x04 );
writeReg( 0xAB, 0x40 );

writeReg( 0xba, 0x60 );
writeReg( 0xbb, 0x00 );

writeReg( 0xd1, 0xff );
writeReg( 0xdc, 0x00 );
writeReg( 0xdd, 0x00 );
writeReg( 0xde, 0xd8 );//0xd8
writeReg( 0xdf, 0x01 );

writeReg( 0xe0, 0xd0 );
writeReg( 0xE4, 0x60 );

writeReg( 0xf9, 0x00 );
writeReg( 0xfa, 0x00 );
writeReg( 0xfd, 0xe0 );
writeReg( 0xfe, 0x80 );
{
auto temp = readReg( 0xe2 );
temp |= 1<<1; //CEC enable ??
writeReg( 0xe2, temp );
}

{
auto temp = readReg( 0xd0 );
temp &= ~(1<<1); //генерация синхросигнала DE
temp |= 1<<1; //генерация синхросигнала DE
temp |= 3<<2; //
temp &= ~(0xf<<4);
temp |= 0x0f<<4; //invert clock
writeReg( 0xd0, temp );
}

{
auto temp = readReg( 0xd6 );
temp |= 1<<4; //TMDS CLK Soft Turn On
// temp |= 1<<0; //gated clock
writeReg( 0xd6, temp );
}

{
auto temp = readReg( 0x15 );
temp &= ~0xF;
temp |= 0x04;
writeReg( 0x15, temp );
}
// ставим 8 бит
{
auto temp = readReg( 0x16 );
temp &= ~(3<<2);//style 2
temp |= 1<<2;//style 2
temp &= ~(3<<4);
temp |= 3<<4;//Color Depth for Input Video Data 8 bit
temp &= ~(1<<0);//0 = RGB 1 = YCbCr
temp |= 1<<0;//0 = RGB 1 = YCbCr
writeReg( 0x16, temp );
}


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

/*********embeded sync*************************/
{
auto temp = readReg( 0xfb );
temp &= ~(3<<1);
temp |= 1<<2; //Low Refresh Rate 25Hz
writeReg( 0xfb, temp );
}

writeReg( 0x30, 0x84);
writeReg( 0x31, 0x02);
writeReg( 0x32, 0xc0);
writeReg( 0x33, 0x10);//1080p-50/60
writeReg( 0x34, 0x05 );
writeReg( 0x35, 0x2f );
writeReg( 0x36, 0xe9 );
writeReg( 0x37, 0x0f );
writeReg( 0x38, 0x00 );
writeReg( 0x39, 0x43 );
writeReg( 0x3a, 0x80 );
writeReg( 0xd7, 0x84 );
writeReg( 0xd8, 0x02 );
writeReg( 0xd9, 0xc0 );
writeReg( 0xda, 0x10);//1080p-50/60
writeReg( 0xdb, 0x05 );//
/**********************************************/
{
auto temp = readReg( 0x17 );
temp &= ~(3<<5);// sync polarity
// temp |= 1<<6;// sync polarity
temp &= ~(1<<2);
temp |= 1<<0; // DE embeded sync
temp |= 1<<1; //aspect ratio 16:9
writeReg( 0x17, temp); //temp BVA!!
}

{
auto temp = readReg( 0x16 );
temp &= ~(1<<7);//4:4:4 output|
writeReg( 0x16, temp );
}
writeReg( 0x40, 0x80 );
{
auto temp = readReg(0x18);
temp |= 1<<7;//csc enable
temp &= ~(3<<5);
//temp |= 1<<5;
writeReg( 0x18, temp );
}
{
auto temp = readReg( 0xAF );
temp &= ~(1<<1);//DVI b0 HDMI b1
temp |= 1<<1;//DVI b0 HDMI b1
writeReg( 0xAF, temp );
}
/**********CSC coefficients********************/

writeReg( 0x18, 0xe7 );
writeReg( 0x19, 0x34 );
writeReg( 0x1a, 0x04 );
writeReg( 0x1b, 0xad );
writeReg( 0x1c, 0x00 );
writeReg( 0x1d, 0x00 );
writeReg( 0x1e, 0x1c );
writeReg( 0x1f, 0x1b );

writeReg( 0x20, 0x1d );
writeReg( 0x21, 0xdc );
writeReg( 0x22, 0x04 );
writeReg( 0x23, 0xad );
writeReg( 0x24, 0x1f );
writeReg( 0x25, 0x24 );
writeReg( 0x26, 0x01 );
writeReg( 0x27, 0x35 );

writeReg( 0x28, 0x00 );
writeReg( 0x29, 0x00 );
writeReg( 0x2a, 0x04 );
writeReg( 0x2b, 0xad );
writeReg( 0x2c, 0x08 );
writeReg( 0x2d, 0x7c );
writeReg( 0x2e, 0x1b );
writeReg( 0x2f, 0x77 );
/************************************/


// Audio init
writeReg( 0x01, 0x00 );
writeReg( 0x02, 0x18 );
writeReg( 0x03, 0x00 );
{
auto temp = readReg( 0x0a );
temp &= ~(7<<4);
writeReg( 0x0a, temp );
}
{
auto temp = readReg( 0x0b );
temp &= ~(1<<7);//SPDIF disable
writeReg( 0x0b, temp );
}
{
auto temp = readReg( 0x0c );
temp &= ~(0x0f<<2);
temp |= 0x0f<<2;//enable I2S
writeReg( 0x0c, temp );
}
{
auto temp = readReg( 0x15 );
temp &= ~(0x0f<<4);
temp |= 1<<5;
writeReg( 0x015, temp );
}
{
auto temp = readReg( 0x0a );
temp &= ~(3<<2);
temp |= 3<<2;
writeReg( 0x0a, temp );
}
/************HDCP INIT**************/
// {
// auto temp = readReg( 0xAF );
// temp |= 1<<4;
// temp |= 1<<7;
// writeReg( 0xAF, temp );
// }
///***** ожидание старта HDCP******/
// { auto temp = readReg( 0x97 );
// temp &= 0x40;
// while (temp==0)
// {
// temp = readReg( 0x97 );
// temp &= 0x40;
// }
// temp |= 1<<6;
// writeReg( 0x97, temp );
// }
// {
// auto temp = readReg( 0xc8 );
// temp &= 0x04;
// while (temp==0)
// {
// temp = readReg( 0xc8 );
// temp &= 0x04;
// }
// }
//
/***********************************/

/********** AVIInfoFrame***********/
{
auto temp = readReg( 0x4a );
temp &= ~(7<<5);
temp |= 3<<5; //1 = Use automatically generated checksum 1 = AVI Packet I2C update active 1 = Audio InfoFrame Packet I2C update active
writeReg( 0x4a, temp );
}
{
auto temp = readReg( 0x52 );
temp &= ~(7<<0);
temp |= 0x02<<0; //version of InfoFrame
writeReg( 0x52, temp );
}
{
auto temp = readReg( 0x53 );
temp &= ~(0x0f<<0);
temp |= 0x0d<<0; //length of InfoFrame
writeReg( 0x53, temp );
}

/*****Like in AD source**********/
{
auto temp = readReg( 0x3b );//pixel repeat mode 0x3B[6:5] to 0b10 or 0b11.
temp &= ~(3<<5); // auto mode
//temp |= 1<<6; // manual mode
// temp |= 1<<5; // max mode
writeReg( 0x3b, temp );
}
{
auto temp = readReg( 0x3b );//pixel repeat mode 0x3B[6:5] to 0b10 or 0b11.
temp &= ~(3<<1); // pixel repetition
temp |= 1<<1; // pixel repetition
writeReg( 0x3b, temp );
}

{
auto temp = readReg( 0x3b );//pixel repeat mode 0x3B[6:5] to 0b10 or 0b11.
// temp &= ~(3<<3); // input freq mult
// temp |= 1<<3; // input freq mult
writeReg( 0x3b, temp );
}
{
auto temp = readReg(0x3c);//
temp &= ~(0x3f<<0); //
temp |= 0x10<<0; // //1080p-60
// temp |= 0x1f<<0; // //1080p-50
// temp |= 0x22<<0; // //1080p-30
// temp |= 0x4<<0; // //1080p-25
writeReg(0x3d,temp);
}
{
auto temp = readReg( 0x55 );
temp &= ~(3<<5);//RGB
temp |= 1<<6; //YCrCb 4:4:4
writeReg( 0x55, temp );
}
{
auto temp = readReg( 0x56 );
temp &= ~(3<<4);//aspect ratio
temp |= 1<<5; //aspect ratio 16:9
temp &= ~(0x0f<<0);//
temp |= 1<<3;////aspect ratio 16:9
writeReg( 0x56, temp );
}
time_service::delay_ms(20);

Top Replies

Parents Reply Children
No Data