Loading...
Searching...
No Matches
i2c.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021 Otto-von-Guericke Universität Magdeburg
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
21
22#include "periph/i2c.h"
23#include "periph/pio.h"
24#include "mutex.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
34
42
51
60
66unsigned pio_i2c_numof(void);
67
76
89
96
106
113
121
126
137
153 const pio_program_i2c_t *pro,
154 gpio_t sda, gpio_t scl, unsigned irq);
155
162
169
184int pio_i2c_read_regs(pio_t pio, pio_sm_t sm, uint16_t addr,
185 uint16_t reg, void *data, size_t len, uint8_t flags);
186
200static inline int pio_i2c_read_reg(pio_t pio, pio_sm_t sm, uint16_t addr,
201 uint16_t reg, void *data, uint8_t flags)
202{
203 return pio_i2c_read_regs(pio, sm, addr, reg, data, 1, flags);
204}
205
219int pio_i2c_read_bytes(pio_t pio, pio_sm_t sm, uint16_t addr,
220 void *data, size_t len, uint8_t flags);
221
234static inline int pio_i2c_read_byte(pio_t pio, pio_sm_t sm, uint16_t addr,
235 void *data, uint8_t flags)
236{
237 return pio_i2c_read_bytes(pio, sm, addr, data, 1, flags);
238}
239
253int pio_i2c_write_bytes(pio_t pio, pio_sm_t sm, uint16_t addr,
254 const void *data, size_t len, uint8_t flags);
255
268static inline int pio_i2c_write_byte(pio_t pio, pio_sm_t sm, uint16_t addr,
269 uint8_t data, uint8_t flags)
270{
271 return pio_i2c_write_bytes(pio, sm, addr, &data, 1, flags);
272}
273
288int pio_i2c_write_regs(pio_t pio, pio_sm_t sm, uint16_t addr,
289 uint16_t reg, const void *data, size_t len, uint8_t flags);
290
304static inline int pio_i2c_write_reg(pio_t pio, pio_sm_t sm, uint16_t addr,
305 uint16_t reg, uint8_t data, uint8_t flags)
306{
307 return pio_i2c_write_regs(pio, sm, addr, reg, &data, 1, flags);
308}
309
310#ifdef __cplusplus
311}
312#endif
High-level PIO peripheral driver interface.
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition i2c.h:155
void pio_i2c_acquire(pio_i2c_bus_t *bus)
Get exclusive access to the emulated I2C bus.
pio_i2c_bus_t * pio_i2c_get(pio_i2c_t id)
Get access to a PIO I2C instance configured with PIO_I2C_CONFIG.
i2c_t pio_i2c_t
PIO I2C descriptor type compatible with i2c_t.
Definition i2c.h:33
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.
Definition i2c.h:268
int pio_i2c_init_program(pio_t pio)
Create, allocate, and write a PIO I2C program.
void pio_i2c_sm_unlock(pio_i2c_bus_t *i2c)
Release a PIO state machine of PIO pio.
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.
Definition i2c.h:304
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.
struct pio_i2c_bus pio_i2c_bus_t
PIO I2C emulated bus type.
unsigned pio_i2c_numof(void)
Query the number of PIO I2C instances configured with PIO_I2C_CONFIG.
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_release(pio_i2c_bus_t *bus)
Release emulated I2C bus.
void pio_i2c_stop_programs(void)
Stop PIO I2C programs configured with PIO_I2C_CONFIG.
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.
Definition i2c.h:234
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.
Definition i2c.h:200
void pio_i2c_deinit_program(pio_t pio)
Free a PIO I2C program.
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.
const pio_program_i2c_t * pio_i2c_get_program(pio_t pio)
Get const I2C program reference.
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.
struct pio_program_i2c pio_program_i2c_t
PIO I2C program type.
int pio_i2c_write_program(pio_t pio, pio_program_i2c_t *pro)
Write a PIO I2C program to instruction memory.
void pio_i2c_start_programs(void)
Start PIO I2C programs configured with PIO_I2C_CONFIG.
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.
unsigned pio_t
PIO index type.
Definition pio.h:72
int pio_sm_t
PIO state machine index type.
Definition pio.h:77
Low-level I2C peripheral driver interface definition.
Mutex for thread synchronization.
Mutex structure.
Definition mutex.h:36
PIO I2C emulated bus type.
Definition i2c.h:46
pio_t pio
PIO index.
Definition i2c.h:47
mutex_t mtx
Mutex to protect the bus from concurrent accesses.
Definition i2c.h:49
pio_sm_t sm
State machine index.
Definition i2c.h:48
PIO I2C program type.
Definition i2c.h:38
unsigned ref_mask
Mask of referencing PIO state machines.
Definition i2c.h:40
pio_program_t base
PIO base program.
Definition i2c.h:39
Struct that models a PIO program.
Definition pio.h:82