我正在尝试将 Tx FIFO 为空中断设置为在向主设备写入7个字后发生在 SPI 从设备上。 但是、我可以看到、它在启用中断后立即进入中断。 使用调试器、我可以看到寄存器不指示任何 SPI 中断标志已设置(即使是非 FIFO 中断标志)。 即使 FIFO 状态也显示剩余7个字、FFIL 设置为0。 我在这里遗漏了什么吗?
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.
我正在尝试将 Tx FIFO 为空中断设置为在向主设备写入7个字后发生在 SPI 从设备上。 但是、我可以看到、它在启用中断后立即进入中断。 使用调试器、我可以看到寄存器不指示任何 SPI 中断标志已设置(即使是非 FIFO 中断标志)。 即使 FIFO 状态也显示剩余7个字、FFIL 设置为0。 我在这里遗漏了什么吗?
因此我在启动时将 TXFFIL 值设置为7、绝不更改该值、因此该值应始终为0。
这当前是我的 SPI 驱动器的写入函数。 我在 SPI_RESET 之后有一个断点、我在这里使用调试器检查 FIFO 状态是否为0。 TX FIFO 中断条目中有另一个断点。 在第一个断点之后运行、我会在发送任何字节之前立即到达 TX FIFO ISR 中的下一个断点。 即使有另一个 ISR 将其清除、我也不认为 TXFFINT=0时它会进入这个中断。
为了确认 Rx FIFO 设置根本不影响 Tx FIFO 中断、是吗?
我需要再次运行此测试并收集 ePIE 和其他 SPI 寄存器数据。 当 FIFO 被启用并且除了 RX FIFO 之外没有其它中断被启用时、其它的 SPI 寄存器看起来也一样正确。
/* Reset SPI Tx FIFOs */
SPI_resetTxFIFO(main_spi_BASE);
for(uint16_t i = 0; i < len; i++)
{
SPI_writeDataNonBlocking(main_spi_BASE, buf[i]);
}
/* TODO: Why is the Tx interrupt occurring before the FIFO is emptied? */
/* Enable FIFO empty Tx interrupt */
Interrupt_enable(INT_main_spi_TX);
/* Clear interrupt flag */
SPI_clearInterruptStatus(main_spi_BASE, SPI_INT_TXFF);Anurag,
所以我在启动时将 TXFFIL 值设置为7而不更改它,所以它应该始终为0。
在上一篇文章中、您提到 TXFFIL 值设置为0? 为了清楚起见、如果希望 TX FIFO 中断仅在 TX 缓冲区为空时发生、则需要将其设置为0。 同样、中断基于缓冲区的级别、而不是 FIFO 本身。 有关该配置、请再次参阅该部分(2.3.7 SPI FIFO 说明) 
并仅为了确认 Rx FIFO 设置根本不会影响 Tx FIFO 中断,正确吗?
不、不能。
艾什瓦里亚