主题中讨论的其他器件:EK-TM4C1294XL
您好!
我正在尝试优化 SPI 时序、我的目标是实现一个连续的时钟帧、字节之间没有任何暂停。
我使用 EK-TM4C1294XL 进行测试。
用户可通过下面的函数将 SSI 模块配置为主机模式:
SSIConfigSetExpClk(SSI0_BASE, 120000000, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8);
我的元件需要 SSI_FRF_MOTO_MODE_0 (空闲时钟为低电平、并在时钟的第一个边沿进行捕捉)
我使用 SSI0、它被配置为1MHz 时钟。
为了在配置后对其进行测试、我向 SPI FIFO 写入4个字节、以确保字节之间没有任何暂停:
HWREG(SPI0_BASE + SSI_O_DR) = 0; HWREG(SPI0_BASE + SSI_O_DR) = 0; HWREG(SPI0_BASE + SSI_O_DR) = 0; HWREG(SPI0_BASE + SSI_O_DR) = 0;
我在 CLK 引脚上插入了一个示波器、用于观察字节流:
您可以在捕获图中看到、每个字节之间存在一个时钟暂停。
但是、如果我将格式更改为 SSI_FRF_MOTO_MOTO_1或 SSI_FRF_MOTO_MODE_3、则每个字节之间不会有停顿:
发现这一点后、我尝试了所有模式、似乎当相位为1时、每个字节之间存在一个 SPI 时钟暂停:
要恢复:
- SSI_FRF_MOTO_MODE_0和 SSI_FRF_MOTO_MODE_2在每个字节之间暂停
- SSI_FRF_MOTO_MODE_1和 SSI_FRF_MOTO_MODE_3 在每个字节之间不含暂停
文档中未指定每个字节之间存在暂停。
数据表中唯一指出存在暂停的部分是17.3.8 DMA Operation:
请注意:当双 SSI 或四 SSI 模式作为主机使用时、μ μDMA 的 SSICLK 频率大于系统时钟的1/6、在每个字节传输时就会插入等待状态
但是、我这里不使用 DMA。
请注意、我也尝试使用 DMA、但存在相同的行为。
您是否知道为什么在相位为1时流中有1个 SPI 时钟暂停?
此致。