// Read data from eeprom. BOOL I2C_ReadNByte(BYTE DevAddr, WORD Addr, BYTE* Buf, BYTE Len, BYTE I2cDevice) { BOOL Ack = FALSE; #if (defined(FUNC_BREAK_POINT_EN) && (FUNC_RESTORE_DEVICE_SELECE == FUNC_RESTORE_DEVICE_EEPROM)) if(((gSys.SystemMode == SYS_MODE_USB) || (gSys.SystemMode == SYS_MODE_SD)) && (I2cDevice == EEPROM_IIC)) { #if (I2C_PIN_CONFIGURE == SDIO_TO_A3A4A5) SET_CARD_TO_A3A4A5(); #if defined(SD_DETECT_PIN_USE_A4) ClrGpioRegBit(CARD_DETECT_PORT_PD, CARD_DETECT_BIT); #endif #endif //写E2PROM时快速响应需要读卡时需要重新将复用IO设置回总线模式 SongPlayDo(); #if (I2C_PIN_CONFIGURE == SDIO_TO_A3A4A5) #if defined(SD_DETECT_PIN_USE_A4) SetGpioRegBit(CARD_DETECT_PORT_PD, CARD_DETECT_BIT); #endif SET_CARD_NOT_TO_GPIO(); #endif } #endif Ack = I2C_SendAddr(DevAddr, Addr, IIC_READ, I2cDevice); if(Ack == TRUE) { Ack = I2C_ReadBytes(Buf, Len, I2cDevice); } I2C_Stop(I2cDevice); return Ack; }
byte I2C_ReadRegister1(uint16_t deviceRegister) { byte data = 0; byte status; status=I2C_Start(); status=I2C_SendAddr(AT256); // send device bus address status=I2C_Write(deviceRegister>>8); //parte alta status=I2C_Write(deviceRegister); // parte baja status=I2C_Start(); status=I2C_SendAddr(AT256+READ); // restart as a read operation data = I2C_ReadNACK(); // read the register data I2C_Stop(); // stop while(TWCR & (1<<TWSTO)); return data; }
void I2C_WriteRegister1(uint16_t deviceRegister, byte data) { byte status; status=I2C_Start(); status=I2C_SendAddr(AT256); // send bus address status=I2C_Write(deviceRegister>>8); // set register pointer status=I2C_Write(deviceRegister); // set register pointer status=I2C_Write(data); // second byte = data for device register I2C_Stop(); _delay_ms(10); }