uint8_t i2c_read_byte(uint8_t dev, uint8_t addr){ if(i2c_send_start()!=0) return 0; if(i2c_send_addr(dev,TW_WRITE)!=0) return 0; if(i2c_send_data(addr)!=0) return 0; if(i2c_send_start()!=0) return 0; if(i2c_send_addr(dev,TW_READ)!=0) return 0; uint8_t data= i2c_receive_data(0); i2c_send_stop(); return data; }
void i2c_seq_read(uint8_t dev, uint8_t start_addr, uint8_t*buff, uint8_t len){ int i=0; if(i2c_send_start()!=0) return; if(i2c_send_addr(dev,TW_WRITE)!=0) return; if(i2c_send_data(start_addr)!=0) return; if(i2c_send_start()!=0) return; if(i2c_send_addr(dev,TW_READ)!=0) return; for(i=0;i<len;i++) *buff++=i2c_receive_data((i<(len-1))?1:0); //send ack until last byte to read i2c_send_stop(); }
int16_t i2c_read_word(uint8_t dev, uint8_t addr){ if(i2c_send_start()!=0) return 0; if(i2c_send_addr(dev,TW_WRITE)!=0) return 0; if(i2c_send_data(addr)!=0) return 0; if(i2c_send_start()!=0) return 0; if(i2c_send_addr(dev,TW_READ)!=0) return 0; uint8_t datal= i2c_receive_data(1); uint8_t datah= i2c_receive_data(0); i2c_send_stop(); return ((datah<<8) | datal); }
void i2c_write_byte(uint8_t dev, uint8_t addr, uint8_t data){ if(i2c_send_start()!=0) return; if(i2c_send_addr(dev,TW_WRITE)!=0) return; if(i2c_send_data(addr)!=0) return ; if(i2c_send_data(data)!=0) return; i2c_send_stop(); }
void i2c_write_word(uint8_t dev, uint8_t addr,uint16_t data){ if(i2c_send_start()!=0) return; if(i2c_send_addr(dev,TW_WRITE)!=0) return; if(i2c_send_data(addr)!=0) return; if(i2c_send_data(data & 0xff)!=0) return; if(i2c_send_data(((data & 0xff00)>>8))!=0) return; i2c_send_stop(); }
void eep_set_addr(unsigned char slave,unsigned int addr) { start(); i2c_send_addr(slave,0);//д i2c_send_data(addr>>8); i2c_send_data((unsigned char)addr); // stop(); }