21 return ((uint32_t)(msb_reg & 0x0FFF) << 16) | lsb_reg;
26 return (uint8_t)((msb_reg >> 12) & 0x0F);
31 return ((uint64_t)data28 * fref_hz) >> 28;
41 const uint16_t seq[][2] = {
51 for (
size_t i = 0; i <
sizeof(seq) /
sizeof(seq[0]); i++)
53 buf[o++] = (uint8_t)seq[i][0];
54 buf[o++] = (uint8_t)(seq[i][1] >> 8);
55 buf[o++] = (uint8_t)seq[i][1];
72bool read16(uint8_t reg, uint16_t *out)
74 Wire.beginTransmission(s_fdc.addr);
76 if (Wire.endTransmission(
false) != 0)
80 if (Wire.requestFrom((
int)s_fdc.addr, 2) != 2)
84 uint16_t hi = Wire.read();
85 uint16_t lo = Wire.read();
86 *out = (uint16_t)((hi << 8) | lo);
90bool write16(uint8_t reg, uint16_t val)
92 Wire.beginTransmission(s_fdc.addr);
94 Wire.write((uint8_t)(val >> 8));
95 Wire.write((uint8_t)val);
96 return Wire.endTransmission() == 0;
115 for (
size_t i = 0; i + 3 <= n; i += 3)
117 if (!write16(seq[i], (uint16_t)((seq[i + 1] << 8) | seq[i + 2])))
TI FDC2114/2214 capacitance-to-digital field-sensing codec (PC_ENABLE_FDC2214).
#define FDC2214_DEVICE_ID
FDC2214 (the 12-bit FDC2114 reads 0x3054).
bool pc_fdc2214_begin(uint8_t addr, uint16_t rcount, uint16_t settlecount)
Verify the device id and apply the CH0 config at addr.
#define FDC2214_REG_MUX_CONFIG
#define FDC2214_REG_DEVICE_ID
uint64_t pc_fdc2214_sensor_freq_hz(uint32_t data28, uint32_t fref_hz)
Sensor frequency in Hz for a 28-bit result against a reference clock: data / 2^28 * fref.
#define FDC2214_REG_DATA_CH0_LSB
uint8_t pc_fdc2214_error(uint16_t msb_reg)
The 4 error flags from the top of a DATA MSB register (bits 15:12).
#define FDC2214_REG_RCOUNT_CH0
#define FDC2214_REG_DATA_CH0_MSB
#define FDC2214_REG_CLOCK_DIVIDERS_CH0
#define FDC2214_CONFIG_MAX
Largest config sequence in bytes: 7 register writes * 3 bytes (reg, msb, lsb).
size_t pc_fdc2214_build_config(uint8_t *buf, size_t cap, uint16_t rcount, uint16_t settlecount)
Emit a single-channel (CH0) continuous-conversion bring-up as (reg, val_msb, val_lsb) triples.
#define FDC2214_REG_DRIVE_CURRENT_CH0
#define FDC2214_REG_SETTLECOUNT_CH0
bool pc_fdc2214_read_ch0(uint32_t *out)
Read channel 0's 28-bit conversion result into out.
uint32_t pc_fdc2214_data(uint16_t msb_reg, uint16_t lsb_reg)
Combine a DATA MSB register (low 12 bits) and DATA LSB register into the 28-bit result.
#define FDC2214_REG_CONFIG
#define FDC2214_REG_ERROR_CONFIG
The one owner of the shared I2C bus bring-up for the peripheral drivers.
void pc_i2c_begin()
Bring up the shared I2C bus on PC_I2C_SDA_PIN / PC_I2C_SCL_PIN (-1 = default).
User-facing configuration for ProtoCore.