nRF5 SDK v15.3.0
Modules | Data Structures | Macros | Typedefs | Enumerations | Functions
TWI driver

TWI peripheral driver. More...

Modules

 TWI peripheral driver configuration
 

Data Structures

struct  nrfx_twi_t
 Structure for the TWI master driver instance. More...
 
struct  nrfx_twi_config_t
 Structure for the TWI master driver instance configuration. More...
 
struct  nrfx_twi_xfer_desc_t
 Structure for a TWI transfer descriptor. More...
 
struct  nrfx_twi_evt_t
 Structure for a TWI event. More...
 

Macros

#define NRFX_TWI_INSTANCE(id)
 Macro for creating a TWI master driver instance. More...
 
#define NRFX_TWI_DEFAULT_CONFIG
 TWI master driver instance default configuration. More...
 
#define NRFX_TWI_FLAG_NO_XFER_EVT_HANDLER   (1UL << 2)
 
#define NRFX_TWI_FLAG_TX_NO_STOP   (1UL << 5)
 
#define NRFX_TWI_XFER_DESC_TX(addr, p_data, length)
 Macro for setting the TX transfer descriptor. More...
 
#define NRFX_TWI_XFER_DESC_RX(addr, p_data, length)
 Macro for setting the RX transfer descriptor. More...
 
#define NRFX_TWI_XFER_DESC_TXRX(addr, p_tx, tx_len, p_rx, rx_len)
 Macro for setting the TXRX transfer descriptor. More...
 
#define NRFX_TWI_XFER_DESC_TXTX(addr, p_tx, tx_len, p_tx2, tx_len2)
 Macro for setting the TXTX transfer descriptor. More...
 

Typedefs

typedef void(* nrfx_twi_evt_handler_t )(nrfx_twi_evt_t const *p_event, void *p_context)
 TWI event handler prototype.
 

Enumerations

enum  { NRFX_TWI_ENABLED_COUNT }
 
enum  nrfx_twi_evt_type_t {
  NRFX_TWI_EVT_DONE,
  NRFX_TWI_EVT_ADDRESS_NACK,
  NRFX_TWI_EVT_DATA_NACK
}
 TWI master driver event types. More...
 
enum  nrfx_twi_xfer_type_t {
  NRFX_TWI_XFER_TX,
  NRFX_TWI_XFER_RX,
  NRFX_TWI_XFER_TXRX,
  NRFX_TWI_XFER_TXTX
}
 TWI master driver transfer types. More...
 

Functions

nrfx_err_t nrfx_twi_init (nrfx_twi_t const *p_instance, nrfx_twi_config_t const *p_config, nrfx_twi_evt_handler_t event_handler, void *p_context)
 Function for initializing the TWI driver instance. More...
 
void nrfx_twi_uninit (nrfx_twi_t const *p_instance)
 Function for uninitializing the TWI instance. More...
 
void nrfx_twi_enable (nrfx_twi_t const *p_instance)
 Function for enabling the TWI instance. More...
 
void nrfx_twi_disable (nrfx_twi_t const *p_instance)
 Function for disabling the TWI instance. More...
 
nrfx_err_t nrfx_twi_tx (nrfx_twi_t const *p_instance, uint8_t address, uint8_t const *p_data, size_t length, bool no_stop)
 Function for sending data to a TWI slave. More...
 
nrfx_err_t nrfx_twi_rx (nrfx_twi_t const *p_instance, uint8_t address, uint8_t *p_data, size_t length)
 Function for reading data from a TWI slave. More...
 
nrfx_err_t nrfx_twi_xfer (nrfx_twi_t const *p_instance, nrfx_twi_xfer_desc_t const *p_xfer_desc, uint32_t flags)
 Function for preparing a TWI transfer. More...
 
bool nrfx_twi_is_busy (nrfx_twi_t const *p_instance)
 Function for checking the TWI driver state. More...
 
size_t nrfx_twi_data_count_get (nrfx_twi_t const *const p_instance)
 Function for getting the transferred data count. More...
 
uint32_t nrfx_twi_stopped_event_get (nrfx_twi_t const *p_instance)
 Function for returning the address of a STOPPED TWI event. More...
 
void nrfx_twi_0_irq_handler (void)
 
void nrfx_twi_1_irq_handler (void)
 

Detailed Description

TWI peripheral driver.

Macro Definition Documentation

