int gpio_i2c_readX_KeyPad_Fix( int Grp, unsigned char Dev, void (*Func[2])(void)) { int rxdata; I2C_LOCK(Grp); if(Func[0]) { (*Func[0])(); } i2c_start_bit(Grp); i2c_send_byte(Grp, (unsigned char)(Dev) | 1); i2c_receive_ack(Grp); rxdata = i2c_receive_byte(Grp); i2c_receive_ack(Grp); i2c_stop_bit(Grp); if(Func[1]) { (*Func[1])(); } I2C_UNLOCK(Grp); return (unsigned char)rxdata; }
int gpio_i2c_readX(int Grp, unsigned char devaddress, unsigned char address) { int rxdata; I2C_LOCK(Grp); i2c_start_bit(Grp); i2c_send_byte(Grp, (unsigned char)(devaddress)); i2c_receive_ack(Grp); i2c_send_byte(Grp, address); i2c_receive_ack(Grp); i2c_start_bit(Grp); i2c_send_byte(Grp, (unsigned char)(devaddress) | 1); i2c_receive_ack(Grp); rxdata = i2c_receive_byte(Grp); i2c_stop_bit(Grp); I2C_UNLOCK(Grp); return (unsigned char)rxdata; }
int gpio_i2c_wr_arr(int Grp, unsigned char dev, unsigned char rarr[], int rsize, unsigned char darr[], int dsize) { int i; I2C_LOCK(Grp); i2c_start_bit(Grp); i2c_send_byte(Grp, dev); i2c_receive_ack(Grp); for(i = 0; i < rsize; i ++) { i2c_send_byte(Grp, rarr[i]); i2c_receive_ack(Grp); } if(dsize > 0) { for(i = 0; i < dsize-1; i ++) { i2c_send_byte(Grp, darr[i]); i2c_receive_ack(Grp); } i2c_send_byte(Grp, darr[i]); } i2c_stop_bit(Grp); I2C_UNLOCK(Grp); return 0; }
void gpio_i2c_write(unsigned char devaddress, unsigned char address, unsigned char data) { i2c_start_bit(); i2c_send_byte((unsigned char)(devaddress)); i2c_receive_ack(); i2c_send_byte(address); i2c_receive_ack(); i2c_send_byte(data); // i2c_receive_ack();//add by hyping for tw2815 i2c_stop_bit(); }
int gpio_i2c_write(unsigned char devaddress, unsigned char address, unsigned char data) { int Grp = 0; I2C_LOCK(Grp); i2c_start_bit(Grp); i2c_send_byte(Grp, (unsigned char)(devaddress)); i2c_receive_ack(Grp); i2c_send_byte(Grp, address); i2c_receive_ack(Grp); i2c_send_byte(Grp, data); i2c_stop_bit(Grp); I2C_UNLOCK(Grp); return 0 ; }
int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) { int ack = 0; int sadr; char *ptr; char addr; ptr = (char *)data; switch ((int)obj->i2c) { case I2C_0: sadr = TSC_I2C_ADDR; addr = address; break; case I2C_1: sadr = AAIC_I2C_ADDR; addr = address; break; case I2C_2: case I2C_3: sadr = address; //LM75_I2C_ADDR or MMA7660_I2C_ADDR; addr = *ptr++; break; } // printf("adr = %x, reg = %x\n",sadr, address); i2c_start(obj); // Set serial and register address i2c_send_byte(obj, sadr); ack += i2c_receive_ack(obj); i2c_send_byte(obj, addr); ack += i2c_receive_ack(obj); for (int i = 1; i < length; i++) { i2c_send_byte(obj, *ptr++); ack += i2c_receive_ack(obj); } i2c_stop(obj); if (ack == 3) { return 1; } else { return 0; } }
unsigned char gpio_i2c_read(unsigned char devaddress, unsigned char address) { int rxdata; i2c_start_bit(); i2c_send_byte((unsigned char)(devaddress)); i2c_receive_ack(); i2c_send_byte(address); i2c_receive_ack(); i2c_start_bit(); i2c_send_byte((unsigned char)(devaddress) | 1); i2c_receive_ack(); rxdata = i2c_receive_byte(); //i2c_send_ack(); i2c_stop_bit(); return rxdata; }
/** ****************************************************************************** * @brief Read bytes from slave with specify register address * @param Slave device address (7-bit right aligned) * @param Register address * @param Number of data bytes to read from slave * @param Pointer to data array byte to store data from slave * @retval Result status (SUCCESS or ERROR) ****************************************************************************** */ uint8_t i2c_read_multi_with_reg(uint8_t address, uint8_t reg, uint8_t len, uint8_t* data) { i2c_start(); if (i2c_check_status(MT_START) == ERROR) return ERROR; i2c_transmit((address << 1) | I2C_WRITE); if (i2c_check_status(MT_SLA_WRITE_ACK) == ERROR) { i2c_stop(); return ERROR; } i2c_transmit(reg); if (i2c_check_status(MT_DATA_TRANSMITTED_ACK) == ERROR) { i2c_stop(); return ERROR; } i2c_start(); if (i2c_check_status(MT_REP_START) == ERROR) return ERROR; i2c_transmit((address << 1) | I2C_READ); if (i2c_check_status(MT_SLA_READ_ACK) == ERROR) { i2c_stop(); return ERROR; } for (int i = 0; i < len; i++) { if (i == (len - 1)) { data[i] = i2c_receive_nack(); if (i2c_check_status(MT_DATA_RECEIVED_NACK) == ERROR) { i2c_stop(); return ERROR; } } else { data[i] = i2c_receive_ack(); if (i2c_check_status(MT_DATA_RECEIVED_ACK) == ERROR) { i2c_stop(); return ERROR; } } } i2c_stop(); return SUCCESS; }
int gpio_i2c_writeX_KeyPad_Fix( int Grp, unsigned char Dev, unsigned char rarr[], int rsize, unsigned char darr[], int dsize, void (*Func[2])(void)) { int i; I2C_LOCK(Grp); if(Func[0]) { (*Func[0])(); } i2c_start_bit(Grp); i2c_send_byte(Grp, Dev); i2c_receive_ack(Grp); for(i = 0; i < rsize; i ++) { i2c_send_byte(Grp, rarr[i]); i2c_receive_ack(Grp); } for(i = 0; i < dsize; i ++) { i2c_send_byte(Grp, darr[i]); i2c_receive_ack(Grp); } i2c_stop_bit(Grp); if(Func[1]) { (*Func[1])(); } I2C_UNLOCK(Grp); return 0; }
int gpio_i2c_probeX(int Grp, unsigned char devaddress) { int ret; I2C_LOCK(Grp); i2c_start_bit(Grp); i2c_send_byte(Grp, (unsigned char)(devaddress)); ret = i2c_receive_ack(Grp); i2c_stop_bit(Grp); I2C_UNLOCK(Grp); return ret; }
int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) { unsigned int loop, rxdata; int sadr, ack, bytes_read; rxdata = 0; switch ((int)obj->i2c) { case I2C_0: sadr = TSC_I2C_ADDR; break; case I2C_1: sadr = AAIC_I2C_ADDR; break; case I2C_2: case I2C_3: sadr = address; //LM75_I2C_ADDR; or MMA7660_I2C_ADDR; break; } bytes_read = 0; // Start bit i2c_start(obj); switch ((int)obj->i2c) { case I2C_0: // Set serial and register address i2c_send_byte(obj, sadr); ack += i2c_receive_ack(obj); i2c_send_byte(obj, address); ack += i2c_receive_ack(obj); // Stop bit i2c_stop(obj); // Start bit i2c_start_tsc(obj); // Read from I2C address i2c_send_byte(obj, sadr | 1); ack += i2c_receive_ack(obj); rxdata = (i2c_receive_byte(obj) & 0xFF); data[((length - 1) - bytes_read)] = (char)rxdata; bytes_read++; // Read multiple bytes if ((length > 1) && (length < 5)) { for (loop = 1; loop <= (length - 1); loop++) { // Send ACK i2c_send_ack(obj); // Next byte //rxdata = ((rxdata << 8) & 0xFFFFFF00); //rxdata |= (i2c_receive_byte(obj) & 0xFF); rxdata = i2c_receive_byte(obj); data[(length - 1) - bytes_read] = (char)rxdata; bytes_read++; } } break; case I2C_1: // Set serial and register address i2c_send_byte(obj, sadr); ack += i2c_receive_ack(obj); i2c_send_byte(obj, address); ack += i2c_receive_ack(obj); // Stop bit i2c_stop(obj); // Start bit i2c_start_tsc(obj); // Fall through to read data case I2C_2: case I2C_3: // Read from preset register address pointer i2c_send_byte(obj, sadr | 1); ack += i2c_receive_ack(obj); rxdata = i2c_receive_byte(obj); data[bytes_read] = (char)rxdata; bytes_read++; // Read multiple bytes if ((length > 1) && (length < 5)) { for (loop = 1; loop <= (length - 1); loop++) { // Send ACK i2c_send_ack(obj); // Next byte rxdata = i2c_receive_byte(obj); data[loop] = (char)rxdata; bytes_read++; } } break; } i2c_send_nack(obj); i2c_stop(obj); // Actual stop bit return bytes_read; }