|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
// File name : i2c_drv.h
|
|
|
// Version : V0.1
|
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
#ifndef I2C_DRV_H_
|
|
|
#define I2C_DRV_H_
|
|
|
|
|
|
#include "type.h"
|
|
|
#include "memmap.h"
|
|
|
#include "i2c_reg.h"
|
|
|
|
|
|
|
|
|
#define I2C_BASE_ADDR (I2C1_BASE_ADDR)
|
|
|
//#define I2C_BASE_ADDR (I2C2_BASE_ADDR)
|
|
|
//#define I2C_BASE_ADDR (I2C3_BASE_ADDR)
|
|
|
|
|
|
#define I2C ((I2C_TypeDef *)I2C_BASE_ADDR)
|
|
|
|
|
|
#if I2C_BASE_ADDR == I2C1_BASE_ADDR
|
|
|
#define I2C_IRQn I2C_1_IRQn
|
|
|
|
|
|
#elif I2C_BASE_ADDR == I2C2_BASE_ADDR
|
|
|
#define I2C_IRQn I2C_2_IRQn
|
|
|
#else
|
|
|
#define I2C_IRQn I2C_3_IRQn
|
|
|
#endif
|
|
|
|
|
|
typedef enum
|
|
|
{
|
|
|
I2C_SCL = 0,
|
|
|
I2C_SDA,
|
|
|
|
|
|
}I2C_PIN;
|
|
|
|
|
|
#define I2C_MASTER_MODE 1
|
|
|
#define I2C_SLAVE_MODE 0
|
|
|
|
|
|
|
|
|
#define IS_I2C_PINx(pin) (((pin) == I2C_SCL) || \
|
|
|
((pin) == I2C_SDA))
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : I2C_ConfigGpio
|
|
|
* Description : I2C配置成GPIO用途
|
|
|
* Input : - I2C_PINx:SPI对应的PIN脚,取值I2C_SCL、I2C_SDA
|
|
|
* - GPIO_Dir:设置GPIO方向 GPIO_OUTPUT:输出 GPIO_INPUT:输入
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void I2C_ConfigGpio(I2C_PIN I2C_PINx, UINT8 GPIO_Dir);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : I2C_ReadGpioData
|
|
|
* Description : 获取I2C_PINx对应引脚的电平
|
|
|
* Input : - I2C_PINx:SPI对应的PIN脚,取值I2C_SCL、I2C_SDA
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : Bit_SET:高电平 Bit_RESET:低电平
|
|
|
******************************************************************************/
|
|
|
extern UINT8 I2C_ReadGpioData(I2C_PIN I2C_PINx);
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : I2C_WriteGpioData
|
|
|
* Description : 设置I2C_PINx对应引脚的电平
|
|
|
* Input : - I2C_PINx:SPI对应的PIN脚,取值I2C_SCL、I2C_SDA
|
|
|
* - bitVal:设置的电平,Bit_SET:设置为高电平 Bit_RESET:设置为低电平
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void I2C_WriteGpioData(I2C_PIN I2C_PINx, UINT8 bitVal);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : i2c_master_init
|
|
|
* Description :I2C主设备初始化
|
|
|
* Input :-Addresser:主设备地址
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : TRUE 执行成功 FALSE 执行失败
|
|
|
******************************************************************************/
|
|
|
extern BOOL i2c_master_init(UINT8 Addresser);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : i2c_slave_init
|
|
|
* Description :I2C从设备初始化
|
|
|
* Input :-Addresser:从设备地址
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : TRUE 执行成功 FALSE 执行失败
|
|
|
******************************************************************************/
|
|
|
extern BOOL i2c_slave_init(UINT16 Addresser);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : i2c_gpio_init
|
|
|
* Description :I2C GPIO Init
|
|
|
* Input :- None
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 无
|
|
|
******************************************************************************/
|
|
|
extern void i2c_gpio_init(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : I2C_master_send
|
|
|
* Description :I2C主设备发送单字节数据
|
|
|
* Input : -data :待发送数据
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void I2C_master_send(u8 data);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : I2C_master_rec
|
|
|
* Description :I2C主设备接收单字节数据
|
|
|
* Input :-i :待接收数据的偏移量
|
|
|
* -len :待接收数据的总长度
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : UINT8 接收的数据
|
|
|
******************************************************************************/
|
|
|
extern u8 I2C_master_rec(u16 i, u16 len);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : I2c_writedata
|
|
|
* Description :I2C主设备发送多字节
|
|
|
* Input : -slave_addr :从设备地址
|
|
|
* -buf :待发送数据
|
|
|
* -len :数据长度
|
|
|
* Output : None
|
|
|
* Return : TRUE 执行成功 FALSE 执行失败
|
|
|
******************************************************************************/
|
|
|
extern bool I2c_writedata(u16 slave_addr, u8 *buf, u16 len);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : I2c_readdata
|
|
|
* Description :I2C主设备发送多字节
|
|
|
* Input :-slave_addr :从设备地址
|
|
|
* Output : -buf :待接收数据
|
|
|
* -len :数据长度
|
|
|
* Return : TRUE 执行成功 FALSE 执行失败
|
|
|
******************************************************************************/
|
|
|
extern bool I2c_readdata(u16 slave_addr, u8 *buf, u16 len);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : i2c_slave_trans
|
|
|
* Description :I2C从设备收发送多字节
|
|
|
* Input : -s_buf :接收数据
|
|
|
* -s_len :数据长度
|
|
|
* Output : -r_buf :待接收数据
|
|
|
* -r_len :数据长度
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void i2c_slave_trans(UINT8* r_buf,UINT16 r_len,UINT8* s_buf,UINT16 s_len);
|
|
|
|
|
|
#endif /* I2C_DRV_H_ */
|