M480 BSP V3.05.006
The Board Support Package for M480 Series
usci_i2c.h
Go to the documentation of this file.
1/**************************************************************************/
9#ifndef __USCI_I2C_H__
10#define __USCI_I2C_H__
11
12#ifdef __cplusplus
13extern "C"
14{
15#endif
16
17
30/*---------------------------------------------------------------------------------------------------------*/
31/* USCI_I2C master event definitions */
32/*---------------------------------------------------------------------------------------------------------*/
34{
44};
45
46/*---------------------------------------------------------------------------------------------------------*/
47/* USCI_I2C slave event definitions */
48/*---------------------------------------------------------------------------------------------------------*/
50{
58};
59
60/*---------------------------------------------------------------------------------------------------------*/
61/* USCI_CTL constant definitions. */
62/*---------------------------------------------------------------------------------------------------------*/
63#define UI2C_CTL_PTRG 0x20UL
64#define UI2C_CTL_STA 0x08UL
65#define UI2C_CTL_STO 0x04UL
66#define UI2C_CTL_AA 0x02UL
68/*---------------------------------------------------------------------------------------------------------*/
69/* USCI_I2C GCMode constant definitions. */
70/*---------------------------------------------------------------------------------------------------------*/
71#define UI2C_GCMODE_ENABLE (1U)
72#define UI2C_GCMODE_DISABLE (0U)
74/*---------------------------------------------------------------------------------------------------------*/
75/* USCI_I2C Wakeup Mode constant definitions. */
76/*---------------------------------------------------------------------------------------------------------*/
77#define UI2C_DATA_TOGGLE_WK (0x0U << UI2C_WKCTL_WKADDREN_Pos)
78#define UI2C_ADDR_MATCH_WK (0x1U << UI2C_WKCTL_WKADDREN_Pos)
80/*---------------------------------------------------------------------------------------------------------*/
81/* USCI_I2C interrupt mask definitions */
82/*---------------------------------------------------------------------------------------------------------*/
83#define UI2C_TO_INT_MASK (0x001U)
84#define UI2C_STAR_INT_MASK (0x002U)
85#define UI2C_STOR_INT_MASK (0x004U)
86#define UI2C_NACK_INT_MASK (0x008U)
87#define UI2C_ARBLO_INT_MASK (0x010U)
88#define UI2C_ERR_INT_MASK (0x020U)
89#define UI2C_ACK_INT_MASK (0x040U) /* end of group USCI_I2C_EXPORTED_CONSTANTS */
92
93
109#define UI2C_SET_CONTROL_REG(ui2c, u8Ctrl) ((ui2c)->PROTCTL = ((ui2c)->PROTCTL & ~0x2EU) | (u8Ctrl))
110
121#define UI2C_START(ui2c) ((ui2c)->PROTCTL = ((ui2c)->PROTCTL & ~UI2C_PROTCTL_PTRG_Msk) | UI2C_PROTCTL_STA_Msk)
122
133#define UI2C_STOP(ui2c) ((ui2c)->PROTCTL = ((ui2c)->PROTCTL & ~0x2E) | (UI2C_PROTCTL_PTRG_Msk | UI2C_PROTCTL_STO_Msk))
134
145#define UI2C_GET_DATA(ui2c) ((ui2c)->RXDAT)
146
158#define UI2C_SET_DATA(ui2c, u8Data) ((ui2c)->TXDAT = (u8Data))
159
171#define UI2C_GET_TIMEOUT_FLAG(ui2c) (((ui2c)->PROTSTS & UI2C_PROTSTS_TOIF_Msk) == UI2C_PROTSTS_TOIF_Msk ? 1:0)
172
184#define UI2C_GET_WAKEUP_FLAG(ui2c) (((ui2c)->WKSTS & UI2C_WKSTS_WKF_Msk) == UI2C_WKSTS_WKF_Msk ? 1:0)
185
196#define UI2C_CLR_WAKEUP_FLAG(ui2c) ((ui2c)->WKSTS = UI2C_WKSTS_WKF_Msk)
197
208#define UI2C_DISABLE_10BIT_ADDR_MODE(ui2c) ((ui2c)->PROTCTL &= ~(UI2C_PROTCTL_ADDR10EN_Msk))
209
220#define UI2C_ENABLE_10BIT_ADDR_MODE(ui2c) ((ui2c)->PROTCTL |= UI2C_PROTCTL_ADDR10EN_Msk)
221
232#define UI2C_GET_PROT_STATUS(ui2c) ((ui2c)->PROTSTS)
233
250#define UI2C_CLR_PROT_INT_FLAG(ui2c,u32IntTypeFlag) ((ui2c)->PROTSTS = (u32IntTypeFlag))
251
268#define UI2C_ENABLE_PROT_INT(ui2c, u32IntSel) ((ui2c)->PROTIEN |= (u32IntSel))
269
286#define UI2C_DISABLE_PROT_INT(ui2c, u32IntSel) ((ui2c)->PROTIEN &= ~ (u32IntSel))
287
288
289uint32_t UI2C_Open(UI2C_T *ui2c, uint32_t u32BusClock);
290void UI2C_Close(UI2C_T *ui2c);
291void UI2C_ClearTimeoutFlag(UI2C_T *ui2c);
292void UI2C_Trigger(UI2C_T *ui2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Ptrg, uint8_t u8Ack);
293void UI2C_DisableInt(UI2C_T *ui2c, uint32_t u32Mask);
294void UI2C_EnableInt(UI2C_T *ui2c, uint32_t u32Mask);
295uint32_t UI2C_GetBusClockFreq(UI2C_T *ui2c);
296uint32_t UI2C_SetBusClockFreq(UI2C_T *ui2c, uint32_t u32BusClock);
297uint32_t UI2C_GetIntFlag(UI2C_T *ui2c, uint32_t u32Mask);
298void UI2C_ClearIntFlag(UI2C_T* ui2c, uint32_t u32Mask);
299uint32_t UI2C_GetData(UI2C_T *ui2c);
300void UI2C_SetData(UI2C_T *ui2c, uint8_t u8Data);
301void UI2C_SetSlaveAddr(UI2C_T *ui2c, uint8_t u8SlaveNo, uint16_t u16SlaveAddr, uint8_t u8GCMode);
302void UI2C_SetSlaveAddrMask(UI2C_T *ui2c, uint8_t u8SlaveNo, uint16_t u16SlaveAddrMask);
303void UI2C_EnableTimeout(UI2C_T *ui2c, uint32_t u32TimeoutCnt);
304void UI2C_DisableTimeout(UI2C_T *ui2c);
305void UI2C_EnableWakeup(UI2C_T *ui2c, uint8_t u8WakeupMode);
306void UI2C_DisableWakeup(UI2C_T *ui2c);
307uint8_t UI2C_WriteByte(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t data);
308uint32_t UI2C_WriteMultiBytes(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t *data, uint32_t u32wLen);
309uint8_t UI2C_WriteByteOneReg(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t data);
310uint32_t UI2C_WriteMultiBytesOneReg(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t *data, uint32_t u32wLen);
311uint8_t UI2C_WriteByteTwoRegs(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t data);
312uint32_t UI2C_WriteMultiBytesTwoRegs(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t *data, uint32_t u32wLen);
313uint8_t UI2C_ReadByte(UI2C_T *ui2c, uint8_t u8SlaveAddr);
314uint32_t UI2C_ReadMultiBytes(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t *rdata, uint32_t u32rLen);
315uint8_t UI2C_ReadByteOneReg(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr);
316uint32_t UI2C_ReadMultiBytesOneReg(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t *rdata, uint32_t u32rLen);
317uint8_t UI2C_ReadByteTwoRegs(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr);
318uint32_t UI2C_ReadMultiBytesTwoRegs(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t *rdata, uint32_t u32rLen);
319 /* end of group USCI_I2C_EXPORTED_FUNCTIONS */
321 /* end of group USCI_I2C_Driver */
323 /* end of group Standard_Driver */
325
326#ifdef __cplusplus
327}
328#endif
329
330#endif
331
332/*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/
UI2C_SLAVE_EVENT
Definition: usci_i2c.h:50
UI2C_MASTER_EVENT
Definition: usci_i2c.h:34
@ SLAVE_L_RD_ADDRESS_ACK
Definition: usci_i2c.h:57
@ SLAVE_L_WR_ADDRESS_ACK
Definition: usci_i2c.h:53
@ SLAVE_H_RD_ADDRESS_ACK
Definition: usci_i2c.h:56
@ SLAVE_ADDRESS_ACK
Definition: usci_i2c.h:51
@ SLAVE_SEND_DATA
Definition: usci_i2c.h:55
@ SLAVE_GET_DATA
Definition: usci_i2c.h:54
@ SLAVE_H_WR_ADDRESS_ACK
Definition: usci_i2c.h:52
@ MASTER_SEND_ADDRESS
Definition: usci_i2c.h:35
@ MASTER_SEND_START
Definition: usci_i2c.h:43
@ MASTER_SEND_H_RD_ADDRESS
Definition: usci_i2c.h:37
@ MASTER_SEND_H_WR_ADDRESS
Definition: usci_i2c.h:36
@ MASTER_SEND_L_ADDRESS
Definition: usci_i2c.h:38
@ MASTER_STOP
Definition: usci_i2c.h:42
@ MASTER_READ_DATA
Definition: usci_i2c.h:41
@ MASTER_SEND_DATA
Definition: usci_i2c.h:39
@ MASTER_SEND_REPEAT_START
Definition: usci_i2c.h:40
void UI2C_EnableInt(UI2C_T *ui2c, uint32_t u32Mask)
This function enables the interrupt of USCI_I2C module.
Definition: usci_i2c.c:218
uint32_t UI2C_GetIntFlag(UI2C_T *ui2c, uint32_t u32Mask)
This function gets the interrupt flag of USCI_I2C module.
Definition: usci_i2c.c:343
uint32_t UI2C_Open(UI2C_T *ui2c, uint32_t u32BusClock)
This function makes USCI_I2C module be ready and set the wanted bus clock.
Definition: usci_i2c.c:34
void UI2C_DisableWakeup(UI2C_T *ui2c)
This function disables the wakeup function of USCI_I2C module.
Definition: usci_i2c.c:601
uint32_t UI2C_GetData(UI2C_T *ui2c)
This function returns the data stored in data register of USCI_I2C module.
Definition: usci_i2c.c:472
void UI2C_SetSlaveAddr(UI2C_T *ui2c, uint8_t u8SlaveNo, uint16_t u16SlaveAddr, uint8_t u8GCMode)
Configure slave address and enable GC mode.
Definition: usci_i2c.c:506
uint8_t UI2C_WriteByte(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t data)
Write a byte to Slave.
Definition: usci_i2c.c:620
uint32_t UI2C_WriteMultiBytesTwoRegs(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t *data, uint32_t u32wLen)
Specify two bytes register address and write multi bytes to Slave.
Definition: usci_i2c.c:1007
void UI2C_DisableTimeout(UI2C_T *ui2c)
This function disables time-out function.
Definition: usci_i2c.c:569
uint8_t UI2C_ReadByteTwoRegs(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr)
Specify two bytes register address and read a byte from Slave.
Definition: usci_i2c.c:1463
void UI2C_SetData(UI2C_T *ui2c, uint8_t u8Data)
This function writes a byte data to data register of USCI_I2C module.
Definition: usci_i2c.c:487
uint8_t UI2C_ReadByteOneReg(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr)
Specify a byte register address and read a byte from Slave.
Definition: usci_i2c.c:1253
uint32_t UI2C_WriteMultiBytesOneReg(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t *data, uint32_t u32wLen)
Specify a byte register address and write multi bytes to Slave.
Definition: usci_i2c.c:843
void UI2C_EnableTimeout(UI2C_T *ui2c, uint32_t u32TimeoutCnt)
This function enables time-out function and configures timeout counter.
Definition: usci_i2c.c:554
void UI2C_EnableWakeup(UI2C_T *ui2c, uint8_t u8WakeupMode)
This function enables the wakeup function of USCI_I2C module.
Definition: usci_i2c.c:587
uint32_t UI2C_WriteMultiBytes(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t *data, uint32_t u32wLen)
Write multi bytes to Slave.
Definition: usci_i2c.c:694
void UI2C_DisableInt(UI2C_T *ui2c, uint32_t u32Mask)
This function disables the interrupt of USCI_I2C module.
Definition: usci_i2c.c:156
void UI2C_ClearIntFlag(UI2C_T *ui2c, uint32_t u32Mask)
This function clears the interrupt flag of USCI_I2C module.
Definition: usci_i2c.c:418
uint8_t UI2C_WriteByteTwoRegs(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t data)
Specify two bytes register address and Write a byte to Slave.
Definition: usci_i2c.c:922
uint32_t UI2C_ReadMultiBytesOneReg(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t *rdata, uint32_t u32rLen)
Specify a byte register address and read multi bytes from Slave.
Definition: usci_i2c.c:1359
void UI2C_Trigger(UI2C_T *ui2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Ptrg, uint8_t u8Ack)
This function sets the control bit of the USCI_I2C module.
Definition: usci_i2c.c:112
uint8_t UI2C_ReadByte(UI2C_T *ui2c, uint8_t u8SlaveAddr)
Read a byte from Slave.
Definition: usci_i2c.c:1092
uint32_t UI2C_GetBusClockFreq(UI2C_T *ui2c)
This function returns the real bus clock of USCI_I2C module.
Definition: usci_i2c.c:272
void UI2C_ClearTimeoutFlag(UI2C_T *ui2c)
This function clears the time-out flag.
Definition: usci_i2c.c:94
uint32_t UI2C_ReadMultiBytesTwoRegs(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint16_t u16DataAddr, uint8_t *rdata, uint32_t u32rLen)
Specify two bytes register address and read multi bytes from Slave.
Definition: usci_i2c.c:1576
void UI2C_Close(UI2C_T *ui2c)
This function closes the USCI_I2C module.
Definition: usci_i2c.c:79
uint8_t UI2C_WriteByteOneReg(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t u8DataAddr, uint8_t data)
Specify a byte register address and write a byte to Slave.
Definition: usci_i2c.c:763
void UI2C_SetSlaveAddrMask(UI2C_T *ui2c, uint8_t u8SlaveNo, uint16_t u16SlaveAddrMask)
Configure the mask bit of slave address.
Definition: usci_i2c.c:532
uint32_t UI2C_SetBusClockFreq(UI2C_T *ui2c, uint32_t u32BusClock)
This function sets bus clock frequency of USCI_I2C module.
Definition: usci_i2c.c:301
uint32_t UI2C_ReadMultiBytes(UI2C_T *ui2c, uint8_t u8SlaveAddr, uint8_t *rdata, uint32_t u32rLen)
Read multi bytes from Slave.
Definition: usci_i2c.c:1170