import time # System dependant variables - adjust according to system UB947 = 0x18 # 947 I2C Address UB948 = 0x68 # Remote 948 Address def pollstate(): count = 0 board.WriteI2C(UB947, 0x23, 0x80) board.WriteI2C(UB947, 0x24, 0x80) mask = int('11111', 2) state = board.ReadI2C(UB947, 0x24, 1) while (state & mask) != 27: # 27 = 5'b11011 time.sleep(0.01) # 10ms delay state = board.ReadI2C(UB947, 0x24, 1) count = count + 1 if count == 10: print "Error: Serializer is not in Normal state" return (1) board.WriteI2C(UB947, 0x23, 0x0) board.WriteI2C(UB947, 0x24, 0x0) board.WriteI2C(UB948,0x4A,0x01) # Disable OLDI outputs on 948 to prevent screen glitches from appearing during the init process ##### Init A Sequence board.WriteI2C(UB947,0x5B,0x03) # Force dual FPD-Link, disable reset on PLL frequency change board.WriteI2C(UB947,0x16,0x02) # Adjust BCC watchdog timer to minimum board.WriteI2C(UB947,0x04,0x90) # Prevent AVMUTE for non-HDCP systems state_error = pollstate() # Poll 947 state machine if state_error == 1: print "Serializer not in normal state" board.WriteI2C(UB947,0x40,0x10) board.WriteI2C(UB947,0x41,0x49) board.WriteI2C(UB947,0x42,0x16) board.WriteI2C(UB947,0x41,0x47) board.WriteI2C(UB947,0x42,0x20) board.WriteI2C(UB947,0x42,0xA0) board.WriteI2C(UB947,0x42,0x20) board.WriteI2C(UB947,0x42,0x00) board.WriteI2C(UB947,0x41,0x49) board.WriteI2C(UB947,0x42,0x00) time.sleep(0.01) board.WriteI2C(UB948,0x01,0x01) # Digital reset to restart AEQ time.sleep(0.1) # Allow time for 948 to relock board.WriteI2C(UB948,0x4A,0x00) # Enable OLDI outputs on 948 #User defined programming sequence board.WriteI2C(UB947, 0x03, 0xDA) board.WriteI2C(UB947, 0x17, 0x9E) board.WriteI2C(UB947, 0x4F, 0x80) board.WriteI2C(UB948, 0x26, 0x16) board.WriteI2C(UB948, 0x27, 0x16) #PATGEN programming board.WriteI2C(UB947,0x64, 0x10) //disabled patttern board.WriteI2C(UB947,0x66, 0x04) board.WriteI2C(UB947,0x67, 0xbc) board.WriteI2C(UB947,0x66, 0x05) board.WriteI2C(UB947,0x67, 0xa7) board.WriteI2C(UB947,0x66, 0x06) board.WriteI2C(UB947,0x67, 0x45) board.WriteI2C(UB947,0x66, 0x07) board.WriteI2C(UB947,0x67, 0x80) board.WriteI2C(UB947,0x66, 0x08) board.WriteI2C(UB947,0x67, 0x87) board.WriteI2C(UB947,0x66, 0x09) board.WriteI2C(UB947,0x67, 0x43) board.WriteI2C(UB947,0x66, 0x0a) board.WriteI2C(UB947,0x67, 0x14) board.WriteI2C(UB947,0x66, 0x0b) board.WriteI2C(UB947,0x67, 0x02) board.WriteI2C(UB947,0x66, 0x0c) board.WriteI2C(UB947,0x67, 0x14) board.WriteI2C(UB947,0x66, 0x0d) board.WriteI2C(UB947,0x67, 0x08) board.WriteI2C(UB947,0x66, 0x1a) board.WriteI2C(UB947,0x67, 0x09) //M=9 board.WriteI2C(UB947,0x66, 0x03) board.WriteI2C(UB947,0x67, 0x35) //N=53 board.WriteI2C(UB947,0x65, 0x04) //internal clk and timing board.WriteI2C(UB947,0x64, 0x41)