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.

[参考译文] EK-TM4C123GXL:SSI_TXEOT 上的 SSI 中断(传输结束)

Guru**** 2348500 points
Other Parts Discussed in Thread: EK-TM4C123GXL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/610418/ek-tm4c123gxl-ssi-interrupt-on-ssi_txeot-end-of-transmission

器件型号:EK-TM4C123GXL

大家好、我想用 EK-TM4C123GXL 来控制 APA102C LED 条。

因此、我想将 SSI0设置为主器件、并使用其数据传输和时钟引脚、使用中断(没有 μ µDMA)、这样就没有忙等待、中断之间就有时间让内核执行其他操作。 我想将中断设置为仅出现在 SSI_TXEOT 标志上、因此如果 FIFO 为空且发送了来自传输缓冲区的最后一位、该中断将出现、 然后、我将尽可能多的数据加载到 FIFO 中(完全8 * 16位)、因此传输过程将需要尽可能多的时间 来为内核提供自由时间。

问题1是、如果 SSI_TXEOT 标志被发现、则表示发送流已停止、 然后需要一些时间才能加载 FIFO 满并重新开始发送、在没有发送数据的情况下会有一些间隙、如果这对 LED 来说是个问题、因为 FIFO 每次发送空时都会有一个间隙。 是否可以设置 SSI、以便在 FIFO 为空后产生中断、而不是发送缓冲区、因此如果最后一个数据时隙被传输到 FIFO 缓冲区进行发送、 将会有一个中断、并且在中断中将会有另一个 FIFO 填充、而上一个数据时隙将被发送、因此发送过程中没有间隔。

问题2是该标志 SSI_TXEOT 上没有显示中断。 我尝试使用 SSI_TXFF 进行调试、因此我可以在 SSI 中断器内执行代码、但我只有4个 FIFO 插槽而不是8个、因此中断更频繁地出现。 这可能是本勘误表 SSI#07吗? 这是否可以解决、 此 pdf 中似乎有权变措施 、但对于我的案例也是如此?

这是 SSI0的初始化过程:

void SSI0Init (void)
{

SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);


GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinConfigure (GPIO_PA5_SSI0TX);
GPIO_PinTypeSI_PORta (GPIO_SSIPBLE_SSIP0TX) GPIO_PIN_5 | GPIO_PIN_2);

SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MODE_0、
SSI_MODE_MASTER、1000000、16);

//SSIIntEnable (SSI0_BASE、SSI_TXFF);//SSI_TXFF -- TX FIFO 半满或小于
SSIIntEnable (SSI0_BASE、SSI_TXEOT);//SSI_TXEOT --发送 FIFO 为空
SSIEnable (SSI0_BASE);


} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 1)虽然我不是 LED 条的专家、但我所阅读的文档表明暂停 SSI 传输没有问题。
    2) 2)是的、您可能已经进入勘误表 SSI#07。 虽然变通办法应该起作用、但每次 FIFO 低于半满时、只需重新填充 FIFO 可能会更容易。