I2C driver implementation for a CC26XX I2C controller.
The I2C header file should be included in an application as follows:
Refer to I2C.h for a complete description of APIs.
The general I2C API is normally used in application code, e.g. I2C_open() is used instead of I2CCC26XX_open(). The board file will define the device specific config, and casting in the general API will ensure that the correct device specific functions are called. This is also reflected in the example code in Use Cases.
Before using the I2C in CC26XX:
The following is true for receive operation:
The following apply for transmit operation:
After I2C operation has ended:
If an error occurs during operation:
The I2CCC26XX driver sets a power constraint during transactions to keep the device out of standby; so when all tasks are blocked, the device will enter idle mode instead of standby. When the transactions have finished, the power constraint to prohibit standby is released. The following statements are valid:
Generic API Function | API Function | Description |
---|---|---|
I2C_init() | I2CCC26XX_init() | Initialize I2C driver |
I2C_open() | I2CCC26XX_open() | Initialize I2C HW and set system dependencies |
I2C_close() | I2CCC26XX_close() | Disable I2C HW and release system dependencies |
I2C_transfer() | I2CCC26XX_transfer() | Start I2C transfer |
The CC26XX I2C driver currently does not support:
Receive 10 bytes over I2C in I2C_MODE_BLOCKING.
Transmit 16 bytes over I2C in I2C_MODE_CALLBACK.
Transmit 10 bytes and then 32 bytes over I2C in I2C_MODE_CALLBACK.
The I2C driver interface produces log statements if instrumentation is enabled.
Diagnostics Mask | Log details |
---|---|
Diags_USER1 | basic I2C operations performed |
Diags_USER2 | detailed I2C operations performed |
#include <stdint.h>
#include <stdbool.h>
#include <ti/drivers/I2C.h>
#include <ti/drivers/pin/PINCC26XX.h>
#include <ti/drivers/Power.h>
#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/dpl/SwiP.h>
#include <ti/drivers/dpl/SemaphoreP.h>
Go to the source code of this file.
Data Structures | |
struct | I2CCC26XX_I2CPinCfg |
I2CCC26XX Pin Configuration. More... | |
struct | I2CCC26XX_HWAttrsV1 |
I2CCC26XX Hardware attributes. More... | |
Typedefs | |
typedef unsigned long | I2CBaseAddrType |
typedef struct I2CCC26XX_I2CPinCfg | I2CCC26XX_I2CPinCfg |
I2CCC26XX Pin Configuration. More... | |
typedef struct I2CCC26XX_HWAttrsV1 | I2CCC26XX_HWAttrsV1 |
I2CCC26XX Hardware attributes. More... | |
Variables | |
const I2C_FxnTable | I2CCC26XX_fxnTable |
typedef unsigned long I2CBaseAddrType |
I2C Base Address type.
typedef struct I2CCC26XX_I2CPinCfg I2CCC26XX_I2CPinCfg |
I2CCC26XX Pin Configuration.
Pin configuration that holds non-default pins. The default pin configuration is typically defined in I2CCC26XX_HWAttrsV1 placed in the board file. The pin configuration structure is used by setting the custom void pointer in the I2C_Params to point to this struct. If the custom void pointer is NULL, the I2CCC26XX_HWAttrsV1 pin mapping will be used.
typedef struct I2CCC26XX_HWAttrsV1 I2CCC26XX_HWAttrsV1 |
I2CCC26XX Hardware attributes.
The baseAddr and intNum fields define the base address and the interrupt number of the I2C peripheral. These values are passed to driverlib APIs and therefore must be populated by driverlib macro definitions. These macros are found in the header files:
The powerMngrId is the Power driver resource ID for the I2C peripheral. These macros are defined in PowerCC26XX.h
intPriority is the I2C peripheral's interrupt priority, as defined by the TI-RTOS kernel. This value is passed unmodified to Hwi_create().
swiPriority is the priority of a TI-RTOS kernel Swi that the I2C driver creates to finalize I2C transfers. See the documentation for the ti.sysbios.knl.Swi module for a description of Swi priorities.
sdaPin and sclPin define the SDA and SCL pin mapping, respectively. These are typically defined with a macro in a header file, which maps to an IOID. For example, CC1350_LAUNCHXL.h defines BOARD_I2C0_SDA0 to be IOID_5.
A sample structure is shown below:
const I2C_FxnTable I2CCC26XX_fxnTable |