rt-thread-official/bsp/at32/libraries/rt_drivers/drv_hard_i2c.h

96 lines
1.9 KiB
C

/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2024-07-31 shelton first version
*/
#ifndef __DRV_HARD_I2C_H__
#define __DRV_HARD_I2C_H__
#include <rtthread.h>
#include <drivers/dev_i2c.h>
#include "drv_common.h"
#include "drv_dma.h"
#define I2C_START 0
#define I2C_END 1
#define I2C_EVENT_CHECK_NONE ((uint32_t)0x00000000)
#define I2C_EVENT_CHECK_ACKFAIL ((uint32_t)0x00000001)
#define I2C_EVENT_CHECK_STOP ((uint32_t)0x00000002)
typedef enum
{
I2C_INT_MA_TX = 0,
I2C_INT_MA_RX,
I2C_INT_SLA_TX,
I2C_INT_SLA_RX,
I2C_DMA_MA_TX,
I2C_DMA_MA_RX,
I2C_DMA_SLA_TX,
I2C_DMA_SLA_RX,
} i2c_mode_type;
typedef enum
{
I2C_OK = 0,
I2C_ERR_STEP_1,
I2C_ERR_STEP_2,
I2C_ERR_STEP_3,
I2C_ERR_STEP_4,
I2C_ERR_STEP_5,
I2C_ERR_STEP_6,
I2C_ERR_STEP_7,
I2C_ERR_STEP_8,
I2C_ERR_STEP_9,
I2C_ERR_STEP_10,
I2C_ERR_STEP_11,
I2C_ERR_STEP_12,
I2C_ERR_START,
I2C_ERR_ADDR10,
I2C_ERR_TCRLD,
I2C_ERR_TDC,
I2C_ERR_ADDR,
I2C_ERR_STOP,
I2C_ERR_ACKFAIL,
I2C_ERR_TIMEOUT,
I2C_ERR_INTERRUPT,
} i2c_status_type;
struct i2c_comm_type
{
rt_uint8_t *pbuff;
rt_uint16_t psize;
rt_uint16_t pcount;
i2c_mode_type mode;
rt_uint32_t timeout;
rt_uint32_t status;
i2c_status_type error_code;
};
struct at32_i2c_handle
{
i2c_type *i2c_x;
const char *i2c_name;
rt_uint32_t timing;
IRQn_Type ev_irqn;
IRQn_Type er_irqn;
struct dma_config *dma_rx;
struct dma_config *dma_tx;
struct i2c_comm_type comm;
rt_uint16_t i2c_dma_flag;
struct rt_completion completion;
};
struct at32_i2c
{
struct at32_i2c_handle *handle;
struct rt_i2c_bus_device i2c_bus;
};
#endif