CI130X SDK API手册  2.2.0
本手册用于描述CI130X SDK各个组件和驱动API
结构体 | 宏定义 | 函数 | 变量
ci130x_iic.c 文件参考

CI130X芯片IIC模块的驱动程序 更多...

#include <stdint.h>
#include "ci130x_iic.h"
#include "ci_log.h"
#include "ci130x_scu.h"
#include "platform_config.h"

结构体

struct  iic_register_t
 IIC寄存器结构体 更多...
 
struct  iic_status_t
 

宏定义

#define IIC_DIRVER_DBG   1
 
#define WAKE_UP   0xacced
 
#define SLEEP   0x0
 
#define RXDUFLIE   (0x1 << 1)
 
#define TXDEPTIE   (0x1 << 2)
 
#define SSTOPIE   (0x1 << 4)
 
#define SLVADIE   (0x1 << 6)
 
#define IIC_TRANSMIT   0x1
 
#define IIC_RECEIVE   0x0
 
#define IIC_TRANS_OVER   0x1
 
#define IIC_TRANS_ON   0x0
 
#define CR_STOP   (0x1 << 3)
 
#define CR_START   (0x1 << 4)
 
#define CR_IRQ_CLEAR   (0x7f)
 
#define SR_BUSY   (0x1 << 15)
 
#define SR_ABITOR_LOST   (0x1 << 5)
 
#define SR_TRANS_ERR   (0x1 << 3)
 
#define SR_RXACK   (0x1 << 14)
 
#define SR_IRQ_FLAG   (0x1 << 12)
 
#define CR_NACK   (0x1 << 2)
 
#define CR_TB   (0x1 << 0)
 
#define CR_WRITE   0
 
#define CR_READ   0
 

函数

static void delay_time (int32_t time)
 
static int32_t iic_wait (iic_base_t base)
 阻塞查询数据接收/发送 更多...
 
static void iic_reset (iic_base_t base)
 复位IIC总线 更多...
 
static void iic_start (iic_base_t base)
 IIC总线发送start位 更多...
 
static void iic_stop (iic_base_t base)
 iic总线发送stop位 更多...
 
static void iic_address (iic_base_t base, uint16_t addr, uint16_t flags)
 iic发送寻址 更多...
 
static void iic_transfer_transmit (iic_base_t base, int32_t lastbyte, int32_t receive, int32_t midbyte)
 数据阻塞发送 更多...
 
static uint8_t iic_transfer_receive (iic_base_t base, int32_t lastbyte, int32_t receive, int32_t midbyte)
 
static int32_t iic_sendbytes (iic_base_t base, const int8_t *buf, int32_t count, int32_t last, uint8_t *last_ack_flag)
 iic阻塞发送数据 更多...
 
static uint32_t iic_readbytes (iic_base_t base, int8_t *buf, int32_t count, int32_t last)
 iic读取数据 更多...
 
void iic_polling_init (iic_base_t base, uint32_t speed, uint32_t slaveaddr, IIC_TimeOut timeout)
 iic以查询方式初始化 更多...
 
void iic_interrupt_init (iic_base_t base, uint32_t speed, uint32_t slaveaddr, IIC_TimeOut timeout)
 iic以中断方式初始化 更多...
 
int32_t iic_master_polling_send (iic_base_t base, uint16_t addr, const char *buf, int32_t count, uint8_t *last_ack_flag)
 iic master 查询方式发送数据 更多...
 
int32_t iic_master_interrupt_send (iic_base_t base, uint16_t addr, master_send_cb_t master_send_cb)
 iic master 模式中断发送注册并启动 更多...
 
int32_t iic_master_polling_recv (iic_base_t base, uint16_t addr, char *buf, int32_t count)
 iic master 查询接收 更多...
 
int32_t iic_master_interrupt_recv (iic_base_t base, uint16_t addr, master_recv_cb_t master_recv_cb)
 iic master 中断方式接收注册并启动 更多...
 
int32_t iic_slave_polling_send (iic_base_t base, const char *buf, int32_t count, uint8_t *last_ack_flag)
 iic slave 查询方式发送 更多...
 
int32_t iic_slave_interrupt_send (iic_base_t base, slave_send_cb_t slave_send_cb)
 iic slave 中断方式发送注册(被动启动) 更多...
 
int32_t iic_slave_polling_recv (iic_base_t base, char *buf, int32_t count)
 iic slave 模式查询方式接收 更多...
 
int32_t iic_slave_interrupt_recv (iic_base_t base, slave_recv_cb_t slave_recv_cb)
 iic slave 中断方式接收注册(被动启动) 更多...
 
int32_t iic_master_multi_transmission (iic_base_t base, uint16_t addr, multi_transmission_msg *msg, int msg_count)
 iic 传输多个消息 更多...
 
void IIC_IRQHandler (iic_base_t base)
 iic中断统一处理函数 更多...
 
void IIC0_IRQHandler (void)
 
int32_t i2c_master_only_send (char slave_ic_address, const char *buf, int32_t count)
 I2C 只发送数据 更多...
 
int32_t i2c_master_send_recv (char slave_ic_address, char *buf, int32_t send_len, int32_t rev_len)
 I2C 先发送数据,再接收数据 更多...
 
int32_t i2c_master_only_recv (char slave_ic_address, char *buf, int32_t rev_len)
 I2C 只接收数据 更多...
 

变量

static iic_status_t iic0_status = {0}
 

详细描述

CI130X芯片IIC模块的驱动程序

版本
0.1
日期
2021-10-28

结构体说明

◆ iic_register_t

struct iic_register_t

IIC寄存器结构体

