Sapphire SoC DS Sapphire SoC UG Sapphire HP SoC DS Sapphire HP SoC UG RISC-V Embedded IDE UG Board Support Package
Loading...
Searching...
No Matches
i2c.h
Go to the documentation of this file.
1
2// Copyright (C) 2013-2026 Efinix Inc. All rights reserved.
3// Full license header bsp/efinix/EfxSapphireSocRV64/include/LICENSE.MD
5
6#ifndef I2C_H
7#define I2C_H
8
19
20
21#include <stdint.h>
22#include "type.h"
23#include "soc.h"
24
25#ifdef __cplusplus
26extern "C" {
27#endif
37
38/* ========================================================================== */
39/* SUB-GROUP : REGISTER DEFINITIONS */
40/* ========================================================================== */
41
51 #define I2C_MODE_CPOL (1 << 0)
52 #define I2C_MODE_CPHA (1 << 1)
54
58 #define I2C_TX_VALUE (0xFF)
59 #define I2C_TX_VALID (1 << 8)
60 #define I2C_TX_ENABLE (1 << 9)
61 #define I2C_TX_REPEAT (1 << 10)
62 #define I2C_TX_DISABLE_ON_DATA_CONFLICT (1 << 11)
63 #define I2C_RX_VALUE (0xFF)
64 #define I2C_RX_VALID (1 << 8)
65 #define I2C_RX_LISTEN (1 << 9)
67
71 #define I2C_MASTER_BUSY (1 << 0)
72 #define I2C_MASTER_START (1 << 4)
73 #define I2C_MASTER_STOP (1 << 5)
74 #define I2C_MASTER_DROP (1 << 6)
75 #define I2C_MASTER_RECOVER (1 << 7)
76 #define I2C_MASTER_START_DROPPED (1 << 9)
77 #define I2C_MASTER_STOP_DROPPED (1 << 10)
78 #define I2C_MASTER_RECOVER_DROPPED (1 << 11)
79 #define I2C_SLAVE_STATUS_IN_FRAME (1 << 0)
80 #define I2C_SLAVE_STATUS_SDA (1 << 1)
81 #define I2C_SLAVE_STATUS_SCL (1 << 2)
82 #define I2C_SLAVE_OVERRIDE_SDA (1 << 1)
83 #define I2C_SLAVE_OVERRIDE_SCL (1 << 2)
85
89 #define I2C_FILTER_7_BITS (0)
90 #define I2C_FILTER_10_BITS (1 << 14)
91 #define I2C_FILTER_ENABLE (1 << 15)
93
97 #define I2C_READ 0x01
98 #define I2C_WRITE 0x00
100
101
118 #ifndef TX_AND_CHECK
119 #define TX_AND_CHECK(inst, byte) \
120 do { \
121 i2c_txByte(inst, (byte)); \
122 i2c_txNackBlocking(inst); \
123 i2c_rxAckWait(inst); \
124 } while(0)
125 #endif
127 // End of I2C_Macros group
129
130/* ========================================================================== */
131/* SUB-GROUP : Data Types */
132/* ========================================================================== */
133
140
145
160
161 // End of I2C_ENUM group
163
164
165/* ========================================================================== */
166/* SUB-GROUP : DATA STRUCTS */
167/* ========================================================================== */
198
204 typedef volatile struct
205 {
208
210
240
269
270
271 // End of I2C_Types group
273
274/* ========================================================================== */
275/* SUB-GROUP: FUNCTIONS */
276/* ========================================================================== */
277
284
294
300 void i2c_setSlaveOverride(i2c_instance_t *inst, u32 value);
301
348
350
355
385 void i2c_stopMaster(i2c_instance_t *inst);
400 void i2c_dropMaster(i2c_instance_t *inst);
406 u32 i2c_checkMasterBusy(i2c_instance_t *inst); //End of I2C Master Functions group
408
409
418 void i2c_listenAck(i2c_instance_t *inst);
424 void i2c_txByte(i2c_instance_t *inst,u8 byte);
429 void i2c_txAck(i2c_instance_t *inst);
434 void i2c_txNack(i2c_instance_t *inst);
439 void i2c_txAckWait(i2c_instance_t *inst);
444 void i2c_rxAckWait(i2c_instance_t *inst);
475 void i2c_txByteRepeat(i2c_instance_t *inst,u8 byte);
481 //End of I2C Transmit/Receive Functions group
483
494 void i2c_enableFilter(i2c_instance_t *inst, u32 filterId, u32 config);
501 void i2c_setFilterConfig(i2c_instance_t *inst, u32 filterId, u32 value);
520 //End of I2C Control Functions group
522
543 void i2c_writeData_b(i2c_instance_t *inst, u8 regAddr, u8 *data, u32 length);
560 void i2c_writeData_w(i2c_instance_t *inst, u16 regAddr, u8 *data, u32 length);
575 void i2c_readData_b(i2c_instance_t *inst, u8 regAddr, u8 *data , u32 length);
588 void i2c_readData_w(i2c_instance_t *inst, u16 regAddr, u8 *data , u32 length);
595 void i2c_setMux(i2c_instance_t *inst, const uint8_t cr);
596 //End of I2C Read/Write Functions group
598 //End of I2C Funcs group
600#ifdef __cplusplus
601}
602#endif // C_plusplus
603 // End of MAIN I2C Group
605
606#endif // I2C_H
i2c_interrupt_t
I2C Enable Interrupt List.
Definition i2c.h:147
@ I2C_INTERRUPT_FILTER
Trigger Interrupt when controller act as slave and its addres filter is triggered *‍/.
Definition i2c.h:158
@ I2C_INTERRUPT_END
Trigger Interrupt when STOP condition is sent *‍/.
Definition i2c.h:154
@ I2C_INTERRUPT_TX_ACK
Trigger Interrupt when transmit ACK *‍/.
Definition i2c.h:151
@ I2C_INTERRUPT_CLOCK_GEN_EXIT
Trigger Interrupt when Clock Generation is stop *‍/.
Definition i2c.h:156
@ I2C_INTERRUPT_TX_DATA
Trigger Interrupt when transmit data *‍/.
Definition i2c.h:150
@ I2C_INTERRUPT_RESTART
Trigger Interrupt when RESTART condition is sent *‍/.
Definition i2c.h:153
@ I2C_INTERRUPT_RX_DATA
Trigger Interrupt when receive data *‍/.
Definition i2c.h:148
@ I2C_INTERRUPT_START
Trigger Interrupt when START condition is sent *‍/.
Definition i2c.h:152
@ I2C_INTERRUPT_CLOCK_GEN_ENTER
Trigger Interrupt when Clock Generation is start *‍/.
Definition i2c.h:157
@ I2C_INTERRUPT_RX_ACK
Trigger Interrupt when receive ACK *‍/.
Definition i2c.h:149
@ I2C_INTERRUPT_DROP
Trigger Interrupt when DROP condition is sent *‍/.
Definition i2c.h:155
void i2c_clearInterruptFlag(i2c_instance_t *inst, i2c_interrupt_t value)
Clears specific I2C interrupt flags.
Definition i2c.c:214
void i2c_startMasterBlocking(i2c_instance_t *inst)
Initiate start condition for I2C master mode and waits until the operation is complete.
Definition i2c.c:89
void i2c_recoverMasterBlocking(i2c_instance_t *inst)
Initiate recover condition for I2C master mode and waits until the operation is complete.
Definition i2c.c:116
void i2c_setMux(i2c_instance_t *inst, const uint8_t cr)
Set I2C MUX control register.
Definition i2c.c:307
void i2c_txAckWait(i2c_instance_t *inst)
Waits until the transmission of an ACK signal is complete over the I2C bus.
Definition i2c.c:147
void i2c_readData_w(i2c_instance_t *inst, u16 regAddr, u8 *data, u32 length)
Read data with a 16-bit register address over I2C.
Definition i2c.c:280
void i2c_txAck(i2c_instance_t *inst)
Transmits an ACK signal over I2C.
Definition i2c.c:137
void i2c_restartMasterBlocking(i2c_instance_t *inst)
Initiate restart condition for I2C master mode and waits until the operation is complete.
Definition i2c.c:95
void i2c_txNack(i2c_instance_t *inst)
Transmits an NACK signal over I2C.
Definition i2c.c:142
void i2c_stopMaster(i2c_instance_t *inst)
Initiate stop condition for I2C master mode and sets the dropped status if necessary.
Definition i2c.c:100
void i2c_writeData_b(i2c_instance_t *inst, u8 regAddr, u8 *data, u32 length)
Write data with an 8-bit register address over I2C and check rx ack for each transaction.
Definition i2c.c:219
void i2c_applyConfig(i2c_instance_t *inst)
Apply the software configuration to the hardware.
Definition i2c.c:59
void i2c_txByte(i2c_instance_t *inst, u8 byte)
Transmits a byte of data over I2C.
Definition i2c.c:132
void i2c_enableFilter(i2c_instance_t *inst, u32 filterId, u32 config)
Enables and configures an I2C hardware filter.
Definition i2c.c:199
u32 i2c_getFilteringHit(i2c_instance_t *inst)
Get Filtering Hit.
Definition i2c.c:33
u32 i2c_getSlaveOverride(i2c_instance_t *inst)
Get Slave Override.
Definition i2c.c:48
void i2c_txNackRepeat(i2c_instance_t *inst)
Sends a NACK signal over I2C bus with repeat mode enabled.
Definition i2c.c:189
void i2c_disableInterrupt(i2c_instance_t *inst, i2c_interrupt_t value)
Disables specific I2C interrupts.
Definition i2c.c:204
u32 i2c_rxNack(i2c_instance_t *inst)
Checks if the received ACK signal is detected.
Definition i2c.c:174
u32 i2c_rxAck(i2c_instance_t *inst)
Reads data from I2C receive data register.
Definition i2c.c:179
u32 i2c_checkMasterBusy(i2c_instance_t *inst)
Checks if the I2C master is busy.
Definition i2c.c:84
u32 i2c_getSlaveStatus(i2c_instance_t *inst)
Get Slave Status.
Definition i2c.c:43
void i2c_txAckBlocking(i2c_instance_t *inst)
Sends an ACK signal over the I2C bus and waits until the transmission is complete.
Definition i2c.c:157
void i2c_startMaster(i2c_instance_t *inst)
Initiate start condition for I2C master mode and sets the dropped status if necessary.
Definition i2c.c:69
void i2c_txByteRepeat(i2c_instance_t *inst, u8 byte)
Sends a byte over I2C bus with repeat mode enabled.
Definition i2c.c:184
void i2c_rxAckWait(i2c_instance_t *inst)
Waits until the reception of an ACK signal is complete over the I2C bus.
Definition i2c.c:152
void i2c_setFilterConfig(i2c_instance_t *inst, u32 filterId, u32 value)
Sets the configuration for an I2C hardware filter.
Definition i2c.c:194
void i2c_setSlaveOverride(i2c_instance_t *inst, u32 value)
Write values to I2C hardware registers.
Definition i2c.c:54
u32 i2c_getMasterStatus(i2c_instance_t *inst)
Get Master Status.
Definition i2c.c:28
void i2c_enableInterrupt(i2c_instance_t *inst, i2c_interrupt_t value)
Enables specific I2C interrupts.
Definition i2c.c:209
void i2c_listenAck(i2c_instance_t *inst)
configures the I2C controller to listen for ACK signals on the receiver (RX) line.
Definition i2c.c:127
u32 i2c_getInterruptFlag(i2c_instance_t *inst)
Get Interrupt Flag.
Definition i2c.c:23
void i2c_readData_b(i2c_instance_t *inst, u8 regAddr, u8 *data, u32 length)
Read data with an 8-bit register address over I2C.
Definition i2c.c:253
void i2c_dropMaster(i2c_instance_t *inst)
Drops the current I2C master operation.
Definition i2c.c:111
void i2c_restartMaster(i2c_instance_t *inst)
Initiate restart condition for I2C master mode and sets the dropped status if necessary.
Definition i2c.c:74
void i2c_txNackBlocking(i2c_instance_t *inst)
Sends an NACK signal over the I2C bus and waits until the transmission is complete.
Definition i2c.c:163
void i2c_writeData_w(i2c_instance_t *inst, u16 regAddr, u8 *data, u32 length)
Write data with a 16-bit register address over I2C and check rx ack for each transaction.
Definition i2c.c:236
u32 i2c_getFilteringStatus(i2c_instance_t *inst)
Get Filtering Status.
Definition i2c.c:38
u32 i2c_rxData(i2c_instance_t *inst)
Reads data from I2C receive data register.
Definition i2c.c:169
void i2c_stopMasterBlocking(i2c_instance_t *inst)
Initiate stop condition for I2C master mode and waits until the operation is complete.
Definition i2c.c:105
void i2c_recoverMaster(i2c_instance_t *inst)
Initiate recover condition for I2C master mode and sets the dropped status if necessary.
Definition i2c.c:79
I2C hardware filter configuration map.
Definition i2c.h:205
u32 FILTER_CONFIG_1
Offset +0x04: Secondary Filter Config (Addr/Enable) *‍/.
Definition i2c.h:207
u32 FILTER_CONFIG_0
Offset +0x00: Primary Filter Config (Addr/Enable) *‍/.
Definition i2c.h:206
I2C hardware register map.
Definition i2c.h:216
u32 RESERVED2
Address Offset: 0x4C *‍/.
Definition i2c.h:231
u32 TSU_DATA
Address Offset: 0x30 *‍/.
Definition i2c.h:226
u32 SLAVE_OVERRIDE
Address Offset: 0x48 *‍/.
Definition i2c.h:230
u32 tLOW
Address Offset: 0x50 *‍/.
Definition i2c.h:232
u32 MASTER_STATUS
Address Offset: 0x40 *‍/.
Definition i2c.h:228
u32 tHIGH
Address Offset: 0x54 *‍/.
Definition i2c.h:233
i2c_filter_hwreg_t FILTER[3]
Address Offset: 0x8C *‍/.
Definition i2c.h:238
u32 INTERRUPT_CLEAR
Address Offset: 0x24 *‍/.
Definition i2c.h:223
u32 RESERVED0[4]
Reserved Space (0x0C to 0x16) *‍/.
Definition i2c.h:221
u32 HIT_CONTEXT
Address Offset: 0x80 *‍/.
Definition i2c.h:236
u32 RESERVED3[9]
Reserved Space (0x5C to 0x7C) *‍/.
Definition i2c.h:235
u32 RX_ACK
Address Offset: 0x0C *‍/.
Definition i2c.h:220
u32 RESERVED1[3]
Reserved Space (0x34 to 0x3C) *‍/.
Definition i2c.h:227
u32 TX_DATA
Address Offset: 0x00 *‍/.
Definition i2c.h:217
u32 TX_ACK
Address Offset: 0x04 *‍/.
Definition i2c.h:218
u32 SLAVE_STATUS
Address Offset: 0x44 *‍/.
Definition i2c.h:229
u32 INTERRUPT
Address Offset: 0x20 *‍/.
Definition i2c.h:222
u32 RX_DATA
Address Offset: 0x08 *‍/.
Definition i2c.h:219
u32 tBUF
Address Offset: 0x58 *‍/.
Definition i2c.h:234
u32 SAMPLING_CLOCK_DIVIDER
Address Offset: 0x28 *‍/.
Definition i2c.h:224
u32 FILTER_STATUS
Address Offset: 0x84 *‍/.
Definition i2c.h:237
u32 TIMEOUT
Address Offset: 0x2C *‍/.
Definition i2c.h:225
I2C instance. Holds the software registers and hardware pointer.
Definition i2c.h:259
u32 tBuf
Bus Free Time between STOP and START *‍/.
Definition i2c.h:267
u32 timeout
Timeout Value *‍/.
Definition i2c.h:263
u32 tLow
SCL Low Time *‍/.
Definition i2c.h:265
i2c_hwreg_t * hwreg
Pointer to Hardware Register Map *‍/.
Definition i2c.h:260
u32 tsuDat
Data Setup Time *‍/.
Definition i2c.h:264
u32 tHigh
SCL High Time *‍/.
Definition i2c.h:266
u32 samplingClockDivider
Sampling Clock Divider *‍/.
Definition i2c.h:262
u32 slaveAddress
7-bit Slave Address *‍/
Definition i2c.h:261
uint8_t u8
Definition type.h:26
uint16_t u16
Definition type.h:24
uint32_t u32
Definition type.h:22