主题中讨论的其他器件:SysConfig
您好、TI 团队、
我正在尝试 在 F2838D 控制器中使用 SPI FIFO 中断方法从主器件接收20个字节的数据(Ten16位值)。
主配置(非 TI 控制器):时钟:500kHz、模式:0 (极性和相位均为零)、数据宽度:16
从器件配置(TI 的 F28388D): 500kHz、 模式:0 (极性和相位均为零)、 数据宽度:16、FIFO 中断级别:4、中断激活:接收中断。 下图具有从器件配置。

在下面的 Rx ISR 实现中、我尝试通过监控 FIFO 状态直至其变为零来读取完整的数据。
__interrupt void spiaRxFIFOISR(void)
{
volatile uint16_t flags, chr, words, fifoStatus;
uint16_t i = 0;
printf("Entered InterruptServiceRoutine...: %d\n", i++);
do
{
fifoStatus = SPI_getRxFIFOStatus(SPIA_slave_BASE);
flags = SPI_getInterruptStatus(SPIA_slave_BASE);
if(SPI_getRxFIFOStatus(SPIA_slave_BASE))
{
chr = SPI_readDataBlockingFIFO(SPIA_slave_BASE);
printf("The data is: %d\n",chr);
ReceiveBuffer[NumCharsReceived++] = chr;
}
}while(SPI_getRxFIFOStatus(SPIA_slave_BASE) );
SPI_resetRxFIFO(SPIA_slave_BASE);
SPI_clearInterruptStatus(SPIA_slave_BASE, SPI_INT_RXFF);
SPI_clearInterruptStatus(SPIA_slave_BASE, SPI_INT_RX_OVERRUN );
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP6);
}
下图显示了主从导线之间 SPI 探测的4个信号的捕捉。

Question:
1.这是从 SPI 主站读取数据的正确方式吗?如果没有、您能否提供任何可以读取所有数据的资源? (我已经使用 FIFO 检查了 SPI 示例、在示例中、我们不监控任何位、而是使用 for 循环)。
2.如果我将 FIFO 中断级别设置为4、我能够正确读取5个字的数据(预期包括第0个字的 FIFO)、但中断永远不会再次到达该 ISR 来读取更多的数据。 在 ISR 实现中、我是否遗漏了与清除中断相关的任何内容?
3、使用带中断的 SPI FIFO 的工作/使用过程/流程是什么?
从主器件发送的数据:0x0000 、0x0001、 0x0002、 0x0003、0x0004、 0x0005、 0x0006、 0x0007、 0x0008、0x0009 、 0x000A、 0x000B、 0x000C、 0x000D、0x000E 、 0x000F、 0x0010、 0x0011、 0x0012、0x0013 。
从机中 FIFO 中断级别为4的数据接收: 0x0000、 0x0001、0x0002 、0x0003 、0x0004 。