IIC ####################### 硬件iic/软件模拟iic主机接口,可以选择任意io,硬件iic频率不精确,受通信速度和上拉电阻影响略有偏差,软件iic频率不准。 软件硬件iic选择:(c文件中添加如下代码) .. code-block:: c #if 1 //0:软件iic, 1:硬件iic #define _IIC_USE_HW #endif #include "iic_api.h" ------------------------------------------------------- 示例 ------------------------------------------------------- :: 详见文件 iic_master_demo.c iic_eeprom_test.c ------------------------------------------------------- 硬件/软件iic设备交互接口 ------------------------------------------------------- i2c_master_read_nbytes_from_device ------------------------------------------------------- 硬件/软件iic从指定设备获取指定长度的数据(该类接口是对以下基本接口的封装)。 原型: .. code-block:: c int i2c_master_read_nbytes_from_device(iic_dev iic, //iic索引 unsigned char dev_addr, //设备地址 //无设备寄存器地址 unsigned char *read_buf, int read_len);//缓存buf, 长度 参数: ============ ============================================= iic 硬件/软件iic索引号0~n dev_addr 指定设备地址 read_buf 接收缓存buf read_len 接收长度 返回值 接收的数据长度:=read_len:成功;其他值:失败 ============ ============================================= i2c_master_read_nbytes_from_device_reg ------------------------------------------------------- 硬件/软件iic从指定设备的某个寄存器地址获取指定长度的数据(该类接口是对以下基本接口的封装)。 原型: .. code-block:: c int i2c_master_read_nbytes_from_device_reg(iic_dev iic, unsigned char dev_addr, //设备地址 unsigned char *reg_addr, unsigned char reg_len,//设备寄存器地址,长度 unsigned char *read_buf, int read_len);//缓存buf,长度 参数: ============ ============================================= iic 硬件/软件iic索引号0~n dev_addr 指定设备地址 reg_addr 设备的寄存器地址 reg_len 寄存器长度 read_buf 接收缓存buf read_len 接收长度 返回值 接收的数据长度:=read_len:成功;其他值:失败 ============ ============================================= i2c_master_write_nbytes_to_device ------------------------------------------------------- 硬件/软件iic将指定长度的数据发送到指定设备(该类接口是对以下基本接口的封装)。 原型: .. code-block:: c int i2c_master_write_nbytes_to_device(iic_dev iic, unsigned char dev_addr, //设备地址 //无设备寄存器地址 unsigned char *write_buf, int write_len); //数据buf, 长度 参数: ============ ============================================= iic 硬件/软件iic索引号0~n dev_addr 指定设备地址 write_buf 发送缓存buf write_len 发送长度 返回值 发送的数据长度:=write_len:成功;其他值:失败 ============ ============================================= i2c_master_write_nbytes_to_device_reg ------------------------------------------------------- 硬件/软件iic将指定长度的数据发送到指定设备的某个寄存器地址(该类接口是对以下基本接口的封装)。 原型: .. code-block:: c int i2c_master_write_nbytes_to_device_reg(iic_dev iic, unsigned char dev_addr, //设备地址 unsigned char *reg_addr, unsigned char reg_len,//设备寄存器地址,长度 unsigned char *write_buf, int write_len);//数据buf, 长度 参数: ============ ============================================= iic 硬件/软件iic索引号0~n dev_addr 指定设备地址 reg_addr 设备的寄存器地址 reg_len 寄存器长度 write_buf 发送缓存buf write_len 发送长度 返回值 发送的数据长度:=write_len:成功;其他值:失败 ============ ============================================= ------------------------------------------------------- 硬件/软件iic基本接口 ------------------------------------------------------- get_iic_config ------------------------------------------------------- 为兼容旧接口新增,功能:获取硬件/软件iic配置结构体。 原型: .. code-block:: c struct iic_master_config *get_iic_config(iic_dev iic); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n 返回值 硬件/软件iic配置信息 ============ ============================================= iic_init ------------------------------------------------------- 初始化硬件/软件iic。 原型: .. code-block:: c //iic_index:硬件/软件iic索引号 enum iic_state_enum iic_init(iic_dev iic, struct iic_master_config *i2c_config); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n i2c_config 硬件/软件iic配置信息 返回值 返回执行状态,详见枚举enum iic_state_enum ============ ============================================= 示例: .. code-block:: c struct iic_master_config iic_config_test = { .role = IIC_MASTER, .scl_io = IIC_SCL_IO, .sda_io = IIC_SDA_IO, .io_mode = PORT_INPUT_PULLUP_10K,//上拉或浮空(外接上拉) .hdrive = PORT_DRIVE_STRENGT_2p4mA, //enum GPIO_HDRIVE 0:2.4MA, 1:8MA, 2:26.4MA, 3:40MA .master_frequency = 100000, //硬件/软件iic频率不准(hz) .io_filter = 1, //硬件/软件无效 }; enum iic_state_enum iic_init_state = iic_init(0, &iic_config_test); if (iic_init_state == IIC_OK) { log_info("iic master init ok"); } else { log_error("iic master init fail"); } iic_uninit ------------------------------------------------------- 关闭硬件/软件iic,释放io为高阻状态。 原型: .. code-block:: c enum iic_state_enum iic_uninit(iic_dev iic); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n 返回值 返回执行状态,详见枚举enum iic_state_enum ============ ============================================= 示例: .. code-block:: c enum iic_state_enum iic_init_state = iic_uninit(0); if (iic_init_state == IIC_OK) { log_info("iic master uninit ok"); } else { log_error("iic master uninit fail"); } iic_suspend ------------------------------------------------------- 挂起硬件/软件iic,释放io为高阻状态。 原型: .. code-block:: c enum iic_state_enum iic_suspend(iic_dev iic); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n 返回值 返回执行状态,详见枚举enum iic_state_enum ============ ============================================= iic_resume ------------------------------------------------------- 恢复硬件/软件iic,还原io状态到初始化状态。 原型: .. code-block:: c enum iic_state_enum iic_resume(iic_dev iic); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n 返回值 返回执行状态,详见枚举enum iic_state_enum ============ ============================================= iic_check_busy ------------------------------------------------------- 检查指定索引号的硬件/软件iic是否繁忙,空闲方可通信。 原型: .. code-block:: c enum iic_state_enum iic_check_busy(iic_dev iic); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n 返回值 返回执行状态,详见枚举enum iic_state_enum ============ ============================================= iic_start ------------------------------------------------------- 硬件/软件iic发送起始位。 原型: .. code-block:: c void iic_start(iic_dev iic); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n 返回值 无 ============ ============================================= iic_stop ------------------------------------------------------- 硬件/软件iic发送结束位。 原型: .. code-block:: c void iic_stop(iic_dev iic); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n 返回值 无 ============ ============================================= iic_tx_byte ------------------------------------------------------- 硬件/软件iic发送一个byte数据,返回应答状态。 原型: .. code-block:: c u8 iic_tx_byte(iic_dev iic, u8 byte); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n byte 待发送的数据 返回值 1:有应答,0:无应答 ============ ============================================= iic_rx_byte ------------------------------------------------------- 硬件/软件iic接收一个byte数据。 原型: .. code-block:: c u8 iic_rx_byte(iic_dev iic, u8 ack); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n ack 1:收到数据后回应答,0:收到数据后不回应答 返回值 接收的数据 ============ ============================================= iic_read_buf ------------------------------------------------------- 硬件/软件iic接收指定长度的数据。 原型: .. code-block:: c int iic_read_buf(iic_dev iic, void *buf, int len); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n buf 接收缓存buf len 接收长度 返回值 接收的数据长度:=len:成功;其他值:失败 ============ ============================================= iic_write_buf ------------------------------------------------------- 硬件/软件iic发送指定长度的数据。 原型: .. code-block:: c int iic_write_buf(iic_dev iic, const void *buf, int len); 参数: ============ ============================================= iic 硬件/软件iic索引号0~n buf 发送缓存buf len 发送长度 返回值 发送的数据长度:=len:成功;其他值:失败 ============ ============================================= ------------------------------------------------------- 硬件iic从机接口 ------------------------------------------------------- 1. :ref:`topics-iic_slave_2` 2. :ref:`topics-iic_slave_1`