USER GUIDE / PERIPHERALS / SSI / REGISTER DESCRIPTION
寄存器描述
SSI Data Register
SSIDRBASE + 0x0000
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:17 | D31-D17 | D31-D17 被写入T-FIFO中待发送,或是从R-FIFO中被读取,待传给 APB总线 | RW |
| 16 | GPC/D16 | 这一bit数据可以当做普通的数据总线的第16bit,此时它是可读可写的。 在SSI_GPC模式下,这一bit可以作为SSI_GPC输出到外部的pin脚, 此时它是只写寄存器。 需要注意的是,SSI_GPC模式只能在SSI0控制器 中使用。 | RW |
| 15:0 | D15-D0 | D15-D0 被写入T-FIFO中待发送,或是从R-FIFO中被读取,待传给APB 总线。 当传输数据帧的长度小于17bit时,接收数据会在R-FIFO中自动调整, 未被使用的比特位会被自动填0。 对于发送操作来说,未被使用的比特位 在发送时会被发送逻辑忽略。 | RW |
SSI Control Register0
SSICR0BASE + 0x0004
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:27 | Reserved | 写入无影响,读取为零。 | R |
| 26:21 | reset | 软复位,复位时间为reset*pclk周期; 当为0时硬件自动释放 | RW |
| 20 | FIE | 开启和关闭end结束中断 0:关闭 1:开启 | RW |
| 19:18 | TENDIAN | 发送大小端 0:MSB在一个word的最前端,MSB在一个byte的最前端 1:MSB在一个word的最前端,LSB在一个byte的最前端 2:LSB在一个word的最前端,LSB在一个byte的最前端 3:LSB在一个word的最前端,MSB在一个word的最前端 注:按word来存储时,表示大小端,即以字节为单位来进行数据存储, 若为大端,则数据的高位字节放在地址的低端,低位字节放在地址的高 端; 若为小端则反之。 MSB LSB以bit为单位,大端小端以数据类型为单位 | RW |
| 17:16 | RENDIAN | 接收大小端 0:MSB在一个word的最前端,MSB在一个byte的最前端 1:MSB在一个word的最前端,LSB在一个byte的最前端 2:LSB在一个word的最前端,LSB在一个byte的最前端 3:LSB在一个word的最前端,MSB在一个word的最前端 | RW |
| 15 | SSIE | 用来开启/关闭SSI模块 0:关闭 1:开启 清零SSIE并不会将SSIFIFO,SSICR0,SSICR1,SSIGR,SSIITR SSIICR自动复位。 软件需要确保在开启SSI传输前,FIFO和寄存器已 经手动清零或者复位完成。 | RW |
| 14 | TIE | 开启/关闭T-FIFO的半空中断或DMA发送请求 0:关闭; 1:开启TXI半空中断 0:关闭; 1:开启DMA发送请求 注意:TXI中断与DMA发送请求不能同时工作 | RW |
| 13 | RIE | 开启/关闭R-FIFO的半满中断或DMA读取请求 0:关闭; 1:开启RXI半满中断 0:关闭; 1:开启DMA读取请求 注意:RXI中断与DMA读取请求不能同时工作 | RW |
| 12 | TEIE | 开启/关闭发送错误中断TEI 0:关闭 1:开启 | RW |
| 11 | REIE | 开启/关闭接收错误中断REI 0:关闭 1:开启 | RW |
| 10 | LOOP | 做测试用,在回环模式下,SSI输出的移位寄存器与SSI输入的移位寄 存器直接相连。 控制器接收到的数据应该与发送的数据完全相同。 数据 总线pin脚上不输出任何数据。 0:正常SSI传输模式 1:回环测试模式 | RW |
| 9 | RFINE | 接收完成控制位使能 0:关闭RFINC控制 1:开启RFINC控制 当SSICR1.FMAT = B’010,即当前传输协 议格式为NM1时,此 位必须置0 | RW |
| 8 | RFINC* | 接收完成控制位 0:接收继续 1:接收完毕 | RW |
| 7 | EACLRUN | 0:不自动清零underrun标志位 1:当T-FIFO不为空时,自动清零underrun标志位 | RW |
| 6 | FSEL | 选择从机使能信号,未被选中的从机使能信号持续输出无效值 0:选择SSI_FRM1有效 1:选择SSI_CE2_IO2有效 注:SSI_CE2_IO2仅适用于SSI0 | RW |
| 5 | Reserved | 写入无影响,读取为零。 | R |
| 4 | VRCNT | 接收计数(RCNT)有效标志位 0:SSIRCNT.RCNT被忽略 1:SSIRCNT.RCNT被使用 | RW |
| 3 | TFMODE | T-FIFO空模式判断选择 0:新的T-FIFO空模式判断,使用格雷码(建议使用) | RW |
| 2 | TFLUSH | 冲刷T-FIFO使能 0:不冲刷 1:冲刷 如果被写1,会在一个PCLK周期后自动清零 | RW |
| 1 | RFLUSH | 冲刷R-FIFO使能 0:不冲刷 1:冲刷 如果被写1,会在一个PCLK周期后自动清零 | RW |
| 0 | DISREV | 接收操作使能 0:开启 1:关闭 | RW |
SSI Control Register1
SSICR1BASE + 0x0008
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:30 | FRMHL | 帧有效电平选择 FRMHL[1:0] Description 00 SSI_FRM1 低电平有效 默认值 SSI_CE2_IO2 低电平有效 01 SSI_FRM1 高电平有效 SSI_CE2_IO2 低电平有效 10 SSI_FRM1 低电平有效 SSI_CE2_IO2 高电平有效 11 SSI_FRM1 高电平有效 SSI_CE2_IO2 高电平有效 注意:SSI_CE2_IO2仅作用于SSI0 | RW |
| 29:28 | TFVCK | 从从机选择信号使能到串行时钟开始翻转的时间。 当TFVCK = B’00,时间 为半个或一个SSI_CLK时钟周期(视POL和PHA的设定值而定) 当SSICR1.FMAT = B’001,忽略SSICR1.TFVCK不看 TFVCK[1:0] Description 00 间隔半个或一个SSI_CLK周期 初始值 01 多插入一个SSI_CLK时钟周期 10 多插入两个SSI_CLK时钟周期 11 多插入三个SSI_CLK时钟周期 | RW |
| 27:26 | TCKFI | 从串行时钟停止翻转到从机使能信号取消断言的时间。 当TCKFI=B’00时, 时间间隔为半个或一个SSI_CLK时钟周期(视POL和PHA的设定值而定) 当SSICR1.FMAT = B’001,忽略SSICR1.TFCKI不看 TCKFI[1:0] Description 00 间隔半个或一个SSI_CLK周期 初始值 01 多插入一个SSI_CLK时钟周期 10 多插入两个SSI_CLK时钟周期 11 多插入三个SSI_CLK时钟周期 | RW |
| 25 | GPCMD | SSI_GPC 模式选择 0:正常模式 1:特殊模式 正常模式下,SSI_GPC 位与SSIDR 寄存器的值关联 在特殊模式下,SSI_GPC 可以被配置,高低电平取决于GPCHL 注意:SSI_GPC 仅作用于SSI0 | RW |
| 24 | ITFRM | 从机选择信号在间隔期间是否被断言,仅在间隔模式下有效,正常模式下会 被忽略 0:SSI_FRM1 /SSI_CE2_IO2在间隔模式间隔时间取消断言 1:SSI_FRM1 /SSI_CE2_IO2在间隔模式间隔期间持续断言 | RW |
| 23 | UNFIN | 当T-FIFO中所有的数据都被发送完之后,选择SSI直接结束传输还是等待 数据重新填进T-FIFO中(underrun发生时)。 当SSICR1.FMAT= B’001 即处在SSP协议格式下时,此位必须被置0 0:T-FIFO为空就结束本次传输 1:T-FIFO为空时不结束本次传输,会发生SSIunderrun 错误中断并等待 T-FIFO中填入数据SSI_CLK 和 SSI_FRM1 /SSI_CE2_IO2保持断言。 | RW |
| 22:20 | FMAT | 配置传输的协议格式 FMAT Description 000 Motorola’sSPIformat(standard) Initialvalue 001 TI’sSSP format 010 NationalMicrowire 1format 011 NationalMicrowre2format | RW |
| 19:16 | TTRG | 定义T-FIFO的半空阈值,当实际T-FIFO 中的数据量小于或等于该值时, SSISR.TFHE会被置1 0:小于或等于1 N:小于或等于N x8 注意:不建议配置成0 | RW |
| 15:12 | MCOM | 定义命令帧的长度 仅在SSICR1.FMAT =b’010 或 b’011,即NM1 |NM2模式下才有效 命令帧长度为MCOM+1 初始值为b’0111 | RW |
| 11:8 | RTRG | 定义R-FIFO的半满阈值,当实际R-FIFO中的数据量大于或等于该值时, SSISR.RFHF会被置1 0:大于或等于1 N:大于或等于N x8 注意:不建议配置为0 | RW |
| 7:3 | FLEN | 定义待发送,待接收的数据帧的长度,最大可配置的长度为32bit一帧。 当 帧长度大于17bit时,软件需要确保编码正确,当SSI_GPC引脚处于使用 状态,FLEN不能被配置为b’01111(17bit)。 当处于SSP协议格式下时,FLEN不能配置为0(2bit数据帧长度) 数据帧长度 =FLEN +2 注意:在DSPI模式下,数据帧长度应该为2或4的倍数 | RW |
| 2 | GPCHL | SSI_SPC状态,此位在GPCMD为高时有效 0:低 1:高 | RW |
| 1 | PHA | 配置串行时钟SSI_CLK的相位 0:从机使能信号SSI_FRM1/SSI_CE2_IO2断言后,SSI_CLK的第一个跳 变沿用来采样RXD上的数据 1:从机使能信号SSI_FRM1/SSI_CE2_IO2断言后,SSI_CLK的第一个跳 变沿用来驱动数据到TXD上 注意:仅适用于SPI协议 | RW |
| 0 | POL | 配置串行时钟SSI_CLK的极性 0:SSI_CLK的空闲状态为低电平 1:SSI_CLK的空闲状态为高电平 注意:仅适用于SPI协议 | RW |
SSI Status Register
SSISRBASE + 0x000C
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31 | Reserved | 写入无影响,读取为零。 | R |
| 30 | END_CLEAR | 写0会清除XFI中断,写1无效果 | W |
| 29 | TREQN-DMA | 表示SSI在T-FIFO半空状态下请求了DMA搬运数据 0:请求 1:未请求 | R |
| 28 | TREQN | 与TSURPLUS寄存器一起,确认TREQN-DMA的状态 | R |
| 27 | TSURPLUS | 表示T-FIFO是否工作在surplus模式下. | R |
| 26 | RREQN-DMA | 表示SSI在R-FIFO半满状态下请求了DMA搬运数据 0:请求 1:未请求 | R |
| 25 | RREQN | 与RSURPLUS寄存器一起,判断RREQN-DMA的状态 | R |
| 24 | RSURPLUS | 表示R-FIFO是否工作在surplus模式下 | R |
| 23:16 | TFIFO-NUM | 表示T-FIFO中的数据总量 | R |
| 15:8 | RFIFO-NUM | 表示R-FIFO中的数据总量 | R |
| 7 | END | 传输结束标志位,当处在传输中时与SSISR.BUSY相反,在传输完成 前的间隔时间时,此位会保持清零。 当传输完全结束时,此位会置1, 当SSICR0.FIE被使能,会产生XFI中断,这个中断会在写 END_CLEAR之后自动清零 | R |
| 6 | BUSY | 显示SSI当前工作状态 0:SSI处在空闲状态或工作状态 1:正在进行传输 | R |
| 5 | TFF | 显示SSI T-FIFO是否已满 0:不满 1:满 | R |
| 4 | RFE | 显示SSI R-FIFO是否是空的 0:不空 1:空 | R |
| 3 | TFHE | 显示T-FIFO中的数据总量是否小于或等于SSICR1.TTRG的设定值 0:T-FIFO中的数据总量比SSICRI.TTRG的设定值要高 1:T-FIFO中的数据总量达到了SSICRI.TTRG的设定值 此时,若SSICR0.TIE被使能,则会产生TXI中断 | R |
| 2 | RFHF | 显示R-FIFO中的数据总量是否大于等于SSICR1.RTRG的设定值 0:R-FIFO中的数据总量比SSICR1.RTRG小,未达到设定值 1:R-FIFO中的数据总量达到了SSICR1.RTRG的设定值 此时,若SSICR0.RIE被使能,则会产生RXI中断 | R |
| 1 | TUNDR | 显示T-FIFO是否工作在underrun状态下,当工作在underrun状态 下时,控制器会将此位置1,并维持SSI_CLK的翻转及 SSI_FRM1/SSI_CE2_IO2的断言状态,直到T-FIFO被重新填充 0:未发生T-FIFO的underrun状态 | RW |
| 0 | ROVER | 显示R-FIFO的overrun状态,若处在此状态,后续接收到的所有数 据将无法进入移位寄存器,会被丢失 0:R-FIFO未发生overrun状态 1:R-FIFO处在overrun状态 此时,若SSICR0.REIE被使能,则会产生REI中断 写0可以将此位清零,写1不会自己产生中断,无效果 | RW |
SSI Interval Time Control Register
SSIITRBASE + 0x0010
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15 | CNTCLK | 计数器时钟源选择位 0:使用串行时钟SSI_CLK做时钟源来计数 1:使用外部32k时钟源计数 建议配置为0 | RW |
| 14:0 | IVLTM | 配置间隔时间,设置在间隔模式下,每帧之间的间隔需要多少个时钟源 周期。 当SSIITR.IVLTM= 0x0000,SSI控制器被配置为普通模式,此模式下 不存在间隔时间,故可以忽略SSIITR.CNTCLK和SSIICR寄存器。 当SSIITR.IVLTM≤0x0000,SSI控制器被配置为间隔模式,间隔时间 的计算方式如下: 当CNTCLK配置为0,选择SSI_CLK计时 Intervaltime =[CNTCLK clock period]* [ValueofIVLTM] + 3* dev_clk period | RW |
SSI Interval Character-per-frame Control Register
SSIICRBASE + 0x0014
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:3 | Reserved | 写入无影响,读取为零。 | R |
| 2:0 | ICC | 配置两段间隔时间中,可以连续传输的数据帧数,若SSICR1.FMAT≤B’000 即不处于SPI协议格式下,此寄存器可以忽略不看。 最终的配置结果为,在两段间隔时间之间,可以传输SSIICR 配置值 +1 帧数据 | RW |
SSI Clock Generator Register
SSIGRBASE + 0x0018
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:8 | Reserved | 写入无影响,读取为零。 | R |
| 7:0 | CGV | 配置串行时钟SSI_CLK的频率,此时种是由DEV_CLK 生成的,故可以 动态调整频率,计算公式如下: F = [FrequencyofDEV_CLK]/(2* (CGV +1)) SSI_CLK | RW |
SSI Receive Counter Register
SSIRCNTBASE + 0x001C
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | Reserved | 写入无影响,读取为零。 | R |
| 15:0 | RCNT | T-FIFO为空后跳转为仅接收模式时,R-FIFO预计接收的数据量 如果SSICR1.UNFIN=0andSSICR0.RFINE=1,当T-FIFO为空时,SSI 会进入仅接收模式。 如果此时SSICR0.VRCNT= 1,内置计数器会自动开 始计数。 当计数值等于RCNT的设定值后,接收操作会自动终止。 | RW |
SSI Surplus Process Enable Register
SSISENBASE + 0x0020
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:5 | Reserved | 写入无影响,读取为零。 | R |
| 4 | SEN_RFF | R-FIFO surplus操作使能位,结合中断信号产生中断 | RW |
| 3:1 | Reserved | 写入无影响,读取为零。 | R |
| 0 | SEN_TFF | T-FIFO surplus操作使能位,结合中断信号产生中断 | RW |
SSI Surplus Process Load Register
SSITLOADBASE + 0x0024
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:5 | Reserved | 写入无影响,读取为零。 | R |
| 4 | SLD_RFF | R-FIFO的surplus处理使能信号,重置内置的接受数据总量的计数器 | W |
| 3:1 | Reserved | 写入无影响,读取为零。 . | R |
| 0 | SLD_TFF | T-FIFO的surplus处理使能信号,重置内置的发送数据总量的计数器 | W |
SSI Surplus Process Count Register
SSISCNTBASE + 0x0028
| 位 | 名称 | 说明 | RW |
|---|---|---|---|
| 31:16 | SNUM | 剩余需要被接收或需要发送的数据量 | RW |
| 15:0 | TNUM | 接收或发送的数据总量 | RW |