#include "DSP28x_Project.h" // Device Headerfile and Examples Include File #define I2C_SLAVE_ADDR 0xC0 #define I2C_NUMBYTES 1 #define I2C_SUBADDR1 0x02 #define I2C_SUBADDR2 0x08 #define I2C_SUBADDR3 0x04 #define I2C_SUBADDR4 0x10 char data[1]; char rxData[2]; int i; void I2CA_Init(void); void main(void){ data[0] = 0x80; rxData[0] = 0x00; rxData[1] = 0x00; InitSysCtrl(); InitI2CGpio(); //Initiazlze I2C pins. I2CA_Init(); //Initialize I2C control registers DINT; EALLOW; GpioCtrlRegs.GPBDIR.bit.GPIO48 = 1; GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; //Power on Camera GpioDataRegs.GPBDAT.bit.GPIO48 = 0; GpioDataRegs.GPBDAT.bit.GPIO49 = 0; EDIS; ////////////////////////// // Write data to camera // ////////////////////////// I2caRegs.I2CCNT = 2; I2caRegs.I2CMDR.bit.TRX = 1; I2caRegs.I2CMDR.bit.MST = 1; I2caRegs.I2CMDR.bit.FREE = 1; I2caRegs.I2CMDR.bit.STP = 1; I2caRegs.I2CMDR.bit.STT = 1; while(I2caRegs.I2CSTR.bit.XRDY == 0){}; I2caRegs.I2CDXR = I2C_SUBADDR1; while(I2caRegs.I2CSTR.bit.NACK == 1){}; while(I2caRegs.I2CSTR.bit.XRDY == 0){}; I2caRegs.I2CDXR = data[0]; DELAY_US(10); ////////////////////////// // Read data from camera// ////////////////////////// I2caRegs.I2CCNT = 1; I2caRegs.I2CMDR.bit.TRX = 1; I2caRegs.I2CMDR.bit.MST = 1; I2caRegs.I2CMDR.bit.FREE = 1; I2caRegs.I2CMDR.bit.STP = 1; I2caRegs.I2CMDR.bit.STT = 1; while(I2caRegs.I2CSTR.bit.XRDY == 0){}; I2caRegs.I2CDXR = I2C_SUBADDR1; DELAY_US(10); I2caRegs.I2CCNT = I2C_NUMBYTES+1; //read byte from camera I2caRegs.I2CMDR.bit.TRX = 0; //Set to Recieve mode I2caRegs.I2CMDR.bit.MST = 1; //Set to Master mode I2caRegs.I2CMDR.bit.FREE = 1; //Run in FREE mode I2caRegs.I2CMDR.bit.STP = 1; //Stop when internal counter becomes 0 I2caRegs.I2CMDR.bit.STT = 1; //Repeated start, Reception will follow for(i = 0; i < I2C_NUMBYTES+1; i++){ while(I2caRegs.I2CSTR.bit.RRDY == 0){}; //I2CDRR not ready to read? rxData[i] = I2caRegs.I2CDRR; } } void I2CA_Init(void){ // Initialize I2C I2caRegs.I2CMDR.bit.IRS = 0; I2caRegs.I2CPSC.all = 14; I2caRegs.I2CCLKL = 10; I2caRegs.I2CCLKH = 5; I2caRegs.I2CIER.all = 0; I2caRegs.I2CMDR.bit.IRS = 1; I2caRegs.I2CSAR = 0x00C0; }