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.

[参考译文] CCS/TMS320F28379D:同步 SPISTE 信号的手动控制(GPIO)?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/735513/ccs-tms320f28379d-synchronizing-manual-control-gpio-of-the-spiste-signal

器件型号:TMS320F28379D

工具/软件: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

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

    在非 FIFO 模式下、必须使用 INT_FLAG 标志位

    在 FIFO 模式下、必须使用 SPIFFTXINT 标志位。

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    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

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

    我已请求 C2000设计工程师对此进行研究。 我希望他们能在一周内回来。 我会随时向您发布。

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

    设计工程师是否能够与您取得反馈?

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

    以下是设计工程师的回答:-

    •SPISTS 寄存器中的 INT_FLAG 在 SPI 字传输完成后被置位
    •需要对 Rx 缓冲器进行虚拟读取以清除 INT_FLAG
    •设置 INT_FLAG 后、软件应在手动禁用 STE 之前添加0.5*SPICLK 持续时间的等待时间、以满足 STE 保持计时参数要求。
    •在这种情况下、FIFO 模式可能不有用、因为需要在每个字传输后进行指示。

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

    不幸的是、没有直接信号或中断情况可检测位何时完全从寄存器中移出。 不需要添加静态等待时间(0.5 * SPICLK)。

    我们将添加其他硬件、以获取我们所需的 SPI 功能。

    感谢您对此进行深入研究。

    好的、
    Graham