51 u32Div = (uint32_t)(((u32Pclk * 10U) / (u32BusClock * 4U) + 5U) / 10U - 1U);
57 return (u32Pclk / ((u32Div + 1U) << 2U));
125 uint32_t u32Reg = 0U;
147 i2c->
CTL0 = (i2c->
CTL0 & ~0x3CU) | u32Reg;
191 uint32_t u32Divider = i2c->
CLKDIV;
203 return (u32Pclk / ((u32Divider + 1U) << 2U));
230 u32Div = (uint32_t)(((u32Pclk * 10U) / (u32BusClock * 4U) + 5U) / 10U - 1U);
233 return (u32Pclk / ((u32Div + 1U) << 2U));
286 return (uint8_t)(i2c->
DAT);
323 i2c->
ADDR1 = ((uint32_t)u8SlaveAddr << 1U) | u8GCMode;
326 i2c->
ADDR2 = ((uint32_t)u8SlaveAddr << 1U) | u8GCMode;
329 i2c->
ADDR3 = ((uint32_t)u8SlaveAddr << 1U) | u8GCMode;
333 i2c->
ADDR0 = ((uint32_t)u8SlaveAddr << 1U) | u8GCMode;
355 i2c->
ADDRMSK1 = (uint32_t)u8SlaveAddrMask << 1U;
358 i2c->
ADDRMSK2 = (uint32_t)u8SlaveAddrMask << 1U;
361 i2c->
ADDRMSK3 = (uint32_t)u8SlaveAddrMask << 1U;
365 i2c->
ADDRMSK0 = (uint32_t)u8SlaveAddrMask << 1U;
469 i2c->
BUSSTS = u8SMBusIntFlag;
568 return (uint8_t)i2c->
PKTCRC;
586 uint32_t u32Div, u32Hclk_kHz;
589 u32Hclk_kHz = u32Hclk / 1000U;
590 u32Div = (((us * u32Hclk_kHz) / 1000U) >> 2U) - 1U;
618 uint32_t u32Div, u32Pclk_kHz;
624 u32Pclk_kHz = u32Pclk / 1000U;
625 u32Div = ((ms * u32Pclk_kHz) / (16U * 1024U)) - 1U;
634 i2c->
BUSTOUT = (((ms * u32Pclk_kHz) / (16U * 1024U * 4U)) - 1U) & 0xFFU;
654 uint32_t u32Div, u32Pclk_kHz;
660 u32Pclk_kHz = u32Pclk / 1000U;
661 u32Div = ((ms * u32Pclk_kHz) / (16U * 1024U)) - 1U;
670 i2c->
CLKTOUT = (((ms * u32Pclk_kHz) / (16U * 1024U * 4U)) - 1U) & 0xFFU;
691 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
694 while(u8Xfering && (u8Err == 0u))
700 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
724 return (u8Err | u8Xfering);
743 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
744 uint32_t u32txLen = 0u;
747 while(u8Xfering && (u8Err == 0u))
753 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
758 if(u32txLen < u32wLen)
802 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
803 uint32_t u32txLen = 0u;
806 while(u8Xfering && (u8Err == 0u))
812 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
844 return (u8Err | u8Xfering);
865 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
866 uint32_t u32txLen = 0u;
869 while(u8Xfering && (u8Err == 0u))
875 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
887 if(u32txLen < u32wLen)
927 uint8_t u8Xfering = 1u, u8Err = 0u, u8Addr = 1u, u8Ctrl = 0u;
928 uint32_t u32txLen = 0u;
931 while(u8Xfering && (u8Err == 0u))
937 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
941 I2C_SET_DATA(i2c, (uint8_t)((u16DataAddr & 0xFF00u) >> 8u));
954 else if((u32txLen < 1u) && (u8Addr == 0u))
974 return (u8Err | u8Xfering);
995 uint8_t u8Xfering = 1u, u8Err = 0u, u8Addr = 1u, u8Ctrl = 0u;
996 uint32_t u32txLen = 0u;
999 while(u8Xfering && (u8Err == 0u))
1005 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1009 I2C_SET_DATA(i2c, (uint8_t)((u16DataAddr & 0xFF00u) >> 8u));
1022 else if((u32txLen < u32wLen) && (u8Addr == 0u))
1057 uint8_t u8Xfering = 1u, u8Err = 0u, rdata = 0u, u8Ctrl = 0u;
1060 while(u8Xfering && (u8Err == 0u))
1066 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1114 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
1115 uint32_t u32rxLen = 0u;
1118 while(u8Xfering && (u8Err == 0u))
1124 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1136 if(u32rxLen < (u32rLen - 1u))
1178 uint8_t u8Xfering = 1u, u8Err = 0u, rdata = 0u, u8Ctrl = 0u;
1181 while(u8Xfering && (u8Err == 0u))
1187 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1202 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1250 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
1251 uint32_t u32rxLen = 0u;
1254 while(u8Xfering && (u8Err == 0u))
1260 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1275 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1287 if(u32rxLen < (u32rLen - 1u))
1328 uint8_t u8Xfering = 1u, u8Err = 0u, rdata = 0u, u8Addr = 1u, u8Ctrl = 0u;
1331 while(u8Xfering && (u8Err == 0u))
1337 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1341 I2C_SET_DATA(i2c, (uint8_t)((u16DataAddr & 0xFF00u) >> 8u));
1360 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1408 uint8_t u8Xfering = 1u, u8Err = 0u, u8Addr = 1u, u8Ctrl = 0u;
1409 uint32_t u32rxLen = 0u;
1412 while(u8Xfering && (u8Err == 0u))
1418 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1422 I2C_SET_DATA(i2c, (uint8_t)((u16DataAddr & 0xFF00u) >> 8u));
1441 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1453 if(u32rxLen < (u32rLen - 1u))
#define I2C_BUSCTL_BMHEN_Msk
#define I2C_START(i2c)
The macro is used to set START condition of I2C Bus.
void I2C_DisableInt(I2C_T *i2c)
Disable Interrupt of I2C Controller.
void I2C_ClearTimeoutFlag(I2C_T *i2c)
Clear Time-out Counter flag.
void I2C_Close(I2C_T *i2c)
Disable specify I2C Controller.
uint32_t I2C_WriteMultiBytesOneReg(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t data[], uint32_t u32wLen)
Specify a byte register address and write multi bytes to Slave.
void I2C_EnableInt(I2C_T *i2c)
Enable Interrupt of I2C Controller.
uint32_t I2C_WriteMultiBytesTwoRegs(I2C_T *i2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t data[], uint32_t u32wLen)
Specify two bytes register address and write multi bytes to Slave.
#define I2C_BUSCTL_BUSEN_Msk
uint8_t I2C_WriteByte(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t data)
Write a byte to Slave.
uint32_t I2C_SetBusClockFreq(I2C_T *i2c, uint32_t u32BusClock)
Set I2C Bus Clock.
void I2C_EnableWakeup(I2C_T *i2c)
Enable I2C Wake-up Function.
#define SYS_IPRST1_I2C2RST_Msk
uint32_t I2C_GetBusClockFreq(I2C_T *i2c)
Get I2C Bus Clock.
uint32_t I2C_GetIntFlag(I2C_T *i2c)
Get Interrupt Flag.
#define I2C_CTL0_INTEN_Msk
void I2C_EnableTimeout(I2C_T *i2c, uint8_t u8LongTimeout)
Enable Time-out Counter Function and support Long Time-out.
void I2C_DisableTimeout(I2C_T *i2c)
Disable Time-out Counter Function.
void I2C_SMBusClose(I2C_T *i2c)
Disable SMBus function.
#define SYS_IPRST1_I2C1RST_Msk
NuMicro peripheral access layer header file.
#define I2C_SET_DATA(i2c, u8Data)
Write a Data to I2C Data Register.
uint32_t I2C_SMBusGetStatus(I2C_T *i2c)
To get SMBus Status.
uint8_t I2C_ReadByteOneReg(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr)
Specify a byte register address and read a byte from Slave.
uint32_t I2C_ReadMultiBytes(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t rdata[], uint32_t u32rLen)
Read multi bytes from Slave.
uint32_t CLK_GetPCLK1Freq(void)
Get PCLK1 frequency.
uint8_t I2C_GetData(I2C_T *i2c)
Read a Byte from I2C Bus.
#define I2C_TOCTL_TOCEN_Msk
uint32_t CLK_GetPCLK0Freq(void)
Get PCLK0 frequency.
void I2C_SMBusOpen(I2C_T *i2c, uint8_t u8HostDevice)
Init SMBus Host/Device Mode.
#define I2C_BUSCTL_PECEN_Msk
void I2C_DisableWakeup(I2C_T *i2c)
Disable I2C Wake-up Function.
void I2C_SMBusTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk)
Calculate Time-out of SMBus active period.
#define I2C_BUSCTL_BMDEN_Msk
uint8_t I2C_SMBusGetPECValue(I2C_T *i2c)
Get SMBus CRC value.
#define I2C_WAIT_READY(i2c)
The macro is used to wait I2C bus status get ready.
uint32_t I2C_GetStatus(I2C_T *i2c)
Get I2C Bus Status Code.
#define I2C_CTL0_I2CEN_Msk
void I2C_SMBusIdleTimeout(I2C_T *i2c, uint32_t us, uint32_t u32Hclk)
Calculate Time-out of SMBus idle period.
#define I2C_TOCTL_TOCDIV4_Msk
#define I2C_GET_STATUS(i2c)
Get I2C Bus status code.
uint8_t I2C_ReadByteTwoRegs(I2C_T *i2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr)
Specify two bytes register address and read a byte from Slave.
uint8_t I2C_WriteByteOneReg(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t data)
Specify a byte register address and write a byte to Slave.
uint32_t I2C_ReadMultiBytesTwoRegs(I2C_T *i2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t rdata[], uint32_t u32rLen)
Specify two bytes register address and read multi bytes from Slave.
void I2C_SMBusClearInterruptFlag(I2C_T *i2c, uint8_t u8SMBusIntFlag)
Clear SMBus Interrupt Flag.
void I2C_SetSlaveAddrMask(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddrMask)
Configure the mask bits of 7-bit Slave Address.
#define I2C_GET_DATA(i2c)
The macro is used to Read I2C Bus Data Register.
#define I2C_BUSCTL_TIDLE_Msk
#define I2C_TOCTL_TOIF_Msk
uint8_t I2C_ReadByte(I2C_T *i2c, uint8_t u8SlaveAddr)
Read a byte from Slave.
uint8_t I2C_WriteByteTwoRegs(I2C_T *i2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t data)
Specify two bytes register address and Write a byte to Slave.
void I2C_SetData(I2C_T *i2c, uint8_t u8Data)
Send a byte to I2C Bus.
void I2C_SMBusSetPacketByteCount(I2C_T *i2c, uint32_t u32PktSize)
Set SMBus Bytes Counts of Transmission or Reception.
#define SYS_IPRST1_I2C0RST_Msk
uint32_t I2C_ReadMultiBytesOneReg(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t rdata[], uint32_t u32rLen)
Specify a byte register address and read multi bytes from Slave.
void I2C_SMBusClockLoTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk)
Calculate Cumulative Clock low Time-out of SMBus active period.
uint32_t I2C_WriteMultiBytes(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t data[], uint32_t u32wLen)
Write multi bytes to Slave.
#define I2C_WKCTL_WKEN_Msk
void I2C_SetSlaveAddr(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddr, uint8_t u8GCMode)
Set 7-bit Slave Address and GC Mode.
void I2C_SMBusPECTxEnable(I2C_T *i2c, uint8_t u8PECTxEn)
Enable SMBus PEC Transmit Function.
uint32_t I2C_Open(I2C_T *i2c, uint32_t u32BusClock)
Enable specify I2C Controller and set Clock Divider.
#define I2C_BUSCTL_PECTXEN_Msk
void I2C_Trigger(I2C_T *i2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Si, uint8_t u8Ack)
Set Control bit of I2C Controller.
#define I2C_SET_CONTROL_REG(i2c, u8Ctrl)
The macro is used to set I2C bus condition at One Time.