成员变量
volatile unsigned int BUSMON

offest:0x30 功能:总线信号检测寄存器

volatile unsigned int CMD

offest:0x10 功能:命令寄存器

volatile unsigned int DTHLD

offest:0x08 功能:SDA Data time

volatile unsigned int GLBCTRL

offest:0x0c 功能:全局控制寄存器

volatile unsigned int INTCLR

offest:0x18 功能:中断清除寄存器

volatile unsigned int INTEN

offest:0x14 功能:中断使能控制寄存器

volatile unsigned int INTSTAT

offest:0x34 功能:

volatile unsigned int RXDR

offest:0x24 功能:接收数据寄存器

volatile unsigned int SCLDIV

offest:0x00 功能:SCL分频参数寄存

volatile unsigned int SLVADR

offest:0x1c 功能:Slave地址寄存器

volatile unsigned int SRHLD

offest:0x04 功能:Start条件hold time

volatile unsigned int STATUS

offest:0x2c 功能:状态寄存器

volatile unsigned int TIMEOUT

offest:0x28 功能:超时寄存器

volatile unsigned int TXDR

offest:0x20 功能:发送数据寄存器

◆ iic_status_t

struct iic_status_t
成员变量
volatile uint32_t errors
volatile uint32_t is_master
volatile uint32_t is_slave_recv
master_recv_cb_t master_recv_cb
master_send_cb_t master_send_cb
volatile uint32_t over
slave_recv_cb_t slave_recv_cb
slave_send_cb_t slave_send_cb
volatile int32_t timeout
volatile int32_t wait

宏定义说明

◆ CR_IRQ_CLEAR

#define CR_IRQ_CLEAR   (0x7f)

◆ CR_NACK

#define CR_NACK   (0x1 << 2)

◆ CR_READ

#define CR_READ   0

◆ CR_START

#define CR_START   (0x1 << 4)

◆ CR_STOP

#define CR_STOP   (0x1 << 3)

◆ CR_TB

#define CR_TB   (0x1 << 0)

◆ CR_WRITE

#define CR_WRITE   0

◆ IIC_DIRVER_DBG

#define IIC_DIRVER_DBG   1

◆ IIC_RECEIVE

#define IIC_RECEIVE   0x0

◆ IIC_TRANS_ON

#define IIC_TRANS_ON   0x0

◆ IIC_TRANS_OVER

#define IIC_TRANS_OVER   0x1

◆ IIC_TRANSMIT

#define IIC_TRANSMIT   0x1

◆ RXDUFLIE

#define RXDUFLIE   (0x1 << 1)

◆ SLEEP

#define SLEEP   0x0

◆ SLVADIE

#define SLVADIE   (0x1 << 6)

◆ SR_ABITOR_LOST

#define SR_ABITOR_LOST   (0x1 << 5)

◆ SR_BUSY

#define SR_BUSY   (0x1 << 15)

◆ SR_IRQ_FLAG

#define SR_IRQ_FLAG   (0x1 << 12)

◆ SR_RXACK

#define SR_RXACK   (0x1 << 14)

◆ SR_TRANS_ERR

#define SR_TRANS_ERR   (0x1 << 3)

◆ SSTOPIE

#define SSTOPIE   (0x1 << 4)

◆ TXDEPTIE

#define TXDEPTIE   (0x1 << 2)

◆ WAKE_UP

#define WAKE_UP   0xacced

函数说明

◆ delay_time()

static void delay_time ( int32_t  time)
static

◆ IIC0_IRQHandler()

void IIC0_IRQHandler ( void  )

◆ iic_address()

static void iic_address ( iic_base_t  base,
uint16_t  addr,
uint16_t  flags 
)
static

iic发送寻址

参数
baseiic号
addr7位地址
flags读写标志

◆ iic_readbytes()

static uint32_t iic_readbytes ( iic_base_t  base,
int8_t *  buf,
int32_t  count,
int32_t  last 
)
static

iic读取数据

参数
baseiic号
buf数据buff
count数据个数
lastend标志
返回
uint32_t 读取到的数据个数

dummy read

◆ iic_reset()

static void iic_reset ( iic_base_t  base)
static

复位IIC总线

参数
baseiic号

◆ iic_sendbytes()

static int32_t iic_sendbytes ( iic_base_t  base,
const int8_t *  buf,
int32_t  count,
int32_t  last,
uint8_t *  last_ack_flag 
)
static

iic阻塞发送数据

参数
baseiic号
buf数据buff
count数据格式
lastend标志
last_ack_flag最后一笔数据ack标志
返回
int32_t 成功发送个数

◆ iic_start()

static void iic_start ( iic_base_t  base)
static

IIC总线发送start位

参数
baseiic号

◆ iic_stop()

static void iic_stop ( iic_base_t  base)
static

iic总线发送stop位

参数
baseiic号

◆ iic_transfer_receive()

static uint8_t iic_transfer_receive ( iic_base_t  base,
int32_t  lastbyte,
int32_t  receive,
int32_t  midbyte 
)
static

◆ iic_transfer_transmit()

static void iic_transfer_transmit ( iic_base_t  base,
int32_t  lastbyte,
int32_t  receive,
int32_t  midbyte 
)
static

数据阻塞发送

参数
baseiic号
lastbyte是否是end数据
receive读写方向
midbyte中间数据

◆ iic_wait()

static int32_t iic_wait ( iic_base_t  base)
static

阻塞查询数据接收/发送

参数
baseiic号
返回
int32_t 是否等到flag或超时

变量说明

◆ iic0_status

iic_status_t iic0_status = {0}
static