TWI master APIs. More...
Modules | |
TWI/TWIM peripheral driver configuration | |
Data Structures | |
struct | nrf_drv_twi_t |
Structure for the TWI master driver instance. More... | |
struct | nrf_drv_twi_config_t |
Structure for the TWI master driver instance configuration. More... | |
struct | nrf_drv_twi_xfer_desc_t |
Structure for a TWI transfer descriptor. More... | |
struct | nrf_drv_twi_evt_t |
Structure for a TWI event. More... | |
Macros | |
#define | TWI0_INCR 0 |
#define | TWI1_INCR 0 |
#define | ENABLED_TWI_COUNT (TWI0_INCR + TWI1_INCR) |
#define | TWIM_ONLY ( defined(TWIM_PRESENT) && !defined(TWI_PRESENT)) |
#define | TWI_TWIM_PRESENT ( defined(TWIM_PRESENT) && defined(TWI_PRESENT)) |
#define | TWI_ONLY (!defined(TWIM_PRESENT) && defined(TWI_PRESENT)) |
#define | TWI0_WITH_DMA (defined(TWI0_USE_EASY_DMA) && TWI0_USE_EASY_DMA && TWI0_ENABLED) |
#define | TWI1_WITH_DMA (defined(TWI1_USE_EASY_DMA) && TWI1_USE_EASY_DMA && TWI1_ENABLED) |
#define | TWI0_WITHOUT_DMA (defined(TWI0_USE_EASY_DMA) && !TWI0_USE_EASY_DMA && TWI0_ENABLED) |
#define | TWI1_WITHOUT_DMA (defined(TWI1_USE_EASY_DMA) && !TWI1_USE_EASY_DMA && TWI1_ENABLED) |
#define | NRF_DRV_TWI_PERIPHERAL(id) (void *)CONCAT_2(NRF_TWI, id) |
#define | TWI0_INSTANCE_INDEX 0 |
#define | TWI1_INSTANCE_INDEX TWI0_INSTANCE_INDEX+TWI0_INCR |
#define | NRF_DRV_TWI_INSTANCE(id) |
Macro for creating a TWI master driver instance. More... | |
#define | NRF_DRV_TWI_DEFAULT_CONFIG |
TWI master driver instance default configuration. More... | |
#define | NRF_DRV_TWI_FLAG_TX_POSTINC (1UL << 0) |
#define | NRF_DRV_TWI_FLAG_RX_POSTINC (1UL << 1) |
#define | NRF_DRV_TWI_FLAG_NO_XFER_EVT_HANDLER (1UL << 2) |
#define | NRF_DRV_TWI_FLAG_HOLD_XFER (1UL << 3) |
#define | NRF_DRV_TWI_FLAG_REPEATED_XFER (1UL << 4) |
#define | NRF_DRV_TWI_FLAG_TX_NO_STOP (1UL << 5) |
#define | NRF_DRV_TWI_XFER_DESC_TX(addr, p_data, length) |
Macro for setting the TX transfer descriptor. More... | |
#define | NRF_DRV_TWI_XFER_DESC_RX(addr, p_data, length) |
Macro for setting the RX transfer descriptor. More... | |
#define | NRF_DRV_TWI_XFER_DESC_TXRX(addr, p_tx, tx_len, p_rx, rx_len) |
Macro for setting the TXRX transfer descriptor. More... | |
#define | NRF_DRV_TWI_XFER_DESC_TXTX(addr, p_tx, tx_len, p_tx2, tx_len2) |
Macro for setting the TXTX transfer descriptor. More... | |
Typedefs | |
typedef nrf_twim_frequency_t | nrf_twi_frequency_t |
typedef nrf_twim_error_t | nrf_twi_error_t |
typedef void(* | nrf_drv_twi_evt_handler_t )(nrf_drv_twi_evt_t const *p_event, void *p_context) |
TWI event handler prototype. | |
Enumerations | |
enum | nrf_drv_twi_evt_type_t { NRF_DRV_TWI_EVT_DONE, NRF_DRV_TWI_EVT_ADDRESS_NACK, NRF_DRV_TWI_EVT_DATA_NACK } |
TWI master driver event types. More... | |
enum | nrf_drv_twi_xfer_type_t { NRF_DRV_TWI_XFER_TX, NRF_DRV_TWI_XFER_RX, NRF_DRV_TWI_XFER_TXRX, NRF_DRV_TWI_XFER_TXTX } |
TWI master driver transfer types. More... | |
Functions | |
ret_code_t | nrf_drv_twi_init (nrf_drv_twi_t const *p_instance, nrf_drv_twi_config_t const *p_config, nrf_drv_twi_evt_handler_t event_handler, void *p_context) |
Function for initializing the TWI driver instance. More... | |
void | nrf_drv_twi_uninit (nrf_drv_twi_t const *p_instance) |
Function for uninitializing the TWI instance. More... | |
void | nrf_drv_twi_enable (nrf_drv_twi_t const *p_instance) |
Function for enabling the TWI instance. More... | |
void | nrf_drv_twi_disable (nrf_drv_twi_t const *p_instance) |
Function for disabling the TWI instance. More... | |
ret_code_t | nrf_drv_twi_tx (nrf_drv_twi_t const *p_instance, uint8_t address, uint8_t const *p_data, uint8_t length, bool no_stop) |
Function for sending data to a TWI slave. More... | |
ret_code_t | nrf_drv_twi_rx (nrf_drv_twi_t const *p_instance, uint8_t address, uint8_t *p_data, uint8_t length) |
Function for reading data from a TWI slave. More... | |
ret_code_t | nrf_drv_twi_xfer (nrf_drv_twi_t const *p_instance, nrf_drv_twi_xfer_desc_t const *p_xfer_desc, uint32_t flags) |
Function for preparing a TWI transfer. More... | |
bool | nrf_drv_twi_is_busy (nrf_drv_twi_t const *p_instance) |
Function for checking the TWI driver state. More... | |
uint32_t | nrf_drv_twi_data_count_get (nrf_drv_twi_t const *const p_instance) |
Function for getting the transferred data count. More... | |
uint32_t | nrf_drv_twi_start_task_get (nrf_drv_twi_t const *p_instance, nrf_drv_twi_xfer_type_t xfer_type) |
Function for returning the address of a TWI/TWIM start task. More... | |
uint32_t | nrf_drv_twi_stopped_event_get (nrf_drv_twi_t const *p_instance) |
Function for returning the address of a STOPPED TWI/TWIM event. More... | |
TWI master APIs.
#define NRF_DRV_TWI_DEFAULT_CONFIG |
TWI master driver instance default configuration.
#define NRF_DRV_TWI_FLAG_HOLD_XFER (1UL << 3) |
Set up the transfer but do not start it.
#define NRF_DRV_TWI_FLAG_NO_XFER_EVT_HANDLER (1UL << 2) |
Interrupt after each transfer is suppressed, and the event handler is not called.
#define NRF_DRV_TWI_FLAG_REPEATED_XFER (1UL << 4) |
Flag indicating that the transfer will be executed multiple times.
#define NRF_DRV_TWI_FLAG_RX_POSTINC (1UL << 1) |
RX buffer address incremented after transfer.
#define NRF_DRV_TWI_FLAG_TX_NO_STOP (1UL << 5) |
Flag indicating that the TX transfer will not end with a stop condition.
#define NRF_DRV_TWI_FLAG_TX_POSTINC (1UL << 0) |
TX buffer address incremented after transfer.
#define NRF_DRV_TWI_INSTANCE | ( | id | ) |
Macro for creating a TWI master driver instance.
#define NRF_DRV_TWI_XFER_DESC_RX | ( | addr, | |
p_data, | |||
length | |||
) |
Macro for setting the RX transfer descriptor.
#define NRF_DRV_TWI_XFER_DESC_TX | ( | addr, | |
p_data, | |||
length | |||
) |
Macro for setting the TX transfer descriptor.
#define NRF_DRV_TWI_XFER_DESC_TXRX | ( | addr, | |
p_tx, | |||
tx_len, | |||
p_rx, | |||
rx_len | |||
) |
Macro for setting the TXRX transfer descriptor.
#define NRF_DRV_TWI_XFER_DESC_TXTX | ( | addr, | |
p_tx, | |||
tx_len, | |||
p_tx2, | |||
tx_len2 | |||
) |
Macro for setting the TXTX transfer descriptor.
uint32_t nrf_drv_twi_data_count_get | ( | nrf_drv_twi_t const *const | p_instance | ) |
Function for getting the transferred data count.
This function provides valid results only in legacy mode.
[in] | p_instance | Pointer to the driver instance structure. |
void nrf_drv_twi_disable | ( | nrf_drv_twi_t const * | p_instance | ) |
Function for disabling the TWI instance.
[in] | p_instance | Pointer to the driver instance structure. |
void nrf_drv_twi_enable | ( | nrf_drv_twi_t const * | p_instance | ) |
Function for enabling the TWI instance.
[in] | p_instance | Pointer to the driver instance structure. |
ret_code_t nrf_drv_twi_init | ( | nrf_drv_twi_t const * | p_instance, |
nrf_drv_twi_config_t const * | p_config, | ||
nrf_drv_twi_evt_handler_t | event_handler, | ||
void * | p_context | ||
) |
Function for initializing the TWI driver instance.
[in] | p_instance | Pointer to the driver instance structure. |
[in] | p_config | Initial configuration. |
[in] | event_handler | Event handler provided by the user. If NULL, blocking mode is enabled. |
[in] | p_context | Context passed to event handler. |
NRF_SUCCESS | If initialization was successful. |
NRF_ERROR_INVALID_STATE | If the driver is in invalid state. |
NRF_ERROR_BUSY | If some other peripheral with the same instance ID is already in use. This is possible only if PERIPHERAL_RESOURCE_SHARING_ENABLED is set to a value other than zero. |
bool nrf_drv_twi_is_busy | ( | nrf_drv_twi_t const * | p_instance | ) |
Function for checking the TWI driver state.
[in] | p_instance | TWI instance. |
true | If the TWI driver is currently busy performing a transfer. |
false | If the TWI driver is ready for a new transfer. |
ret_code_t nrf_drv_twi_rx | ( | nrf_drv_twi_t const * | p_instance, |
uint8_t | address, | ||
uint8_t * | p_data, | ||
uint8_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 NRF_ERROR_BUSY.
[in] | p_instance | Pointer to the driver instance structure. |
[in] | address | Address of a specific slave device (only 7 LSB). |
[in] | p_data | Pointer to a receive buffer. |
[in] | length | Number of bytes to be received. |
NRF_SUCCESS | If the procedure was successful. |
NRF_ERROR_BUSY | If the driver is not ready for a new transfer. |
NRF_ERROR_INTERNAL | If an error was detected by hardware. |
NRF_ERROR_DRV_TWI_ERR_OVERRUN | If the unread data was replaced by new data |
NRF_ERROR_DRV_TWI_ERR_ANACK | If NACK received after sending the address in polling mode. |
NRF_ERROR_DRV_TWI_ERR_DNACK | If NACK received after sending a data byte in polling mode. |
uint32_t nrf_drv_twi_start_task_get | ( | nrf_drv_twi_t const * | p_instance, |
nrf_drv_twi_xfer_type_t | xfer_type | ||
) |
Function for returning the address of a TWI/TWIM start task.
This function should be used if nrf_drv_twi_xfer was called with the flag NRF_DRV_TWI_FLAG_HOLD_XFER. In that case, the transfer is not started by the driver, but it must be started externally by PPI.
[in] | p_instance | Pointer to the driver instance structure. |
[in] | xfer_type | Transfer type used in the last call of the nrf_drv_twi_xfer function. |
uint32_t nrf_drv_twi_stopped_event_get | ( | nrf_drv_twi_t const * | p_instance | ) |
Function for returning the address of a STOPPED TWI/TWIM event.
A STOPPED event can be used to detect the end of a transfer if the NRF_DRV_TWI_FLAG_NO_XFER_EVT_HANDLER option is used.
[in] | p_instance | Pointer to the driver instance structure. |
ret_code_t nrf_drv_twi_tx | ( | nrf_drv_twi_t const * | p_instance, |
uint8_t | address, | ||
uint8_t const * | p_data, | ||
uint8_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 NRF_ERROR_BUSY.
[in] | p_instance | Pointer to the driver instance structure. |
[in] | address | Address of a specific slave device (only 7 LSB). |
[in] | p_data | Pointer to a transmit buffer. |
[in] | length | Number of bytes to send. |
[in] | no_stop | If 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). |
NRF_SUCCESS | If the procedure was successful. |
NRF_ERROR_BUSY | If the driver is not ready for a new transfer. |
NRF_ERROR_INTERNAL | If an error was detected by hardware. |
NRF_ERROR_INVALID_ADDR | If the EasyDMA is used and memory adress in not in RAM. |
NRF_ERROR_DRV_TWI_ERR_ANACK | If NACK received after sending the address in polling mode. |
NRF_ERROR_DRV_TWI_ERR_DNACK | If NACK received after sending a data byte in polling mode. |
void nrf_drv_twi_uninit | ( | nrf_drv_twi_t const * | p_instance | ) |
Function for uninitializing the TWI instance.
[in] | p_instance | Pointer to the driver instance structure. |
ret_code_t nrf_drv_twi_xfer | ( | nrf_drv_twi_t const * | p_instance, |
nrf_drv_twi_xfer_desc_t const * | p_xfer_desc, | ||
uint32_t | flags | ||
) |
Function for preparing a TWI transfer.
The following transfer types can be configured (nrf_drv_twi_xfer_desc_t::type):
Additional options are provided using the flags parameter:
If nrf_drv_twi_xfer_desc_t::type is set to NRF_DRV_TWI_XFER_TX and the NRF_DRV_TWI_FLAG_TX_NO_STOP and NRF_DRV_TWI_FLAG_REPEATED_XFER flags are set, two tasks must be used to trigger a transfer: TASKS_RESUME followed by TASKS_STARTTX. If no stop condition is generated, TWIM is in SUSPENDED state. Therefore, it must be resumed before the transfer can be started.
[in] | p_instance | Pointer to the driver instance structure. |
[in] | p_xfer_desc | Pointer to the transfer descriptor. |
[in] | flags | Transfer options (0 for default settings). |
NRF_SUCCESS | If the procedure was successful. |
NRF_ERROR_BUSY | If the driver is not ready for a new transfer. |
NRF_ERROR_NOT_SUPPORTED | If the provided parameters are not supported. |
NRF_ERROR_INTERNAL | If an error was detected by hardware. |
NRF_ERROR_INVALID_ADDR | If the EasyDMA is used and memory adress in not in RAM |
NRF_ERROR_DRV_TWI_ERR_OVERRUN | If the unread data was replaced by new data (TXRX and RX) |
NRF_ERROR_DRV_TWI_ERR_ANACK | If NACK received after sending the address. |
NRF_ERROR_DRV_TWI_ERR_DNACK | If NACK received after sending a data byte. |