User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 545
UG585 (v1.11) September 27, 2016
Chapter 17: SPI Controller
6. Enable the interrupts: Write 0x27 to spi.Intrpt_en_reg to enable RxFIFO full, RxFIFO overflow,
TxFIFO empty, and fault conditions.
7. Start the data transfer: Set spi.Config_reg0 [Man_start_com] = 1.
8. Interrupt handler: Transfer any additional data to the slave the required data to SPI slave using
the interrupt handler.
9. Disable interrupts: Write 0x27 to the spi.Intrpt_dis_reg to disable RxFIFO full, RxFIFO overlflow,
TxFIFO empty, and fault conditions.
10. Disable the controller: Set spi.En_reg0 [SPI_EN] = 0.
11. De-assert slave select: Set spi.Config_reg0 [CS] = 1111.
17.3.4 Slave Mode Data Transfer
Example: Slave Mode - Interrupt Driven
Ensure that the controller configuration is done and then:
1. Slave configuration: Write 0 to spi_Config_reg0.
2. Enable the interrupts: Write 0x37 to spi.Intrpt_en_reg to enable RxFIFO Not empty, RxFIFO full,
RxFIFO overflow, TxFIFO empty, and fault conditions.
3. Enable the controller: Write 1 to spi.En_reg [SPI_EN].
4. Interrupt Handler: Receive data from master using the interrupt handler.
5. Disable the interrupts: Write 0x37 to spi.Intrpt_DIS_reg to disable RxFIFO Not empty, RxFIFO
full, RxFIFO overflow, TxFIFO empty, and fault conditions.
6. Disable the controller: Write 0 to spi_En_reg0 [SPI_EN].
17.3.5 Interrupt Service Routine
Example: Interrupt Service Routine
This example handles RxFIFO overflow/underflow, multi-master collision (mode fail) and handles Rx
and Tx data transfers.
1. Disable all interrupts except TxFIFO Full and RxFIFO Not Empty: Write 0x027 to
spi.Intr_dis_REG.
2. Determine the source of the interrupt: Read the interrupt status register spi.Intr_status_reg0.
3. Clear the interrupts: Write 1s to the interrupt status register spi.Intr_status_reg0.
4. Check for Mode fail Interrupt: (multi-master operation). On mode fail, abort the current
transfer:
a. Reset the controller
b. Re-configure the controller
c. Re-send the data.
5. Empty the RxFIFO: Read spi.Intr_status_reg0 [RX_FIFO_full] bits: