THB2/bthome_phy6222/SDK/components/driver/i2c/i2c_s.h

82 lines
1.5 KiB
C

/*************
i2c_s.h
SDK_LICENSE
***************/
#ifndef _IIC_SLAVE_H
#define _IIC_SLAVE_H
#ifdef __cplusplus
extern "C" {
#endif
#include "gpio.h"
#define I2CS_RX_MAX_SIZE 64
#define I2CS_TX_MAX_SIZE 64
#define IIC0_SCL FMUX_IIC0_SCL
#define IIC0_SDA FMUX_IIC0_SDA
#define IIC1_SCL FMUX_IIC1_SCL
#define IIC1_SDA FMUX_IIC1_SDA
//i2cs working state
enum
{
I2CSST_IDLE = 0,
I2CSST_XMITING
};
typedef enum
{
I2CS_0 = 1,
I2CS_1,
} i2cs_channel_t;
typedef enum
{
I2CS_MODE_REG_8BIT = 1,
I2CS_MODE_REG_16BIT,
I2CS_MODE_RAW
} i2cs_mode_t;
enum
{
I2CS_EVT_REG_REQ_READ = 1, //register mode read, master read request
I2CS_EVT_REG_REQ_READ_CMPL, //register mode read, read completed
I2CS_EVT_REG_RECV, //register mode write, recieved data
I2CS_ET_RAW_RECV, //master write data to slave
I2CS_ET_RAW_TX_CMPL, //master read data from slave completed
};//event type
typedef struct
{
uint8_t type;
uint8_t reg_u8;
uint16_t reg_u16;
uint8_t* dat;
} i2cs_evt_t;
typedef void (*i2cs_hdl_t)(i2cs_evt_t* pev);
void __attribute__((weak)) hal_I2C0_IRQHandler(void);
void __attribute__((weak)) hal_I2C1_IRQHandler(void);
int i2cs_init(
i2cs_channel_t ch_id,
i2cs_mode_t mode,
uint8_t saddr, //slave address
gpio_pin_e cs, //if need not cs, choose GPIO_DUMMY_PIN
gpio_pin_e sda,
gpio_pin_e scl,
i2cs_hdl_t evt_handler);
#ifdef __cplusplus
}
#endif
#endif