Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

159 wiersze
5.7 KiB

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 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_ */