Hard Processor System Technical Reference Manual: Agilex™ 5 SoCs

ID 814346
Date 7/19/2024
Public
Document Table of Contents

5.10.7.1. Master SPI and SSP Serial Transfers

Figure 236. Master SPI or SSP Serial Transfer Software Flow
To complete an SPI or SSP serial transfer from the SPI master, follow these steps:
  1. If the SPI master is enabled, disable it by writing 0 to the SPI Enable register(SPIENR).
  2. Set up the SPI master control registers for the transfer. You can set these registers in any order.
    • Write Control Register 0 (CTRLR0). For SPI transfers, you must set the serial clock polarity and serial clock phase parameters identical to the target slave device.
    • If the transfer mode is receive only, write Control Register 1 (CTRLR1) with the number of frames in the transfer minus 1. For example, if you want to receive four data frames, write 3 to this register.
    • Write the Baud Rate Select Register (BAUDR) to set the baud rate for the transfer.
    • Write the Transmit and Receive FIFO Threshold Level registers (TXFTLR and RXFTLR) to set FIFO buffer threshold levels.
    • Write the IMR register to set up interrupt masks.
    • Write the Slave Enable Register (SER) register to enable the target slave for selection. If a slave is enabled at this time, the transfer begins as soon as one valid data entry is present in the transmit FIFO buffer. If no slaves are enabled prior to writing to the Data Register (DR), the transfer does not begin until a slave is enabled.
  3. Enable the SPI master by writing 1 to the SPIENR register.
  4. Write data for transmission to the target slave into the transmit FIFO buffer (writeDR). If no slaves were enabled in the SER register at this point, enable it now to begin the transfer.
  5. Poll the BUSY status to wait for the transfer to complete. If a transmit FIFO empty interrupt request is made, write the transmit FIFO buffer (write DR). If a receive FIFO full interrupt request is made, read the receive FIFO buffer (read DR).
  6. The shift control logic stops the transfer when the transmit FIFO buffer is empty. If the transfer mode is receive only (TMOD = 2), the shift control logic stops the transfer when the specified number of frames have been received. When the transfer is done, the BUSY status is reset to 0.
  7. If the transfer mode is not transmit only (TMOD is not equal to 1), read the receive FIFO buffer until it is empty
  8. Disable the SPI master by writing 0 to SPIENR.