/*iic recv data*/ uint8_t iic_master_recv_one_char(uint8_t addr) { uint8_t data; int i; S3C24X0_I2C * const i2c = S3C24X0_GetBase_I2C(); /*dummy write*/ //send iic slave addr iic_xfer_byte(0xa0); i2c->IICSTAT=0xF0; iic_check_sts(); //i2c->IICCON &= ~(1<<4); iic_xfer_byte(addr); //i2c->IICCON &= ~(1<<4); for(i=0;i<10;i++) ; //i2c->IICCON = 0xaf; i2c->IICCON &= ~(1<<4); //iic_check_ack(); iic_check_sts(); /*clear intr flag,write 1 to clear*/ /*begin read eepom data*/ iic_xfer_byte(0xa0); i2c->IICSTAT=0xB0; //i2c->IICCON = 0xaf; i2c->IICCON &= ~(1<<4); iic_check_sts(); //fist addr is output data = iic_recv_byte(); /*clear intr flag,write 1 to clear*/ i2c->IICCON = 0x2f; iic_check_sts(); /*clear intr flag,write 1 to clear*/ //data is output data = iic_recv_byte(); /*stop*/ iic_master_recv_stop(); return data; }
static u8_t iic_read_byte(u8_t slave, u8_t reg, u8_t * val) { iic_start(); if (!iic_send_byte(slave << 0x1)) return 0; if (!iic_send_byte(reg)) return 0; iic_stop(); iic_start(); if (!iic_send_byte((slave << 0x1) | 0x1)) return 0; *val = iic_recv_byte(); iic_send_ack(); iic_stop(); return 1; }