Inter-IC Sound (I2S) peripheral driver.
More...
Inter-IC Sound (I2S) peripheral driver.
#define NRFX_I2S_DEFAULT_CONFIG |
Value:
I2S driver default configuration.
#define NRFX_I2S_STATUS_NEXT_BUFFERS_NEEDED (1UL << 0) |
The application should provide buffers that are to be used in the next part of the transfer. A call to nrfx_i2s_next_buffers_set should be done before the currently used buffers are completely processed (i.e. the time remaining for supplying the next buffers depends on the used size of the buffers).
typedef void(* nrfx_i2s_data_handler_t)(nrfx_i2s_buffers_t const *p_released, uint32_t status) |
I2S driver data handler type.
A data handling function of this type must be specified during initialization of the driver. The driver will call this function when it finishes using buffers passed to it by the application, and when it needs to be provided with buffers for the next part of the transfer.
- Note
- The
p_released
pointer passed to this function is temporary and will be invalid after the function returns, hence it cannot be stored and used later. If needed, the pointed content (i.e. buffers pointers) should be copied instead.
- Parameters
-
[in] | p_released | Pointer to a structure with pointers to buffers passed previously to the driver that will no longer be access by it (they can be now safely released or used for another purpose, in particular for a next part of the transfer). This pointer will be NULL if the application did not supply the buffers for the next part of the transfer (via a call to nrfx_i2s_next_buffers_set) since the previous time the data handler signaled such need. This means that data corruption occurred (the previous buffers are used for the second time) and no buffers can be released at the moment. Both pointers in this structure are NULL when the handler is called for the first time after a transfer is started, because no data has been transferred yet at this point. In all successive calls the pointers specify what has been sent (TX) and what has been received (RX) in the part of transfer that has just been completed (provided that a given direction is enabled, see nrfx_i2s_start). |
[in] | status | Bit field describing the current status of the transfer. It can be 0 or a combination of the following flags:
|
Function for initializing the I2S driver.
- Parameters
-
[in] | p_config | Pointer to the structure with initial configuration. |
[in] | handler | Data handler provided by the user. Must not be NULL. |
- Return values
-
NRFX_SUCCESS | If initialization was successful. |
NRFX_ERROR_INVALID_STATE | If the driver was already initialized. |
NRFX_ERROR_INVALID_PARAM | If the requested combination of configuration options is not allowed by the I2S peripheral. |
Function for supplying the buffers to be used in the next part of the transfer.
The application should call this function when the data handler receives NRFX_I2S_STATUS_NEXT_BUFFERS_NEEDED in the status
parameter. The call can be done immediately from the data handler function or later, but it has to be done before the I2S peripheral finishes processing the buffers supplied previously. Otherwise, data corruption will occur.
- See Also
- nrfx_i2s_data_handler_t
- Return values
-
NRFX_SUCCESS | If the operation was successful. |
NRFX_ERROR_INVALID_STATE | If the buffers were already supplied or the peripheral is currently being stopped. |
Function for starting the continuous I2S transfer.
The I2S data transfer can be performed in one of three modes: RX (reception) only, TX (transmission) only, or in both directions simultaneously. The mode is selected by specifying a proper buffer for a given direction in the call to this function or by passing NULL instead if this direction should be disabled.
The length of the buffer (which is a common value for RX and TX if both directions are enabled) is specified in 32-bit words. One 32-bit memory word can either contain four 8-bit samples, two 16-bit samples, or one right-aligned 24-bit sample sign-extended to a 32-bit value. For a detailed memory mapping for different supported configurations, see the nRF52840 Product Specification or nRF52832 Product Specification.
- Note
- Peripherals using EasyDMA (including I2S) 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
-
[in] | p_initial_buffers | Pointer to a structure specifying the buffers to be used in the initial part of the transfer (buffers for all consecutive parts are provided through the data handler). |
[in] | buffer_size | Size of the buffers (in 32-bit words). Must not be 0. |
[in] | flags | Transfer options (0 for default settings). Currently, no additional flags are available. |
- Return values
-
NRFX_SUCCESS | If the operation was successful. |
NRFX_ERROR_INVALID_STATE | If a transfer was already started or the driver has not been initialized. |
NRFX_ERROR_INVALID_ADDR | If the provided buffers are not placed in the Data RAM region. |