void DisplayPrint(const char* str) { static const uint8_t SPACE[16] = {0x0}; char c; uint16_t rowEndDistance = 0; I2C_SetSlaveAddr(DISPLAY_ADDRESS); if( I2C_Write(&CTRL_BYTE_DATA, 1) != I2C_OK ) { Abort(ERR_DISPLAY); } while(c=*str++) { rowEndDistance = DISPLAY_W_DOTS - currentColumn_ - 1; if(c!='\n') { const tImage* img = Font.chars[c-0x20].image; if(rowEndDistance<img->width) { if( I2C_ContinueWrite(SPACE, rowEndDistance+1) != I2C_OK) { Abort(ERR_DISPLAY); } IncrementCurrentPos(rowEndDistance+1); } if( I2C_ContinueWrite(img->data, img->width) != I2C_OK) { Abort(ERR_DISPLAY); } IncrementCurrentPos(img->width); } else { IncrementCurrentPos(rowEndDistance+1); DisplaySetPos_(currentColumn_, currentRow_); } } I2C_Stop(); }
void I2C0_Init(void) { /* Open I2C0 and set clock to 100k */ I2C_Open(I2C0, 100000); /* Get I2C0 Bus Clock */ printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C0)); /* Set I2C0 2 Slave Addresses */ I2C_SetSlaveAddr(I2C0, 0, 0x15, I2C_GCMODE_DISABLE); /* Slave Address : 0x15 */ I2C_SetSlaveAddr(I2C0, 1, 0x35, I2C_GCMODE_DISABLE); /* Slave Address : 0x35 */ /* Enable I2C0 interrupt */ I2C_EnableInt(I2C0); NVIC_EnableIRQ(I2C0_IRQn); }
void DisplayInit(void) { BoardDisplayReset(); I2C_SetSlaveAddr(DISPLAY_ADDRESS); static const uint8_t INIT[] = { 0x80, 0x1, // jump to page 111 0x80, 0x10, // addressing mode (is vertical) 0x80, 0x0E, // jump to page 110 0x80, 0x06, // set D,E 0x4,D,E 0x80, 0x08, // mirror X, Y 0x80, 0x12, // bias 0x80, 0x84, // mux rate 0x80, 0x01, // jump to page 101 0x80, 0x0D, 0x80, 0x05, // Vlcd ctrl 0x80, 0x08, // Vlcd x 2 0x80, 0x10, // Temp coef 0x80, 0x80+50, // V op 0x80, 0x01, // jump to page 011 0x80, 0x0B, 0x80, 0x04, // power mode 0x80, 0x58 // top row swap / bottom row swap }; I2C_Write(INIT, sizeof INIT); I2C_Stop(); DisplaySetPos(0,0); }
void I2C3_Init(void) { /* Open I2C3 and set clock to 100k */ I2C_Open(I2C3, 100000); /* Get I2C3 Bus Clock */ printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C3)); /* Set I2C3 4 Slave Addresses */ I2C_SetSlaveAddr(I2C3, 0, 0x15, I2C_GCMODE_DISABLE); /* Slave Address : 0x15 */ I2C_SetSlaveAddr(I2C3, 1, 0x35, I2C_GCMODE_DISABLE); /* Slave Address : 0x35 */ I2C_SetSlaveAddr(I2C3, 2, 0x55, I2C_GCMODE_DISABLE); /* Slave Address : 0x55 */ I2C_SetSlaveAddr(I2C3, 3, 0x75, I2C_GCMODE_DISABLE); /* Slave Address : 0x75 */ I2C_EnableInt(I2C3); NVIC_EnableIRQ(I2C3_IRQn); }
void Init_MPU6050(void) { I2C_SetSlaveAddr(MPU6050_I2C_PORT, 0, MPU6050_I2C_SLA, I2C_GCMODE_DISABLE); MPU6050_I2C_SingleWrite(MPU6050_PWR_MGMT_1, 0x01); // CLL_SEL=0: internal 8MHz, TEMP_DIS=0, SLEEP=0 MPU6050_I2C_SingleWrite(MPU6050_SMPLRT_DIV, 0x01); // Gyro output sample rate = Gyro Output Rate/(1+SMPLRT_DIV) MPU6050_I2C_SingleWrite(MPU6050_CONFIG, 0x01); // set TEMP_OUT_L, DLPF=2 (Fs=1KHz) MPU6050_I2C_SingleWrite(MPU6050_GYRO_CONFIG, 0x18); // bit[4:3] 0=+-250d/s,1=+-500d/s,2=+-1000d/s,3=+-2000d/s MPU6050_I2C_SingleWrite(MPU6050_ACCEL_CONFIG, 0x00);// bit[4:3] 0=+-2g,1=+-4g,2=+-8g,3=+-16g, ACC_HPF=On (5Hz) }
void I2C0_Init(void) { /* Open I2C module and set bus clock */ I2C_Open(I2C0, 100000); /* Get I2C0 Bus Clock */ printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C0)); /* Set I2C 4 Slave Addresses */ I2C_SetSlaveAddr(I2C0, 0, 0x15, 0); /* Slave Address : 0x15 */ I2C_SetSlaveAddr(I2C0, 1, 0x35, 0); /* Slave Address : 0x35 */ I2C_SetSlaveAddr(I2C0, 2, 0x55, 0); /* Slave Address : 0x55 */ I2C_SetSlaveAddr(I2C0, 3, 0x75, 0); /* Slave Address : 0x75 */ /* Enable I2C interrupt */ I2C_EnableInt(I2C0); NVIC_EnableIRQ(I2C0_IRQn); }
void DisplaySetVop(uint8_t v) { I2C_SetSlaveAddr(DISPLAY_ADDRESS); WriteCmd(0x01);// jump to page 101 WriteCmd(0x0D); v|=0x80; WriteCmd(v);// V op I2C_Stop(); }
void DisplaySetMirror(int mirrorX, int mirrorY) { I2C_SetSlaveAddr(DISPLAY_ADDRESS); WriteCmd(0x1);// jump to page 111 WriteCmd(0x0E);// jump to page 110 mirrorX &= 1; mirrorY &= 1; WriteCmd(0x08 + (mirrorX << 2) + (mirrorY << 1));// mirror X, Y I2C_Stop(); }
void DisplaySetInversion(int v) { I2C_SetSlaveAddr(DISPLAY_ADDRESS); WriteCmd(0x1);// jump to page 111 WriteCmd(0x0E);// jump to page 110 if(v!=0) WriteCmd(0x07); else WriteCmd(0x06); I2C_Stop(); }
void DisplayPut(const void* data, uint16_t size) { I2C_SetSlaveAddr(DISPLAY_ADDRESS); if( I2C_Write(&CTRL_BYTE_DATA, 1) != I2C_OK ) { Abort(ERR_DISPLAY); } if( I2C_ContinueWrite(data, size) != I2C_OK ) { Abort(ERR_DISPLAY); } I2C_Stop(); IncrementCurrentPos(size); }
void TwoWire::begin(uint8_t address) { IRQn_Type irq=I2C0_IRQn; NVIC_DisableIRQ(irq); NVIC_ClearPendingIRQ(irq); NVIC_SetPriority(irq, 3); NVIC_EnableIRQ(irq); I2C_Open(i2c,I2C_CLOCK); status = SLAVE_IDLE; I2C_SetSlaveAddr(i2c, 0, address, 0); /* Slave Address */ I2C_EnableInt(i2c); I2C_SET_CONTROL_REG(i2c, I2C_SI_AA); /* I2C enter no address SLV mode */ }
// internal func without stopping i2c static void DisplaySetPos_(uint8_t X, uint8_t Y) { if( X>=DISPLAY_W_DOTS || Y>=DISPLAY_ROWS ) return; I2C_SetSlaveAddr(DISPLAY_ADDRESS); WriteCmd(1); WriteCmd(0x40|Y); if( X > 127 ) { WriteCmd(0x24); //XM0=1 WriteCmd(0x80 | (X-127)); } else { WriteCmd(0x20); //XM0=0 WriteCmd(0x80|X); } }
void I2C1_Init(void) { /* Open I2C1 and set clock to 100k */ I2C_Open(I2C1, 400000); /* Get I2C1 Bus Clock */ printf("I2C1 clock %d Hz\n", I2C_GetBusClockFreq(I2C1)); /* Set I2C1 2 Slave Addresses */ I2C_SetSlaveAddr(I2C1, 0, SLAVE_ADDRESS, I2C_GCMODE_DISABLE); /* Set Slave Address */ I2C_EnableInt(I2C1); NVIC_EnableIRQ(I2C1_IRQn); /* I2C enter no address SLV mode */ I2C_SET_CONTROL_REG(I2C1, I2C_SI | I2C_AA); }
void DisplayClear(void) { uint16_t i = 0; static const uint16_t CLR[64] = {0x0}; I2C_SetSlaveAddr(DISPLAY_ADDRESS); if( I2C_Write(&CTRL_BYTE_DATA, 1) != I2C_OK ) { Abort(ERR_DISPLAY); } while(i<DISPLAY_W_DOTS*DISPLAY_H_DOTS/8) { if( I2C_ContinueWrite(CLR, sizeof CLR) != I2C_OK ) { Abort(ERR_DISPLAY); } i+=sizeof(CLR); } I2C_Stop(); DisplaySetPos(0,0); }
// ********************************************************************** // I2C Slave Initialize called by I2CWakeUpInit // ********************************************************************** void I2C_MS_Slave_Init() { // =============PIN SETTNG================== #ifdef I2C_MS_PORT0 CLK_EnableModuleClock(I2C0_MODULE); /* Set I2C PA multi-function pins */ SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE12MFP_Msk | SYS_GPE_MFPH_PE13MFP_Msk); SYS->GPE_MFPH |= ( SYS_GPE_MFPH_PE12MFP_I2C0_SCL | SYS_GPE_MFPH_PE13MFP_I2C0_SDA); #else CLK_EnableModuleClock(I2C1_MODULE); /* Set I2C PA multi-function pins */ SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC4MFP_Msk; SYS->GPC_MFPL |= SYS_GPC_MFPL_PC4MFP_I2C1_SCL; SYS->GPE_MFPL &= ~SYS_GPE_MFPL_PE0MFP_Msk; SYS->GPE_MFPL |= SYS_GPE_MFPL_PE0MFP_I2C1_SDA; #endif /* Open I2C module and set bus clock */ I2C_Open(I2C_MS_PORT, 100000); /* Get I2C0 Bus Clock */ printf("I2C MS Slave clock %d Hz\n", I2C_GetBusClockFreq(I2C_MS_PORT)); /* Set I2C 4 Slave Addresses */ #if 1 I2C_SetSlaveAddr(I2C_MS_PORT, 0, devNum+0x14, 0); #else if(devNum == 1) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x15, 0); /* Slave Address : 21,Buzzer */ else if(devNum == 2) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x16, 0); /* Slave Address : 22,Led */ else if(devNum == 3) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x17, 0); /* Slave Address : 23,AHRS */ else if(devNum == 4) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x18, 0); /* Slave Address : 24,SONAR */ else if(devNum == 5) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x19, 0); /* Slave Address : 25,TEMPERATURE */ else if(devNum == 6) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1a, 0); /* Slave Address : 26,Gas */ else if(devNum == 7) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1b, 0); /* Slave Address : 27,IR */ else if(devNum == 8) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1c, 0); /* Slave Address : 28,KEY */ else if(devNum == 9) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1d, 0); /* Slave Address : 29, Reserved device 9 */ else if(devNum == 10) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1e, 0); /* Slave Address : 30, Reserved device 10 */ else if(devNum == 11) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1f, 0); /* Slave Address : 31, Reserved device 11 */ else if(devNum == 12) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x20, 0); /* Slave Address : 32, Reserved device 12 */ else if(devNum == 13) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x21, 0); /* Slave Address : 33, Reserved device 13 */ else if(devNum == 14) I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x22, 0); /* Slave Address : 34, Reserved device 14 */ #endif I2C_SetSlaveAddr(I2C_MS_PORT, 1, 0x35, 0); /* Slave Address : 0x35 */ I2C_SetSlaveAddr(I2C_MS_PORT, 2, 0x55, 0); /* Slave Address : 0x55 */ I2C_SetSlaveAddr(I2C_MS_PORT, 3, 0x75, 0); /* Slave Address : 0x75 */ /* Enable I2C interrupt */ I2C_EnableInt(I2C_MS_PORT); #ifdef I2C_MS_PORT0 NVIC_EnableIRQ(I2C0_IRQn); #else NVIC_EnableIRQ(I2C1_IRQn); #endif #ifdef I2C_MS_PORT0 s_I2C0HandlerFn = (I2C_FUNC)I2C_MS_Slave; #else s_I2C1HandlerFn = (I2C_FUNC)I2C_MS_Slave; #endif /* Enable I2C wake-up */ I2C_EnableWakeup(I2C_MS_PORT); /* Set I2C0 enter Not Address SLAVE mode */ I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_SI_AA); }