![]() |
RAFW Flexible Software Package Documentation
Release v2.0.1
|
|
Functions | |
| fsp_err_t | R_I2S_W_Open (i2s_ctrl_t *const p_ctrl, i2s_cfg_t const *const p_cfg) |
| fsp_err_t | R_I2S_W_Stop (i2s_ctrl_t *const p_ctrl) |
| fsp_err_t | R_I2S_W_StatusGet (i2s_ctrl_t *const p_ctrl, i2s_status_t *const p_status) |
| fsp_err_t | R_I2S_W_Write (i2s_ctrl_t *const p_ctrl, void const *const p_src, uint32_t const bytes) |
| fsp_err_t | R_I2S_W_Read (i2s_ctrl_t *const p_ctrl, void *const p_dest, uint32_t const bytes) |
| fsp_err_t | R_I2S_W_WriteRead (i2s_ctrl_t *const p_ctrl, void const *const p_src, void *const p_dest, uint32_t const bytes) |
| fsp_err_t | R_I2S_W_Mute (i2s_ctrl_t *const p_ctrl, i2s_mute_t const mute_enable) |
| fsp_err_t | R_I2S_W_Close (i2s_ctrl_t *const p_ctrl) |
| fsp_err_t | R_I2S_W_CallbackSet (i2s_ctrl_t *const p_api_ctrl, void(*p_callback)(i2s_callback_args_t *), void *const p_context, i2s_callback_args_t *const p_callback_memory) |
Driver for the I2S_W peripheral on RAFW MCUs. This module implements the I2S Interface.
The I2S_W module supports the following features:
| Configuration | Options | Default | Description |
|---|---|---|---|
| Parameter Checking |
| Default (BSP) | If selected code for parameter checking is included in the build. |
| Configuration | Options | Default | Description |
|---|---|---|---|
| Name | Name must be a valid C symbol | g_i2s0 | Module name. |
| Operating Mode (Master/Slave) |
| Master Mode | Select if the MCU is I2S master or slave. |
| Bit Depth |
| 16 Bits | Select the bit depth of one sample of audio data. |
| Word Length |
| 32 Bits | Select the word length of audio data. Must be at least as large as Data bits. |
| Sample Rate(available only in Master mode) |
| 8000Hz | Select sample rate used to generate bit clock from audio clock. |
| Callback | Name must be a valid C symbol | NULL | A user callback function can be provided. If this callback function is provided, it will be called from all three interrupt service routines (ISR). |
| Transmit Interrupt Priority | MCU Specific Options | Select the transmit interrupt priority. | |
| Receive Interrupt Priority | MCU Specific Options | Select the receive interrupt priority. |
The I2S_W peripheral runs on FPLLCLK. The FPLLCLK frequency can be configured on the Clocks tab of the RA6W1/RA6W2 Configuration editor. The I2S_W audio clock can optionally be supplied from an external source through the PCM_CLK pin in slave mode.
The I2S_W uses the following pins:
An I2S_W frame is 2 samples worth of data. The frame boundary (end of previous frame, start of next frame) is on the falling edge of the PCM_FSC signal.
Only uncompressed PCM data is supported.
Data arrays have the following size, alignment, and length based on the "Bit Depth" setting:
| Bit Depth | Array Data Type | Required Alignment | Required Length (bytes) |
|---|---|---|---|
| 16 Bits | 16-bit integer | 2 byte alignment | Multiple of 4 |
| 20 Bits | 32-bit integer, right justified | 4 byte alignment | Multiple of 8 |
| 24 Bits | 32-bit integer, right justified | 4 byte alignment | Multiple of 8 |
| 32 Bits | 32-bit integer | 4 byte alignment | Multiple of 8 |
The audio clock is only required for master mode.
The bit clock frequency is the product of the sampling frequency and channels and bits per system word:
bit_clock (Hz) = sampling_frequency (Hz) * Word Length
I2S_W data always has 2 channels.
For example, the bit clock for transmitting 32-bit word length (using a 16-bit bit depth per channel) at 44100 Hz would be:
44100 * 32 = 1,411,200 Hz
The audio clock source can come from:
This is a basic example of minimal use of the I2S_w in an application.
This is an example of using I2S_W to stream audio data. This application uses a double buffer to store PCM sine wave data. It starts transmitting in the main loop, then loads the next buffer if it is ready in the callback. If the next buffer is not ready, a flag is set in the callback so the application knows to restart transmission in the main loop.
This example also checks the return code of R_I2S_W_Write() because R_I2S_W_Write() can return an error if a transmit overflow occurs before the FIFO is reloaded. If a transmit overflow occurs before the FIFO is reloaded, the I2S_W will be stopped in the error interrupt, and it cannot be restarted until the I2S_EVENT_IDLE callback is received.
Data Structures | |
| struct | i2s_w_instance_ctrl_t |
| struct | i2s_w_extended_cfg_t |
Enumerations | |
| enum | i2s_w_audio_clock_t |
| enum | i2s_w_clock_div_t |
| enum | i2s_w_sr_t |
| struct i2s_w_instance_ctrl_t |
Channel instance control block. DO NOT INITIALIZE. Initialization occurs when i2s_api_t::open is called.
| struct i2s_w_extended_cfg_t |
I2S configuration extension. This extension is optional.
| Data Fields | ||
|---|---|---|
| i2s_w_audio_clock_t | audio_clock | Audio clock source, default is I2S_W_AUDIO_CLOCK_CRYSTAL. |
| i2s_w_clock_div_t | bit_clock_div | Select bit clock division ratio. |
| i2s_w_sr_t | sr | sampling rate |
| enum i2s_w_audio_clock_t |
| enum i2s_w_clock_div_t |
Bit clock division ratio. Bit clock frequency = audio clock frequency / bit clock division ratio.
| enum i2s_w_sr_t |
Sampling rate.
| fsp_err_t R_I2S_W_Open | ( | i2s_ctrl_t *const | p_ctrl, |
| i2s_cfg_t const *const | p_cfg | ||
| ) |
Opens the I2S. Implements i2s_api_t::open.
This function sets this clock divisor and the configurations specified in i2s_cfg_t. It also opens the timer and transfer instances if they are provided.
| FSP_SUCCESS | Ready for I2S communication. |
| FSP_ERR_ASSERTION | The pointer to p_ctrl or p_cfg is null. |
| FSP_ERR_ALREADY_OPEN | The control block has already been opened. |
| FSP_ERR_IP_CHANNEL_NOT_PRESENT | Channel number is not available on this MCU. |
| fsp_err_t R_I2S_W_Stop | ( | i2s_ctrl_t *const | p_ctrl | ) |
Stops I2S. Implements i2s_api_t::stop.
This function disables both transmission and reception, and disables any transfer instances used.
The I2S will stop on the next frame boundary. Do not restart I2S until it is idle.
| FSP_SUCCESS | I2S communication stop request issued. |
| FSP_ERR_ASSERTION | The pointer to p_ctrl was null. |
| FSP_ERR_NOT_OPEN | The channel is not opened. |
| fsp_err_t R_I2S_W_StatusGet | ( | i2s_ctrl_t *const | p_ctrl, |
| i2s_status_t *const | p_status | ||
| ) |
Gets I2S status and stores it in provided pointer p_status. Implements i2s_api_t::statusGet.
| FSP_SUCCESS | Information stored successfully. |
| FSP_ERR_ASSERTION | The p_instance_ctrl or p_status parameter was null. |
| FSP_ERR_NOT_OPEN | The channel is not opened. |
| fsp_err_t R_I2S_W_Write | ( | i2s_ctrl_t *const | p_ctrl, |
| void const *const | p_src, | ||
| uint32_t const | bytes | ||
| ) |
Writes data buffer to I2S. Implements i2s_api_t::write.
This function resets the transfer if the transfer interface is used, or writes the length of data that fits in the FIFO then stores the remaining write buffer in the control block to be written in the ISR.
Write() cannot be called if another write(), read() or writeRead() operation is in progress. Write can be called when the I2S is idle, or after the I2S_EVENT_TX_EMPTY event.
| FSP_SUCCESS | Write initiated successfully. |
| FSP_ERR_ASSERTION | The pointer to p_ctrl or p_src was null, or bytes requested was 0. |
| FSP_ERR_IN_USE | Another transfer is in progress, data was not written. |
| FSP_ERR_NOT_OPEN | The channel is not opened. |
| FSP_ERR_UNDERFLOW | A transmit underflow error is pending. Wait for the I2S to go idle before resuming communication. |
| fsp_err_t R_I2S_W_Read | ( | i2s_ctrl_t *const | p_ctrl, |
| void *const | p_dest, | ||
| uint32_t const | bytes | ||
| ) |
Reads data into provided buffer. Implements i2s_api_t::read.
This function resets the transfer if the transfer interface is used, or reads the length of data available in the FIFO then stores the remaining read buffer in the control block to be filled in the ISR.
Read() cannot be called if another write(), read() or writeRead() operation is in progress. Read can be called when the I2S is idle, or after the I2S_EVENT_RX_FULL event.
| FSP_SUCCESS | Read initiated successfully. |
| FSP_ERR_IN_USE | Peripheral is in the wrong mode or not idle. |
| FSP_ERR_ASSERTION | The pointer to p_ctrl or p_dest was null, or bytes requested was 0. |
| FSP_ERR_NOT_OPEN | The channel is not opened. |
| FSP_ERR_OVERFLOW | A receive overflow error is pending. Wait for the I2S to go idle before resuming communication. |
| fsp_err_t R_I2S_W_WriteRead | ( | i2s_ctrl_t *const | p_ctrl, |
| void const *const | p_src, | ||
| void *const | p_dest, | ||
| uint32_t const | bytes | ||
| ) |
Writes from source buffer and reads data into destination buffer. Implements i2s_api_t::writeRead.
writeRead() cannot be called if another write(), read() or writeRead() operation is in progress. writeRead() can be called when the I2S is idle, or after the I2S_EVENT_RX_FULL event.
| FSP_SUCCESS | Write and read initiated successfully. |
| FSP_ERR_IN_USE | Peripheral is in the wrong mode or not idle. |
| FSP_ERR_ASSERTION | An input parameter was invalid. |
| FSP_ERR_NOT_OPEN | The channel is not opened. |
| FSP_ERR_UNDERFLOW | A transmit underflow error is pending. Wait for the I2S to go idle before resuming communication. |
| FSP_ERR_OVERFLOW | A receive overflow error is pending. Wait for the I2S to go idle before resuming communication. |
| fsp_err_t R_I2S_W_Mute | ( | i2s_ctrl_t *const | p_ctrl, |
| i2s_mute_t const | mute_enable | ||
| ) |
Mutes I2S on the next frame boundary. Implements i2s_api_t::mute.
Data is still written while mute is enabled, but the transmit line outputs zeros.
| FSP_SUCCESS | Transmission is muted. |
| FSP_ERR_ASSERTION | The pointer to p_ctrl was null. |
| FSP_ERR_NOT_OPEN | The channel is not opened. |
| fsp_err_t R_I2S_W_Close | ( | i2s_ctrl_t *const | p_ctrl | ) |
Closes I2S. Implements i2s_api_t::close.
This function powers down the I2S and closes the lower level timer and transfer drivers if they are used.
| FSP_SUCCESS | Device closed successfully. |
| FSP_ERR_ASSERTION | The pointer to p_ctrl was null. |
| FSP_ERR_NOT_OPEN | The channel is not opened. |
| fsp_err_t R_I2S_W_CallbackSet | ( | i2s_ctrl_t *const | p_api_ctrl, |
| void(*)(i2s_callback_args_t *) | p_callback, | ||
| void *const | p_context, | ||
| i2s_callback_args_t *const | p_callback_memory | ||
| ) |
Updates the user callback and has option of providing memory for callback structure. Implements i2s_api_t::callbackSet
| FSP_SUCCESS | Callback updated successfully. |
| FSP_ERR_ASSERTION | A required pointer is NULL. |
| FSP_ERR_NOT_OPEN | The control block has not been opened. |
| FSP_ERR_NO_CALLBACK_MEMORY | p_callback is non-secure and p_callback_memory is either secure or NULL. |