PIO I2C program interface. More...
PIO I2C program interface.
Files | |
file | i2c.h |
PIO I2C program interface. | |
Data Structures | |
struct | pio_program_i2c |
PIO I2C program type. More... | |
struct | pio_i2c_bus |
PIO I2C emulated bus type. More... | |
Typedefs | |
typedef i2c_t | pio_i2c_t |
PIO I2C descriptor type compatible with i2c_t. | |
typedef struct pio_program_i2c | pio_program_i2c_t |
PIO I2C program type. | |
typedef struct pio_i2c_bus | pio_i2c_bus_t |
PIO I2C emulated bus type. | |
Functions | |
pio_i2c_bus_t * | pio_i2c_get (pio_i2c_t id) |
Get access to a PIO I2C instance configured with PIO_I2C_CONFIG. | |
unsigned | pio_i2c_numof (void) |
Query the number of PIO I2C instances configured with PIO_I2C_CONFIG. | |
const pio_program_i2c_t * | pio_i2c_get_program (pio_t pio) |
Get const I2C program reference. | |
int | pio_i2c_init_program (pio_t pio) |
Create, allocate, and write a PIO I2C program. | |
void | pio_i2c_deinit_program (pio_t pio) |
Free a PIO I2C program. | |
pio_sm_t | pio_i2c_sm_lock (pio_t pio, pio_i2c_bus_t *i2c) |
Acquire a PIO state machine of PIO pio to run the PIO I2C program. | |
void | pio_i2c_sm_unlock (pio_i2c_bus_t *i2c) |
Release a PIO state machine of PIO pio . | |
void | pio_i2c_start_programs (void) |
Start PIO I2C programs configured with PIO_I2C_CONFIG. | |
void | pio_i2c_stop_programs (void) |
Stop PIO I2C programs configured with PIO_I2C_CONFIG. | |
int | pio_i2c_write_program (pio_t pio, pio_program_i2c_t *pro) |
Write a PIO I2C program to instruction memory. | |
int | pio_i2c_init (pio_i2c_bus_t *bus, const pio_program_i2c_t *pro, gpio_t sda, gpio_t scl, unsigned irq) |
Setup a state machine to run the I2C program. | |
void | pio_i2c_acquire (pio_i2c_bus_t *bus) |
Get exclusive access to the emulated I2C bus. | |
void | pio_i2c_release (pio_i2c_bus_t *bus) |
Release emulated I2C bus. | |
int | pio_i2c_read_regs (pio_t pio, pio_sm_t sm, uint16_t addr, uint16_t reg, void *data, size_t len, uint8_t flags) |
Emulate i2c_read_regs. | |
static int | pio_i2c_read_reg (pio_t pio, pio_sm_t sm, uint16_t addr, uint16_t reg, void *data, uint8_t flags) |
Emulate i2c_read_reg. | |
int | pio_i2c_read_bytes (pio_t pio, pio_sm_t sm, uint16_t addr, void *data, size_t len, uint8_t flags) |
Emulate i2c_read_bytes. | |
static int | pio_i2c_read_byte (pio_t pio, pio_sm_t sm, uint16_t addr, void *data, uint8_t flags) |
Emulate i2c_read_byte. | |
int | pio_i2c_write_bytes (pio_t pio, pio_sm_t sm, uint16_t addr, const void *data, size_t len, uint8_t flags) |
Emulate i2c_write_bytes. | |
static int | pio_i2c_write_byte (pio_t pio, pio_sm_t sm, uint16_t addr, uint8_t data, uint8_t flags) |
Emulate i2c_write_byte. | |
int | pio_i2c_write_regs (pio_t pio, pio_sm_t sm, uint16_t addr, uint16_t reg, const void *data, size_t len, uint8_t flags) |
Emulate i2c_write_regs. | |
static int | pio_i2c_write_reg (pio_t pio, pio_sm_t sm, uint16_t addr, uint16_t reg, uint8_t data, uint8_t flags) |
Emulate i2c_write_reg. | |
void pio_i2c_acquire | ( | pio_i2c_bus_t * | bus | ) |
Get exclusive access to the emulated I2C bus.
[in] | bus | PIO I2C bus |
void pio_i2c_deinit_program | ( | pio_t | pio | ) |
Free a PIO I2C program.
[in] | pio | PIO index |
pio_i2c_bus_t * pio_i2c_get | ( | pio_i2c_t | id | ) |
Get access to a PIO I2C instance configured with PIO_I2C_CONFIG.
[in] | id | PIO I2C ID |
const pio_program_i2c_t * pio_i2c_get_program | ( | pio_t | pio | ) |
Get const I2C program reference.
[in] | pio | PIO index |
pio
int pio_i2c_init | ( | pio_i2c_bus_t * | bus, |
const pio_program_i2c_t * | pro, | ||
gpio_t | sda, | ||
gpio_t | scl, | ||
unsigned | irq | ||
) |
Setup a state machine to run the I2C program.
pro
must have been allocated.[out] | bus | PIO I2C bus |
[in] | pro | Shared program base |
[in] | sda | SDA pin |
[in] | scl | SCL pin |
[in] | irq | IRQ line, 0 or 1 |
int pio_i2c_init_program | ( | pio_t | pio | ) |
Create, allocate, and write a PIO I2C program.
This function does nothing if the program is already created, allocated, and written.
[in] | pio | PIO index |
unsigned pio_i2c_numof | ( | void | ) |
Query the number of PIO I2C instances configured with PIO_I2C_CONFIG.
|
inlinestatic |
Emulate i2c_read_byte.
[in] | pio | PIO index |
[in] | sm | PIO state machine index |
[in] | addr | 7-bit or 10-bit device address (right-aligned) |
[out] | data | Memory location to store received data |
[in] | flags | Optional flags (see i2c_flags_t) |
int pio_i2c_read_bytes | ( | pio_t | pio, |
pio_sm_t | sm, | ||
uint16_t | addr, | ||
void * | data, | ||
size_t | len, | ||
uint8_t | flags | ||
) |
Emulate i2c_read_bytes.
[in] | pio | PIO index |
[in] | sm | PIO state machine index |
[in] | addr | 7-bit or 10-bit device address (right-aligned) |
[out] | data | Memory location to store received data |
[in] | len | The number of bytes to read into data |
[in] | flags | Optional flags (see i2c_flags_t) |
|
inlinestatic |
Emulate i2c_read_reg.
[in] | pio | PIO index |
[in] | sm | PIO state machine index |
[in] | addr | 7-bit or 10-bit device address (right-aligned) |
[in] | reg | Register address to read from (8- or 16-bit right-aligned) |
[out] | data | Memory location to store received data |
[in] | flags | Optional flags (see i2c_flags_t) |
int pio_i2c_read_regs | ( | pio_t | pio, |
pio_sm_t | sm, | ||
uint16_t | addr, | ||
uint16_t | reg, | ||
void * | data, | ||
size_t | len, | ||
uint8_t | flags | ||
) |
Emulate i2c_read_regs.
[in] | pio | PIO index |
[in] | sm | PIO state machine index |
[in] | addr | 7-bit or 10-bit device address (right-aligned) |
[in] | reg | Register address to read from (8- or 16-bit right-aligned) |
[out] | data | Memory location to store received data |
[in] | len | The number of bytes to read into data |
[in] | flags | Optional flags (see i2c_flags_t) |
void pio_i2c_release | ( | pio_i2c_bus_t * | bus | ) |
Release emulated I2C bus.
[in] | bus | PIO I2C bus |
pio_sm_t pio_i2c_sm_lock | ( | pio_t | pio, |
pio_i2c_bus_t * | i2c | ||
) |
Acquire a PIO state machine of PIO pio
to run the PIO I2C program.
[in] | pio | PIO index |
[out] | i2c | PIO I2C bus |
void pio_i2c_sm_unlock | ( | pio_i2c_bus_t * | i2c | ) |
Release a PIO state machine of PIO pio
.
[in,out] | i2c | PIO I2C bus |
void pio_i2c_start_programs | ( | void | ) |
Start PIO I2C programs configured with PIO_I2C_CONFIG.
|
inlinestatic |
Emulate i2c_write_byte.
[in] | pio | PIO index |
[in] | sm | PIO state machine index |
[in] | addr | 7-bit or 10-bit device address (right-aligned) |
[in] | data | Byte to write to the device |
[in] | flags | Optional flags (see i2c_flags_t) |
int pio_i2c_write_bytes | ( | pio_t | pio, |
pio_sm_t | sm, | ||
uint16_t | addr, | ||
const void * | data, | ||
size_t | len, | ||
uint8_t | flags | ||
) |
Emulate i2c_write_bytes.
[in] | pio | PIO index |
[in] | sm | PIO state machine index |
[in] | addr | 7-bit or 10-bit device address (right-aligned) |
[in] | data | Array holding the bytes to write to the device |
[in] | len | The number of bytes to write |
[in] | flags | Optional flags (see i2c_flags_t) |
int pio_i2c_write_program | ( | pio_t | pio, |
pio_program_i2c_t * | pro | ||
) |
Write a PIO I2C program to instruction memory.
[in] | pio | PIO index |
[in,out] | pro | Allocated PIO I2C program |
|
inlinestatic |
Emulate i2c_write_reg.
[in] | pio | PIO index |
[in] | sm | PIO state machine index |
[in] | addr | 7-bit or 10-bit device address (right-aligned) |
[in] | reg | register address to read from (8- or 16-bit, right-aligned) |
[in] | data | Array holding the bytes to write to the device |
[in] | flags | Optional flags (see i2c_flags_t) |
int pio_i2c_write_regs | ( | pio_t | pio, |
pio_sm_t | sm, | ||
uint16_t | addr, | ||
uint16_t | reg, | ||
const void * | data, | ||
size_t | len, | ||
uint8_t | flags | ||
) |
Emulate i2c_write_regs.
[in] | pio | PIO index |
[in] | sm | PIO state machine index |
[in] | addr | 7-bit or 10-bit device address (right-aligned) |
[in] | reg | register address to read from (8- or 16-bit, right-aligned) |
[in] | data | Array holding the bytes to write to the device |
[in] | len | The number of bytes to write |
[in] | flags | Optional flags (see i2c_flags_t) |