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.

[参考译文] TMS320F28379D:SPI:何时发送数据以及确切发生中断的时间

Guru**** 2535750 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/611814/tms320f28379d-spi-when-will-the-data-be-sent-and-what-time-exactly-does-the-interrupt-happen

器件型号:TMS320F28379D

你(们)好

在中、我想知道、对于非 FIFO 模式下的 SPI:当我写入代码时:TXBUF=0x00、0x00将自动传输到 SPIDAT、然后传输开始。 当 SPIDAT 中的最后一位移出时、它将设置标志并触发中断。 我是对的吗? 为了接收、很容易理解、当 RXBUF 有数据时、它将设置标志并触发中断。

对于处于 FIFO 模式的 SPI:下面是"spi_loopback_interrupts_cpu01"中的代码

中断空 spiTxFifoIsr (空)

uint16 i;
// asm (" NOP");
for (i=0;i<2;i++)

SpiaRegs.SPITXBUF=sdata[i];//发送数据

for (i=0;i<2;i++)//增加下一个周期的数据

sdata[i]= sdata[i]+ 1;

SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1;//清除中断标志
PieCtrlRegs.PIEACX.All|=0x20;//发出 PIE ACK

我观察到、每次执行"SpiaRegs.SPITXBUF=sdata[i]时、 RXFFST 位将增加1、这意味着 FIFO 字增加1。 那么、这是否意味着每次我向 SPITXBUF 写入内容时、该字都将放入 TX FIFO 中? 那么什么时候发送 FIFO 中的数据呢?

但 TRM 中的图片显示、SPITXBUF 似乎正在将数据从 FIFO 传送到 SPIDAT、它无法将数据放入 TX FIFO 中、因此在上述代码中、每次我写入 "SpiaRegs.SPITXBUF=sdata[i]时、sdata[i]确切的位置是什么? 数据将在何时传输?

和接收中断。 每次我读取 SPIRXBUF 两次时、似乎我从 RX_FIFO 读取数据、这与我在上面显示的图片不同。

中断空 spiRxFifoIsr (空)

uint16 i;
// asm (" NOP");
for (i=0;i<2;i++)

RDATA[I]=SpiaRegs.SPIRXBUF;//读取数据

for (i=0;i<2;i++)//检查接收到的数据

if (RDATA[i]!= RDATA_POIN+I)

error();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Howard、

    我将回答您的问题。 首先、您能否澄清您使用的是 FIFO 模式还是非 FIFO 模式? 在您的问题中、我看到您说的是非 FIFO 模式、但您的一些代码示例在函数名称中包含 FIFO、并使用一些 FIFO 寄存器。

    此致、
    Kris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Kris、第一段是关于非 FIFO 模式、其余是关于 FIFO 模式。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我很期待您的回答。
    此致、
    霍华德
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Howard、

    在非 FIFO 模式下、中断将在数据传输结束时发生。 这也是接收中断发生的同时、这也是在非 FIFO 模式下产生单个中断的原因。

    在 FIFO 模式下、当您写入 TX 寄存器时、它会将其放入 SPITX 缓冲区。 如果此时没有发生传输、它将继续并将其复制到 SPIDAT 寄存器中、然后开始传输。 如果发送发生、那么数据将被放置在 FIFO 中的下一个可用位置。 每次发送后、FIFO 中的数据被上移一个位置、而位置0中的数据被复制到 SPIDAT 中。

    请告诉我、这是否完全解答了您的问题。

    此致、

    Kris