28I2C::I2C(I2C_TypeDef* i2c,
const miosix::GpioPin& scl,
29 const miosix::GpioPin& sda)
38 return i2c.
read(slaveConfig, buffer, nBytes);
42 const void* buffer,
const size_t nBytes)
45 return i2c.
write(slaveConfig, buffer, nBytes);
49 const uint8_t registerAddress, uint8_t& registerContent)
52 return i2c.
write(slaveConfig, ®isterAddress, 1,
false) &&
53 i2c.
read(slaveConfig, ®isterContent, 1);
57 const uint8_t registerAddress,
58 uint16_t& registerContent)
62 if (
i2c.
write(slaveConfig, ®isterAddress, 1,
false) &&
66 (slaveConfig.
MSBFirst ? ((uint16_t)buf[0]) << 8 | buf[1]
67 : ((uint16_t)buf[1]) << 8 | buf[0]);
74 const uint8_t registerAddress,
75 uint32_t& registerContent)
79 if (
i2c.
write(slaveConfig, ®isterAddress, 1,
false) &&
84 ? ((uint32_t)buf[0]) << 16 | ((uint32_t)buf[1] << 8) | buf[2]
85 : ((uint32_t)buf[2]) << 16 | ((uint32_t)buf[1] << 8) | buf[0]);
92 const uint8_t registerAddress,
93 uint32_t& registerContent)
97 if (
i2c.
write(slaveConfig, ®isterAddress, 1,
false) &&
102 ? ((uint32_t)buf[0]) << 24 | ((uint32_t)buf[1] << 16) |
103 ((uint32_t)buf[2] << 8) | buf[3]
104 : ((uint32_t)buf[3]) << 24 | ((uint32_t)buf[2] << 16) |
105 ((uint32_t)buf[1] << 8) | buf[0]);
112 const uint8_t registerAddress,
113 const uint8_t registerContent)
115 const uint8_t reg[2] = {registerAddress, registerContent};
117 return i2c.
write(slaveConfig, reg, 2);
121 const uint8_t registerAddress,
122 const uint16_t registerContent)
127 const uint8_t reg[3] = {registerAddress,
128 (uint8_t)(registerContent >> 8),
129 (uint8_t)(registerContent)};
130 return i2c.
write(slaveConfig, reg, 3);
134 const uint8_t reg[3] = {registerAddress,
135 (uint8_t)(registerContent),
136 (uint8_t)(registerContent >> 8)};
137 return i2c.
write(slaveConfig, reg, 3);
142 const uint8_t registerAddress,
143 const uint32_t registerContent)
148 const uint8_t reg[4] = {registerAddress,
149 (uint8_t)(registerContent >> 16),
150 (uint8_t)(registerContent >> 8),
151 (uint8_t)registerContent};
152 return i2c.
write(slaveConfig, reg, 4);
156 const uint8_t reg[4] = {registerAddress,
157 (uint8_t)(registerContent),
158 (uint8_t)(registerContent >> 8),
159 (uint8_t)(registerContent >> 16)};
160 return i2c.
write(slaveConfig, reg, 4);
165 const uint8_t registerAddress,
166 const uint32_t registerContent)
171 const uint8_t reg[5] = {registerAddress,
172 (uint8_t)(registerContent >> 24),
173 (uint8_t)(registerContent >> 16),
174 (uint8_t)(registerContent >> 8),
175 (uint8_t)registerContent};
176 return i2c.
write(slaveConfig, reg, 5);
180 const uint8_t reg[5] = {registerAddress,
181 (uint8_t)(registerContent),
182 (uint8_t)(registerContent >> 8),
183 (uint8_t)(registerContent >> 16),
184 (uint8_t)(registerContent >> 24)};
185 return i2c.
write(slaveConfig, reg, 5);
190 const uint8_t registerAddress,
void* buffer,
194 return i2c.
write(slaveConfig, ®isterAddress, 1,
false) &&
195 i2c.
read(slaveConfig, buffer, nBytes);
201 return i2c.
write(slaveConfig,
nullptr, 0);
207 const miosix::GpioPin& sda)
215 miosix::Lock<miosix::FastMutex> lock(mutex);
216 return I2C::read(slaveConfig, buffer, nBytes);
220 const void* buffer,
const size_t nBytes)
222 miosix::Lock<miosix::FastMutex> lock(mutex);
223 return I2C::write(slaveConfig, buffer, nBytes);
227 const uint8_t registerAddress,
228 uint8_t& registerContent)
230 miosix::Lock<miosix::FastMutex> lock(mutex);
235 const uint8_t registerAddress,
236 uint16_t& registerContent)
238 miosix::Lock<miosix::FastMutex> lock(mutex);
243 const uint8_t registerAddress,
244 uint32_t& registerContent)
246 miosix::Lock<miosix::FastMutex> lock(mutex);
251 const uint8_t registerAddress,
252 uint32_t& registerContent)
254 miosix::Lock<miosix::FastMutex> lock(mutex);
259 const uint8_t registerAddress,
260 const uint8_t registerContent)
262 miosix::Lock<miosix::FastMutex> lock(mutex);
267 const uint8_t registerAddress,
268 const uint16_t registerContent)
270 miosix::Lock<miosix::FastMutex> lock(mutex);
275 const uint8_t registerAddress,
276 const uint32_t registerContent)
278 miosix::Lock<miosix::FastMutex> lock(mutex);
283 const uint8_t registerAddress,
284 const uint32_t registerContent)
286 miosix::Lock<miosix::FastMutex> lock(mutex);
291 const uint8_t registerAddress,
void* buffer,
294 miosix::Lock<miosix::FastMutex> lock(mutex);
300 miosix::Lock<miosix::FastMutex> lock(mutex);
306 miosix::Lock<miosix::FastMutex> lock(mutex);
bool read(const I2CSlaveConfig &slaveConfig, void *buffer, const size_t &nBytes)
Read operation to read nBytes. In case of an error during the communication, this method returns fals...
void flushBus()
Performs the recovery from the locked state if necessary.
uint16_t getLastError()
Returns the last errors happened in the communication.
bool write(const I2CSlaveConfig &slaveConfig, const void *buffer, const size_t &nBytes, bool generateStop=true)
Write operation to write nBytes. In case of an error during the communication, this method returns fa...
High level driver for the I2C peripherals.
bool readFromRegister(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, void *buffer, const size_t nBytes)
Non blocking operation to read n-bytes from register from a slave.
bool writeRegister32(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, const uint32_t registerContent)
Non blocking operation to write a 32-bit register from a slave.
bool read(const I2CDriver::I2CSlaveConfig &slaveConfig, void *buffer, const size_t nBytes)
Non blocking read operation to read nBytes.
bool probe(const I2CDriver::I2CSlaveConfig &slaveConfig)
Non blocking operation to check if a slave is available.
bool writeRegister(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, const uint8_t registerContent)
Non blocking operation to write an 8-bit register from a slave.
bool readRegister32(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, uint32_t ®isterContent)
Non blocking operation to read a 32-bit register from a slave.
uint16_t getLastError()
Returns the last errors happened in the communication.
bool writeRegister24(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, const uint32_t registerContent)
Non blocking operation to write a 24-bit register from a slave.
bool write(const I2CDriver::I2CSlaveConfig &slaveConfig, const void *buffer, const size_t nBytes)
Non blocking write operation to write nBytes.
I2CDriver i2c
Instance of I2C low-level driver.
I2C(I2C_TypeDef *i2c, const miosix::GpioPin &scl, const miosix::GpioPin &sda)
Constructor for the I2C high-level driver.
bool writeRegister16(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, const uint16_t registerContent)
Non blocking operation to write a 16-bit register from a slave.
bool readRegister16(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, uint16_t ®isterContent)
Non blocking operation to read a 16-bit register from a slave.
bool readRegister24(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, uint32_t ®isterContent)
Non blocking operation to read a 24-bit register from a slave.
bool readRegister(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, uint8_t ®isterContent)
Non blocking operation to read an 8-bit register from a slave.
bool probe(const I2CDriver::I2CSlaveConfig &slaveConfig)
Check if a slave is available.
bool writeRegister16(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, const uint16_t registerContent)
Write a 16-bit register from the device.
bool readRegister24(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, uint32_t ®isterContent)
Read a 24-bit register from the device.
bool write(const I2CDriver::I2CSlaveConfig &slaveConfig, const void *buffer, const size_t nBytes)
Write operation to write nBytes.
bool writeRegister32(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, const uint32_t registerContent)
Write a 32-bit register from the device.
uint16_t getLastError()
Returns the last errors happened in the communication.
bool writeRegister24(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, const uint32_t registerContent)
Write a 24-bit register from the device.
bool readRegister16(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, uint16_t ®isterContent)
Read a 16-bit register from the device.
bool read(const I2CDriver::I2CSlaveConfig &slaveConfig, void *buffer, const size_t nBytes)
Read operation to read nBytes.
SyncedI2C(I2C_TypeDef *i2c, const miosix::GpioPin &scl, const miosix::GpioPin &sda)
Constructor for the synced I2C high-level driver.
bool readRegister(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, uint8_t ®isterContent)
Read an 8-bit register from the device.
bool writeRegister(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, const uint8_t registerContent)
Write an 8-bit register from the device.
bool readRegister32(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, uint32_t ®isterContent)
Read a 32-bit register from the device.
bool readFromRegister(const I2CDriver::I2CSlaveConfig &slaveConfig, const uint8_t registerAddress, void *buffer, const size_t nBytes)
Read n-bytes from register from a slave.
This file includes all the types the logdecoder script will decode.
Configuration struct for a slave device. This will be used for configuring the bus in order to commun...