USER GUIDE / PERIPHERALS / SSI / SOFTWARE CONFIGURATION FLOW
软件配置流程
基本流程
初始化的步骤有以下几步:
- 不使能 SSI
- 首先配置好 GPIO,SSI 模块可能使用了多组 GPIO,确认工作在正确的 func 下
- 选择是否开启中断使能,若不开启,则所有中断会被屏蔽
- 手动复位 SSISR 寄存器,确保不会发生 underrun 及 overrun
- 手动将 SSICR0.TFLUSH,SSICR0.RFLUSH 写 1,确保 T-FIFO 及 R-FIFO 被冲刷
- 配置 SSIITR 寄存器,选择计数时钟
- 配置 SSIGR 寄存器,选择串行时钟 SSI_CLK 的频率
- 配置 SSICR1 寄存器,包括使能信号的有效状态,数据帧开始及结束的延时,间隔模式下,从机使能信号是否被断言,FIFO 的阈值,帧长度等
- 配置 SSICR1 寄存器,选择传输的协议格式(SPI SSP NM1/2),注意务必与从机保持一致
- 若选择使能了间隔模式,配置 SSIICR 寄存器选择两段间隔时间中,可以连续传输的数据帧个数
- 配置 SSIRCNT 寄存器,确定需要接收的数据总量
- 配置 SSRCR0 寄存器,选择时钟相位,极性,接收/发送模式,是否回环等,最后使能 SSI
Normal 模式,全双工,UNFIN=0 的软件流程
- 配置时钟和 gpio,SSI 模块可能使用了多组 GPIO,确认工作在正确的 func 下
- 手动复位 SSISR 寄存器,确保不会发生 underrun 及 overrun
- ①配置 SSICR0 和 SSICR1 寄存器,其中包括大小端,极性和相位,全双工,只传输/只接受/边传边收,DMA 响应/中断响应,中断是否使能,发送/接受阈值,片选选择,帧长度,Normal 模式,UNFIN=0,以及 dma 相关配置等 ②配置 SSIGR 时钟分频系数 ③配置 SSIITR 和 SSIICR(间隔模式需配置)
- enable ssi
- 通过 DMA/CPU 连续发送 n 帧数据
- 等待 rx_fifo_num==n 或 SSISR 中 end 标志,通过 DMA/CPU 取出接收数据并 check
- flush fifo 和 disable ssi
Normal 模式,全双工,UNFIN=1 的软件流程
- 配置时钟和 gpio,SSI 模块可能使用了多组 GPIO,确认工作在正确的 func 下
- 手动复位 SSISR 寄存器,确保不会发生 underrun 及 overrun
- ①配置 SSICR0 和 SSICR1 寄存器,其中包括大小端,极性和相位,全双工,只传输/只接受/边传边收,DMA 响应/中断响应,中断是否使能,发送/接受阈值,片选选择,帧长度,Normal 模式,UNFIN=0,以及 dma 相关配置等 ②配置 SSIGR 时钟分频系数 ③配置 SSIITR 和 SSIICR(间隔模式需配置)
- enable ssi
- 通过 DMA/CPU 连续发送 n 帧数据
- 等待 rx_fifo_num==n,通过 DMA/CPU 取出接收数据并 check
- 根据需求重复步骤 5 和 6
- flush fifo 和 disable ssi
注意:dev_clk 时钟频率不应超过 pclk 的四倍;相关配置建议最好全部能在 enable ssi 之前配置完成
中断操作
SSI 模块有 TXI TEI TFI REI 四种中断,或在一起做一个中断输出到 intc(中断控制模块)中。
表 1 SSI Interrupts
| Operation | Condition | Flag Bit | Mask Bit | Interrupt | DMAC Activation |
|---|---|---|---|---|---|
| 发送操作 | T-FIFO 半空中断 | SSISR.TFHE | SSICR0.TIE | TXI | Possible |
| T-FIFO underrun 错误中断 | SSISR.TUNDR | SSICR0.TEIE | TEI | Impossible | |
| 接收操作 | R-FIFO 半满中断 | SSISR.RFHF | SSICR0.RIE | RXI | Possible |
| R-FIFO overrun 错误中断 | SSISR.ROVER | SSICR0.REIE | REI | Impossible | |
| 传输结束 | end 中断 | SSISR.END | SSICR0.FIE | XFI |
SSISR.TFHE 和 SSISR.RFHF 标志位拉高都可能使能 DMA 搬运模式,前提条件是该中断被屏蔽,以及 DMA 已启用和配置的情况下。