void cat66121_InterruptClr(void) { char intclr3,intdata4; intdata4= HDMITX_ReadI2C_Byte(0xEE); HDMITX_DEBUG_PRINTF(("REG_TX_INT_STAT4=%x \n",intdata4)); intclr3 = (HDMITX_ReadI2C_Byte(REG_TX_SYS_STATUS))|B_TX_CLR_AUD_CTS | B_TX_INTACTDONE ; if( intdata4 ) { HDMITX_WriteI2C_Byte(0xEE,intdata4); // clear ext interrupt ; HDMITX_DEBUG_PRINTF(("%s%s%s%s%s%s%s\n", (intdata4&0x40)?"video parameter change \n":"", (intdata4&0x20)?"HDCP Pj check done \n":"", (intdata4&0x10)?"HDCP Ri check done \n":"", (intdata4&0x8)? "DDC bus hang \n":"", (intdata4&0x4)? "Video input FIFO auto reset \n":"", (intdata4&0x2)? "No audio input interrupt \n":"", (intdata4&0x1)? "Audio decode error interrupt \n":"")); } HDMITX_WriteI2C_Byte(REG_TX_INT_CLR0,0xFF); HDMITX_WriteI2C_Byte(REG_TX_INT_CLR1,0xFF); HDMITX_WriteI2C_Byte(REG_TX_SYS_STATUS,intclr3); // clear interrupt. intclr3 &= ~(B_TX_INTACTDONE); HDMITX_WriteI2C_Byte(REG_TX_SYS_STATUS,intclr3); // INTACTDONE reset to zero. }
SYS_STATUS HDMITX_SetI2C_Byte(BYTE Reg,BYTE Mask,BYTE Value) { BYTE Temp; if( Mask != 0xFF ) { Temp=HDMITX_ReadI2C_Byte(Reg); Temp&=(~Mask); Temp|=Value&Mask; } else { Temp=Value; } return HDMITX_WriteI2C_Byte(Reg,Temp); }
LONG CalcPCLK() { BYTE uc, div ; int i ; long sum , count, PCLK ; Switch_HDMITX_Bank(0); uc = HDMITX_ReadI2C_Byte(0x5F) & 0x80 ; if( ! uc ) { return 0 ; } // InitCEC(); // // uc = CEC_ReadI2C_Byte(0x09) & 0xFE ; // CEC_WriteI2C_Byte(0x09, 1); // delay1ms(100); // CEC_WriteI2C_Byte(0x09, 0); // RCLK = CEC_ReadI2C_Byte(0x47); // RCLK <<= 8 ; // RCLK |= CEC_ReadI2C_Byte(0x46); // RCLK <<= 8 ; // RCLK |= CEC_ReadI2C_Byte(0x45); // DisableCEC(); // // RCLK *= 160 ; // RCLK /= 100 ; // // RCLK in KHz. HDMITX_SetI2C_Byte(0xD7, 0xF0, 0x80); delay1ms(1); HDMITX_SetI2C_Byte(0xD7, 0x80, 0x00); count = HDMITX_ReadI2C_Byte(0xD7) & 0xF ; count <<= 8 ; count |= HDMITX_ReadI2C_Byte(0xD8); for( div = 7 ; div > 0 ; div-- ) { // printf("div = %d\n",(int)div) ; if(count < (1<<(11-div)) ) { break ; } } HDMITX_SetI2C_Byte(0xD7, 0x70, div<<4); uc = HDMITX_ReadI2C_Byte(0xD7) & 0x7F ; for( i = 0 , sum = 0 ; i < 100 ; i ++ ) { HDMITX_WriteI2C_Byte(0xD7, uc|0x80) ; delay1ms(1); HDMITX_WriteI2C_Byte(0xD7, uc) ; count = HDMITX_ReadI2C_Byte(0xD7) & 0xF ; count <<= 8 ; count |= HDMITX_ReadI2C_Byte(0xD8); sum += count ; } sum /= 100 ; count = sum ; HDMITX_DEBUG_PRINTF1(("RCLK(in GetPCLK) = %ld\n",hdmiTxDev[0].RCLK)); HDMITX_DEBUG_PRINTF1(("div = %d, count = %d\n",(int)div,(int)count) ); HDMITX_DEBUG_PRINTF1(("count = %ld\n",count) ); PCLK = hdmiTxDev[0].RCLK * 128 / count * 16 ; PCLK *= (1<<div); if( HDMITX_ReadI2C_Byte(0x70) & 0x10 ) { PCLK /= 2 ; } HDMITX_DEBUG_PRINTF1(("PCLK = %ld\n",PCLK) ); return PCLK ; }