Functions | |
void | I2CMasterInitExpClk (uint32_t ui32Base, uint32_t ui32I2CClk, bool bFast) |
Initializes the I2C Master block. More... | |
static void | I2CMasterControl (uint32_t ui32Base, uint32_t ui32Cmd) |
Controls the state of the I2C Master module. More... | |
static void | I2CMasterSlaveAddrSet (uint32_t ui32Base, uint8_t ui8SlaveAddr, bool bReceive) |
Sets the address that the I2C Master will place on the bus. More... | |
static void | I2CMasterEnable (uint32_t ui32Base) |
Enables the I2C Master block. More... | |
static void | I2CMasterDisable (uint32_t ui32Base) |
Disables the I2C master block. More... | |
static bool | I2CMasterBusy (uint32_t ui32Base) |
Indicates whether or not the I2C Master is busy. More... | |
static bool | I2CMasterBusBusy (uint32_t ui32Base) |
Indicates whether or not the I2C bus is busy. More... | |
static uint32_t | I2CMasterDataGet (uint32_t ui32Base) |
Receives a byte that has been sent to the I2C Master. More... | |
static void | I2CMasterDataPut (uint32_t ui32Base, uint8_t ui8Data) |
Transmits a byte from the I2C Master. More... | |
uint32_t | I2CMasterErr (uint32_t ui32Base) |
Gets the error status of the I2C Master module. More... | |
static void | I2CMasterIntEnable (uint32_t ui32Base) |
Enables the I2C Master interrupt. More... | |
static void | I2CMasterIntDisable (uint32_t ui32Base) |
Disables the I2C Master interrupt. More... | |
static void | I2CMasterIntClear (uint32_t ui32Base) |
Clears I2C Master interrupt sources. More... | |
static bool | I2CMasterIntStatus (uint32_t ui32Base, bool bMasked) |
Gets the current I2C Master interrupt status. More... | |
static void | I2CSlaveEnable (uint32_t ui32Base) |
Enables the I2C Slave block. More... | |
static void | I2CSlaveInit (uint32_t ui32Base, uint8_t ui8SlaveAddr) |
Initializes the I2C Slave block. More... | |
static void | I2CSlaveAddressSet (uint32_t ui32Base, uint8_t ui8SlaveAddr) |
Sets the I2C slave address. More... | |
static void | I2CSlaveDisable (uint32_t ui32Base) |
Disables the I2C slave block. More... | |
static uint32_t | I2CSlaveStatus (uint32_t ui32Base) |
Gets the I2C Slave module status. More... | |
static uint32_t | I2CSlaveDataGet (uint32_t ui32Base) |
Receives a byte that has been sent to the I2C Slave. More... | |
static void | I2CSlaveDataPut (uint32_t ui32Base, uint8_t ui8Data) |
Transmits a byte from the I2C Slave. More... | |
static void | I2CSlaveIntEnable (uint32_t ui32Base, uint32_t ui32IntFlags) |
Enables individual I2C Slave interrupt sources. More... | |
static void | I2CSlaveIntDisable (uint32_t ui32Base, uint32_t ui32IntFlags) |
Disables individual I2C Slave interrupt sources. More... | |
static void | I2CSlaveIntClear (uint32_t ui32Base, uint32_t ui32IntFlags) |
Clears I2C Slave interrupt sources. More... | |
static uint32_t | I2CSlaveIntStatus (uint32_t ui32Base, bool bMasked) |
Gets the current I2C Slave interrupt status. More... | |
void | I2CIntRegister (uint32_t ui32Base, void(*pfnHandler)(void)) |
Registers an interrupt handler for the I2C module. More... | |
void | I2CIntUnregister (uint32_t ui32Base) |
Unregisters an interrupt handler for the I2C module. More... | |
The Inter-Integrated Circuit (I2C) API provides a set of functions for using the CC26xx I2C master and slave module. Functions are provided to perform the following actions:
The I2C master and slave module provide the ability to communicate to other IC devices over an I2C bus. The I2C bus is specified to support devices that can both transmit and receive (write and read) data. Also, devices on the I2C bus can be designated as either a master or a slave. The CC26xx I2C module supports both sending and receiving data as either a master or a slave, and also support the simultaneous operation as both a master and a slave. Finally, the CC26xx I2C module can operate at two speeds: standard (100 kb/s) and fast (400 kb/s).
The master and slave I2C module can generate interrupts. The I2C master module generates interrupts when a transmit or receive operation completes (or aborts due to an error). The I2C slave module can generate interrupts when data is sent or requested by a master and when a START or STOP condition is present.
When using this API to drive the I2C master module, the user must first initialize the I2C master module with a call to I2CMasterInitExpClk(). This function sets the bus speed and enables the master module.
The user may transmit or receive data after the successful initialization of the I2C master module. Data is transferred by first setting the slave address using I2CMasterSlaveAddrSet(). This function is also used to define whether the transfer is a send (a write to the slave from the master) or a receive (a read from the slave by the master). Then, if connected to an I2C bus that has multiple masters, the CC26xx I2C master must first call I2CMasterBusBusy() before trying to initiate the desired transaction. After determining that the bus is not busy, if trying to send data, the user must call the I2CMasterDataPut() function. The transaction can then be initiated on the bus by calling the I2CMasterControl() function with any of the following commands:
Any of these commands result in the master arbitrating for the bus, driving the start sequence onto the bus, and sending the slave address and direction bit across the bus. The remainder of the transaction can then be driven using either a polling or interrupt-driven method.
For the single send and receive cases, the polling method involves looping on the return from I2CMasterBusy(). Once the function indicates that the I2C master is no longer busy, the bus transaction is complete and can be checked for errors using I2CMasterErr(). If there are no errors, then the data has been sent or is ready to be read using I2CMasterDataGet(). For the burst send and receive cases, the polling method also involves calling the I2CMasterControl() function for each byte transmitted or received (using either the I2C_MASTER_CMD_BURST_SEND_CONT or I2C_MASTER_CMD_BURST_RECEIVE_CONT commands), and for the last byte sent or received (using either the I2C_MASTER_CMD_BURST_SEND_FINISH or I2C_MASTER_CMD_BURST_RECEIVE_FINISH commands).
If any error is detected during the burst transfer, the appropriate stop command (I2C_MASTER_CMD_BURST_SEND_ERROR_STOP or I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP) should be used to call the I2CMasterControl() function.
For the interrupt-driven transaction, the user must register an interrupt handler for the I2C devices and enable the I2C master interrupt; the interrupt occurs when the master is no longer busy.
When using this API to drive the I2C slave module, the user must first initialize the I2C slave module with a call to I2CSlaveInit(). This function enables the I2C slave module and initializes the address of the slave. After the initialization completes, the user may poll the slave status using I2CSlaveStatus() to determine if a master requested a send or receive operation. Depending on the type of operation requested, the user can call I2CSlaveDataPut() or I2CSlaveDataGet() to complete the transaction. Alternatively, the I2C slave can handle transactions using an interrupt handler registered with I2CIntRegister(), and by enabling the I2C slave interrupt.
The I2C API is broken into three groups of functions: those that handle status and initialization, those that deal with sending and receiving data, and those that deal with interrupts.
Status and initialization functions for the I2C module are:
Sending and receiving data from the I2C module is handled by the following functions:
The I2C master and slave interrupts are handled by the following functions:
void I2CIntRegister | ( | uint32_t | ui32Base, |
void(*)(void) | pfnHandler | ||
) |
Registers an interrupt handler for the I2C module.
This sets the handler to be called when an I2C interrupt occurs. This will enable the global interrupt in the interrupt controller; specific I2C interrupts must be enabled via I2CMasterIntEnable() and I2CSlaveIntEnable(). If necessary, it is the interrupt handler's responsibility to clear the interrupt source via I2CMasterIntClear() and I2CSlaveIntClear().
ui32Base | is the base address of the I2C Master module. |
pfnHandler | is a pointer to the function to be called when the I2C interrupt occurs. |
Definition at line 150 of file i2c.c.
void I2CIntUnregister | ( | uint32_t | ui32Base | ) |
Unregisters an interrupt handler for the I2C module.
This function will clear the handler to be called when an I2C interrupt occurs. This will also mask off the interrupt in the interrupt controller so that the interrupt handler no longer is called.
ui32Base | is the base address of the I2C Master module. |
Definition at line 181 of file i2c.c.
|
inlinestatic |
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 another master is currently using the bus.
ui32Base | is the base address of the I2C module. |
true
: I2C bus is busy.false
: I2C bus is not busy.
|
inlinestatic |
Indicates whether or not the I2C Master is busy.
This function returns an indication of whether or not the I2C Master is busy transmitting or receiving data.
ui32Base | is the base address of the I2C module. |
true
: I2C Master is busy.false
: I2C Master is not busy.
|
inlinestatic |
Controls the state of the I2C Master module.
This function is used to control the state of the Master module send and receive operations.
ui32Base | is the base address of the I2C module. |
ui32Cmd | is the command to be issued by the I2C Master module The parameter can be one of the following values:
|
Definition at line 224 of file i2c.h.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Enables the I2C Master block.
This will enable operation of the I2C Master block.
ui32Base | is the base address of the I2C module. |
Definition at line 300 of file i2c.h.
Referenced by I2CMasterInitExpClk().
uint32_t I2CMasterErr | ( | uint32_t | ui32Base | ) |
Gets the error status of the I2C Master module.
This function is used to obtain the error status of the Master module send and receive operations.
ui32Base | is the base address of the I2C module. |
void I2CMasterInitExpClk | ( | uint32_t | ui32Base, |
uint32_t | ui32I2CClk, | ||
bool | bFast | ||
) |
Initializes the I2C Master block.
This function initializes operation of the I2C Master block. Upon successful initialization of the I2C block, this function will have set the bus speed for the master, and will have enabled the I2C Master block.
If the parameter bFast
is true
, then the master block will be set up to transfer data at 400 kbps; otherwise, it will be set up to transfer data at 100 kbps.
ui32Base | is the base address of the I2C module. |
ui32I2CClk | is the rate of the clock supplied to the I2C module. |
bFast | set up for fast data transfers. |
Definition at line 64 of file i2c.c.
|
inlinestatic |
Clears I2C Master interrupt sources.
The I2C Master interrupt source is cleared, so that it no longer asserts. This must be done in the interrupt handler to keep it from being called again immediately upon exit.
ui32Base | is the base address of the I2C module. |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Gets the current I2C Master interrupt status.
This returns the interrupt status for the I2C Master module. Either the raw interrupt status or the status of interrupts that are allowed to reflect to the processor can be returned.
ui32Base | is the base address of the I2C Master module. |
bMasked | selects either raw or masked interrupt status.
|
true
: Active.false
: Not active.
|
inlinestatic |
Sets the address that the I2C Master will place on the bus.
This function will set the address that the I2C Master will place on the bus when initiating a transaction. When the bReceive parameter is set to true, the address will indicate that the I2C Master is initiating a read from the slave; otherwise the address will indicate that the I2C Master is initiating a write to the slave.
ui32Base | is the base address of the I2C module. |
ui8SlaveAddr | is a 7-bit slave address |
bReceive | flag indicates the type of communication with the slave.
|
|
inlinestatic |
|
inlinestatic |
Receives a byte that has been sent to the I2C Slave.
This function reads a byte of data from the I2C Slave Data Register.
ui32Base | is the base address of the I2C Slave module. |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Enables the I2C Slave block.
This will enable operation of the I2C Slave block.
ui32Base | is the base address of the I2C Slave module. |
Definition at line 621 of file i2c.h.
Referenced by I2CSlaveInit().
|
inlinestatic |
Initializes the I2C Slave block.
This function initializes operation of the I2C Slave block. Upon successful initialization of the I2C blocks, this function will have set the slave address and have enabled the I2C Slave block.
The parameter ui8SlaveAddr
is the value that will be compared against the slave address sent by an I2C master.
ui32Base | is the base address of the I2C Slave module. |
ui8SlaveAddr | is the 7-bit slave address. |
Definition at line 651 of file i2c.h.
|
inlinestatic |
Clears I2C Slave interrupt sources.
The specified I2C Slave interrupt sources are cleared, so that they no longer assert. This must be done in the interrupt handler to keep it from being called again immediately upon exit.
ui32Base | is the base address of the I2C module. |
ui32IntFlags | is a bit mask of the interrupt sources to be cleared. The parameter is the bitwise OR of any of the following: |
|
inlinestatic |
Disables individual I2C Slave interrupt sources.
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.
ui32Base | is the base address of the I2C Slave module. |
ui32IntFlags | is the bit mask of the interrupt sources to be disabled. The parameter is the bitwise OR of any of the following: |
|
inlinestatic |
Enables individual I2C Slave interrupt sources.
Enables 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.
ui32Base | is the base address of the I2C module. |
ui32IntFlags | is the bit mask of the slave interrupt sources to be enabled. The parameter is the bitwise OR of any of the following: |
|
inlinestatic |
Gets the current I2C Slave interrupt status.
This returns the interrupt status for the I2C Slave module. Either the raw interrupt status or the status of interrupts that are allowed to reflect to the processor can be returned.
ui32Base | is the base address of the I2C Slave module. |
bMasked | selects either raw or masked interrupt status.
|
|
inlinestatic |
Gets the I2C Slave module status.
This function will return the action requested from a master, if any.
ui32Base | is the base address of the I2C Slave module. |
#define I2C_MASTER_CMD_BURST_RECEIVE_CONT 0x00000009 |
Definition at line 112 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP 0x00000004 |
Definition at line 116 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_CMD_BURST_RECEIVE_FINISH 0x00000005 |
Definition at line 114 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_CMD_BURST_RECEIVE_START 0x0000000b |
Definition at line 110 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_CMD_BURST_SEND_CONT 0x00000001 |
Definition at line 104 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_CMD_BURST_SEND_ERROR_STOP 0x00000004 |
Definition at line 108 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_CMD_BURST_SEND_FINISH 0x00000005 |
Definition at line 106 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_CMD_BURST_SEND_START 0x00000003 |
Definition at line 102 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_CMD_SINGLE_SEND 0x00000007 |
Definition at line 98 of file i2c.h.
Referenced by I2CMasterControl().
#define I2C_MASTER_ERR_NONE 0 |
Definition at line 124 of file i2c.h.
Referenced by I2CMasterErr().
#define I2C_SLAVE_INT_DATA 0x00000001 |
Definition at line 146 of file i2c.h.
Referenced by I2CSlaveIntDisable(), and I2CSlaveIntEnable().
#define I2C_SLAVE_INT_START 0x00000002 |
Definition at line 145 of file i2c.h.
Referenced by I2CSlaveIntDisable(), and I2CSlaveIntEnable().
#define I2C_SLAVE_INT_STOP 0x00000004 |
Definition at line 144 of file i2c.h.
Referenced by I2CSlaveIntDisable(), and I2CSlaveIntEnable().