Beispiel #1
0
// 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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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);
}