USER GUIDE / PERIPHERALS / SSI / SOFTWARE CONFIGURATION FLOW

软件配置流程

基本流程

初始化的步骤有以下几步:

  1. 不使能 SSI
  2. 首先配置好 GPIO,SSI 模块可能使用了多组 GPIO,确认工作在正确的 func 下
  3. 选择是否开启中断使能,若不开启,则所有中断会被屏蔽
  4. 手动复位 SSISR 寄存器,确保不会发生 underrun 及 overrun
  5. 手动将 SSICR0.TFLUSH,SSICR0.RFLUSH 写 1,确保 T-FIFO 及 R-FIFO 被冲刷
  6. 配置 SSIITR 寄存器,选择计数时钟
  7. 配置 SSIGR 寄存器,选择串行时钟 SSI_CLK 的频率
  8. 配置 SSICR1 寄存器,包括使能信号的有效状态,数据帧开始及结束的延时,间隔模式下,从机使能信号是否被断言,FIFO 的阈值,帧长度等
  9. 配置 SSICR1 寄存器,选择传输的协议格式(SPI SSP NM1/2),注意务必与从机保持一致
  10. 若选择使能了间隔模式,配置 SSIICR 寄存器选择两段间隔时间中,可以连续传输的数据帧个数
  11. 配置 SSIRCNT 寄存器,确定需要接收的数据总量
  12. 配置 SSRCR0 寄存器,选择时钟相位,极性,接收/发送模式,是否回环等,最后使能 SSI

Normal 模式,全双工,UNFIN=0 的软件流程

  1. 配置时钟和 gpio,SSI 模块可能使用了多组 GPIO,确认工作在正确的 func 下
  2. 手动复位 SSISR 寄存器,确保不会发生 underrun 及 overrun
  3. ①配置 SSICR0 和 SSICR1 寄存器,其中包括大小端,极性和相位,全双工,只传输/只接受/边传边收,DMA 响应/中断响应,中断是否使能,发送/接受阈值,片选选择,帧长度,Normal 模式,UNFIN=0,以及 dma 相关配置等 ②配置 SSIGR 时钟分频系数 ③配置 SSIITR 和 SSIICR(间隔模式需配置)
  4. enable ssi
  5. 通过 DMA/CPU 连续发送 n 帧数据
  6. 等待 rx_fifo_num==n 或 SSISR 中 end 标志,通过 DMA/CPU 取出接收数据并 check
  7. flush fifo 和 disable ssi

Normal 模式,全双工,UNFIN=1 的软件流程

  1. 配置时钟和 gpio,SSI 模块可能使用了多组 GPIO,确认工作在正确的 func 下
  2. 手动复位 SSISR 寄存器,确保不会发生 underrun 及 overrun
  3. ①配置 SSICR0 和 SSICR1 寄存器,其中包括大小端,极性和相位,全双工,只传输/只接受/边传边收,DMA 响应/中断响应,中断是否使能,发送/接受阈值,片选选择,帧长度,Normal 模式,UNFIN=0,以及 dma 相关配置等 ②配置 SSIGR 时钟分频系数 ③配置 SSIITR 和 SSIICR(间隔模式需配置)
  4. enable ssi
  5. 通过 DMA/CPU 连续发送 n 帧数据
  6. 等待 rx_fifo_num==n,通过 DMA/CPU 取出接收数据并 check
  7. 根据需求重复步骤 5 和 6
  8. flush fifo 和 disable ssi

注意:dev_clk 时钟频率不应超过 pclk 的四倍;相关配置建议最好全部能在 enable ssi 之前配置完成

中断操作

SSI 模块有 TXI TEI TFI REI 四种中断,或在一起做一个中断输出到 intc(中断控制模块)中。

表 1 SSI Interrupts
OperationConditionFlag BitMask BitInterruptDMAC Activation
发送操作T-FIFO 半空中断SSISR.TFHESSICR0.TIETXIPossible
T-FIFO underrun 错误中断SSISR.TUNDRSSICR0.TEIETEIImpossible
接收操作R-FIFO 半满中断SSISR.RFHFSSICR0.RIERXIPossible
R-FIFO overrun 错误中断SSISR.ROVERSSICR0.REIEREIImpossible
传输结束end 中断SSISR.ENDSSICR0.FIEXFI

SSISR.TFHE 和 SSISR.RFHF 标志位拉高都可能使能 DMA 搬运模式,前提条件是该中断被屏蔽,以及 DMA 已启用和配置的情况下。