USER GUIDE / PERIPHERALS / SSI SLV / SOFTWARE CONFIGURATION FLOW

软件配置流程

ssi_slv 为接收模式

  1. 首先对 slv 进行初始化,设置 SSLVCTRL 寄存器的第 30 位 is_loop 为高,目的是为了在初始化阶段就引入 pclk 时钟。同时设置 SSLVCTRL 寄存器的第 7 位 reset,范围为 0~63,对应的复位时间=设定值*1/fclk,例如,复位设定值是 10,pclk 的频率为 100Mhz,则复位耗时=10*1/100000000=100ns。

  2. 判断并等待 SSLVCTRL 寄存器的第 7 位 reset 为零,复位完毕。

  3. 在使能前,对相应位进行配置。

  4. 设置 SSLVRXC 寄存器的[31:26]中断屏蔽位是否有效,[25:24]rx_channel 的通道选择,[23:22]rx_endian 的大小端模式(从机与主机保持一致),[21:16]rx_bitwidth 的位长选择,[15:8]读阈值和[7:0]写阈值(可不设置)设定。

  5. 设置 SSLVRXN 寄存器。

  6. 设置 SSLVCTRL 寄存器的第 31 位 sel 选择位为低,选择新 slv(选择旧 slv,设置 SSLVCR0 的第 31 位 sel 为高)。设置第 30 位为 0,关闭回环模式。设置第 6 位与第 4 位,结合决定是否开中断。(例如,不看中断,则[6]为低,[4]为高)。设置第 3 位和第 2 位决定相位和极性(从机与主机保持一致)。

  7. 设置 SSLVCTRL 寄存器的第 0 位为高,接收使能。

  8. 设置完毕,等待主机发送数据,判断接收是否为空,即判断 SSLVCTRL 寄存器的第 14 位是否等于零,为零则未填至阈值数,不为零则结束循环,开始接收读。

  9. 设置 RXC 的阈值为动态阈值 n,检查数据。CpuRead 读取 SSLVRXD 寄存器中的数据看是否与发送的数据一致。image.png

ssi_slv 为发送模式

  1. 首先对 slv 进行初始化,设置 SSLVCTRL 寄存器的第 30 位 is_loop 为高,目的是为了在初始化阶段就引入 pclk 时钟。同时设置 SSLVCTRL 寄存器的第 7 位 reset,范围为 0~63,对应的复位时间=设定值*1/fclk,例如,复位设定值是 10,pclk 的频率为 100Mhz,则复位耗时=10*1/100000000=100ns。

  2. 判断并等待 SSLVCTRL 寄存器的第 7 位 reset 为零,复位完毕。

  3. 在使能前,对相应位进行配置。

  4. 设置 SSLVTXC 寄存器的[31:26]中断屏蔽位是否有效,[25:24]tx_channel 的通道选择,[23:22]tx_endian 的大小端模式(从机与主机保持一致),[21:16]tx_bitwidth 的位长选择,[15:8]和[7:0]读写阈值设定。

  5. 设置 SSLVTXN 寄存器。

  6. 设置 SSLVCTRL 寄存器的第 31 位 sel 选择位为低,选择新 slv。(选择旧 slv,设置 SSLVCR0 的第 31 位 sel 为高)。设置第 30 位为 0,关闭回环模式。设置第 6 位与第 4 位,结合决定是否开中断。(例如,不看中断,则[6]为低,[4]为高)。设置第 3 位和第 2 位决定相位和极性(从机与主机保持一致)。

  7. 设置 SSLVCTRL 寄存器的第 1 位为高,发送使能。

  8. 设置完毕,判断 SSLVCTRL 寄存器的第 23 位 tx_wrflag 是否等于零,为零则未填充的空间小于阈值需等待,不为零则可以开始发送写。

  9. 从机准备发送数据,CpuWrite 存放数据的数组到 SSLVTXD 寄存器。

  10. 主机检查收到的数据是否正确。image.png

ssi_slv 为回环模式

  1. 首先对 slv 进行初始化,设置 SSLVCTRL 寄存器的第 30 位 is_loop 为高,目的是为了在初始化阶段就引入 pclk 时钟。同时设置 SSLVCTRL 寄存器的第 7 位 reset,范围为 0~63,对应的复位时间=设定值*1/fclk,例如,复位设定值是 10,pclk 的频率为 100Mhz,则复位耗时=10*1/100000000=100ns。

  2. 判断并等待 SSLVCTRL 寄存器的第 7 位 reset 为零,复位完毕。

  3. 在使能前,对相应位进行配置。

  4. 设置 SSLVRXC 寄存器和的 SSLVTXC 寄存器[31:26]中断屏蔽位是否有效,[25:24]rx_channel 的通道选择,[23:22]rx_endian 的大小端模式(收发保持一致),[21:16]rx_bitwidth 的位长选择,[15:8]读阈值和[7:0]写阈值(RXC 读阈值=TXC 写阈值)。

  5. 设置 SSLVTXN 寄存器和 SSLVRXN 寄存器。

  6. 设置 SSLVCTRL 寄存器的第 31 位 sel 选择位为低,选择新 slv。(选择旧 slv,设置 SSLVCR0 的第 31 位 sel 为高)。设置第 6 位与第 4 位,结合决定是否开中断。(例如,不看中断,则[6]为低,[4]为高)。设置第 3 位和第 2 位决定相位和极性(从机与主机保持一致)。

  7. 设置 SSLVCTRL 寄存器第 1 位为高,发送使能,第 0 位为高,接收使能。

  8. 设动态阈值为 n,即发送写数据量。n = (tx_num<=tx_wrthr)? tx_num:tx_wrthr;

  9. 判断 SSLVCTRL 寄存器的第 23 位 tx_wrflag 是否等于零,为零则未填充的空间小于阈值需等待,不为零则可以开始发送写。

  10. 从机准备发送数据,CpuWrite 存放数据的数组到 SSLVTXD 寄存器。

  11. 判断 SSLVCTRL 寄存器的第 18 位 rx_rdflag 是否等于零,为零则未填至阈值数,不为零则可以开始接收读。

  12. 设置 RXC 的阈值为动态阈值 n,检查数据。CpuRead 读取 SSLVRXD 寄存器中的数据看是否与发送的数据一致。

  13. 判断是否为最后一次回环检测,如果是最后一次则结束,不是则循环发送和检查数据。(多次回环)image.png

数据流走向

基本数据流向
图 1 基本数据流向