#define NRFX_TWI_DEFAULT_CONFIG
Value:
{ \
.scl = 31, \
.sda = 31, \
.interrupt_priority = NRFX_TWI_DEFAULT_CONFIG_IRQ_PRIORITY, \
}

TWI master driver instance default configuration.

#define NRFX_TWI_FLAG_NO_XFER_EVT_HANDLER   (1UL << 2)

Interrupt after each transfer is suppressed, and the event handler is not called.

#define NRFX_TWI_FLAG_TX_NO_STOP   (1UL << 5)

Flag indicating that the TX transfer will not end with a stop condition.

#define NRFX_TWI_INSTANCE (   id)
Value:
{ \
.p_twi = NRFX_CONCAT_2(NRF_TWI, id), \
.drv_inst_idx = NRFX_CONCAT_3(NRFX_TWI, id, _INST_IDX), \
}

Macro for creating a TWI master driver instance.

#define NRFX_TWI_XFER_DESC_RX (   addr,
  p_data,
  length 
)
Value:
{ \
.type = NRFX_TWI_XFER_RX, \
.address = addr, \
.primary_length = length, \
.p_primary_buf = p_data, \
}

Macro for setting the RX transfer descriptor.

#define NRFX_TWI_XFER_DESC_TX (   addr,
  p_data,
  length 
)
Value:
{ \
.type = NRFX_TWI_XFER_TX, \
.address = addr, \
.primary_length = length, \
.p_primary_buf = p_data, \
}

Macro for setting the TX transfer descriptor.

#define NRFX_TWI_XFER_DESC_TXRX (   addr,
  p_tx,
  tx_len,
  p_rx,
  rx_len 
)
Value:
{ \
.type = NRFX_TWI_XFER_TXRX, \
.address = addr, \
.primary_length = tx_len, \
.secondary_length = rx_len, \
.p_primary_buf = p_tx, \
.p_secondary_buf = p_rx, \
}

Macro for setting the TXRX transfer descriptor.

#define NRFX_TWI_XFER_DESC_TXTX (   addr,
  p_tx,
  tx_len,
  p_tx2,
  tx_len2 
)
Value:
{ \
.type = NRFX_TWI_XFER_TXTX, \
.address = addr, \
.primary_length = tx_len, \
.secondary_length = tx_len2, \
.p_primary_buf = p_tx, \
.p_secondary_buf = p_tx2, \
}

Macro for setting the TXTX transfer descriptor.

Enumeration Type Documentation

TWI master driver event types.

Enumerator
NRFX_TWI_EVT_DONE 

Transfer completed event.

NRFX_TWI_EVT_ADDRESS_NACK 

Error event: NACK received after sending the address.

NRFX_TWI_EVT_DATA_NACK 

Error event: NACK received after sending a data byte.

TWI master driver transfer types.

Enumerator
NRFX_TWI_XFER_TX 

TX transfer.

NRFX_TWI_XFER_RX 

RX transfer.

NRFX_TWI_XFER_TXRX 

TX transfer followed by RX transfer with repeated start.

NRFX_TWI_XFER_TXTX 

TX transfer followed by TX transfer with repeated start.

Function Documentation

size_t nrfx_twi_data_count_get ( nrfx_twi_t const *const  p_instance)

Function for getting the transferred data count.

Parameters
[in]p_instancePointer to the driver instance structure.
Returns
Data count.
void nrfx_twi_disable ( nrfx_twi_t const *  p_instance)

Function for disabling the TWI instance.

Parameters
[in]p_instancePointer to the driver instance structure.
void nrfx_twi_enable ( nrfx_twi_t const *  p_instance)

Function for enabling the TWI instance.

Parameters
[in]p_instancePointer to the driver instance structure.
nrfx_err_t nrfx_twi_init ( nrfx_twi_t const *  p_instance,
nrfx_twi_config_t const *  p_config,
nrfx_twi_evt_handler_t  event_handler,
void *  p_context 
)

Function for initializing the TWI driver instance.

Parameters
[in]p_instancePointer to the driver instance structure.
[in]p_configPointer to the structure with initial configuration.
[in]event_handlerEvent handler provided by the user. If NULL, blocking mode is enabled.
[in]p_contextContext passed to event handler.
Return values
NRFX_SUCCESSIf initialization was successful.
NRFX_ERROR_INVALID_STATEIf the driver is in invalid state.
NRFX_ERROR_BUSYIf some other peripheral with the same instance ID is already in use. This is possible only if Peripheral Resource Sharing (PRS) module is enabled.
bool nrfx_twi_is_busy ( nrfx_twi_t const *  p_instance)

