您好!
对于 SSI 通信、我将 CM CLK 设置为120MHz、并将波特率设置为20MHz。
我注意到、当我使用高速模式时、SSI 模块偶尔会无法解码。 例如,它应该被接收到五个数据,但是 SSI 模块(从 SSI_ReadData()读取)只解码四个数据。 但是、当我使用正常模式时、解码和接收数据将是稳定的。
为什么在使用高速模式时 SSI 模块无法解码?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
对于 SSI 通信、我将 CM CLK 设置为120MHz、并将波特率设置为20MHz。
我注意到、当我使用高速模式时、SSI 模块偶尔会无法解码。 例如,它应该被接收到五个数据,但是 SSI 模块(从 SSI_ReadData()读取)只解码四个数据。 但是、当我使用正常模式时、解码和接收数据将是稳定的。
为什么在使用高速模式时 SSI 模块无法解码?
参考示例: C:\ti\c2000\C2000Ware_3_02_00_00\driverlib\f2838x\examples\cm\SSI\SSI_ex1_loopback
以下设置:
SSI_setConfig ( SSI0_BASE、 CM_CLK_FREQ、 SSI_FRF_MOTO_MODE_3、 SSI_MODE_MASTER、 20000000、 8 );
2. 禁用 反向 模式 (SSICR1.LBM = 0 )
3. 启用 或 禁用 速度 模式 (SSICR1.HSCLKEN = 1 或 0)
P.S. 不 使用 DMA ( 寄存器 SSIDMACTL 中的 TXDMAE 和 RXDMAE 都 为零)
不再有 其他 配置 设置
您好!
SSI 中的 FIFO 深度为8。 当 FIFO 半满或多于半满时、SSI 中的接收 FIFO 中断被触发(参考- f2838x TRM、第5287页、第47.2.4节)。 在 c2000ware 示例中、我们将数据从 FIFO 读取到 ISR 内的接收器阵列(rxdata[])中。 当 ISR 被触发一次时、我们读取4个数据帧。 如果必须在 ISR 中读取4个以上的数据帧(就像在本例中一样)、则需要在下一个 ISR 中读取接下来的4个数据帧、而不是在该 ISR 中读取。
在下一个 ISR 中、确保将数据读取到接收器阵列(rxdata[])的下4个索引中、而不是读取相同的起始4个索引以避免覆盖。 具有接收器阵列索引的全局变量、而不是像 C2000软件示例中那样使用 for 循环计数器(I)。
希望这能解释您的问题原因。
您好!
这 看起来不像同一个问题。
尽管 我们 引用 了示例 SSI_ex1_loopback.c、 但我们 不 启用 SSI Rx 中断 (SSI_INT_RXFF)。
我们 发送 n 个字节 的 TxData 并 使用 while 循环 来调用 SSI_readDataNonBlocking() 以 接收 n 个字节 的 RxData。
P.S. n<=8 、 并在发送前确认 SSIRxFIFO 为空。
但是、 我们 不 会得到 单 个字节 (随机) 、 并且总共只能得到 n-1个字节 ( 而循环 再 也不会得到 SSI_readDataNonBlocking )。
只有 当 SSICR1.HSCLKEN =时、才会发生上述情况 如果 SSICR1.HSCLKEN =、则不会发生 0。