SPIM driver¶
-
group
nrfx_spim
Serial Peripheral Interface Master with EasyDMA (SPIM) driver.
Defines
-
NRFX_SPIM_INSTANCE
(id)¶ Macro for creating an instance of the SPIM driver.
-
NRFX_SPIM_PIN_NOT_USED
¶ This value can be provided instead of a pin number for signals MOSI, MISO, and Slave Select to specify that the given signal is not used and therefore does not need to be connected to a pin.
-
NRFX_SPIM_DEFAULT_EXTENDED_CONFIG
¶ SPIM driver extended default configuration.
This configuration sets up SPIM additional options with the following values:
DCX pin disabled
RX sampling delay: 2 clock cycles
hardware SS disabled
hardware SS duration before and after transmission: 2 clock cycles
-
NRFX_SPIM_DEFAULT_CONFIG
(_pin_sck, _pin_mosi, _pin_miso, _pin_ss)¶ SPIM driver default configuration.
This configuration sets up SPIM with the following options:
SS pin active low
over-run character set to 0xFF
clock frequency: 4 MHz
mode: 0 (SCK active high, sample on leading edge of the clock signa;)
MSB shifted out first
MISO pull-up disabled
- Parameters
_pin_sck – [in] SCK pin.
_pin_mosi – [in] MOSI pin.
_pin_miso – [in] MISO pin.
_pin_ss – [in] SS pin.
-
NRFX_SPIM_FLAG_TX_POSTINC
¶ Flag indicating that TX buffer address will be incremented after transfer.
-
NRFX_SPIM_FLAG_RX_POSTINC
¶ Flag indicating that RX buffer address will be incremented after transfer.
-
NRFX_SPIM_FLAG_NO_XFER_EVT_HANDLER
¶ Flag indicating that the interrupt after each transfer will be suppressed, and the event handler will not be called.
-
NRFX_SPIM_FLAG_HOLD_XFER
¶ Flag indicating that the transfer will be set up, but not started.
-
NRFX_SPIM_FLAG_REPEATED_XFER
¶ Flag indicating that the transfer will be executed multiple times.
-
NRFX_SPIM_SINGLE_XFER
(p_tx, tx_len, p_rx, rx_len)¶ Macro for setting up single transfer descriptor.
This macro is for internal use only.
-
NRFX_SPIM_XFER_TRX
(p_tx_buf, tx_length, p_rx_buf, rx_length)¶ Macro for setting the duplex TX RX transfer.
-
NRFX_SPIM_XFER_TX
(p_buf, length)¶ Macro for setting the TX transfer.
-
NRFX_SPIM_XFER_RX
(p_buf, length)¶ Macro for setting the RX transfer.
Typedefs
-
typedef void (*
nrfx_spim_evt_handler_t
)(nrfx_spim_evt_t const *p_event, void *p_context)¶ SPIM driver event handler type.
Enums
Functions
-
nrfx_err_t
nrfx_spim_init
(nrfx_spim_t const *p_instance, nrfx_spim_config_t const *p_config, nrfx_spim_evt_handler_t handler, void *p_context)¶ Function for initializing the SPIM driver instance.
This function configures and enables the specified peripheral.
Warning
On nRF5340, 32 MHz setting for SPIM4 peripheral instance is supported only on the dedicated pins with NRF_GPIO_PIN_MCUSEL_PERIPHERAL configuration. See the chapter Pin assignments in the Product Specification.
- Parameters
p_instance – [in] Pointer to the driver instance structure.
p_config – [in] Pointer to the structure with the initial configuration.
handler – [in] Event handler provided by the user. If NULL, transfers will be performed in blocking mode.
p_context – [in] Context passed to event handler.
- Returns NRFX_SUCCESS
Initialization was successful.
- Returns NRFX_ERROR_INVALID_STATE
The driver was already initialized.
- Returns NRFX_ERROR_BUSY
Some other peripheral with the same instance ID is already in use. This is possible only if Peripheral Resource Sharing (PRS) module is enabled.
- Returns NRFX_ERROR_NOT_SUPPORTED
Requested configuration is not supported by the SPIM instance.
- Returns NRFX_ERROR_INVALID_PARAM
Requested frequency is not available on the specified pins.
-
void
nrfx_spim_uninit
(nrfx_spim_t const *p_instance)¶ Function for uninitializing the SPIM driver instance.
- Parameters
p_instance – [in] Pointer to the driver instance structure.
-
nrfx_err_t
nrfx_spim_xfer
(nrfx_spim_t const *p_instance, nrfx_spim_xfer_desc_t const *p_xfer_desc, uint32_t flags)¶ Function for starting the SPIM data transfer.
Additional options are provided using the
flags
parameter:NRFX_SPIM_FLAG_TX_POSTINC and NRFX_SPIM_FLAG_RX_POSTINC - Post-incrementation of buffer addresses.
NRFX_SPIM_FLAG_HOLD_XFER - Driver is not starting the transfer. Use this flag if the transfer is triggered externally by PPI. Use nrfx_spim_start_task_get to get the address of the start task. Chip select must be configured to NRFX_SPIM_PIN_NOT_USED and managed outside the driver.
NRFX_SPIM_FLAG_NO_XFER_EVT_HANDLER - No user event handler after transfer completion. This also means no interrupt at the end of the transfer. If NRFX_SPIM_FLAG_NO_XFER_EVT_HANDLER is used, the driver does not set the instance into busy state, so you must ensure that the next transfers are set up when SPIM is not active. nrfx_spim_end_event_get function can be used to detect end of transfer. Option can be used together with NRFX_SPIM_FLAG_REPEATED_XFER to prepare a sequence of SPI transfers without interruptions.
NRFX_SPIM_FLAG_REPEATED_XFER - Prepare for repeated transfers. You can set up a number of transfers that will be triggered externally (for example by PPI). An example is a TXRX transfer with the options NRFX_SPIM_FLAG_RX_POSTINC, NRFX_SPIM_FLAG_NO_XFER_EVT_HANDLER, and NRFX_SPIM_FLAG_REPEATED_XFER. After the transfer is set up, a set of transfers can be triggered by PPI that will read, for example, the same register of an external component and put it into a RAM buffer without any interrupts. nrfx_spim_end_event_get can be used to get the address of the END event, which can be used to count the number of transfers. If NRFX_SPIM_FLAG_REPEATED_XFER is used, the driver does not set the instance into busy state, so you must ensure that the next transfers are set up when SPIM is not active.
Note
Peripherals using EasyDMA (including SPIM) require the transfer buffers to be placed in the Data RAM region. If this condition is not met, this function will fail with the error code NRFX_ERROR_INVALID_ADDR.
- Parameters
p_instance – Pointer to the driver instance structure.
p_xfer_desc – Pointer to the transfer descriptor.
flags – Transfer options (0 for default settings).
- Returns NRFX_SUCCESS
The procedure is successful.
- Returns NRFX_ERROR_BUSY
The driver is not ready for a new transfer.
- Returns NRFX_ERROR_NOT_SUPPORTED
The provided parameters are not supported.
- Returns NRFX_ERROR_INVALID_ADDR
The provided buffers are not placed in the Data RAM region.
-
nrfx_err_t
nrfx_spim_xfer_dcx
(nrfx_spim_t const *p_instance, nrfx_spim_xfer_desc_t const *p_xfer_desc, uint32_t flags, uint8_t cmd_length)¶ Function for starting the SPIM data transfer with DCX control.
See nrfx_spim_xfer for description of additional options of transfer provided by the
flags
parameter.Note
Peripherals that use EasyDMA (including SPIM) require the transfer buffers to be placed in the Data RAM region. If this condition is not met, this function will fail with the error code NRFX_ERROR_INVALID_ADDR.
- Parameters
p_instance – Pointer to the driver instance structure.
p_xfer_desc – Pointer to the transfer descriptor.
flags – Transfer options (0 for default settings).
cmd_length – Length of the command bytes preceding the data bytes. The DCX line will be low during transmission of command bytes and high during transmission of data bytes. Maximum value available for dividing the transmitted bytes into command bytes and data bytes is NRF_SPIM_DCX_CNT_ALL_CMD - 1. The NRF_SPIM_DCX_CNT_ALL_CMD value passed as the
cmd_length
parameter causes all transmitted bytes to be marked as command bytes.
- Returns NRFX_SUCCESS
The procedure is successful.
- Returns NRFX_ERROR_BUSY
The driver is not ready for a new transfer.
- Returns NRFX_ERROR_NOT_SUPPORTED
The provided parameters are not supported.
- Returns NRFX_ERROR_INVALID_ADDR
The provided buffers are not placed in the Data RAM region.
-
uint32_t
nrfx_spim_start_task_get
(nrfx_spim_t const *p_instance)¶ Function for returning the address of a SPIM start task.
This function is to be used if nrfx_spim_xfer was called with the flag NRFX_SPIM_FLAG_HOLD_XFER. In that case, the transfer is not started by the driver, but it must be started externally by PPI.
- Parameters
p_instance – [in] Pointer to the driver instance structure.
- Returns
Start task address.
-
uint32_t
nrfx_spim_end_event_get
(nrfx_spim_t const *p_instance)¶ Function for returning the address of a END SPIM event.
The END event can be used to detect the end of a transfer if the NRFX_SPIM_FLAG_NO_XFER_EVT_HANDLER option is used.
- Parameters
p_instance – [in] Pointer to the driver instance structure.
- Returns
END event address.
-
void
nrfx_spim_abort
(nrfx_spim_t const *p_instance)¶ Function for aborting ongoing transfer.
- Parameters
p_instance – [in] Pointer to the driver instance structure.
-
struct
nrfx_spim_t
¶ - #include <nrfx_spim.h>
Data structure of the Serial Peripheral Interface Master with EasyDMA (SPIM) driver instance.
-
struct
nrfx_spim_config_t
¶ - #include <nrfx_spim.h>
Configuration structure of the SPIM driver instance.
Public Members
-
uint8_t
sck_pin
¶ SCK pin number.
-
uint8_t
mosi_pin
¶ MOSI pin number (optional).
Set to NRFX_SPIM_PIN_NOT_USED if this signal is not needed.
-
uint8_t
miso_pin
¶ MISO pin number (optional).
Set to NRFX_SPIM_PIN_NOT_USED if this signal is not needed.
-
uint8_t
ss_pin
¶ Slave Select pin number (optional).
Set to NRFX_SPIM_PIN_NOT_USED if this signal is not needed.
-
bool
ss_active_high
¶ Polarity of the Slave Select pin during transmission.
-
uint8_t
irq_priority
¶ Interrupt priority.
-
uint8_t
orc
¶ Overrun character.
This character is used when all bytes from the TX buffer are sent, but the transfer continues due to RX.
-
nrf_spim_frequency_t
frequency
¶ SPIM frequency.
-
nrf_spim_mode_t
mode
¶ SPIM mode.
-
nrf_spim_bit_order_t
bit_order
¶ SPIM bit order.
-
nrf_gpio_pin_pull_t
miso_pull
¶ MISO pull up configuration.
-
uint8_t
dcx_pin
¶ D/CX pin number (optional).
-
uint8_t
rx_delay
¶ Sample delay for input serial data on MISO.
The value specifies the delay, in number of 64 MHz clock cycles (15.625 ns), from the the sampling edge of SCK (leading edge for CONFIG.CPHA = 0, trailing edge for CONFIG.CPHA = 1) until the input serial data is sampled.
-
bool
use_hw_ss
¶ Indication to use software or hardware controlled Slave Select pin.
-
uint8_t
ss_duration
¶ Slave Select duration before and after transmission.
Minimum duration between the edge of CSN and the edge of SCK. Also, minimum duration of CSN inactivity between transactions. The value is specified in number of 64 MHz clock cycles (15.625 ns). Supported only for hardware-controlled Slave Select.
-
uint8_t
-
struct
nrfx_spim_xfer_desc_t
¶ - #include <nrfx_spim.h>
Single transfer descriptor structure.
-
struct
nrfx_spim_evt_t
¶ - #include <nrfx_spim.h>
SPIM event description with transmission details.
Public Members
-
nrfx_spim_evt_type_t
type
¶ Event type.
-
nrfx_spim_xfer_desc_t
xfer_desc
¶ Transfer details.
-
nrfx_spim_evt_type_t
-