AnsweredAssumed Answered

TMDS pll can not lock when connect to the laptop hdmi output

Question asked by tracyone on Jul 2, 2014
Latest reply on Jul 7, 2014 by mattp

adv7441a

 

my initial config is:first arg is value ,second one is subaddress,third one is slave address.

I2C_WriteByte(0x0C,0x03,USER_MAP); //Disable TOD
I2C_WriteByte(0x06,0x05,USER_MAP); //Prim_Mode =0110b HDMI
I2C_WriteByte(0x40,0x1D,USER_MAP); //Disable TRI_LLC
I2C_WriteByte(0xF3,0x6B,USER_MAP); //Setting cp_op_sel = 3 yuv422 16 bit & Enable DE & enable 656 mode
I2C_WriteByte(0xF0,0x68,USER_MAP); //Auto CSC:(use dpp) , disable rgb_out,YPrPb(same with YCrCb) out,yuv601
I2C_WriteByte(0xA0,0xBA,USER_MAP); //Enable HDMI and Analog in.Enable Simultaneous mode,Dsiable freerun
I2C_WriteByte(0x08,0xC8,USER_MAP); //Digital Fine Clamp Start position
I2C_WriteByte(0x3F,0xF4,USER_MAP); //Max Drive Strength
I2C_WriteByte(0x10,0xF0,USER_MAP_2);//ADI Recommended Write 均衡器设置
I2C_WriteByte(0x0F,0xF1,USER_MAP_2);//ADI Recommended Write 均衡器设置
I2C_WriteByte(0x20,0xF4,USER_MAP_2);//ADI Recommended Write 均衡器设置
I2C_WriteByte(0xEC,0x15,HDMI_MAP); //Disable these mute mask bits
I2C_WriteByte(0x0C,0x1D,HDMI_MAP); //force audio MUTE
I2C_WriteByte(0xFF,0x7D,USER_MAP);
I2C_WriteByte(0xFF,0x7E,USER_MAP);
I2C_WriteByte(0x0F,0x7C,USER_MAP);//negative HS and VS


 

I unmask some interrupt source,and readback some register in ISR.

I2C_WriteByte(0x4e,0x04,USER_MAP); //disable INT2,we use INT1 only
I2C_WriteByte(0xD1,0x40,USER_MAP_1);//active low,keep active until clear manually
I2C_WriteByte(0x90,0x44,USER_MAP_1);//unmask CP_LOCK_Q,CP_UNLOCK_Q,STDI_DVALID_Q,SSPD_RESULT_Q
I2C_WriteByte(0x90,0x42,USER_MAP_1);//clear first
I2C_WriteByte(0x11,0x6B,USER_MAP_1);//unmask  VIDEO_PLL_LCK and TMDS_CLK_A
I2C_WriteByte(0x11,0x69,USER_MAP_1);//clear first

 

in ISR:

reg_t = I2C_Read(USER_MAP,0x12);
_DBG("USER_MAP,0x12 :0x%x\r\n",reg_t);
reg_t = I2C_Read(HDMI_MAP,0x04);
_DBG("HDMI_MAP,0x04 :0x%x\r\n",reg_t);
 reg_t = I2C_Read(HDMI_MAP,0x05);
 _DBG("HDMI_MAP,0x05 :0x%x\r\n",reg_t);
reg_t = I2C_Read(USER_MAP_1,0x42);
_DBG("USER_MAP_1,0x42:0x%x\r\n",reg_t);


 

when my board connect to my laptop hdmi output ,trigger a interrupt ,print:

I am in EXTI1_IRQHandler
USER_MAP,0x12 :0xc0
HDMI_MAP,0x04 :0x12
HDMI_MAP,0x05 :0x0
USER_MAP_1,0x42:0x0
TMDS LOCK
I am in EXTI1_IRQHandler
USER_MAP,0x12 :0x80
HDMI_MAP,0x04 :0x10
HDMI_MAP,0x05 :0x0
USER_MAP_1,0x42:0x0
TMDS UNLOCK
I am in EXTI1_IRQHandler
USER_MAP,0x12 :0xc0
HDMI_MAP,0x04 :0x10
HDMI_MAP,0x05 :0x0
USER_MAP_1,0x42:0x0
TMDS UNLOCK
I am in EXTI1_IRQHandler
USER_MAP,0x12 :0xc0
HDMI_MAP,0x04 :0x10
HDMI_MAP,0x05 :0x0
USER_MAP_1,0x42:0x0
TMDS LOCK!                                              
I am in EXTI1_IRQHandler                                                        
USER_MAP,0x12 :0x80                                                             
HDMI_MAP,0x04 :0x10                                                             
HDMI_MAP,0x05 :0x0                                                              
USER_MAP_1,0x42:0x0                                                             
TMDS UNLOCK

 

it LOCK sometime,but finally unlock....

 

BUT,if connect my board to the camera by hdmi ,the TMDS pll can lock finally.

 

I have not configed the edid yet.

 

dose laptop hdmi output need to read edid?

Outcomes