uint8_t i2c_writeByte( uint8_t dev_addr, uint8_t data_addr, uint8_t data ){ twi_start( ); twi_send( I2C_ADDR_WRITE(dev_addr) ); twi_send( data_addr ); twi_send( data ); twi_stop( ); return 0; }
uint8_t i2c_writeBytes( uint8_t dev_addr, uint8_t data_addr, uint8_t *data, uint8_t data_len ){ uint8_t i; twi_start( ); twi_send( I2C_ADDR_WRITE(dev_addr) ); twi_send( data_addr ); for( i=0; i<data_len; ++i ){ twi_send( data[i] ); } twi_stop(); return 0; }
uint8_t i2c_readByte( uint8_t dev_addr, uint8_t data_addr ){ uint8_t data; twi_start( ); twi_send( I2C_ADDR_WRITE(dev_addr) ); twi_send( data_addr ); twi_start( ); twi_send( I2C_ADDR_READ(dev_addr) ); data = twi_recv( 0 ); twi_stop(); return data; }
uint8_t SeeedOLED_sendCommand(unsigned char command) { uint8_t ret = 0; twi_start(); ret = twi_send((SeeedOLED_Address<<1)|0); // begin I2C communication & write if(ret) goto out; ret = twi_send(SeeedOLED_Command_Mode); // Set OLED Command mode if(ret) goto out; ret = twi_send(command); out: twi_stop(); // End I2C communication return ret; }
uint8_t SeeedOLED_sendData(unsigned char Data) { uint8_t ret = 0; twi_start(); ret = twi_send((SeeedOLED_Address<<1)|0); // begin I2C communication if(ret) goto out; ret = twi_send(SeeedOLED_Data_Mode); // data mode if(ret) goto out; ret = twi_send(Data); if(ret) goto out; out: twi_stop(); // stop I2C transmission return ret; }
uint8_t i2c_readBytes( uint8_t dev_addr, uint8_t data_addr, uint8_t *data, uint8_t data_len ){ uint8_t i; twi_start( ); twi_send( I2C_ADDR_WRITE(dev_addr) ); twi_send( data_addr ); twi_start( ); twi_send( I2C_ADDR_READ(dev_addr) ); for( i=0; i<data_len-1; ++i ){ data[i] = twi_recv( 1 ); } data[i] = twi_recv( 0 ); twi_stop(); return data_len; }
void service_twi(void) { if(!(TWI0->TWI_SR & TWI_SR_TXCOMP)){ return; } wbuff *tx_wr = 0; int i = 0; //attempt dequeuing peripheral tx buffers in priority order tx_wr = dequeue(&fan_ctrltx_mqueue); if(tx_wr){ twi_send(TWI0,tx_wr,FC_HARDWARE_ADDR); //Since the txbuff is only used by value, //It may be freed after the transfer is started free_wbuff(tx_wr); } /////For debug only//////////////////////////// //currently nothing here... /////////////////////////////////////////////// }
// must be called in: // slave tx event callback // or after beginTransmission(address) void twi_send_char(char* data) { twi_send((uint8_t*)data, strlen(data)); }
void relay_begin(void) { twi_send(0x20, relays); }