Arduino Hardware I2C for AVR MCUs (plain c)
1.3
Arduino Hardware I2C for AVR MCUs (plain c) documentation
|
arduino i2c in plain c declarations More...
#include <Arduino.h>
#include <inttypes.h>
#include <stdbool.h>
Go to the source code of this file.
Data Structures | |
struct | StructI2CSlave |
ci2c slave config and control parameters More... | |
Macros | |
#define | __attribute__(a) |
GCC attribute (ignored by Doxygen) More... | |
#define | DEF_CI2C_NB_RETRIES 3 |
Default cI2C transaction retries. More... | |
#define | DEF_CI2C_TIMEOUT 100 |
Default cI2C timeout. More... | |
Typedefs | |
typedef enum enI2C_RW | I2C_RW |
typedef enum enI2C_SPEED | I2C_SPEED |
typedef enum enI2C_STATUS | I2C_STATUS |
typedef enum enI2C_INT_SIZE | I2C_INT_SIZE |
typedef bool(* | ci2c_fct_ptr) (void *, const uint16_t, uint8_t *, const uint16_t) |
i2c read/write function pointer typedef More... | |
typedef struct StructI2CSlave | I2C_SLAVE |
Enumerations | |
enum | enI2C_RW { I2C_WRITE = 0, I2C_READ } |
I2C RW bit enumeration. More... | |
enum | enI2C_SPEED { I2C_STD = 100, I2C_FM = 400, I2C_FMP = 1000, I2C_HS = 3400 } |
I2C bus speed. More... | |
enum | enI2C_STATUS { I2C_OK = 0x00, I2C_BUSY, I2C_NACK } |
I2C slave status. More... | |
enum | enI2C_INT_SIZE { I2C_NO_REG = 0x00, I2C_8B_REG, I2C_16B_REG } |
I2C slave internal address registers size. More... | |
Functions | |
void | I2C_slave_init (I2C_SLAVE *slave, const uint8_t sl_addr, const I2C_INT_SIZE reg_sz) |
Init an I2C slave structure for cMI2C communication. More... | |
void | I2C_slave_set_rw_func (I2C_SLAVE *slave, const ci2c_fct_ptr func, const I2C_RW rw) |
Redirect slave I2C read/write function (if needed for advanced use) More... | |
bool | I2C_slave_set_addr (I2C_SLAVE *slave, const uint8_t sl_addr) |
Change I2C slave address. More... | |
bool | I2C_slave_set_reg_size (I2C_SLAVE *slave, const I2C_INT_SIZE reg_sz) |
Change I2C registers map size (for access) More... | |
uint8_t | I2C_slave_get_addr (const I2C_SLAVE *slave) |
Get I2C slave address. More... | |
bool | I2C_slave_get_reg_size (const I2C_SLAVE *slave) |
Get I2C register map size (for access) More... | |
uint16_t | I2C_slave_get_reg_addr (const I2C_SLAVE *slave) |
Get I2C current register address (addr may passed this way in procedures if contigous accesses) More... | |
void | I2C_init (const uint16_t speed) |
Enable I2c module on arduino board (including pull-ups, enabling of ACK, and setting clock frequency) More... | |
void | I2C_uninit () |
Disable I2c module on arduino board (releasing pull-ups, and TWI control) More... | |
uint16_t | I2C_set_speed (const uint16_t speed) |
Change I2C frequency. More... | |
uint16_t | I2C_set_timeout (const uint16_t timeout) |
Change I2C ack timeout. More... | |
uint8_t | I2C_set_retries (const uint8_t retries) |
Change I2C message retries (in case of failure) More... | |
bool | I2C_is_busy (void) |
Get I2C busy status. More... | |
I2C_STATUS | I2C_write (I2C_SLAVE *slave, const uint16_t reg_addr, uint8_t *data, const uint16_t bytes) |
This function writes the provided data to the address specified. More... | |
I2C_STATUS | I2C_write_next (I2C_SLAVE *slave, uint8_t *data, const uint16_t bytes) |
This inline is a wrapper to I2C_write in case of contigous operations. More... | |
I2C_STATUS | I2C_read (I2C_SLAVE *slave, const uint16_t reg_addr, uint8_t *data, const uint16_t bytes) |
This function reads data from the address specified and stores this data in the area provided by the pointer. More... | |
I2C_STATUS | I2C_read_next (I2C_SLAVE *slave, uint8_t *data, const uint16_t bytes) |
This inline is a wrapper to I2C_read in case of contigous operations. More... | |
void | I2C_reset (void) |
I2C bus reset (Release SCL and SDA lines and re-enable module) More... | |
bool | I2C_start (void) |
Send start condition. More... | |
bool | I2C_stop (void) |
Send stop condition. More... | |
bool | I2C_wr8 (const uint8_t dat) |
Send byte on bus. More... | |
uint8_t | I2C_rd8 (const bool ack) |
Receive byte from bus. More... | |
bool | I2C_sndAddr (I2C_SLAVE *slave, const I2C_RW rw) |
Send I2C address. More... | |
arduino i2c in plain c declarations
#define __attribute__ | ( | a | ) |
GCC attribute (ignored by Doxygen)
#define DEF_CI2C_NB_RETRIES 3 |
Default cI2C transaction retries.
#define DEF_CI2C_TIMEOUT 100 |
Default cI2C timeout.
typedef bool(* ci2c_fct_ptr) (void *, const uint16_t, uint8_t *, const uint16_t) |
i2c read/write function pointer typedef
typedef enum enI2C_INT_SIZE I2C_INT_SIZE |
typedef struct StructI2CSlave I2C_SLAVE |
typedef enum enI2C_SPEED I2C_SPEED |
typedef enum enI2C_STATUS I2C_STATUS |
enum enI2C_INT_SIZE |
I2C slave internal address registers size.
enum enI2C_RW |
I2C RW bit enumeration.
Enumerator | |
---|---|
I2C_WRITE | I2C rw bit (write) |
I2C_READ | I2C rw bit (read) |
enum enI2C_SPEED |
I2C bus speed.
enum enI2C_STATUS |
I2C slave status.
Enumerator | |
---|---|
I2C_OK | I2C OK. |
I2C_BUSY | I2C Bus busy. |
I2C_NACK | I2C Not Acknowledge. |
void I2C_init | ( | const uint16_t | speed | ) |
Enable I2c module on arduino board (including pull-ups, enabling of ACK, and setting clock frequency)
[in] | speed | - I2C bus speed in KHz |
bool I2C_is_busy | ( | void | ) |
Get I2C busy status.
uint8_t I2C_rd8 | ( | const bool | ack | ) |
Receive byte from bus.
[in] | ack | - true if wait for ack |
I2C_STATUS I2C_read | ( | I2C_SLAVE * | slave, |
const uint16_t | reg_addr, | ||
uint8_t * | data, | ||
const uint16_t | bytes | ||
) |
This function reads data from the address specified and stores this data in the area provided by the pointer.
[in,out] | slave | - pointer to the I2C slave structure |
[in] | reg_addr | - register address in register map |
[in,out] | data | - pointer to the first byte of a block of data to read |
[in] | bytes | - indicates how many bytes of data to read |
|
inline |
This inline is a wrapper to I2C_read in case of contigous operations.
[in,out] | slave | - pointer to the I2C slave structure |
[in] | data | - pointer to the first byte of a block of data to read |
[in] | bytes | - indicates how many bytes of data to read |
void I2C_reset | ( | void | ) |
I2C bus reset (Release SCL and SDA lines and re-enable module)
uint8_t I2C_set_retries | ( | const uint8_t | retries | ) |
Change I2C message retries (in case of failure)
[in] | retries | - I2C number of retries (max of 8) |
uint16_t I2C_set_speed | ( | const uint16_t | speed | ) |
Change I2C frequency.
[in] | speed | - I2C bus speed in KHz (max 400KHz on AVR) |
[in] | speed | - I2C speed in KHz (max 400KHz on avr) |
uint16_t I2C_set_timeout | ( | const uint16_t | timeout | ) |
Change I2C ack timeout.
[in] | timeout | - I2C ack timeout (500 ms max) |
|
inline |
Get I2C slave address.
[in] | slave | - pointer to the I2C slave structure |
|
inline |
Get I2C current register address (addr may passed this way in procedures if contigous accesses)
[in] | slave | - pointer to the I2C slave structure |
|
inline |
Get I2C register map size (for access)
[in] | slave | - pointer to the I2C slave structure |
void I2C_slave_init | ( | I2C_SLAVE * | slave, |
const uint8_t | sl_addr, | ||
const I2C_INT_SIZE | reg_sz | ||
) |
Init an I2C slave structure for cMI2C communication.
[in] | slave | - pointer to the I2C slave structure to init |
[in] | sl_addr | - I2C slave address |
[in] | reg_sz | - internal register map size |
bool I2C_slave_set_addr | ( | I2C_SLAVE * | slave, |
const uint8_t | sl_addr | ||
) |
Change I2C slave address.
[in,out] | slave | - pointer to the I2C slave structure to init |
[in] | sl_addr | - I2C slave address |
bool I2C_slave_set_reg_size | ( | I2C_SLAVE * | slave, |
const I2C_INT_SIZE | reg_sz | ||
) |
Change I2C registers map size (for access)
[in,out] | slave | - pointer to the I2C slave structure |
[in] | reg_sz | - internal register map size |
void I2C_slave_set_rw_func | ( | I2C_SLAVE * | slave, |
const ci2c_fct_ptr | func, | ||
const I2C_RW | rw | ||
) |
Redirect slave I2C read/write function (if needed for advanced use)
[in] | slave | - pointer to the I2C slave structure to init |
[in] | func | - pointer to read/write function to affect |
[in] | rw | - 0 = write function, 1 = read function |
Send I2C address.
[in] | slave | - pointer to the I2C slave structure |
[in] | rw | - read/write transaction |
bool I2C_start | ( | void | ) |
Send start condition.
bool I2C_stop | ( | void | ) |
Send stop condition.
void I2C_uninit | ( | ) |
Disable I2c module on arduino board (releasing pull-ups, and TWI control)
bool I2C_wr8 | ( | const uint8_t | dat | ) |
Send byte on bus.
[in] | dat | - data to be sent |
I2C_STATUS I2C_write | ( | I2C_SLAVE * | slave, |
const uint16_t | reg_addr, | ||
uint8_t * | data, | ||
const uint16_t | bytes | ||
) |
This function writes the provided data to the address specified.
[in,out] | slave | - pointer to the I2C slave structure |
[in] | reg_addr | - register address in register map |
[in] | data | - pointer to the first byte of a block of data to write |
[in] | bytes | - indicates how many bytes of data to write |
|
inline |
This inline is a wrapper to I2C_write in case of contigous operations.
[in,out] | slave | - pointer to the I2C slave structure |
[in] | data | - pointer to the first byte of a block of data to write |
[in] | bytes | - indicates how many bytes of data to write |