Function for checking the TWI driver state.

Parameters
[in]p_instanceTWI instance.
Return values
trueIf the TWI driver is currently busy performing a transfer.
falseIf the TWI driver is ready for a new transfer.
nrfx_err_t nrfx_twi_rx ( nrfx_twi_t const *  p_instance,
uint8_t  address,
uint8_t *  p_data,
size_t  length 
)

Function for reading data from a TWI slave.

The transmission will be stopped when an error occurs. If a transfer is ongoing, the function returns the error code NRFX_ERROR_BUSY.

Parameters
[in]p_instancePointer to the driver instance structure.
[in]addressAddress of a specific slave device (only 7 LSB).
[in]p_dataPointer to a receive buffer.
[in]lengthNumber of bytes to be received.
Return values
NRFX_SUCCESSIf the procedure was successful.
NRFX_ERROR_BUSYIf the driver is not ready for a new transfer.
NRFX_ERROR_INTERNALIf an error was detected by hardware.
NRFX_ERROR_DRV_TWI_ERR_OVERRUNIf the unread data was replaced by new data
NRFX_ERROR_DRV_TWI_ERR_ANACKIf NACK received after sending the address in polling mode.
NRFX_ERROR_DRV_TWI_ERR_DNACKIf NACK received after sending a data byte in polling mode.
uint32_t nrfx_twi_stopped_event_get ( nrfx_twi_t const *  p_instance)

Function for returning the address of a STOPPED TWI event.

A STOPPED event can be used to detect the end of a transfer if the NRFX_TWI_FLAG_NO_XFER_EVT_HANDLER option is used.

Parameters
[in]p_instancePointer to the driver instance structure.
Returns
STOPPED event address.
nrfx_err_t nrfx_twi_tx ( nrfx_twi_t const *  p_instance,
uint8_t  address,
uint8_t const *  p_data,
size_t  length,
bool  no_stop 
)

Function for sending data to a TWI slave.

The transmission will be stopped when an error occurs. If a transfer is ongoing, the function returns the error code NRFX_ERROR_BUSY.

Parameters
[in]p_instancePointer to the driver instance structure.
[in]addressAddress of a specific slave device (only 7 LSB).
[in]p_dataPointer to a transmit buffer.
[in]lengthNumber of bytes to send.
[in]no_stopIf set, the stop condition is not generated on the bus after the transfer has completed successfully (allowing for a repeated start in the next transfer).
Return values
NRFX_SUCCESSIf the procedure was successful.
NRFX_ERROR_BUSYIf the driver is not ready for a new transfer.
NRFX_ERROR_INTERNALIf an error was detected by hardware.
NRFX_ERROR_DRV_TWI_ERR_ANACKIf NACK received after sending the address in polling mode.
NRFX_ERROR_DRV_TWI_ERR_DNACKIf NACK received after sending a data byte in polling mode.
void nrfx_twi_uninit ( nrfx_twi_t const *  p_instance)

Function for uninitializing the TWI instance.

Parameters
[in]p_instancePointer to the driver instance structure.
nrfx_err_t nrfx_twi_xfer ( nrfx_twi_t const *  p_instance,
nrfx_twi_xfer_desc_t const *  p_xfer_desc,
uint32_t  flags 
)

Function for preparing a TWI transfer.

The following transfer types can be configured (nrfx_twi_xfer_desc_t::type):

Note
TXRX and TXTX transfers are supported only in non-blocking mode.

Additional options are provided using the flags parameter:

Note
Some flag combinations are invalid:
Parameters
[in]p_instancePointer to the driver instance structure.
[in]p_xfer_descPointer to the transfer descriptor.
[in]flagsTransfer options (0 for default settings).
Return values
NRFX_SUCCESSIf the procedure was successful.
NRFX_ERROR_BUSYIf the driver is not ready for a new transfer.
NRFX_ERROR_NOT_SUPPORTEDIf the provided parameters are not supported.
NRFX_ERROR_INTERNALIf an error was detected by hardware.
NRFX_ERROR_DRV_TWI_ERR_OVERRUNIf the unread data was replaced by new data (TXRX and RX)
NRFX_ERROR_DRV_TWI_ERR_ANACKIf NACK received after sending the address.
NRFX_ERROR_DRV_TWI_ERR_DNACKIf NACK received after sending a data byte.

Documentation feedback | Developer Zone | Subscribe | Updated