I2C driver implementation for a MSP432E4 I2C controller.
The I2C header file should be included in an application as follows:
Refer to I2C.h for a complete description of APIs & example of use.
When operating at I2C_3330kHz, the I2CMSP432E4_HWAttrs.masterCode must be provided. If the master code is not provided, I2C_open() will fail. This driver assumes that the system clock is 120MHz. If the system clock is not 120MHz, I2C_open() will fail.
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <ti/devices/msp432e4/inc/msp432.h>
#include <ti/devices/msp432e4/driverlib/gpio.h>
#include <ti/devices/msp432e4/driverlib/pin_map.h>
#include <ti/drivers/dpl/SemaphoreP.h>
#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/gpio/GPIOMSP432E4.h>
#include <ti/drivers/I2C.h>
Go to the source code of this file.
Data Structures | |
struct | I2CMSP432E4_HWAttrs_ |
I2CMSP432E4 Hardware attributes. More... | |
struct | I2CMSP432E4_Object_ |
I2CMSP432E4 Object. More... | |
Typedefs | |
typedef enum I2CMSP432E4_Mode | I2CMSP432E4_Mode |
I2CMSP432E4 mode. More... | |
typedef struct I2CMSP432E4_HWAttrs_ | I2CMSP432E4_HWAttrs |
I2CMSP432E4 Hardware attributes. More... | |
typedef struct I2CMSP432E4_Object_ | I2CMSP432E4_Object |
I2CMSP432E4 Object. More... | |
Enumerations | |
enum | I2CMSP432E4_Mode { I2CMSP432E4_IDLE_MODE = 0, I2CMSP432E4_WRITE_MODE, I2CMSP432E4_READ_MODE, I2CMSP432E4_ERROR = 0xFF } |
I2CMSP432E4 mode. More... | |
Variables | |
const I2C_FxnTable | I2CMSP432E4_fxnTable |
#define I2CMSP432E4_PB2_I2C0SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTB, 2, GPIO_PB2_I2C0SCL) |
PB2 is used for I2C0SCL.
#define I2CMSP432E4_PB3_I2C0SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTB, 3, GPIO_PB3_I2C0SDA) |
PB3 is used for I2C0SDA.
#define I2CMSP432E4_PG0_I2C1SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTG, 0, GPIO_PG0_I2C1SCL) |
PG0 is used for I2C1SCL.
#define I2CMSP432E4_PR0_I2C1SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTR, 0, GPIO_PR0_I2C1SCL) |
PR0 is used for I2C1SCL.
#define I2CMSP432E4_PG1_I2C1SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTG, 1, GPIO_PG1_I2C1SDA) |
PG1 is used for I2C1SDA.
#define I2CMSP432E4_PR1_I2C1SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTR, 1, GPIO_PR1_I2C1SDA) |
PR1 is used for I2C1SDA.
#define I2CMSP432E4_PL1_I2C2SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTL, 1, GPIO_PL1_I2C2SCL) |
PL1 is used for I2C2SCL.
#define I2CMSP432E4_PP5_I2C2SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTP, 5, GPIO_PP5_I2C2SCL) |
PP5 is used for I2C2SCL.
#define I2CMSP432E4_PN5_I2C2SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTN, 5, GPIO_PN5_I2C2SCL) |
PN5 is used for I2C2SCL.
#define I2CMSP432E4_PG2_I2C2SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTG, 2, GPIO_PG2_I2C2SCL) |
PG2 is used for I2C2SCL.
#define I2CMSP432E4_PR2_I2C2SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTR, 2, GPIO_PR2_I2C2SCL) |
PR2 is used for I2C2SCL.
#define I2CMSP432E4_PL0_I2C2SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTL, 0, GPIO_PL0_I2C2SDA) |
PL0 is used for I2C2SDA.
#define I2CMSP432E4_PN4_I2C2SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTN, 4, GPIO_PN4_I2C2SDA) |
PN4 is used for I2C2SDA.
#define I2CMSP432E4_PP6_I2C2SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTP, 6, GPIO_PP6_I2C2SDA) |
PP6 is used for I2C2SDA.
#define I2CMSP432E4_PG3_I2C2SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTG, 3, GPIO_PG3_I2C2SDA) |
PG3 is used for I2C2SDA.
#define I2CMSP432E4_PR3_I2C2SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTR, 3, GPIO_PR3_I2C2SDA) |
PR3 is used for I2C2SDA.
#define I2CMSP432E4_PK4_I2C3SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTK, 4, GPIO_PK4_I2C3SCL) |
PK4 is used for I2C3SCL.
#define I2CMSP432E4_PG4_I2C3SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTG, 4, GPIO_PG4_I2C3SCL) |
PG4 is used for I2C3SCL.
#define I2CMSP432E4_PR4_I2C3SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTR, 4, GPIO_PR4_I2C3SCL) |
PR4 is used for I2C3SCL.
#define I2CMSP432E4_PK5_I2C3SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTK, 5, GPIO_PK5_I2C3SDA) |
PK5 is used for I2C3SDA.
#define I2CMSP432E4_PG5_I2C3SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTG, 5, GPIO_PG5_I2C3SDA) |
PG5 is used for I2C3SDA.
#define I2CMSP432E4_PR5_I2C3SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTR, 5, GPIO_PR5_I2C3SDA) |
PR5 is used for I2C3SDA.
#define I2CMSP432E4_PK6_I2C4SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTK, 6, GPIO_PK6_I2C4SCL) |
PK6 is used for I2C4SCL.
#define I2CMSP432E4_PG6_I2C4SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTG, 6, GPIO_PG6_I2C4SCL) |
PG6 is used for I2C4SCL.
#define I2CMSP432E4_PR6_I2C4SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTR, 6, GPIO_PR6_I2C4SCL) |
PR6 is used for I2C4SCL.
#define I2CMSP432E4_PK7_I2C4SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTK, 7, GPIO_PK7_I2C4SDA) |
PK7 is used for I2C4SDA.
#define I2CMSP432E4_PG7_I2C4SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTG, 7, GPIO_PG7_I2C4SDA) |
PG7 is used for I2C4SDA.
#define I2CMSP432E4_PR7_I2C4SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTR, 7, GPIO_PR7_I2C4SDA) |
PR7 is used for I2C4SDA.
#define I2CMSP432E4_PB0_I2C5SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTB, 0, GPIO_PB0_I2C5SCL) |
PB0 is used for I2C5SCL.
#define I2CMSP432E4_PB4_I2C5SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTB, 4, GPIO_PB4_I2C5SCL) |
PB4 is used for I2C5SCL.
#define I2CMSP432E4_PB1_I2C5SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTB, 1, GPIO_PB1_I2C5SDA) |
PB1 is used for I2C5SDA.
#define I2CMSP432E4_PB5_I2C5SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTB, 5, GPIO_PB5_I2C5SDA) |
PB5 is used for I2C5SDA.
#define I2CMSP432E4_PA6_I2C6SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTA, 6, GPIO_PA6_I2C6SCL) |
PA6 is used for I2C6SCL.
#define I2CMSP432E4_PB6_I2C6SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTB, 6, GPIO_PB6_I2C6SCL) |
PB6 is used for I2C6SCL.
#define I2CMSP432E4_PA7_I2C6SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTA, 7, GPIO_PA7_I2C6SDA) |
PA7 is used for I2C6SDA.
#define I2CMSP432E4_PB7_I2C6SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTB, 7, GPIO_PB7_I2C6SDA) |
PB7 is used for I2C6SDA.
#define I2CMSP432E4_PD0_I2C7SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTD, 0, GPIO_PD0_I2C7SCL) |
PD0 is used for I2C7SCL.
#define I2CMSP432E4_PA4_I2C7SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTA, 4, GPIO_PA4_I2C7SCL) |
PA4 is used for I2C7SCL.
#define I2CMSP432E4_PD1_I2C7SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTD, 1, GPIO_PD1_I2C7SDA) |
PD1 is used for I2C7SDA.
#define I2CMSP432E4_PA5_I2C7SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTA, 5, GPIO_PA5_I2C7SDA) |
PA5 is used for I2C7SDA.
#define I2CMSP432E4_PD2_I2C8SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTD, 2, GPIO_PD2_I2C8SCL) |
PD2 is used for I2C8SCL.
#define I2CMSP432E4_PA2_I2C8SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTA, 2, GPIO_PA2_I2C8SCL) |
PA2 is used for I2C8SCL.
#define I2CMSP432E4_PD3_I2C8SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTD, 3, GPIO_PD3_I2C8SDA) |
PD3 is used for I2C8SDA.
#define I2CMSP432E4_PA3_I2C8SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTA, 3, GPIO_PA3_I2C8SDA) |
PA3 is used for I2C8SDA.
#define I2CMSP432E4_PA0_I2C9SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTA, 0, GPIO_PA0_I2C9SCL) |
PA0 is used for I2C9SCL.
#define I2CMSP432E4_PE6_I2C9SCL GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTE, 6, GPIO_PE6_I2C9SCL) |
PE6 is used for I2C9SCL.
#define I2CMSP432E4_PA1_I2C9SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTA, 1, GPIO_PA1_I2C9SDA) |
PA1 is used for I2C9SDA.
#define I2CMSP432E4_PE7_I2C9SDA GPIOMSP432E4_pinConfigMask(GPIOMSP432E4_PORTE, 7, GPIO_PE7_I2C9SDA) |
PE7 is used for I2C9SDA.
typedef enum I2CMSP432E4_Mode I2CMSP432E4_Mode |
I2CMSP432E4 mode.
This enum defines the state of the I2C driver's state-machine. Do not modify.
typedef struct I2CMSP432E4_HWAttrs_ I2CMSP432E4_HWAttrs |
I2CMSP432E4 Hardware attributes.
The baseAddr and intNum fields are used by driverlib APIs and therefore must be populated by driverlib macro definitions. For MSP432E4 driverlib these definitions are found in:
intPriority is the I2C peripheral's interrupt priority, as defined by the underlying OS. It is passed unmodified to the underlying OS's interrupt handler creation code, so you need to refer to the OS documentation for usage. For example, for SYS/BIOS applications, refer to the ti.sysbios.family.arm.m3.Hwi documentation for SYS/BIOS usage of interrupt priorities. If the driver uses the ti.dpl interface instead of making OS calls directly, then the HwiP port handles the interrupt priority in an OS specific way. In the case of the SYS/BIOS port, intPriority is passed unmodified to Hwi_create().
A sample structure is shown below:
typedef struct I2CMSP432E4_Object_ I2CMSP432E4_Object |
I2CMSP432E4 Object.
The application must not access any member variables of this structure!
enum I2CMSP432E4_Mode |
const I2C_FxnTable I2CMSP432E4_fxnTable |