52 u32Div = (uint32_t)(((u32Pclk * 10U) / (u32BusClock * 4U) + 5U) / 10U - 1U);
58 return (u32Pclk / ((u32Div + 1U) << 2U));
78 SYS->IPRST1 &= ~SYS_IPRST1_I2C0RST_Msk;
83 SYS->IPRST1 &= ~SYS_IPRST1_I2C1RST_Msk;
88 SYS->IPRST1 &= ~SYS_IPRST1_I2C2RST_Msk;
92 i2c->
CTL0 &= ~I2C_CTL0_I2CEN_Msk;
126 uint32_t u32Reg = 0U;
148 i2c->
CTL0 = (i2c->
CTL0 & ~0x3CU) | u32Reg;
163 i2c->
CTL0 &= ~I2C_CTL0_INTEN_Msk;
192 uint32_t u32Divider = i2c->
CLKDIV;
204 return (u32Pclk / ((u32Divider + 1U) << 2U));
231 u32Div = (uint32_t)(((u32Pclk * 10U) / (u32BusClock * 4U) + 5U) / 10U - 1U);
234 return (u32Pclk / ((u32Div + 1U) << 2U));
287 return (uint8_t)(i2c->
DAT);
324 i2c->
ADDR1 = ((uint32_t)u8SlaveAddr << 1U) | u8GCMode;
327 i2c->
ADDR2 = ((uint32_t)u8SlaveAddr << 1U) | u8GCMode;
330 i2c->
ADDR3 = ((uint32_t)u8SlaveAddr << 1U) | u8GCMode;
334 i2c->
ADDR0 = ((uint32_t)u8SlaveAddr << 1U) | u8GCMode;
356 i2c->
ADDRMSK1 = (uint32_t)u8SlaveAddrMask << 1U;
359 i2c->
ADDRMSK2 = (uint32_t)u8SlaveAddrMask << 1U;
362 i2c->
ADDRMSK3 = (uint32_t)u8SlaveAddrMask << 1U;
366 i2c->
ADDRMSK0 = (uint32_t)u8SlaveAddrMask << 1U;
391 i2c->
TOCTL &= ~I2C_TOCTL_TOCDIV4_Msk;
409 i2c->
TOCTL &= ~I2C_TOCTL_TOCEN_Msk;
439 i2c->
WKCTL &= ~I2C_WKCTL_WKEN_Msk;
470 i2c->
BUSSTS = u8SMBusIntFlag;
545 i2c->
BUSCTL &= ~I2C_BUSCTL_PECTXEN_Msk;
569 return (uint8_t)i2c->
PKTCRC;
587 uint32_t u32Div, u32Hclk_kHz;
590 u32Hclk_kHz = u32Hclk / 1000U;
591 u32Div = (((us * u32Hclk_kHz) / 1000U) >> 2U) - 1U;
619 uint32_t u32Div, u32Pclk_kHz;
621 i2c->
BUSCTL &= ~I2C_BUSCTL_TIDLE_Msk;
624 i2c->
TOCTL &= ~I2C_TOCTL_TOCEN_Msk;
625 u32Pclk_kHz = u32Pclk / 1000U;
626 u32Div = ((ms * u32Pclk_kHz) / (16U * 1024U)) - 1U;
635 i2c->
BUSTOUT = (((ms * u32Pclk_kHz) / (16U * 1024U * 4U)) - 1U) & 0xFFU;
655 uint32_t u32Div, u32Pclk_kHz;
657 i2c->
BUSCTL &= ~I2C_BUSCTL_TIDLE_Msk;
660 i2c->
TOCTL &= ~I2C_TOCTL_TOCEN_Msk;
661 u32Pclk_kHz = u32Pclk / 1000U;
662 u32Div = ((ms * u32Pclk_kHz) / (16U * 1024U)) - 1U;
671 i2c->
CLKTOUT = (((ms * u32Pclk_kHz) / (16U * 1024U * 4U)) - 1U) & 0xFFU;
692 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
697 while(u8Xfering && (u8Err == 0u))
703 if(u32TimeOutCount == 0)
714 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
738 return (u8Err | u8Xfering);
757 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
758 uint32_t u32txLen = 0u;
763 while(u8Xfering && (u8Err == 0u))
769 if(u32TimeOutCount == 0)
779 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
784 if(u32txLen < u32wLen)
828 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
829 uint32_t u32txLen = 0u;
834 while(u8Xfering && (u8Err == 0u))
840 if(u32TimeOutCount == 0)
850 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
882 return (u8Err | u8Xfering);
903 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
904 uint32_t u32txLen = 0u;
909 while(u8Xfering && (u8Err == 0u))
915 if(u32TimeOutCount == 0)
925 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
937 if(u32txLen < u32wLen)
977 uint8_t u8Xfering = 1u, u8Err = 0u, u8Addr = 1u, u8Ctrl = 0u;
978 uint32_t u32txLen = 0u;
983 while(u8Xfering && (u8Err == 0u))
989 if(u32TimeOutCount == 0)
999 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1003 I2C_SET_DATA(i2c, (uint8_t)((u16DataAddr & 0xFF00u) >> 8u));
1016 else if((u32txLen < 1u) && (u8Addr == 0u))
1036 return (u8Err | u8Xfering);
1057 uint8_t u8Xfering = 1u, u8Err = 0u, u8Addr = 1u, u8Ctrl = 0u;
1058 uint32_t u32txLen = 0u;
1063 while(u8Xfering && (u8Err == 0u))
1069 if(u32TimeOutCount == 0)
1079 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1083 I2C_SET_DATA(i2c, (uint8_t)((u16DataAddr & 0xFF00u) >> 8u));
1096 else if((u32txLen < u32wLen) && (u8Addr == 0u))
1131 uint8_t u8Xfering = 1u, u8Err = 0u, rdata = 0u, u8Ctrl = 0u;
1136 while(u8Xfering && (u8Err == 0u))
1142 if(u32TimeOutCount == 0)
1152 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1200 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
1201 uint32_t u32rxLen = 0u;
1206 while(u8Xfering && (u8Err == 0u))
1212 if(u32TimeOutCount == 0)
1222 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1234 if(u32rxLen < (u32rLen - 1u))
1276 uint8_t u8Xfering = 1u, u8Err = 0u, rdata = 0u, u8Ctrl = 0u;
1281 while(u8Xfering && (u8Err == 0u))
1287 if(u32TimeOutCount == 0)
1297 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1312 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1360 uint8_t u8Xfering = 1u, u8Err = 0u, u8Ctrl = 0u;
1361 uint32_t u32rxLen = 0u;
1366 while(u8Xfering && (u8Err == 0u))
1372 if(u32TimeOutCount == 0)
1382 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1397 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1409 if(u32rxLen < (u32rLen - 1u))
1450 uint8_t u8Xfering = 1u, u8Err = 0u, rdata = 0u, u8Addr = 1u, u8Ctrl = 0u;
1455 while(u8Xfering && (u8Err == 0u))
1461 if(u32TimeOutCount == 0)
1471 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1475 I2C_SET_DATA(i2c, (uint8_t)((u16DataAddr & 0xFF00u) >> 8u));
1494 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1542 uint8_t u8Xfering = 1u, u8Err = 0u, u8Addr = 1u, u8Ctrl = 0u;
1543 uint32_t u32rxLen = 0u;
1548 while(u8Xfering && (u8Err == 0u))
1554 if(u32TimeOutCount == 0)
1564 I2C_SET_DATA(i2c, (uint8_t)(u8SlaveAddr << 1u | 0x00u));
1568 I2C_SET_DATA(i2c, (uint8_t)((u16DataAddr & 0xFF00u) >> 8u));
1587 I2C_SET_DATA(i2c, (uint8_t)((u8SlaveAddr << 1u) | 0x01u));
1599 if(u32rxLen < (u32rLen - 1u))
NuMicro peripheral access layer header file.
uint32_t CLK_GetPCLK1Freq(void)
Get PCLK1 frequency.
uint32_t CLK_GetPCLK0Freq(void)
Get PCLK0 frequency.
uint32_t I2C_SMBusGetStatus(I2C_T *i2c)
To get SMBus Status.
#define I2C_SET_CONTROL_REG(i2c, u8Ctrl)
The macro is used to set I2C bus condition at One Time.
void I2C_SMBusIdleTimeout(I2C_T *i2c, uint32_t us, uint32_t u32Hclk)
Calculate Time-out of SMBus idle period.
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_GET_DATA(i2c)
The macro is used to Read I2C Bus Data Register.
void I2C_SetSlaveAddrMask(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddrMask)
Configure the mask bits of 7-bit Slave Address.
#define I2C_GET_STATUS(i2c)
Get I2C Bus status code.
void I2C_Close(I2C_T *i2c)
Disable specify I2C Controller.
void I2C_SMBusSetPacketByteCount(I2C_T *i2c, uint32_t u32PktSize)
Set SMBus Bytes Counts of Transmission or Reception.
uint32_t I2C_SetBusClockFreq(I2C_T *i2c, uint32_t u32BusClock)
Set I2C Bus Clock.
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_Trigger(I2C_T *i2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Si, uint8_t u8Ack)
Set Control bit of I2C Controller.
void I2C_SMBusClose(I2C_T *i2c)
Disable SMBus function.
void I2C_EnableTimeout(I2C_T *i2c, uint8_t u8LongTimeout)
Enable Time-out Counter Function and support Long Time-out.
void I2C_SMBusClockLoTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk)
Calculate Cumulative Clock low Time-out of SMBus active period.
void I2C_ClearTimeoutFlag(I2C_T *i2c)
Clear Time-out Counter flag.
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_SetData(I2C_T *i2c, uint8_t u8Data)
Send a byte to I2C Bus.
#define I2C_WAIT_READY(i2c)
The macro is used to wait I2C bus status get ready.
uint32_t I2C_GetBusClockFreq(I2C_T *i2c)
Get I2C Bus Clock.
void I2C_EnableInt(I2C_T *i2c)
Enable Interrupt of I2C Controller.
uint8_t I2C_ReadByte(I2C_T *i2c, uint8_t u8SlaveAddr)
Read a byte from Slave.
void I2C_DisableWakeup(I2C_T *i2c)
Disable I2C Wake-up Function.
uint32_t I2C_ReadMultiBytes(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t rdata[], uint32_t u32rLen)
Read multi bytes from Slave.
uint32_t I2C_GetStatus(I2C_T *i2c)
Get I2C Bus Status Code.
uint32_t I2C_WriteMultiBytes(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t data[], uint32_t u32wLen)
Write multi bytes to Slave.
void I2C_DisableInt(I2C_T *i2c)
Disable Interrupt of I2C Controller.
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.
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.
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.
uint8_t I2C_ReadByteOneReg(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr)
Specify a byte register address and read a byte from Slave.
#define I2C_SET_DATA(i2c, u8Data)
Write a Data to I2C Data Register.
void I2C_SMBusPECTxEnable(I2C_T *i2c, uint8_t u8PECTxEn)
Enable SMBus PEC Transmit Function.
void I2C_EnableWakeup(I2C_T *i2c)
Enable I2C Wake-up Function.
#define I2C_START(i2c)
The macro is used to set START condition of I2C Bus.
uint8_t I2C_ReadByteTwoRegs(I2C_T *i2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr)
Specify two bytes register address and read a byte from Slave.
void I2C_SMBusOpen(I2C_T *i2c, uint8_t u8HostDevice)
Init SMBus Host/Device Mode.
uint32_t I2C_GetIntFlag(I2C_T *i2c)
Get Interrupt Flag.
void I2C_SMBusTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk)
Calculate Time-out of SMBus active period.
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.
uint8_t I2C_GetData(I2C_T *i2c)
Read a Byte from I2C Bus.
uint8_t I2C_SMBusGetPECValue(I2C_T *i2c)
Get SMBus CRC value.
uint32_t I2C_Open(I2C_T *i2c, uint32_t u32BusClock)
Enable specify I2C Controller and set Clock Divider.
void I2C_DisableTimeout(I2C_T *i2c)
Disable Time-out Counter Function.
void I2C_SMBusClearInterruptFlag(I2C_T *i2c, uint8_t u8SMBusIntFlag)
Clear SMBus Interrupt Flag.
uint8_t I2C_WriteByte(I2C_T *i2c, uint8_t u8SlaveAddr, uint8_t data)
Write a byte to Slave.
#define SYS_IPRST1_I2C1RST_Msk
#define I2C_BUSCTL_PECEN_Msk
#define I2C_BUSCTL_PECTXEN_Msk
#define I2C_TOCTL_TOIF_Msk
#define I2C_CTL0_I2CEN_Msk
#define SYS_IPRST1_I2C2RST_Msk
#define I2C_TOCTL_TOCEN_Msk
#define I2C_BUSCTL_BMDEN_Msk
#define I2C_BUSCTL_TIDLE_Msk
#define I2C_WKCTL_WKEN_Msk
#define I2C_BUSCTL_BUSEN_Msk
#define SYS_IPRST1_I2C0RST_Msk
#define I2C_BUSCTL_BMHEN_Msk
#define I2C_CTL0_INTEN_Msk
#define I2C_TOCTL_TOCDIV4_Msk