Dear Sir,
The DC offset is configured through the LTC2657 chip directly by i2c. The FMC151 user manual has some extra details on paragraph 5.6.
There are no guidelines on how to control the chip so please download and check the LTC2657 datasheet and you can look at fmc151_configure_dc_offset() in fmc15x.cpp. There are hardware writes to first the i2c master to define the number of bytes per cycles and then the LTC2657 is configured.
I expect that you should see definitions for registers 0x30, 0x31, 0x32 and 0x33.
Here is the function:
int32_t fmc151_configure_dc_offset(uint32_t AddrSipI2cMaster, uint32_t OffsetAdcA, uint32_t OffsetAdcB, uint32_t OffsetDacA, uint32_t OffsetDacB, uint32_t slaveaddress)
{
uint32_t rc;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Configure DC offset of channels
uint32_t AddrSipFMC150Offset = AddrSipI2cMaster + slaveaddress;
// Transform it
OffsetAdcA = ((OffsetAdcA & 0xFF00) >> 8) + ((OffsetAdcA & 0x00FF) << 8);
OffsetAdcB = ((OffsetAdcB & 0xFF00) >> 8) + ((OffsetAdcB & 0x00FF) << 8);
OffsetDacA = ((OffsetDacA & 0xFF00) >> 8) + ((OffsetDacA & 0x00FF) << 8);
OffsetDacB = ((OffsetDacB & 0xFF00) >> 8) + ((OffsetDacB & 0x00FF) << 8);
rc = sipif_writesipreg(AddrSipI2cMaster+0x01, 0x01); Sleep(10); //Number of data bytes in I2C cycle is two
if (rc)
return rc;
rc = sipif_writesipreg(AddrSipFMC150Offset+0x30, OffsetAdcA); Sleep(10); //Write to and update offset ADC A
if (rc)
return rc;
rc = sipif_writesipreg(AddrSipFMC150Offset+0x31, OffsetAdcB); Sleep(10); //Write to and update offset ADC B
if (rc)
return rc;
rc = sipif_writesipreg(AddrSipFMC150Offset+0x32, OffsetDacA); Sleep(10); //Write to and update offset DAC A
if (rc)
return rc;
rc = sipif_writesipreg(AddrSipFMC150Offset+0x33, OffsetDacB); Sleep(10); //Write to and update offset DAC B
if (rc)
return rc;
rc = sipif_writesipreg(AddrSipI2cMaster+0x01, 0x00); //Number of data bytes in I2C cycle is one (default)
if (rc)
return rc;
Sleep(10);
return FMC15x_ERR_OK;
}
I hope that helps,
Arnaud