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.
工具/软件:Code Composer Studio
当使用 GPIO 手动控制 SPISTE 信号时、应使用哪个中断或寄存器来指示最后一位已从 SPIDAT 移出?
我使用了以下代码、它们都导致 GPIO (对于 SPISTE)设置得太早:
1) 1) while (SpiaRegs.SPIFFTX.bit.TXFFINT = 0){} 2) while (SpiaRegs.SPIFFTX.bit.TXFFST > 0){} 3) while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG = 0x1){} 4) while (SpiaRegs.SPISTS.BIST.BIST.FLAG = 0)
将在 while 循环之后调用 GPIO (对于 SPISTE)。
好的、
Graham
std::向量 :const_iterator it; GPIO_WritePin (61、0); for (IT = sMultiData.begin(); IT!= sMultiData.end();IT++) { //发送数据 SpiaRegs.SPITXBUF =*它; } //这将在数据完全移出 SPIDAT 之前退出 while (SpiaRegs.SPIFFTX.bit.TXFFINT = 0){} GPIO_WritePin (61、1);
Manoj、
TXFFINT 标志只指示发送 FIFO 缓冲区中剩余的0、1、2或16个字。 而不是实际数据已移出 SPIDAT 时。
当使用 TXFFINT 标志时、当 TXFFIL 被设定为0x0时、GPIO 控制的 SPISTE 会很快关闭1个 SPI 字。
在进一步测试后、它如下所示:
1) 1)在 FIFO 模式下、中断标志(TXFFINT)似乎指示发送 FIFO 为空(TX_FIFO_n)。 BUFFULL_FLAG 指示 SPITXBUF 何时为空并已将其内容传输到 SPIDAT。 当 SPIDAT 完成移出数据时不会发生这种情况。
在 FIFO 模式中、需要一个中断标志信号 SPIDAT 已经完成来通过 GPIO 手动控制 SPISTE。 否则、GPIO 控制的 SPISTE 将提前取消置位、数据传输将不完整。
2) 2)在非 FIFO 模式下、INT_FLAG 出现以指示 (通过示波器) SPITXBUF 为空。 当 SPIDAT 完成移出数据时不会发生这种情况。 等待发送完成时:
SpiaRegs.SPITXBUF = DATA; 而(SpiaRegs.SPISTS.bit.INT_FLAG = 0x0){} //手动禁用 SPISTE、这将太早 GPIO_WritePin (61、1)
是否有办法知道何时完成 SPIDAT 将数据移出到从器件? 同步 GPIO 控制的 SPISTE 信号的其他方法是什么?
好的、
Graham