一款HDMI一分二的配置
一. 根据芯片寄存器手册制作
#define HDXADDR (0XA0)
#define REG_CONFIG (0X00) // default 0XFF
#define BIT_CONFIG_TMDS_MODE (BIT7) // "0": Standby mode "1": Normal mode
#define BIT_CONFIG_PORT1_SEL (BIT5) // "0": Disable "1": Enable
#define BIT_CONFIG_PORT2_SEL (BIT4) // "0": Disable "1": Enable
#define REG_RX_SET (0X01) // default 0X00
#define BIT_RX_INPUT_TERMINATION (BIT7) // "0": Enable Rpd connection "1": Disable Rpd connection
#define BIT_RX_TERMINATION_VBIAS (BIT6) // "0": Connect to GND "1": Connect to VDD
#define BIT_RX_VBIAS_SEL (BIT5) // "0": bit[6] control disable "1": bit[6] control enable
#define BIT_RX_EQ_SETTING (BIT2|BIT3|BIT4) // "000": 2.5 "001": 5 "010": 7.5 "011": 10 "100": 12.5 "101": 15 "110": 17.5 "111": 20
#define BIT_RX_SQUELCH_CTL (BIT1) // "0": Squelch enable "1": Squelch disable
#define REG_TX_SET0 (0X03) // default 0X00
#define REG_TX_SET1 (0X04) // default 0X00
#define BIT_TX_TMDS_CTL (BIT7) // "0": Open drain "1": Double termination
#define BIT_TX_PRE_EMPHASIS (BIT6|BIT5|BIT4) // "000": 0 dB "001": 1.5 dB "010": 2.5 dB "011": 3.5 dB "1xx": 6 dB (750 mVpp swing)
#define BIT_TX_SWING (BIT3|BIT2) // "00": 500 mV as default "01": -10% "10": +10% "11": +20%
#define BIT_TX_SLEW_RATE (BIT1|BIT0) // "00": as default "01" / "10": + 5% "11": +10%
二. 需要配置的参数
1.eq的设置
由上面的定义,可以知道,eq的值在0-7
#define EQ_MAX_VALUE (0X07)
#define EQ_MIN_VALUE (0X00)
void HDX_EqSetting(uint8_t value)
{
uint8_t SendByte;
if(value > EQ_MAX_VALUE) return;
SendByte = (value<<2) & BIT_RX_EQ_SETTING;
I2C_WriteByte(SendByte, REG_RX_SET, HDXADDR);
}
2.配置TMDS output Pre-emphasis control,TMDS output swing setting和TMDS output slew rate setting
为了在使用时的便捷性,我把所有情况做成参数直接写入,不用单个配置,总共有80种配置的参数
#define DRIVE_MAX_VALUE (0X4F)
#define DRIVE_MIN_VALUE (0X00)
void HDX_DriveSetting(uint8_t value)
{
uint8_t SendByte;
if(value > DRIVE_MAX_VALUE) return;
SendByte = value & (BIT_TX_SLEW_RATE|BIT_TX_SWING|BIT_TX_PRE_EMPHASIS);
I2C_WriteByte(SendByte, REG_TX_SET0, HDXADDR);
I2C_WriteByte(SendByte, REG_TX_SET1, HDXADDR);
}
使用的时候调用即可