void I2CSendArray(uint8 addressArg, uint8 subAddressArg, uint8* dataPtrArg, uint8 length) { volatile uint32 i; // Wait until the I2C bus is not busy for(i = 0; (UCB0STAT & UCBBUSY) && (i < I2C_MAX_WHILE_DELAY) ; i++) {} if(i == I2C_MAX_WHILE_DELAY) { i = 0; I2CReset(); return; } address = addressArg; subAddress = subAddressArg; // The address of the register to write to dataPtr = dataPtrArg; byteCtr = length; // Setup the number of bytes to read interuptCount = 0; receiveMode = FALSE; // Set the slave address, start the I2C handler in transmitter mode, // and send a start condition. This will initate the // I2C transmission. UCB0I2CSA = addressArg; // Slave Address UCB0CTL1 |= (UCTR | UCTXSTT); // Put I2C into TX mode and send the start, this starts the transmission // wait until the entire xfer is finished and the line is no longer busy for(i = 0; (UCB0STAT & UCBBUSY) && (i < I2C_MAX_WHILE_DELAY) ; i++) {} if(i == I2C_MAX_WHILE_DELAY) { i = 0; I2CReset(); return; } }
void putOSDchar(uint8_t y, char c, uint8_t color){ while (TW88Write(0x96,y)==0) { // RAM Address window position type of thing char index or something I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x97,c)==0) { // char index in ROM I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x98,color)==0) { // color attribute I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } }
void putOSDfailsafe(uint8_t on, uint8_t setup) { while (TW88Write(0x9E,0x03)==0) { // select window 3 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } if(on) { while (TW88Write(0x9F,0x01)==0) { // OSD enable I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } } else { while (TW88Write(0x9F,0x00)==0) { // OSD disable I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } } if(setup) { while (TW88Write(0xA1,0xFF)==0) { // OSD H start I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } // while (TW88Write(0xA0,0x00)==0) { // OSD H+V start high bits // I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); // } while (TW88Write(0xA2,0x80)==0) { // OSD V STart I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA3,0x09)==0) { // OSD H Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA4,0x01)==0) { // OSD V Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA9,0xF0)==0) { // window zoom x4 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xAC,0x08)==0) { // window transparency 08 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xAA,0x5B)==0) { // window memory start location I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } char failstr[] = "LINK LOST"; for(int i=0; i<(sizeof(failstr)-1);i++) { putOSDchar(0x5B+i,failstr[i], 0x04); } } }
void I2CReceiveArray(uint8 addressArg, uint8 subAddressArg, uint8* dataPtrArg, uint8 length) { volatile uint32 i; //Don't handle 1 byte or less recieves //TODO need to special case single byte receive. Or not. if (length <= 1) { return; } // Ensure I2C bus is not busy for(i = 0; (UCB0STAT & UCBBUSY) && (i < I2C_MAX_WHILE_DELAY) ; i++) {} if(i == I2C_MAX_WHILE_DELAY) { i = 0; I2CReset(); return; } address = addressArg; subAddress = subAddressArg; dataPtr = dataPtrArg; byteCtr = length; interuptCount = 0; receiveMode = TRUE; // Set the slave address, start the I2C handler in transmitter mode // (The interupt will switch this to reciver mode after sending the // sub address), and send a start condition. This will initate the // I2C recive transmission. UCB0I2CSA = address; // Slave Address UCB0CTL1 |= (UCTR | UCTXSTT); // I2C TX, start condition // Wait until the tranmission is done and the I2C bus is not busy for(i = 0; (UCB0STAT & UCBBUSY) && (i < I2C_MAX_WHILE_DELAY) ; i++) {} if(i == I2C_MAX_WHILE_DELAY) { i = 0; I2CReset(); return; } }
void ReadAllTW88Regs(void) { for (uint8_t x=0;x<=254;x++) { // if (x==2) continue; while (TW88Read(x, &TW88Registers[x])==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } } }
unsigned char ReadPCF8591(char address, char channel) { unsigned char id=PCF8591_ID+(address<<1); while (!I2CReset()) { //fprintf (stderr, "I2C bus busy, retrying.\n"); } // set output enable, no autoincrement i2cTransmitBuffer[0]=(channel&0x03)+0x40; // read 2 bytes, since the first one is the old value if (I2CSendReceive(id, 1, 2)) return 0; return i2cReceiveBuffer[1]; }
uint8_t TW88_AddOSD_Win(uint8_t x, uint8_t y, uint8_t w, uint8_t h) { /// OSD while (TW88Write(0x94,0x0C)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x9E,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x9C,0x03)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA1,x)==0) { // OSD H start I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA2,y)==0) { // OSD V STart I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA3,w)==0) { // OSD H Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA4,h)==0) { // OSD V Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA5,0x86)==0) { // OSD Window border I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x94,0x00)==0) { //enable OSD RAM access I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } for (uint8_t idx=0; idx<64;idx++) { while (TW88Write(0x9C,0x0F)==0) { //font color I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x96,idx)==0) { //RAM Address window position type of thing char index or something I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x97,0x40+idx)==0) { //char index I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x98,0x07)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } } while (TW88Write(0x9F,0x01)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } return 1; }
uint8_t TW88_Init(void) { //first thing to do would be to make sure that we are on first page while (TW88Write(0xff,0x00)==0) { //now we detected an error ... we shall resend ? I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1C, 0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x02,0x40)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x04,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x06,0x03)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x07,0x02)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x08,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x09,0xF0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x0A,0x19)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x0B,0xD0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x0C,0xDC)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x0D,0x15)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x10,0x00)==0) { //brightness I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x11,0x50)==0) { // contrast I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x12,0x70)==0) { //sharpness I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x13,0x9E)==0) { //chroma U I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x14,0x90)==0) { //chroma V I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x15,0x00)==0) { //hue I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x17,0x33)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x18,0x44)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1C,0x0F)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1D,0x7F)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1E,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1F,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x20,0x50)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x21,0x42)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x22,0xF0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x23,0xD8)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x24,0xBC)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x25,0xB8)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x26,0x44)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x27,0x2a)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x28,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x29,0x15)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2A,0x78)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2B,0x44)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2C,0x30)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2D,0x14)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2E,0xA5)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2F,0xE0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x33,0x85)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x34,0x1A)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x35,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x38,0x8E)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x40,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x41,0x20)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x42,0x04)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x43,0x22)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x44,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x45,0x54)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x46,0x20)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x47,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x48,0xCF)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x49,0x20)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4A,0x13)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4B,0x13)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4C,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4D,0x30)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4E,0x64)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4F,0x1E)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x50,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x60,0xE0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x61,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x62,0x7C)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x63,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x64,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x65,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x66,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x67,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x68,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x69,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6A,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6B,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6C,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6D,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6E,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x70,0x60)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x71,0x60)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x72,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x73,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x74,0x60)==0) { ///brightness I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x75,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x76,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x77,0x03)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x78,0x3B)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x7C,0x1C)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x7D,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x7E,0xF6)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x7F,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x80,0x10)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x81,0x1D)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x82,0x03)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x83,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x84,0x67)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x85,0x94)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x86,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x87,0xFF)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x88,0xCA)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x89,0x02)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB0,0x40)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB1,0x02)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB2,0xDB)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB3,0x14)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB4,0x10)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB5,0x20)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB6,0x33)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBB,0x12)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB7,0x0D)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB8,0x04)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB9,0x08)==0) {//back porch value I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBA,0xE0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBC,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBD,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBE,0xC2)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBF,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC0,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC1,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC2,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC3,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC4,0x99)==0) { // PWM setup and duty cycle default 0x40 // 0xBF - 50% duty cycle - 0x99 - 20% duty cycle I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC6,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC7,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC8,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC9,0xED)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xCA,0xE7)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD2,0xFF)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD3,0x07)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD4,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD5,0x3F)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD6,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD7,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD8,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDA,0x3D)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDB,0xC3)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDC,0xFC)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDD,0x70)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDE,0x6F)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDF,0x6F)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xE0,0x10)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF0,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF4,0x16)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF6,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF7,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF8,0xA0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF9,0x01)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFA,0x30)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFB,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFC,0x48)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFD,0x30)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFE,0x51)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFF,0x01)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC0,0x01)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFF,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } return 1; }
//------------------------------------------------------------------------------ int main(void) { VICConfig(); TimingInit(); LEDInit(); UART1Init(); UART2Init(); I2CInit(); SPISlaveInit(); Wait(100); UART1Printf("University of Tokyo NaviCtrl firmware V2"); ReadEEPROM(); UBloxInit(); LSM303DLInit(); FlightCtrlCommsInit(); SDCardInit(); NavigationInit(); ExternalButtonInit(); // Enable the "new data" interrupt. VIC_Config(EXTIT0_ITLine, VIC_IRQ, IRQ_PRIORITY_NEW_DATA); VIC_ITCmd(EXTIT0_ITLine, ENABLE); // Enable the 50Hz Interrupt. VIC_Config(EXTIT3_ITLine, VIC_IRQ, IRQ_PRIORITY_50HZ); VIC_ITCmd(EXTIT3_ITLine, ENABLE); // Main loop. uint32_t led_timer = GetTimestamp(); for (;;) { #ifndef VISION // Check for new data from the magnetometer. ProcessIncomingLSM303DL(); // Skip the rest of the main loop if mag calibration is ongoing. if (MagCalibration(mag_calibration_)) continue; // Check for new data on the GPS UART port. ProcessIncomingUBlox(); #endif // Check for new data from the FlightCtrl. if (NewDataFromFlightCtrl()) { ClearNewDataFromFlightCtrlFlag(); #ifdef VISION KalmanAccelerometerUpdate(); #endif UpdateNavigation(); PrepareFlightCtrlDataExchange(); #ifndef VISION RequestLSM303DL(); #endif // Check if new data has come while processing the data. This indicates // that processing did not complete fast enough. if (NewDataFromFlightCtrl()) { overrun_counter_++; } } #ifndef VISION CheckUBXFreshness(); CheckLSM303DLFreshness(); // Normally the magnetometer is read every time new data comes from the // FlightCtrl. The following statement is a backup that ensures the // magnetometer is updated even if there is no connection to the FlightCtrl // and also deals with read errors. if (LSM303DLDataStale()) { if (MillisSinceTimestamp(LSM303DLLastRequestTimestamp()) > 20) RequestLSM303DL(); if (LSM303DLErrorBits() & LSM303DL_ERROR_BIT_I2C_BUSY) I2CReset(); } #else CheckVisionFreshness(); #endif // Check for incoming data on the "update & debug" UART port. ProcessIncomingUART1(); // Check for incoming data on the "FligthCtrl" UART port. ProcessIncomingUART2(); ProcessLogging(); if (TimestampInPast(led_timer)) { GreenLEDToggle(); while (TimestampInPast(led_timer)) led_timer += 100; // Debug output for GPS and magnetomter. Remove after testing is completed // UART1Printf("%+5.2f,%+5.2f,%+5.2f", // MagneticVector()[0], // MagneticVector()[1], // MagneticVector()[2]); // UART1Printf("%i,%i,%i", // MagnetometerVector()[0], // MagnetometerVector()[1], // MagnetometerVector()[2]); // UART1Printf("%i,%i,%i", // MagnetometerBiasVector()[0], // MagnetometerBiasVector()[1], // MagnetometerBiasVector()[2]); // UART1Printf("%f", CurrentHeading()); // UART1Printf("%f,%f,%f", // (float)(UBXPosLLH()->longitude * 1e-7), // (float)(UBXPosLLH()->latitude * 1e-7), // (float)(UBXPosLLH()->height_above_ellipsoid * 1e-3)); UART1PrintfSafe("%+5.2f,%+5.2f,%+5.2f,%+5.2f", PositionVector()[0], PositionVector()[1], PositionVector()[2], CurrentHeading()); } } }
void setupOSD() { //start with RSSI osd window while (TW88Write(0x9E,0x00)==0) { // select window 0 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA1,0x00)==0) { // OSD H start I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA2,0x00)==0) { // OSD V STart I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA3,0x3F)==0) { // OSD H Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA4,0x01)==0) { // OSD V Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x9F,0x01)==0) { // OSD enable I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } char hrssi[] = "Host RSSI: dBm"; char rrssi[] = "Remote RSSI: dBm"; for (int i=0; i<64;i++) { putOSDchar(i,' ', 0x07); } for(int i=0; i<(sizeof(hrssi)-1);i++) { putOSDchar(0+i,hrssi[i], 0x07); } for(int i=0; i<(sizeof(rrssi)-1);i++) { putOSDchar(35+i,rrssi[i], 0x07); } // next is left control button window: ail, ele, rud while (TW88Write(0x9E,0x01)==0) { // select window 1 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA1,0x00)==0) { // OSD H start I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA2,0x80)==0) { // OSD V STart I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA3,0x05)==0) { // OSD H Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA4,0x05)==0) { // OSD V Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA9,0xA0)==0) { // window zoom x3 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xAC,0x08)==0) { // window transparency 08 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x9F,0x01)==0) { // OSD enable I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xAA,0x40)==0) { // window memory start location 40 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } //clear osd windows chars char space = ' '; for (int i=0; i<(0x05 * 0x05)+1; i++) { putOSDchar(0x40+i, space, 0x07); } putOSDchar(0x42, 0x1D, 0x07); // up arrow putOSDchar(0x45, 0x1B, 0x07); // left arrow putOSDchar(0x49, 0x1C, 0x07); // right arrow putOSDchar(0x4C, 0x1E, 0x07); // down arrow putOSDchar(0x54, 0x1B, 0x07); // rudder left putOSDchar(0x58, 0x1C, 0x07); // rudder right putOSDchar(0x47, 'X', 0x07); // middle dot //Now for throttle button while (TW88Write(0x9E,0x02)==0) { // select window 2 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA1,0xA0)==0) { // OSD H start I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA0,0x12)==0) { // OSD H+V start high bits I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA2,0x0)==0) { // OSD V STart I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA3,0x01)==0) { // OSD H Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA4,0x02)==0) { // OSD V Len I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xA9,0xF0)==0) { // window zoom x4 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xAC,0x08)==0) { // window transparency 08 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x9F,0x01)==0) { // OSD enable I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xAA,0x40+(0x05*0x05))==0) { // window memory start location 40 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } putOSDchar(0x59, 0x1D, 0x07); // throttle up putOSDchar(0x5A, 0x1E, 0x04); // throttle down }
uint8_t TW88_Init(void) { //i2c init GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; //init now the TW88 chip on I2C 1 //I2C init ...on PB6 And PB7 /* Configure the I2C clock source. The clock is derived from the SYSCLK */ RCC_I2CCLKConfig(RCC_I2C1CLK_HSI); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB , ENABLE); //init our serial port on UART2 // SerialPort_Init(115200,1); // printf("\n\r ***** COEN490/ELEC490 Capstone Project Team 14 Welcome! ***** \n\r"); I2C_DeInit(I2C1); I2C_StructInit(&I2C_InitStructure); I2C_InitStructure.I2C_Mode=I2C_Mode_I2C; I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable; I2C_InitStructure.I2C_DigitalFilter = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; //I2C_InitStructure.I2C_Timing = 0x50330309; //0xB0420F13; ///0x00902025; // 0xc062121f I2C_InitStructure.I2C_Timing = 0x00310309; I2C_Init(I2C1,&I2C_InitStructure); I2C_Cmd(I2C1,ENABLE); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_4); // SCL GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_4); // SDA GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_6); GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_7); GPIO_Init(GPIOB, &GPIO_InitStructure); delay(500); //first thing to do would be to make sure that we are on first page while (TW88Write(0xff,0x00)==0) { //now we detected an error ... we shall resend ? I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); delay(50); } while (TW88Write(0x06,0x80)==0) { // force reset I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1C, 0x0F)==0) { // 0F I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x02,0x40)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x04,0x00)==0) { //00 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x06,0x03)==0) { // 03 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x07,0x02)==0) { // 02 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x08,0x00)==0) { // 00 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x09,0xF0)==0) { // F0 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x0A,0x19)==0) { // 19 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x0B,0xD0)==0) { // D0 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x0C,0xDC)==0) { // DC I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x0D,0x15)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x10,0x40)==0) { // brightness 00 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x11,0x80)==0) { // contrast 50 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x12,0x71)==0) { //sharpness 71 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x13,0x9E)==0) { //chroma U 9E I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x14,0x9E)==0) { //chroma V 9E I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x15,0x00)==0) { //hue I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x17,0x33)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x18,0x44)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1C,0x0F)==0) { // Standard Selection 0x08=NTSC 0x0F=all I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1D,0x7F)==0) { // 7F I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1E,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x1F,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x20,0x50)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x21,0x42)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x22,0xF0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x23,0xD8)==0) { // D8 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x24,0xBC)==0) { // BC I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x25,0xB8)==0) { // B8 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x26,0x44)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x27,0x2a)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x28,0x00)==0) { // 00 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x29,0x15)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2A,0x78)==0) { // 78 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2B,0x44)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2C,0x30)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2D,0x14)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2E,0xA5)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x2F,0x00)==0) { // E0 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x33,0x85)==0) { // 85 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x34,0x1A)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x35,0x40)==0) { // 00 CLAMPING CONTROL ENABLE I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x38,0x80)==0) { // 8E I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x40,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x41,0x20)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x42,0x04)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x43,0x22)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x44,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x45,0x54)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x46,0x20)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x47,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x48,0xCF)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x49,0x20)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4A,0x13)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4B,0x13)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4C,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4D,0x30)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4E,0x64)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x4F,0x1E)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x50,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x60,0xE0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x61,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x62,0x7C)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x63,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x64,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x65,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x66,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x67,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x68,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x69,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6A,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6B,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6C,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6D,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x6E,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x70,0x60)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x71,0x60)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x72,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x73,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x74,0x60)==0) { ///brightness I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x75,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x76,0x80)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x77,0x03)==0) { // 03 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x78,0x3B)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x7C,0x1C)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x7D,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x7E,0xF6)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x7F,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x80,0x10)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x81,0x1D)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x82,0x03)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x83,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x84,0x67)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x85,0x94)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x86,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x87,0xFF)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x88,0xCA)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x89,0x02)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB0,0x40)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB1,0x02)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB2,0xDB)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB3,0x14)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB4,0x10)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB5,0x20)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB6,0x33)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBB,0x12)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB7,0x0D)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB8,0x04)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xB9,0x08)==0) {//back porch value I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBA,0xE0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBC,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBD,0x08)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBE,0xC2)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xBF,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC0,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC1,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC2,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC3,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC4,0x99)==0) { // PWM setup and duty cycle default 0x40 // 0xBF - 50% duty cycle - 0x99 - 20% duty cycle I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC6,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC7,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC8,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC9,0xED)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xCA,0xE7)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD2,0xFF)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD3,0x07)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD4,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD5,0x3F)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD6,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD7,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xD8,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDA,0x3D)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDB,0xC3)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDC,0xFC)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDD,0x70)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDE,0x6F)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xDF,0x6F)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xE0,0x10)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF0,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF4,0x16)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF6,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF7,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF8,0xA0)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xF9,0x01)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFA,0x30)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFB,0x00)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFC,0x48)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFD,0x30)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFE,0x51)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFF,0x01)==0) { // 2nd page I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xC0,0x01)==0) { I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xCC,0x00)==0) { // 00 I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0xFF,0x00)==0) { // go back to 1st page I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } while (TW88Write(0x06,0x80)==0) { // force reset I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } delay(10); while (TW88Write(0x06,0x01)==0) { // rewrite this reg I2CReset(I2C1,GPIOB,GPIO_Pin_6,GPIO_Pin_7); } return 1; }