RZ/A Flexible Software Package Documentation
Release v3.3.0
|
|
Functions | |
fsp_err_t | R_RSPI_Open (spi_ctrl_t *p_api_ctrl, spi_cfg_t const *const p_cfg) |
fsp_err_t | R_RSPI_Read (spi_ctrl_t *const p_api_ctrl, void *p_dest, uint32_t const length, spi_bit_width_t const bit_width) |
fsp_err_t | R_RSPI_Write (spi_ctrl_t *const p_api_ctrl, void const *p_src, uint32_t const length, spi_bit_width_t const bit_width) |
fsp_err_t | R_RSPI_WriteRead (spi_ctrl_t *const p_api_ctrl, void const *p_src, void *p_dest, uint32_t const length, spi_bit_width_t const bit_width) |
fsp_err_t | R_RSPI_Close (spi_ctrl_t *const p_api_ctrl) |
fsp_err_t | R_RSPI_CalculateBitrate (uint32_t bitrate, rspi_rspck_div_setting_t *spck_div) |
fsp_err_t | R_RSPI_CallbackSet (spi_ctrl_t *const p_api_ctrl, void(*p_callback)(spi_callback_args_t *), void const *const p_context, spi_callback_args_t *const p_callback_memory) |
Driver for the RSPI peripheral on RZ MPUs. This module implements the SPI Interface.
Configuration | Options | Default | Description |
---|---|---|---|
Parameter Checking |
| Default (BSP) | If selected code for parameter checking is included in the build. |
DMAC Support |
| Disabled | If enabled, DMAC instances will be included in the build for both transmission and reception. |
Configuration | Options | Default | Description |
---|---|---|---|
General > Name | Name must be a valid C symbol | g_spi0 | Module name. |
General > Channel | Select between channel 0 and 2 | 0 | Select the RSPI channel. |
General > Operating Mode |
| Master | Select the RSPI operating mode. |
General > Clock Phase |
| CPHA=0 | Select the clock edge to sample data. |
General > Clock Polarity |
| CPOL=0 | Select clock level when idle. |
General > Mode Fault Error |
| Disable | Detect master/slave mode conflicts. |
General > Bit Order |
| MSB First | Select the data bit order. |
Extra > Slave Select Polarity |
| Active Low | Select the slave select active level. |
Extra > MOSI Idle State |
| MOSI Idle Value Fixing Disable | Select the MOSI idle level if MOSI idle is enabled. |
Extra > Bitrate | Value must be an integer greater than 0 | 10000000 | Enter the desired bitrate, change the bitrate to a value supported by MCU. If the requested bitrate cannot be achieved, the settings with the largest possible value that is less than or equal to the requested bitrate is used. The theoretical bitrate is printed in a comment in the generated rspi_extended_cfg_t structure. |
Extra > Clock Delay |
| RSPI_DELAY_COUNT_1 | Configure the number of RSPI clock cycles before each data frame. |
Extra > SSL Negation Delay |
| RSPI_DELAY_COUNT_1 | Configure the number of RSPI clock cycles after each data frame. |
Extra > Next Access Delay |
| RSPI_DELAY_COUNT_1 | Configure the number of RSPI clock cycles between each data frame. |
Extra > SSL Level Keep |
| Disable | Select whether to negate the SSL level for each frame transfer. |
Extra > Receiver FIFO Trigger Level |
| 24 | Configure the trigger level of RSPI receiver FIFO. |
Extra > Transmitter FIFO Trigger Level |
| 4 | Configure the trigger level of RSPI transmitter FIFO. |
Interrupts > 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 the interrupt service routine (ISR). |
Interrupts > Receive Interrupt Enable | MCU Specific Options | Enable the receive interrupt. | |
Interrupts > Receive Interrupt Priority | Value must be an integer between 0 and 31 | 24 | Select the interrupt priority for all RSPI interrupts(0-31). Note: If you specify the lowest priority (i.e.,31), no interrupt will occur. |
Interrupts > Transmit Buffer Empty Interrupt Enable | MCU Specific Options | Enable the transmit buffer empty interrupt. | |
Interrupts > Transmit Buffer Empty Interrupt Priority | Value must be an integer between 0 and 31 | 24 | Select the interrupt priority for all RSPI interrupts(0-31). Note: If you specify the lowest priority (i.e.,31), no interrupt will occur. |
Interrupts > Error Interrupt Priority | Value must be an integer between 0 and 31 | 24 | Select the interrupt priority for all RSPI interrupts(0-31). Note: If you specify the lowest priority (i.e.,31), no interrupt will occur. |
The clock for this module is derived from the following peripheral clock for each MCU group:
MCU Group | Peripheral Clock |
---|---|
RZA3UL | P0CLK |
This module uses MOSI, MISO, RSPCK, and SSL pins to communicate with on board devices.
At high bitrates, interrupts may not be able to service transfers fast enough. In master mode this means there will be a delay between each data frame. In slave mode this could result in TX Underrun and RX Overflow errors.
In order to improve performance at high bitrates, it is recommended that the instance be configured to service transfers using the DMAC.
Another way to improve performance is to transfer the data in 16/32 bit wide data frames when possible. A typical use-case where this is possible is when reading/writing to a block device.
After every data frame the RSPI peripheral generates a transmit buffer empty interrupt and a receive buffer full interrupt. It is possible to configure the driver to handle transmit buffer empty interrupts in the receive buffer full isr. This only improves performance when the DMAC is not being used.
In master mode, if the Receive Buffer Full Interrupts are not handled fast enough, instead of generating a RX Overflow error, the last clock cycle will be stretched until the receive buffer is read.
When parity mode is configured, the LSB of each data frame is used as a parity bit. When odd parity is selected, the LSB is set such that there are an odd number of ones in the data frame. When even parity is selected, the LSB is set such that there are an even number of ones in the data frame.
Developers should be aware of the following limitations when using the RSPI:
This is a basic example of minimal use of the RSPI in an application.
This is an example of communicating with multiple slave devices by asserting SSL in software.
This example demonstrates how to set the RSPI clock divisors at runtime.
Data Structures | |
struct | rspi_rspck_div_setting_t |
struct | rspi_extended_cfg_t |
struct | rspi_instance_ctrl_t |
Enumerations | |
enum | rspi_ssl_polarity_t |
enum | rspi_mosi_idle_value_fixing_t |
enum | rspi_ssl_level_keep_t |
enum | rspi_delay_count_t |
enum | rspi_tx_trigger_level_t |
enum | rspi_rx_trigger_level_t |
struct rspi_rspck_div_setting_t |
struct rspi_extended_cfg_t |
Extended RSPI interface configuration
Data Fields | ||
---|---|---|
rspi_ssl_polarity_t | ssl_polarity | Select SSLn signal polarity. |
rspi_mosi_idle_value_fixing_t | mosi_idle | Select MOSI idle fixed value and selection. |
rspi_rspck_div_setting_t | spck_div | Register values for configuring the RSPI Clock Divider. |
rspi_delay_count_t | spck_delay | SPI Clock Delay Register Setting. |
rspi_delay_count_t | ssl_negation_delay | SPI Slave Select Negation Delay Register Setting. |
rspi_delay_count_t | next_access_delay | SPI Next-Access Delay Register Setting. |
rspi_ssl_level_keep_t | ssl_level_keep | Select SSL signal level keep mode. |
rspi_rx_trigger_level_t | rx_trigger_level | Receiver FIFO trigger level. |
rspi_tx_trigger_level_t | tx_trigger_level | Transmitter FIFO trigger level. |
struct rspi_instance_ctrl_t |
Channel control block. DO NOT INITIALIZE. Initialization occurs when spi_api_t::open is called.
Data Fields | |
uint32_t | open |
Indicates whether the open() API has been successfully called. | |
spi_cfg_t const * | p_cfg |
Pointer to instance configuration. | |
rspi_extended_cfg_t * | p_ext |
Pointer to extended configuration. | |
R_RSPI0_Type * | p_regs |
Base register for this channel. | |
void const * | p_tx_data |
Buffer to transmit. | |
void * | p_rx_data |
Buffer to receive. | |
uint32_t | tx_count |
Number of Data Frames to transfer (8-bit, 16-bit, 32-bit) | |
uint32_t | rx_count |
Number of Data Frames to transfer (8-bit, 16-bit, 32-bit) | |
spi_bit_width_t | bit_width |
Bits per Data frame (8-bit, 16-bit, 32-bit) | |
uint32_t | rxfifo_trigger_bytes |
Receive buffer data triggering number. | |
volatile bool | transfer_is_pending |
Transfer is pending. | |
enum rspi_ssl_polarity_t |
enum rspi_delay_count_t |
Delay count for SPI delay settings.
Receiver FIFO trigger level.
fsp_err_t R_RSPI_Open | ( | spi_ctrl_t * | p_api_ctrl, |
spi_cfg_t const *const | p_cfg | ||
) |
This functions initializes a channel for SPI communication mode. Implements spi_api_t::open.
This function performs the following tasks:
FSP_SUCCESS | Channel initialized successfully. |
FSP_ERR_ALREADY_OPEN | Instance was already initialized. |
FSP_ERR_ASSERTION | An invalid argument was given in the configuration structure. |
FSP_ERR_IP_CHANNEL_NOT_PRESENT | The channel number is invalid. |
fsp_err_t R_RSPI_Read | ( | spi_ctrl_t *const | p_api_ctrl, |
void * | p_dest, | ||
uint32_t const | length, | ||
spi_bit_width_t const | bit_width | ||
) |
This function receives data from a SPI device. Implements spi_api_t::read.
The function performs the following tasks:
FSP_SUCCESS | Read operation successfully completed. |
FSP_ERR_ASSERTION | NULL pointer to control or destination parameters or transfer length is zero. |
FSP_ERR_NOT_OPEN | The channel has not been opened. Open channel first. |
FSP_ERR_IN_USE | A transfer is already in progress. |
FSP_ERR_INVALID_ARGUMENT | A bit length not supported by this device was assigned to the argument. |
fsp_err_t R_RSPI_Write | ( | spi_ctrl_t *const | p_api_ctrl, |
void const * | p_src, | ||
uint32_t const | length, | ||
spi_bit_width_t const | bit_width | ||
) |
This function transmits data to a SPI device using the TX Only Communications Operation Mode. Implements spi_api_t::write.
The function performs the following tasks:
FSP_SUCCESS | Write operation successfully completed. |
FSP_ERR_ASSERTION | NULL pointer to control or source parameters or transfer length is zero. |
FSP_ERR_NOT_OPEN | The channel has not been opened. Open the channel first. |
FSP_ERR_IN_USE | A transfer is already in progress. |
FSP_ERR_INVALID_ARGUMENT | A bit length not supported by this device was assigned to the argument. |
fsp_err_t R_RSPI_WriteRead | ( | spi_ctrl_t *const | p_api_ctrl, |
void const * | p_src, | ||
void * | p_dest, | ||
uint32_t const | length, | ||
spi_bit_width_t const | bit_width | ||
) |
This function simultaneously transmits and receive data. Implements spi_api_t::writeRead.
The function performs the following tasks:
FSP_SUCCESS | Write operation successfully completed. |
FSP_ERR_ASSERTION | NULL pointer to control, source or destination parameters or transfer length is zero. |
FSP_ERR_NOT_OPEN | The channel has not been opened. Open the channel first. |
FSP_ERR_IN_USE | A transfer is already in progress. |
FSP_ERR_INVALID_ARGUMENT | A bit length not supported by this device was assigned to the argument. |
fsp_err_t R_RSPI_Close | ( | spi_ctrl_t *const | p_api_ctrl | ) |
This function manages the closing of a channel by the following task. Implements spi_api_t::close.
Disables SPI operations by disabling the SPI bus.
FSP_SUCCESS | Channel successfully closed. |
FSP_ERR_ASSERTION | A required pointer argument is NULL. |
FSP_ERR_NOT_OPEN | The channel has not been opened. Open the channel first. |
fsp_err_t R_RSPI_CalculateBitrate | ( | uint32_t | bitrate, |
rspi_rspck_div_setting_t * | spck_div | ||
) |
Calculates the SPBR register value and the BRDV bits for a desired bitrate. If the desired bitrate is faster than the maximum bitrate, than the bitrate is set to the maximum bitrate. If the desired bitrate is slower than the minimum bitrate, than an error is returned.
[in] | bitrate | Desired bitrate |
[out] | spck_div | Memory location to store bitrate register settings. |
FSP_SUCCESS | Valid spbr and brdv values were calculated |
FSP_ERR_UNSUPPORTED | Bitrate is out of the settable range. |
fsp_err_t R_RSPI_CallbackSet | ( | spi_ctrl_t *const | p_api_ctrl, |
void(*)(spi_callback_args_t *) | p_callback, | ||
void const *const | p_context, | ||
spi_callback_args_t *const | p_callback_memory | ||
) |
Updates the user callback and has option of providing memory for callback structure. Implements spi_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. |