//******************************************************************** // Ver 1.0 // 2021.11.19 1、新建文件 //******************************************************************** #ifndef __I2CS1__H #define __I2CS1__H //*********************************************************************************** //IIC 引脚初始化 #define I2CS_GpioInit() do{ \ I2CS_Sda0Init(); \ I2CS_Scl0Init(); \ I2CS_Sda1Init(); \ I2CS_Scl1Init(); \ I2CS_Pull1Init(); \ }while(0) //IIC SDA引脚控制,P00 #define I2CS_Sda0Init() GPIO_Init(P0, 0, 1, IO_OUT_OD) #define I2CS_Sda0Write(Value) GPIO_WritePin(P0, 0, Value) #define I2CS_Sda0Read() GPIO_ReadPin(P0, 0) //IIC SCL引脚控制,P01 #define I2CS_Scl0Init() GPIO_Init(P0, 1, 1, IO_OUT_OD) #define I2CS_Scl0Write(Value) GPIO_WritePin(P0, 1, Value) #define I2CS_Scl0Read() GPIO_ReadPin(P0, 1) //IIC SDA引脚控制,P17 #define I2CS_Sda1Init() GPIO_Init(P1, 7, 1, IO_OUT_OD) #define I2CS_Sda1Write(Value) GPIO_WritePin(P1, 7, Value) #define I2CS_Sda1Read() GPIO_ReadPin(P1, 7) //IIC SCL引脚控制,P51 #define I2CS_Scl1Init() GPIO_Init(P5, 1, 1, IO_OUT_OD) #define I2CS_Scl1Write(Value) GPIO_WritePin(P5, 1, Value) #define I2CS_Scl1Read() GPIO_ReadPin(P5, 1) //IIC PULL UP引脚控制,P22 #define I2CS_Pull1Init() GPIO_Init(P2, 2, 1, IO_OUT_PP) #define I2CS_Pull1Up(NewState) GPIO_WritePin(P2, 2, NewState) //*********************************************************************************** enum { I2CS0 = 0, I2CS1, I2CS_MAX, I2CS_SCL = 0, I2CS_SDA = 1, }; typedef struct { INT16U Baud; INT16U ErrCnt; INT8U SendCnt; INT8U Ack; } I2C_Str1; typedef struct { I2C_Str1 Info[I2CS_MAX]; } I2C_Str; extern I2C_Str I2CS_Info; #define I2CS_InfoInit(I2Cx) MEM_Fill((INT8U *)&I2CS_Info.Info[I2Cx], 0, sizeof(I2C_Str1)) #define I2CS_Init1(I2Cx, Baud) do{ \ I2CS_InfoInit(I2Cx); \ I2CS_GpioInit(); \ }while(0) //*********************************************************************************** #if 1 //100K #define I2CS_BytesDelay() DELAY_Us(10) #define I2CS_BitsDelay() DELAY_Us(1) #else //10K #define I2CS_BytesDelay() DELAY_Us(50) #define I2CS_BitsDelay() DELAY_Us(5) #endif #define I2C_SCL_LOW_MAX 100 //*********************************************************************************** extern INT8U I2CS_ReadMultiByte(INT8U I2Cx, INT8U Addr, INT16U Reg, INT8U *ptr, INT8U Len); extern INT8U I2CS_WriteMultiByte(INT8U I2Cx, INT8U Addr, INT16U Reg, INT8U *ptr, INT8U Len); #endif