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);
}
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();
}
Exemple #4
0
/*!
    \brief      handle I2C1 event interrupt request
    \param[in]  none
    \param[out] none
    \retval     none
*/
void I2C1_EventIRQ_Handler(void)
{
    if(i2c_flag_get(I2C1, I2C_ADDSEND)){
        /* clear the ADDSEND bit */
        event2 =i2c_flag_get(I2C1,I2C_ADDSEND );
    }else if(i2c_flag_get(I2C1, I2C_RBNE)){
        /* if reception data register is not empty ,I2C1 will read a data from I2C_DATA */
        *i2c_rxbuffer++ = i2c_receive_data(I2C1);
    }else if(i2c_flag_get(I2C1, I2C_STPDET)){
        Status=SUCCESS;
        /* clear the STPDET bit */
        i2c_enable(I2C1);
        /* disable I2C1 interrupt */
        i2c_interrupt_disable(I2C1, I2C_CTL1_ERRIE | I2C_CTL1_BUFIE | I2C_CTL1_EVIE);
    }
}