//******************************************************************** // Ver 1.0 // 2018.11.02 //******************************************************************** #ifndef __I2CS__H #define __I2CS__H //*********************************************************************************** #define I2C_MODE_SLAVE 0 //I2C从机模式 #define I2C_MODE_MASTER 1 //I2C主机模式 #define I2C_SlaveAddr 0x64 //从机地址 #define I2C_CLK_100K 150 //I2C访问速度100K //*********************************************************************************** //IIC SDA引脚 #define I2C1_GpioInit() do{ \ GPIO_Init(GPIOA, GPIO_Pin_11, 1, IO_OUT_ODP); \ GPIO_Init(GPIOA, GPIO_Pin_12, 1, IO_OUT_ODP); \ GPIO_SetAfMode(GPIOA, GPIO_Pin_11, GpioAf3); \ GPIO_SetAfMode(GPIOA, GPIO_Pin_12, GpioAf3); \ }while(0) #define I2C_SdaHigh() GPIO_SetBit(GPIOA, GPIO_Pin_12) #define I2C_SdaLow() GPIO_ClrBit(GPIOA, GPIO_Pin_12) #define I2C_SdaRead() GPIO_ReadPin(GPIOA, GPIO_Pin_12) #define I2C_SclHigh() GPIO_SetBit(GPIOA, GPIO_Pin_11) #define I2C_SclLow() GPIO_ClrBit(GPIOA, GPIO_Pin_11) #define I2C_SclRead() GPIO_ReadPin(GPIOA, GPIO_Pin_11) #define I2C_Init1(I2Cx, Baud) do{ \ stc_i2c_config_t stcI2cCfg; \ I2Cx##_GpioInit(); \ Sysctrl_SetPeripheralGate((en_sysctrl_peripheral_gate_t)(SysctrlPeripheralI2c0+I2Cx),TRUE); \ stcI2cCfg.enFunc = I2cBaud_En; \ stcI2cCfg.u8Tm = 0x04; \ stcI2cCfg.pfnI2c0Cb = 0; \ stcI2cCfg.bTouchNvic = FALSE; \ I2C_DeInit(I2Cx); \ I2C_Init(I2Cx, &stcI2cCfg); \ I2C_SetFunc(I2Cx, I2cMode_En, ENABLE); \ I2C_SetFunc(I2Cx, I2cHlm_En, ENABLE); \ }while(0) //*********************************************************************************** #define I2C_ClrIntFlag(I2Cx) I2C_ClearIrq(I2Cx) #define I2C_ReadIntFlag(I2Cx) I2C_GetIrq(I2Cx) #define I2C_SetSlaveAddr(I2Cx, Value) I2C_WriteSlaveAddr(I2Cx, Value) #define I2C_SetClk(I2Cx, Value) I2C_SetBaud(I2Cx, Value) #define I2C_StateRead(I2Cx) I2C_GetState(I2Cx) //*********************************************************************************** #define I2C_BUFF_SIZE 8 typedef struct { INT8U Addr1; INT8U Addr2; INT8U Size; INT8U Flag; INT8U Cnt; INT8U ErrCnt; INT8U *ptr; } I2C_Str1; typedef struct { I2C_Str1 Info[2]; } I2C_Str; extern I2C_Str I2C_Info; #define I2C_InfoInit() MEM_Fill((INT8U *)&I2C_Info, 0, sizeof(I2C_Str)) #define I2C_ErrCntMax 200 //*********************************************************************************** #define I2C_Start(I2Cn) I2C_Cmd(I2Cn, ENABLE, DISABLE, ENABLE) //STA=1,STO=0,AA=1 #define I2C_ReStart(I2Cn) I2C_Cmd(I2Cn, ENABLE, ENABLE, ENABLE) //STA=1,STO=1,AA=1 #define I2C_Stop(I2Cn) I2C_Cmd(I2Cn, DISABLE, ENABLE, DISABLE) //STA=0,STO=1,AA=0 #define I2C_Ack(I2Cn, NewState) I2C_Cmd(I2Cn, DISABLE, DISABLE, NewState) //STA=0,STO=0,AA=NewState //*********************************************************************************** //*********************************************************************************** extern void I2C_ReadMultiByte(en_i2c_channel_t enCh, INT8U Addr, INT8U Reg, INT8U *ptr, INT8U Len); extern void I2C_WriteMultiByte(en_i2c_channel_t enCh, INT8U Addr, INT8U Reg, INT8U *ptr, INT8U Len); #endif