Loading...
Searching...
No Matches
i2c.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2021 Otto-von-Guericke Universität Magdeburg
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser
5 * General Public License v2.1. See the file LICENSE in the top level
6 * directory for more details.
7 */
8
9#pragma once
10
24
25#include "periph/i2c.h"
26#include "periph/pio.h"
27#include "mutex.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
37
45
54
63
69unsigned pio_i2c_numof(void);
70
79
92
99
109
116
124
129
140
156 const pio_program_i2c_t *pro,
157 gpio_t sda, gpio_t scl, unsigned irq);
158
165
172
187int pio_i2c_read_regs(pio_t pio, pio_sm_t sm, uint16_t addr,
188 uint16_t reg, void *data, size_t len, uint8_t flags);
189
203static inline int pio_i2c_read_reg(pio_t pio, pio_sm_t sm, uint16_t addr,
204 uint16_t reg, void *data, uint8_t flags)
205{
206 return pio_i2c_read_regs(pio, sm, addr, reg, data, 1, flags);
207}
208
222int pio_i2c_read_bytes(pio_t pio, pio_sm_t sm, uint16_t addr,
223 void *data, size_t len, uint8_t flags);
224
237static inline int pio_i2c_read_byte(pio_t pio, pio_sm_t sm, uint16_t addr,
238 void *data, uint8_t flags)
239{
240 return pio_i2c_read_bytes(pio, sm, addr, data, 1, flags);
241}
242
256int pio_i2c_write_bytes(pio_t pio, pio_sm_t sm, uint16_t addr,
257 const void *data, size_t len, uint8_t flags);
258
271static inline int pio_i2c_write_byte(pio_t pio, pio_sm_t sm, uint16_t addr,
272 uint8_t data, uint8_t flags)
273{
274 return pio_i2c_write_bytes(pio, sm, addr, &data, 1, flags);
275}
276
291int pio_i2c_write_regs(pio_t pio, pio_sm_t sm, uint16_t addr,
292 uint16_t reg, const void *data, size_t len, uint8_t flags);
293
307static inline int pio_i2c_write_reg(pio_t pio, pio_sm_t sm, uint16_t addr,
308 uint16_t reg, uint8_t data, uint8_t flags)
309{
310 return pio_i2c_write_regs(pio, sm, addr, reg, &data, 1, flags);
311}
312
313#ifdef __cplusplus
314}
315#endif
High-level PIO peripheral driver interface.
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition i2c.h:144
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:36
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:271
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:307
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:237
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:203
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:75
int pio_sm_t
PIO state machine index type.
Definition pio.h:80
Low-level I2C peripheral driver interface definition.
Mutex for thread synchronization.
Mutex structure.
Definition mutex.h:39
PIO I2C emulated bus type.
Definition i2c.h:49
pio_t pio
PIO index.
Definition i2c.h:50
mutex_t mtx
Mutex to protect the bus from concurrent accesses.
Definition i2c.h:52
pio_sm_t sm
State machine index.
Definition i2c.h:51
PIO I2C program type.
Definition i2c.h:41
unsigned ref_mask
Mask of referencing PIO state machines.
Definition i2c.h:43
pio_program_t base
PIO base program.
Definition i2c.h:42
Struct that models a PIO program.
Definition pio.h:85