34#include "mcu_periph/i2c_arch.h"
45#ifndef I2C_THREAD_STACK_SIZE
46#define I2C_THREAD_STACK_SIZE 512
55#if USE_I2C1 || USE_I2C2 || USE_I2C3 || USE_I2C4
59#if defined(STM32F7XX) || defined(STM32H7XX)
81 ret |= (port->MODER >> (pad*2)) & 0x3;
82 ret |= ((port->OTYPER >> pad)&1) << 2;
83 ret |= ((port->OSPEEDR >> (pad*2))&3) << 3;
84 ret |= ((port->PUPDR >> (pad*2))&3) << 5;
86 ret |= ((port->AFRL >> (pad*4))&0xF) << 7;
88 ret |= ((port->AFRH >> ((pad-8)*4))&0xF) << 7;
128 if (
p->trans_insert_idx ==
p->trans_extract_idx) {
141#if defined(STM32F7XX) || defined(STM32H7XX)
143 memcpy(i->dma_buf, (
void *)
t->buf, (
size_t)(
t->len_w));
148 (
uint8_t *)i->dma_buf, (
size_t)(
t->len_w),
149 (
uint8_t *)i->dma_buf, (
size_t)(
t->len_r),
152 memcpy((
void *)
t->buf, i->dma_buf, (
size_t)(
t->len_r));
162#if defined(STM32F7XX) || defined(STM32H7XX)
167 (
uint8_t *)i->dma_buf, (
size_t)(
t->len_r),
170 memcpy((
void *)
t->buf, i->dma_buf, (
size_t)(
t->len_r));
182 p->trans_extract_idx++;
184 p->trans_extract_idx = 0;
199 p->errors->unexpected_event_cnt++;
212 p->errors->miss_start_stop_cnt++;
215 p->errors->arb_lost_cnt++;
218 p->errors->ack_fail_cnt++;
221 p->errors->over_under_cnt++;
224 p->errors->pec_recep_cnt++;
227 p->errors->timeout_tlow_cnt++;
230 p->errors->smbus_alert_cnt++;
353#if defined(STM32H7XX)
422#if USE_I2C1 || USE_I2C2 || USE_I2C3 || USE_I2C4
426 temp =
p->trans_insert_idx + 1;
428 if (temp ==
p->trans_extract_idx) {
430 p->errors->queue_full_cnt++;
439 p->trans[
p->trans_insert_idx] =
t;
440 p->trans_insert_idx = temp;
#define I2C_THREAD_STACK_SIZE
static bool i2c_chibios_idle(struct i2c_periph *p)
i2c_idle() function
static bool i2c_chibios_submit(struct i2c_periph *p, struct i2c_transaction *t)
i2c_submit() function
static void i2c_chibios_setbitrate(struct i2c_periph *p, int bitrate)
i2c_setbitrate() function
static THD_WORKING_AREA(wa_thd_spi1, SPI_THREAD_STACK_SIZE)
enum I2CTransactionStatus status
Transaction status.
void i2c_event(void)
i2c_event() function
#define I2C_TRANSACTION_QUEUE_LEN
I2C transaction queue length.
#define I2C_BUF_LEN
I2C buffer length.
void i2c_init(struct i2c_periph *p)
Initialize I2C peripheral.
@ I2CTransSuccess
transaction successfully finished by I2C driver
@ I2CTransFailed
transaction failed
@ I2CTransPending
transaction is pending in queue
I2C transaction structure.
Architecture independent I2C (Inter-Integrated Circuit Bus) API.
PRINT_CONFIG_VAR(ONELOOP_ANDI_FILT_CUTOFF)
Specific RAM section for DMA usage on F7.
#define IN_DMA_SECTION(var)
#define IN_BDMA_SECTION(var)
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.