大家好、我想用 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); }