/****************************************************************************** * Shanghai ChipON Micro-Electronic Co.,Ltd * ****************************************************************************** * $File Name$ : KF32A156_i2c.h * * $Author$ : ChipON AE/FAE Group * * $Data$ : 2021-07-08 * * $AutoSAR Version : V2.0 * * $Description$ : This file contains the headers of the I2C * * peripheral. * ****************************************************************************** * Copyright (C) by Shanghai ChipON Micro-Electronic Co.,Ltd * * All rights reserved. * * * * This software is copyright protected and proprietary to * * Shanghai ChipON Micro-Electronic Co.,Ltd. * ****************************************************************************** * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * REVISON HISTORY * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Data Version Author Description * * ~~~~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * * * * * * *****************************************************************************/ #ifndef KF32A156_I2C_H_ #define KF32A156_I2C_H_ #include "KF32A156.h" /* I2C外设判断 ------------------------------------------------------------*/ #define CHECK_I2C_ALL_PERIPH(PERIPH) (((PERIPH) == I2C0_SFR) \ || ((PERIPH) == I2C1_SFR) \ || ((PERIPH) == I2C2_SFR) \ || ((PERIPH) == I2C3_SFR)) /** * 描述 内部集成电路接口(I2C)配置信息结构体 */ typedef struct { uint32_t m_Mode; /* I2C模式选择配置, 取值为宏“I2C模式”中的一个。 */ uint32_t m_ClockSource; /* I2C工作时钟, 取值为宏“I2C工作时钟”中的一个。 */ uint32_t m_BADR10; /* I2C地址选择配置, 取值为宏“I2C地址选择”中的一个。 */ uint32_t m_MasterSlave; /* SMBus类型选择, 取值为宏“SMBus类型选择”中的一个。 */ uint16_t m_BaudRateL; /* SCL低电平占用的时钟周期数, 取值为0~0xFFFF。 */ uint16_t m_BaudRateH; /* SCL高电平占用的时钟周期数, 取值为0~0xFFFF。 */ FunctionalState m_AckEn; /* I2C应答使能, 取值为TRUE或FALSE。 */ uint32_t m_AckData; /* 应答数据位, 取值为宏“I2C应答数据位”中的一个。 */ }I2C_InitTypeDef; /** * I2C应答数据位 */ #define I2C_ACKDATA_ACK ((uint32_t)0<> 10) == 0) /** * I2C地址寄存器编号 */ #define CHECK_I2C_ADDR_REGISTER(NUM) (((NUM) >= 0) && ((NUM) <= 3)) /** * I2C地址位 */ #define CHECK_I2C_ADDR(DATA) (((uint32_t)(DATA) >> 10) == 0) /** * I2C地址位 */ #define CHECK_I2C_MSK(DATA) (((uint32_t)(DATA) >> 10) == 0) /** * I2C数据保持时间 * */ #define I2C_Keep_Data_3CLK ((uint32_t)0) #define I2C_Keep_Data_4CLK ((uint32_t)1) #define I2C_Keep_Data_5CLK ((uint32_t)2) #define I2C_Keep_Data_6CLK ((uint32_t)3) #define I2C_Keep_Data_7CLK ((uint32_t)4) #define I2C_Keep_Data_8CLK ((uint32_t)5) #define I2C_Keep_Data_9CLK ((uint32_t)9) #define I2C_Keep_Data_10CLK ((uint32_t)7) #define I2C_Keep_Data_11CLK ((uint32_t)8) #define I2C_Keep_Data_12CLK ((uint32_t)9) #define I2C_Keep_Data_13CLK ((uint32_t)10) #define I2C_Keep_Data_14CLK ((uint32_t)11) #define I2C_Keep_Data_15CLK ((uint32_t)12) #define I2C_Keep_Data_16CLK ((uint32_t)13) #define I2C_Keep_Data_17CLK ((uint32_t)14) #define I2C_Keep_Data_18CLK ((uint32_t)15) #define CHECK_I2C_KEEP_DATA_CLK(CLK) (((CLK) <= I2C_Keep_Data_18CLK) \ && ((CLK) >= I2C_Keep_Data_3CLK)) /* 内部集成电路接口(I2C)初始化函数定义*************************************/ void I2C_Reset (I2C_SFRmap* I2Cx); void I2C_Configuration (I2C_SFRmap* I2Cx,I2C_InitTypeDef* i2cInitStruct); void I2C_Struct_Init (I2C_InitTypeDef* I2C_InitStruct); /* 内部集成电路接口(I2C)功能配置函数定义***********************************/ void I2C_Cmd(I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Bufr_Address_Config(I2C_SFRmap* I2Cx,uint32_t NewState); void I2C_Generate_START(I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Generate_STOP(I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Ack_Config (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Ack_DATA_Config (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Call_Cmd (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Clock_Config (I2C_SFRmap* I2Cx,uint32_t ClkSource); void I2C_MATCH_ADDRESS_Config (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_SCL_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_NMENA_Enable(I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_SMBUS_Enable(I2C_SFRmap* I2Cx,uint32_t NewState); void I2C_SMBT_Config(I2C_SFRmap* I2Cx,uint32_t NewState); void I2C_SMBus_ALERT_Config(I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_SendData (I2C_SFRmap* I2Cx,uint32_t Data); uint32_t I2C_ReceiveData(I2C_SFRmap* I2Cx); void I2C_ARP_Enable(I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_ADDR_Config(I2C_SFRmap* I2Cx, uint32_t AddrSelect, uint32_t Data); void I2C_MSK_Config(I2C_SFRmap* I2Cx, uint32_t AddrSelect, uint32_t DataMask); void I2C_BRGH_Config (I2C_SFRmap* I2Cx,uint16_t Period); void I2C_BRGL_Config (I2C_SFRmap* I2Cx,uint16_t Period); void I2C_Keep_Data_Time_Config(I2C_SFRmap* I2Cx, uint32_t Time); /* 内部集成电路接口(I2C)中断管理函数定义***********************************/ void I2C_Start_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Stop_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Ack_Fail_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Arbitration_Lost_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_SMBus_Alert_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_SMBus_HostHead_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_SMBus_Device_Defaultaddress_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_ISIE_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Receive_DMA_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Transmit_DMA_INT_Enable (I2C_SFRmap* I2Cx,FunctionalState NewState); void I2C_Bus_Error_INT_Enable(I2C_SFRmap* I2Cx,FunctionalState NewState); FlagStatus I2C_Get_Start_Flag (I2C_SFRmap* I2Cx); RetStatus I2C_Clear_Start_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Stop_Flag (I2C_SFRmap* I2Cx); RetStatus I2C_Clear_Stop_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Address_Match_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_HighAddress_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Data_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Ack_Fail_Flag (I2C_SFRmap* I2Cx); RetStatus I2C_Clear_Ack_Fail_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Arbitration_Lost_Flag (I2C_SFRmap* I2Cx); RetStatus I2C_Clear_Arbitration_Lost_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Write_Read_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_SMBus_Alert_Flag (I2C_SFRmap* I2Cx); RetStatus I2C_Clear_SMBus_Alert_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_SMBus_Host_Header_Flag (I2C_SFRmap* I2Cx); RetStatus I2C_Clear_SMBus_Host_Header_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_SMBus_Device_Default_Flag (I2C_SFRmap* I2Cx); RetStatus I2C_Clear_SMBus_Device_Default_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_INTERRUPT_Flag (I2C_SFRmap* I2Cx); RetStatus I2C_Clear_INTERRUPT_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Receive_Buff_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Transmit_Buff_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Receive_DMA_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Transmit_DMA_Flag (I2C_SFRmap* I2Cx); FlagStatus I2C_Get_Bus_Error_Flag (I2C_SFRmap* I2Cx); void I2C_SendData8 (I2C_SFRmap* I2Cx, uint8_t Data); #endif /* KF32A156_I2C_H_ */