I2C Module¶
The inter-integrated circuit (I2C) API provides a set of functions to configure the device’s I2C module. The driver supports operation in both master and slave mode and provides functions to initialize the module, to send and receive data, to obtain status information, and to manage interrupts.
-
group
i2c_api
Defines
-
I2C_MASTER_SEND_MODE
0x0600U¶ Master-transmitter mode.
-
I2C_MASTER_RECEIVE_MODE
0x0400U¶ Master-receiver mode.
-
I2C_SLAVE_SEND_MODE
0x0200U¶ Slave-transmitter mode.
-
I2C_SLAVE_RECEIVE_MODE
0x0000U¶ Slave-receiver mode.
-
I2C_REPEAT_MODE
0x0080U¶ Only applies to master mode.
-
I2C_START_BYTE_MODE
0x0010U¶ Enable start byte mode.
-
I2C_FREE_DATA_FORMAT
0x0008U¶ Enable free data (no addr) format.
-
I2C_INT_ARB_LOST
0x00001U¶ Arbitration-lost interrupt.
-
I2C_INT_NO_ACK
0x00002U¶ NACK interrupt.
-
I2C_INT_REG_ACCESS_RDY
0x00004U¶ Register-access-ready interrupt.
-
I2C_INT_RX_DATA_RDY
0x00008U¶ Receive-data-ready interrupt.
-
I2C_INT_TX_DATA_RDY
0x00010U¶ Transmit-data-ready interrupt.
-
I2C_INT_STOP_CONDITION
0x00020U¶ Stop condition detected.
-
I2C_INT_ADDR_SLAVE
0x00200U¶ Addressed as slave interrupt.
-
I2C_INT_RXFF
0x10000U¶ RX FIFO level interrupt.
-
I2C_INT_TXFF
0x20000U¶ TX FIFO level interrupt.
-
I2C_STR_INTMASK
((uint16_t)I2C_INT_ARB_LOST| \
(uint16_t)
I2C_INT_NO_ACK| \
(uint16_t)
I2C_INT_REG_ACCESS_RDY| \
(uint16_t)
I2C_INT_RX_DATA_RDY| \
(uint16_t)
I2C_INT_TX_DATA_RDY| \
(uint16_t)
I2C_INT_STOP_CONDITION| \
(uint16_t)
I2C_INT_ADDR_SLAVE)¶
-
I2C_STS_ARB_LOST
0x0001U¶ Arbitration-lost.
-
I2C_STS_NO_ACK
0x0002U¶ No-acknowledgment (NACK)
-
I2C_STS_REG_ACCESS_RDY
0x0004U¶ Register-access-ready (ARDY)
-
I2C_STS_RX_DATA_RDY
0x0008U¶ Receive-data-ready.
-
I2C_STS_TX_DATA_RDY
0x0010U¶ Transmit-data-ready.
-
I2C_STS_STOP_CONDITION
0x0020U¶ Stop condition detected.
-
I2C_STS_BYTE_SENT
0x0040U¶ Byte transmit complete.
-
I2C_STS_ADDR_ZERO
0x0100U¶ Address of all zeros detected.
-
I2C_STS_ADDR_SLAVE
0x0200U¶ Addressed as slave.
-
I2C_STS_TX_EMPTY
0x0400U¶ Transmit shift register empty.
-
I2C_STS_RX_FULL
0x0800U¶ Receive shift register full.
-
I2C_STS_BUS_BUSY
0x1000U¶ Bus busy, wait for STOP or reset.
-
I2C_STS_NACK_SENT
0x2000U¶ NACK was sent.
-
I2C_STS_SLAVE_DIR
0x4000U¶ Addressed as slave transmitter.
Enums
-
enum
I2C_InterruptSource
¶ I2C interrupts to be returned by I2C_getInterruptSource().
Values:
-
enumerator
I2C_INTSRC_NONE
¶ No interrupt pending.
-
enumerator
I2C_INTSRC_ARB_LOST
¶ Arbitration-lost interrupt.
-
enumerator
I2C_INTSRC_NO_ACK
¶ NACK interrupt.
-
enumerator
I2C_INTSRC_REG_ACCESS_RDY
¶ Register-access-ready interrupt.
-
enumerator
I2C_INTSRC_RX_DATA_RDY
¶ Receive-data-ready interrupt.
-
enumerator
I2C_INTSRC_TX_DATA_RDY
¶ Transmit-data-ready interrupt.
-
enumerator
I2C_INTSRC_STOP_CONDITION
¶ Stop condition detected.
-
enumerator
I2C_INTSRC_ADDR_SLAVE
¶ Addressed as slave interrupt.
-
enumerator
-
enum
I2C_TxFIFOLevel
¶ Values that can be passed to I2C_setFIFOInterruptLevel() as the txLevel parameter, returned by I2C_getFIFOInterruptLevel() in the txLevel parameter, and returned by I2C_getTxFIFOStatus().
Values:
-
enumerator
I2C_FIFO_TXEMPTY
= 0x0000U¶ Transmit FIFO empty.
-
enumerator
I2C_FIFO_TX0
= 0x0000U¶ Transmit FIFO empty.
-
enumerator
I2C_FIFO_TX1
= 0x0001U¶ Transmit FIFO 1/16 full.
-
enumerator
I2C_FIFO_TX2
= 0x0002U¶ Transmit FIFO 2/16 full.
-
enumerator
I2C_FIFO_TX3
= 0x0003U¶ Transmit FIFO 3/16 full.
-
enumerator
I2C_FIFO_TX4
= 0x0004U¶ Transmit FIFO 4/16 full.
-
enumerator
I2C_FIFO_TX5
= 0x0005U¶ Transmit FIFO 5/16 full.
-
enumerator
I2C_FIFO_TX6
= 0x0006U¶ Transmit FIFO 6/16 full.
-
enumerator
I2C_FIFO_TX7
= 0x0007U¶ Transmit FIFO 7/16 full.
-
enumerator
I2C_FIFO_TX8
= 0x0008U¶ Transmit FIFO 8/16 full.
-
enumerator
I2C_FIFO_TX9
= 0x0009U¶ Transmit FIFO 9/16 full.
-
enumerator
I2C_FIFO_TX10
= 0x000AU¶ Transmit FIFO 10/16 full.
-
enumerator
I2C_FIFO_TX11
= 0x000BU¶ Transmit FIFO 11/16 full.
-
enumerator
I2C_FIFO_TX12
= 0x000CU¶ Transmit FIFO 12/16 full.
-
enumerator
I2C_FIFO_TX13
= 0x000DU¶ Transmit FIFO 13/16 full.
-
enumerator
I2C_FIFO_TX14
= 0x000EU¶ Transmit FIFO 14/16 full.
-
enumerator
I2C_FIFO_TX15
= 0x000FU¶ Transmit FIFO 15/16 full.
-
enumerator
I2C_FIFO_TX16
= 0x0010U¶ Transmit FIFO full.
-
enumerator
I2C_FIFO_TXFULL
= 0x0010U¶ Transmit FIFO full.
-
enumerator
-
enum
I2C_RxFIFOLevel
¶ Values that can be passed to I2C_setFIFOInterruptLevel() as the rxLevel parameter, returned by I2C_getFIFOInterruptLevel() in the rxLevel parameter, and returned by I2C_getRxFIFOStatus().
Values:
-
enumerator
I2C_FIFO_RXEMPTY
= 0x0000U¶ Receive FIFO empty.
-
enumerator
I2C_FIFO_RX0
= 0x0000U¶ Receive FIFO empty.
-
enumerator
I2C_FIFO_RX1
= 0x0001U¶ Receive FIFO 1/16 full.
-
enumerator
I2C_FIFO_RX2
= 0x0002U¶ Receive FIFO 2/16 full.
-
enumerator
I2C_FIFO_RX3
= 0x0003U¶ Receive FIFO 3/16 full.
-
enumerator
I2C_FIFO_RX4
= 0x0004U¶ Receive FIFO 4/16 full.
-
enumerator
I2C_FIFO_RX5
= 0x0005U¶ Receive FIFO 5/16 full.
-
enumerator
I2C_FIFO_RX6
= 0x0006U¶ Receive FIFO 6/16 full.
-
enumerator
I2C_FIFO_RX7
= 0x0007U¶ Receive FIFO 7/16 full.
-
enumerator
I2C_FIFO_RX8
= 0x0008U¶ Receive FIFO 8/16 full.
-
enumerator
I2C_FIFO_RX9
= 0x0009U¶ Receive FIFO 9/16 full.
-
enumerator
I2C_FIFO_RX10
= 0x000AU¶ Receive FIFO 10/16 full.
-
enumerator
I2C_FIFO_RX11
= 0x000BU¶ Receive FIFO 11/16 full.
-
enumerator
I2C_FIFO_RX12
= 0x000CU¶ Receive FIFO 12/16 full.
-
enumerator
I2C_FIFO_RX13
= 0x000DU¶ Receive FIFO 13/16 full.
-
enumerator
I2C_FIFO_RX14
= 0x000EU¶ Receive FIFO 14/16 full.
-
enumerator
I2C_FIFO_RX15
= 0x000FU¶ Receive FIFO 15/16 full.
-
enumerator
I2C_FIFO_RX16
= 0x0010U¶ Receive FIFO full.
-
enumerator
I2C_FIFO_RXFULL
= 0x0010U¶ Receive FIFO full.
-
enumerator
-
enum
I2C_BitCount
¶ Values that can be passed to I2C_setBitCount() as the size parameter.
Values:
-
enumerator
I2C_BITCOUNT_1
= 1U¶ 1 bit per data byte
-
enumerator
I2C_BITCOUNT_2
= 2U¶ 2 bits per data byte
-
enumerator
I2C_BITCOUNT_3
= 3U¶ 3 bits per data byte
-
enumerator
I2C_BITCOUNT_4
= 4U¶ 4 bits per data byte
-
enumerator
I2C_BITCOUNT_5
= 5U¶ 5 bits per data byte
-
enumerator
I2C_BITCOUNT_6
= 6U¶ 6 bits per data byte
-
enumerator
I2C_BITCOUNT_7
= 7U¶ 7 bits per data byte
-
enumerator
I2C_BITCOUNT_8
= 0U¶ 8 bits per data byte
-
enumerator
-
enum
I2C_AddressMode
¶ Values that can be passed to I2C_setAddressMode() as the mode parameter.
Values:
-
enumerator
I2C_ADDR_MODE_7BITS
= 0x0000U¶ 7-bit address
-
enumerator
I2C_ADDR_MODE_10BITS
= 0x0100U¶ 10-bit address
-
enumerator
-
enum
I2C_ExtendedMode
¶ Values that can be passed to I2C_setExtendedMode() as the mode parameter.
Values:
-
enumerator
I2C_EADDR_MODE_BC
= 1U¶ Backward compatibility.
-
enumerator
I2C_EADDR_MODE_FWD
= 2U¶ Forward compatibility.
-
enumerator
-
enum
I2C_EmulationMode
¶ Values that can be passed to I2C_setEmulationMode() as the mode parameter.
Values:
-
enumerator
I2C_EMULATION_STOP_SCL_LOW
= 0x0000U¶ If SCL is low, keep it low. If high, stop when it goes low again.
-
enumerator
I2C_EMULATION_FREE_RUN
= 0x4000U¶ Continue I2C operation regardless.
-
enumerator
-
enum
I2C_DutyCycle
¶ Values that can be passed to I2C_initMaster() as the dutyCycle parameter.
Values:
-
enumerator
I2C_DUTYCYCLE_33
¶ Clock duty cycle is 33%.
-
enumerator
I2C_DUTYCYCLE_50
¶ Clock duty cycle is 55%.
-
enumerator
Functions
-
void
I2C_enableModule
(uint32_t base)¶ Enables the I2C module.
This function enables operation of the I2C module.
- Parameters
base
: is the base address of the I2C instance used.
- Return
None.
-
void
I2C_disableModule
(uint32_t base)¶ Disables the I2C module.
This function disables operation of the I2C module.
- Parameters
base
: is the base address of the I2C instance used.
- Return
None.
-
void
I2C_enableFIFO
(uint32_t base)¶ Enables the transmit and receive FIFOs.
This functions enables the transmit and receive FIFOs in the I2C.
- Parameters
base
: is the base address of the I2C instance used.
- Return
None.
-
void
I2C_disableFIFO
(uint32_t base)¶ Disables the transmit and receive FIFOs.
This functions disables the transmit and receive FIFOs in the I2C.
- Parameters
base
: is the base address of the I2C instance used.
- Return
None.
-
void
I2C_setFIFOInterruptLevel
(uint32_t base, I2C_TxFIFOLevel txLevel, I2C_RxFIFOLevel rxLevel)¶ Sets the FIFO level at which interrupts are generated.
This function sets the FIFO level at which transmit and receive interrupts are generated. The transmit FIFO interrupt flag will be set when the FIFO reaches a value less than or equal to
txLevel. The receive FIFO flag will be set when the FIFO reaches a value greater than or equal to rxLevel.- Parameters
base
: is the base address of the I2C instance used.txLevel
: is the transmit FIFO interrupt level, specified as I2C_FIFO_TX0, I2C_FIFO_TX1, I2C_FIFO_TX2, … or I2C_FIFO_TX16.rxLevel
: is the receive FIFO interrupt level, specified as I2C_FIFO_RX0, I2C_FIFO_RX1, I2C_FIFO_RX2, … or I2C_FIFO_RX16.
- Return
None.
-
void
I2C_getFIFOInterruptLevel
(uint32_t base, I2C_TxFIFOLevel *txLevel, I2C_RxFIFOLevel *rxLevel)¶ Gets the FIFO level at which interrupts are generated.
This function gets the FIFO level at which transmit and receive interrupts are generated. The transmit FIFO interrupt flag will be set when the FIFO reaches a value less than or equal to
txLevel. The receive FIFO flag will be set when the FIFO reaches a value greater than or equal to rxLevel.- Parameters
base
: is the base address of the I2C instance used.txLevel
: is a pointer to storage for the transmit FIFO level, returned as one of I2C_FIFO_TX0, I2C_FIFO_TX1, I2C_FIFO_TX2, … or I2C_FIFO_TX16.rxLevel
: is a pointer to storage for the receive FIFO level, returned as one of I2C_FIFO_RX0, I2C_FIFO_RX1, I2C_FIFO_RX2, … or I2C_FIFO_RX16.
- Return
None.
-
I2C_TxFIFOLevel
I2C_getTxFIFOStatus
(uint32_t base)¶ Get the transmit FIFO status
This function gets the current number of words in the transmit FIFO.
- Parameters
base
: is the base address of the I2C instance used.
- Return
Returns the current number of words in the transmit FIFO specified as one of the following: I2C_FIFO_TX0, I2C_FIFO_TX1, I2C_FIFO_TX2, I2C_FIFO_TX3, …, or I2C_FIFO_TX16
-
I2C_RxFIFOLevel
I2C_getRxFIFOStatus
(uint32_t base)¶ Get the receive FIFO status
This function gets the current number of words in the receive FIFO.
- Parameters
base
: is the base address of the I2C instance used.
- Return
Returns the current number of words in the receive FIFO specified as one of the following: I2C_FIFO_RX0, I2C_FIFO_RX1, I2C_FIFO_RX2, I2C_FIFO_RX3, …, or I2C_FIFO_RX16
-
void
I2C_setSlaveAddress
(uint32_t base, uint16_t slaveAddr)¶ Sets the address that the I2C Master places on the bus.
This function configures the address that the I2C Master places on the bus when initiating a transaction.
- Parameters
base
: is the base address of the I2C instance used.slaveAddr
: 7-bit or 10-bit slave address
- Return
None.
-
void
I2C_setOwnSlaveAddress
(uint32_t base, uint16_t slaveAddr)¶ Sets the slave address for this I2C module.
This function writes the specified slave address.
- Parameters
base
: is the base address of the I2C Slave module.slaveAddr
: is the 7-bit or 10-bit slave address
The parameter slaveAddr is the value that is compared against the slave address sent by an I2C master.
- Return
None.
-
bool
I2C_isBusBusy
(uint32_t base)¶ Indicates whether or not the I2C bus is busy.
This function returns an indication of whether or not the I2C bus is busy. This function can be used in a multi-master environment to determine if the bus is free for another data transfer.
- Parameters
base
: is the base address of the I2C instance used.
- Return
Returns true if the I2C bus is busy; otherwise, returns false.
-
uint16_t
I2C_getStatus
(uint32_t base)¶ Gets the current I2C module status.
This function returns the status for the I2C module.
- Parameters
base
: is the base address of the I2C instance used.
- Return
The current module status, enumerated as a bit field of
I2C_STS_ARB_LOST - Arbitration-lost
I2C_STS_NO_ACK - No-acknowledgment (NACK)
I2C_STS_REG_ACCESS_RDY - Register-access-ready (ARDY)
I2C_STS_RX_DATA_RDY - Receive-data-ready
I2C_STS_TX_DATA_RDY - Transmit-data-ready
I2C_STS_STOP_CONDITION - Stop condition detected
I2C_STS_BYTE_SENT - Byte transmit complete
I2C_STS_ADDR_ZERO - Address of all zeros detected
I2C_STS_ADDR_SLAVE - Addressed as slave
I2C_STS_TX_EMPTY - Transmit shift register empty
I2C_STS_RX_FULL - Receive shift register full
I2C_STS_BUS_BUSY - Bus busy, wait for STOP or reset
I2C_STS_NACK_SENT - NACK was sent
I2C_STS_SLAVE_DIR- Addressed as slave transmitter
-
void
I2C_clearStatus
(uint32_t base, uint16_t stsFlags)¶ Clears I2C status flags.
This function clears the specified I2C status flags. The
stsFlags parameter is the logical OR of the following values:I2C_STS_ARB_LOST
I2C_STS_NO_ACK,
I2C_STS_REG_ACCESS_RDY
I2C_STS_RX_DATA_RDY
I2C_STS_STOP_CONDITION
I2C_STS_BYTE_SENT
I2C_STS_NACK_SENT
I2C_STS_SLAVE_DIR
- Parameters
base
: is the base address of the I2C instance used.stsFlags
: is a bit mask of the status flags to be cleared.
- Note
Note that some of the status flags returned by I2C_getStatus() cannot be cleared by this function. Some may only be cleared by hardware or a reset of the I2C module.
- Return
None.
-
void
I2C_setConfig
(uint32_t base, uint16_t config)¶ Controls the state of the I2C module.
This function is used to control the state of the master and slave send and receive operations. The
config is a logical OR of the following options.- Parameters
base
: is the base address of the I2C instance used.config
: is the command to be issued to the I2C module.
One of the following four options:
I2C_MASTER_SEND_MODE - Master-transmitter mode
I2C_MASTER_RECEIVE_MODE - Master-receiver mode
I2C_SLAVE_SEND_MODE - Slave-transmitter mode
I2C_SLAVE_RECEIVE_MODE - Slave-receiver mode
Any of the following:
I2C_REPEAT_MODE - Sends data until stop bit is set, ignores data count
I2C_START_BYTE_MODE - Use start byte mode
I2C_FREE_DATA_FORMAT - Use free data format, transfers have no address
- Return
None.
-
void
I2C_setBitCount
(uint32_t base, I2C_BitCount size)¶ Sets the data byte bit count the I2C module.
The
size parameter is a value I2C_BITCOUNT_x where x is the number of bits per data byte. The default and maximum size is 8 bits.- Parameters
base
: is the base address of the I2C instance used.size
: is the number of bits per data byte.
- Return
None.
-
void
I2C_sendStartCondition
(uint32_t base)¶ Issues an I2C START condition.
This function causes the I2C module to generate a start condition. This function is only valid when the I2C module specified by the
base parameter is a master.- Parameters
base
: is the base address of the I2C instance used.
- Return
None.
-
void
I2C_sendStopCondition
(uint32_t base)¶ Issues an I2C STOP condition.
This function causes the I2C module to generate a stop condition. This function is only valid when the I2C module specified by the
base parameter is a master.- Parameters
base
: is the base address of the I2C instance used.
To check on the status of the STOP condition, I2C_getStopConditionStatus() can be used.
- Return
None.
-
void
I2C_sendNACK
(uint32_t base)¶ Issues a no-acknowledge (NACK) bit.
This function causes the I2C module to generate a NACK bit. This is only applicable when the I2C module is acting as a receiver.
- Parameters
base
: is the base address of the I2C instance used.
- Return
None.
-
uint16_t
I2C_getData
(uint32_t base)¶ Receives a byte that has been sent to the I2C.
This function reads a byte of data from the I2C Data Receive Register.
- Parameters
base
: is the base address of the I2C instance used.
- Return
Returns the byte received from by the I2C cast as an uint16_t.
-
void
I2C_putData
(uint32_t base, uint16_t data)¶ Transmits a byte from the I2C.
This function places the supplied data into I2C Data Transmit Register.
- Parameters
base
: is the base address of the I2C instance used.data
: is the data to be transmitted from the I2C Master.
- Return
None.
-
bool
I2C_getStopConditionStatus
(uint32_t base)¶ Get stop condition status.
This function reads and returns the stop condition bit status.
- Parameters
base
: is the base address of the I2C instance used.
- Return
Returns true if the STP bit has been set by the device to generate a stop condition when the internal data counter of the I2C module has reached 0. Returns false when the STP bit is zero. This bit is automatically cleared after the stop condition has been generated.
-
void
I2C_setDataCount
(uint32_t base, uint16_t count)¶ Set number of bytes to be to transfer or receive when repeat mode is off.
This function sets the number of bytes to transfer or receive when repeat mode is off.
- Parameters
base
: is the base address of the I2C instance used.count
: is the value to be put in the I2C data count register.
- Return
None.
-
void
I2C_setAddressMode
(uint32_t base, I2C_AddressMode mode)¶ Sets the addressing mode to either 7-bit or 10-bit.
This function configures the I2C module for either a 7-bit address (default) or a 10-bit address. The
mode parameter configures the address length to 10 bits when its value is I2C_ADDR_MODE_10BITS and 7 bits when I2C_ADDR_MODE_7BITS.- Parameters
base
: is the base address of the I2C instance used.mode
: is the address mode, 7-bit or 10-bit.
- Return
None.
-
void
I2C_setEmulationMode
(uint32_t base, I2C_EmulationMode mode)¶ Sets I2C emulation mode.
This function sets the behavior of the I2C operation when an emulation suspend occurs. The
mode parameter can be one of the following:- Parameters
base
: is the base address of the I2C instance used.mode
: is the emulation mode.
I2C_EMULATION_STOP_SCL_LOW - If SCL is low when the breakpoint occurs, the I2C module stops immediately. If SCL is high, the I2C module waits until SCL becomes low and then stops.
I2C_EMULATION_FREE_RUN - I2C operation continues regardless of a the suspend.
- Return
None.
-
void
I2C_enableLoopback
(uint32_t base)¶ Enables I2C loopback mode.
This function enables loopback mode. This mode is only valid during master mode and is helpful during device testing as it causes data transmitted out of the data transmit register to be received in data receive register.
- Parameters
base
: is the base address of the I2C instance used.
- Return
None.
-
void
I2C_disableLoopback
(uint32_t base)¶ Disables I2C loopback mode.
This function disables loopback mode. Loopback mode is disabled by default after reset.
- Parameters
base
: is the base address of the I2C instance used.
- Return
None.
-
I2C_InterruptSource
I2C_getInterruptSource
(uint32_t base)¶ Returns the current I2C interrupt source.
This function returns the event that generated an I2C basic (non-FIFO) interrupt. The possible sources are the following:
I2C_INTSRC_NONE
I2C_INTSRC_ARB_LOST
I2C_INTSRC_NO_ACK
I2C_INTSRC_REG_ACCESS_RDY
I2C_INTSRC_RX_DATA_RDY
I2C_INTSRC_TX_DATA_RDY
I2C_INTSRC_STOP_CONDITION
I2C_INTSRC_ADDR_SLAVE
- Parameters
base
: is the base address of the I2C instance used.
Calling this function will result in hardware automatically clearing the current interrupt code and if ready, loading the next pending enabled interrupt. It will also clear the corresponding interrupt flag if the source is I2C_INTSRC_ARB_LOST, I2C_INTSRC_NO_ACK, or I2C_INTSRC_STOP_CONDITION.
- Note
Note that this function differs from I2C_getInterruptStatus() in that it returns a single interrupt source. I2C_getInterruptSource() will return the status of all interrupt flags possible, including the flags that aren’t necessarily enabled to generate interrupts.
- Return
None.
-
void
I2C_setExtendedMode
(uint32_t base, I2C_ExtendedMode mode)¶ Sets the compatibility mode to support I2C Extended Mode.
This function configures the I2C module for either a Forward or Backward compatibilty. The
mode parameter configures the compatibility to Forward when its value is I2C_EADDR_MODE_FWD and Backward when I2C_EADDR_MODE_BC.- Parameters
base
: is the base address of the I2C instance used.mode
: is the compatibility modes.
- Return
None.
-
void
I2C_initMaster
(uint32_t base, uint32_t sysclkHz, uint32_t bitRate, I2C_DutyCycle dutyCycle)¶ Initializes the I2C Master.
This function initializes operation of the I2C Master by configuring the bus speed for the master. Note that the I2C module
must be put into reset before calling this function. You can do this with the function I2C_disableModule().- Parameters
base
: is the base address of the I2C instance used.sysclkHz
: is the rate of the clock supplied to the I2C module (SYSCLK) in Hz.bitRate
: is the rate of the master clock signal, SCL.dutyCycle
: is duty cycle of the SCL signal.
A programmable prescaler in the I2C module divides down the input clock (rate specified by sysclkHz) to produce the module clock (calculated to be around 10 MHz in this function). That clock is then divided down further to configure the SCL signal to run at the rate specified by bitRate. The dutyCycle parameter determines the percentage of time high and time low on the clock signal. The valid values are I2C_DUTYCYCLE_33 for 33% and I2C_DUTYCYCLE_50 for 50%.
The peripheral clock is the system clock. This value is returned by SysCtl_getClock(), or it can be explicitly hard coded if it is constant and known (to save the code/execution overhead of a call to SysCtl_getClock()).
- Return
None.
-
void
I2C_enableInterrupt
(uint32_t base, uint32_t intFlags)¶ Enables I2C interrupt sources.
This function enables the indicated I2C Master interrupt sources. Only the sources that are enabled can be reflected to the processor interrupt. Disabled sources have no effect on the processor.
- Parameters
base
: is the base address of the I2C instance used.intFlags
: is the bit mask of the interrupt sources to be enabled.
The intFlags parameter is the logical OR of any of the following:
I2C_INT_ARB_LOST - Arbitration-lost interrupt
I2C_INT_NO_ACK - No-acknowledgment (NACK) interrupt
I2C_INT_REG_ACCESS_RDY - Register-access-ready interrupt
I2C_INT_RX_DATA_RDY - Receive-data-ready interrupt
I2C_INT_TX_DATA_RDY - Transmit-data-ready interrupt
I2C_INT_STOP_CONDITION - Stop condition detected
I2C_INT_ADDR_SLAVE - Addressed as slave interrupt
I2C_INT_RXFF - RX FIFO level interrupt
I2C_INT_TXFF - TX FIFO level interrupt
- Note
I2C_INT_RXFF and I2C_INT_TXFF are associated with the I2C FIFO interrupt vector. All others are associated with the I2C basic interrupt.
- Return
None.
-
void
I2C_disableInterrupt
(uint32_t base, uint32_t intFlags)¶ Disables I2C interrupt sources.
This function disables the indicated I2C Slave interrupt sources. Only the sources that are enabled can be reflected to the processor interrupt. Disabled sources have no effect on the processor.
- Parameters
base
: is the base address of the I2C instance used.intFlags
: is the bit mask of the interrupt sources to be disabled.
The intFlags parameter has the same definition as the intFlags parameter to I2C_enableInterrupt().
- Return
None.
-
uint32_t
I2C_getInterruptStatus
(uint32_t base)¶ Gets the current I2C interrupt status.
This function returns the interrupt status for the I2C module.
- Parameters
base
: is the base address of the I2C instance used.
- Return
The current interrupt status, enumerated as a bit field of
I2C_INT_ARB_LOST
I2C_INT_NO_ACK
I2C_INT_REG_ACCESS_RDY
I2C_INT_RX_DATA_RDY
I2C_INT_TX_DATA_RDY
I2C_INT_STOP_CONDITION
I2C_INT_ADDR_SLAVE
I2C_INT_RXFF
I2C_INT_TXFF
- Note
This function will only return the status flags associated with interrupts. However, a flag may be set even if its corresponding interrupt is disabled.
-
void
I2C_clearInterruptStatus
(uint32_t base, uint32_t intFlags)¶ Clears I2C interrupt sources.
The specified I2C interrupt sources are cleared, so that they no longer assert. This function must be called in the interrupt handler to keep the interrupt from being triggered again immediately upon exit.
- Parameters
base
: is the base address of the I2C instance used.intFlags
: is a bit mask of the interrupt sources to be cleared.
The intFlags parameter has the same definition as the intFlags parameter to I2C_enableInterrupt().
- Note
I2C_INT_RXFF and I2C_INT_TXFF are associated with the I2C FIFO interrupt vector. All others are associated with the I2C basic interrupt.
- Note
Also note that some of the status flags returned by I2C_getInterruptStatus() cannot be cleared by this function. Some may only be cleared by hardware or a reset of the I2C module.
- Return
None.
-
Before initializing the I2C module, the user first must put the module into the reset state by calling I2C_disableModule(). When using the API in master mode, the user must then call I2C_initMaster() which will configure the rate and duty cycle of the master clock. For slave mode, I2C_setOwnSlaveAddress() will need to be called to set the module’s address.
For both modes, this is also the time to do any FIFO or interrupt configuration. FIFOs are configured using I2C_enableFIFO() and I2C_disableFIFO() and I2C_setFIFOInterruptLevel() if interrupts are desired. The functions I2C_enableInterrupt(), I2C_disableInterrupt(), I2C_clearInterruptStatus(), and I2C_getInterruptStatus() are for management of interrupts. Note that the I2C module uses separate interrupt lines for its basic and FIFO interrupts although the functions to configure them are the same.
When configuration is complete, I2C_enableModule() should be called to enable the operation of the module.
To do a transfer, for both master and slave modes, I2C_setConfig() should be called to configure the behavior of the module. A master will need to set I2C_setSlaveAddress() to set the address of the slave to which it will communicate. I2C_putData() will place data in the transmit buffer. A start condition can be sent by a master using I2C_sendStartCondition().
When receiving data, the status of data received can be checked using I2C_getStatus() or if in FIFO mode, I2C_getRxFIFOStatus(). I2C_getData() will read the data from the receive buffer and return it.
The code for this module is contained in driverlib/i2c.c, with driverlib/i2c.h containing the API declarations for use by applications.