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.

[参考译文] 컴파일러/TMS320F28377D:SPI-A MOSI 信号输出不工作。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/929908/tms320f28377d-spi-a-mosi-signal-output-is-not-working

器件型号:TMS320F28377D
主题中讨论的其他器件:ADS8688C2000WARE

工具/软件:TI C/C++编译器

28377D 的 MOSI 首先传输 MSB、 那么是否应转换 LSB 位、以便在28377D 中首先传输 LSB 位?

2. SPI MOSI 信号不是~~~μ s!

  SPI 设置如下。

  SPI -A GPIO 设置。

  EALLOW;

GpioCtrlRegs.GPAGMUX2.bit.GPIO16 = 0x0;
GpioCtrlRegs.GPAGMUX2.bit.GPIO17 = 0x0;
GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0x0;
GpioCtrlRegs.GPAGMUX2.bit.GPIO19 = 0x0;

GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0x1;// MOSI
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0x1;// MISO
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0x1;// CLK
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0x0;//芯片选择

GpioCtrlRegs.GPAPUD.ALL &= 0xFCB8FFFF;
GpioCtrlRegs.GPAQSEL2.ALL |= 0x000F303F;

GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;

EDIS;

SPI -A 寄存器设置

EALLOW;

SpiaRegs.SPICCR.bit.SPISWRESET = 0;
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
SpiaRegs.SPICTL.bit.CLK_PHASE = 1;
SpiaRegs.SPIBRR.ALL = 7;
SpiaRegs.SPICCR.bit.SPICHAR = 0x7;
SpiaRegs.SPISTS.bit.overoverover_flag = 0;
SpiaRegs.SPISTS.bit.INT_FLAG = 0;
SpiaRegs.SPISTS.bit.BUFFULL_FLAG = 0;
SpiaRegs.SPICCR.bit.SPISWRESET=1;

GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;

EDIS;

发送数据的代码如下所示。

GpioDataRegs.GPACLEAR.bit.GPIO19=1;

while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1){}

SpiaRegs.SPITXBUF =发送数据<< 8;

while (SpiaRegs.SPISTS.bit.INT_flag!= 1){}

nDataSpi = SpiaRegs.SPIRXBUF;

GpioDataRegs.GPASET.bit.GPIO19=1;

RET = nDataSpi;
回程;

28377D 和 ADS8688通过 ISO7141进行连接。

SPI CLK:12.5MHz

3、从 SPI A 的 MOSI 看、显示的波形是输出、为什么打印图片中显示的波形?

  移除 iSO7141芯片后、在测量波形时测量了相同的波形。

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

    [引用 user="falconjang"]

    器件型号:TMS320F28377D

    工具/软件:TI C/C++编译器

    28377D 的 MOSI 首先传输 MSB、 那么是否应转换 LSB 位、以便在28377D 中首先传输 LSB 位?

    2. SPI MOSI 信号不是~~~μ s!

      SPI 设置如下。

      SPI -A GPIO 设置。

      EALLOW;

    GpioCtrlRegs.GPAGMUX2.bit.GPIO16 = 0x0;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO17 = 0x0;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0x0;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO19 = 0x0;

    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0x1;// MOSI
    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0x1;// MISO
    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0x1;// CLK
    GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0x0;//芯片选择

    GpioCtrlRegs.GPAPUD.ALL &= 0xFCB8FFFF;
    GpioCtrlRegs.GPAQSEL2.ALL |= 0x000F303F;

    GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;

    EDIS;

    SPI -A 寄存器设置

    EALLOW;

    SpiaRegs.SPICCR.bit.SPISWRESET = 0;
    SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
    SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
    SpiaRegs.SPICTL.bit.CLK_PHASE = 1;
    SpiaRegs.SPIBRR.ALL = 7;
    SpiaRegs.SPICCR.bit.SPICHAR = 0x7;
    SpiaRegs.SPISTS.bit.overoverover_flag = 0;
    SpiaRegs.SPISTS.bit.INT_FLAG = 0;
    SpiaRegs.SPISTS.bit.BUFFULL_FLAG = 0;
    SpiaRegs.SPICCR.bit.SPISWRESET=1;

    GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;

    EDIS;

    发送数据的代码如下所示。

    GpioDataRegs.GPACLEAR.bit.GPIO19=1;

    while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1){}

    SpiaRegs.SPITXBUF =发送数据<< 8;

    while (SpiaRegs.SPISTS.bit.INT_flag!= 1){}

    nDataSpi = SpiaRegs.SPIRXBUF;

    GpioDataRegs.GPASET.bit.GPIO19=1;

    RET = nDataSpi;
    回程;

    28377D 和 ADS8688通过 ISO7141进行连接。

    SPI CLK:12.5MHz

    3、从 SPI A 的 MOSI 看、显示的波形是输出、为什么打印图片中显示的波形?

      移除 iSO7141芯片后、在测量波形时测量了相同的波形。

    [/报价]

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

    您好!

    [引用 user="falconjang"]1. 28377D 的 MOSI 首先传输 MSB、 那么是否应转换 LSB 位、以便能够在28377D 中首先传输 LSB?[/QUERP]

    我不确定我是否理解您的问题。 您是否正在尝试更改移出的数据的字节序?

    [引用 user="falconjang"]2. SPI MOSI 信号不是~~~μ s![/引述]

    [引用 user="falconjang"]3. 从 SPI A 的 MOSI 中、显示的波形为输出。为什么打印图片中显示的波形?[/QUERP]

    您的 pinmux 配置和 SPI 配置看起来是正确的。 您可以参阅 C2000ware 中的任何 SPI 示例吗?  

    \device_support\f2837xd\examples\cpu1

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

    对于 MOSI 输出、示例源代码是正常的。

    但我想使用非 FIFO 模式。

    在附加的代码中执行粗体部分时、MOSI 信号不会发出。

    删除粗体部分、然后删除"void InitSpi (void)"
    如果运行"SpiaRegs.SPICTL.bit.TALK = 1"、 则不  输出 MOSI 信号输出和 MISO 信号。

    当使用 GPIO16 ~GPIO19 SPI 端口时、如果通道被选作 GPIO、它是否会受到"MOSI"或"Miso"端口的影响?

    是否有正常(非 FIFO 模式)模式示例代码或参考手册?  

    GpioDataRegs.GPACLEAR.bit.GPIO19=1;

    while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1){}

    SpiaRegs.SPITXBUF =发送数据<< 8;

    while (SpiaRegs.SPISTS.bit.INT_flag!= 1){}

    nDataSpi = SpiaRegs.SPIRXBUF;

    GpioDataRegs.GPASET.bit.GPIO19=1;

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

    您好!

    [引用 user="falconjang"]示例源代码对于 MOSI 输出而言是正常的。

    是的、是的。

    [引用 user="falconjang"]但我想使用非 FIFO 模式。

    好的、明白了。 但是、如果您按原样使用代码、那么您会看到 MOSI 引脚切换?

    [引用 user="falconjang"]删除粗体部分,然后删除"void InitSpi (void)"

    很抱歉、我不理解。 删除什么代码?

    [引用 user="falconjang"]如果运行"SpiaRegs.SPICTL.bit.TALK = 1", 则不  输出 MOSI 信号输出和 MISO 信号。[/quot]

    在您的情况下、SPIA 配置为主器件。 在这种情况下、如果 TALK = 1、则将启用 SPI MOSI 引脚。 如果 TALK = 0、则 MOSI 引脚将被禁用。 TALK 位不影响 MISO 引脚的运行、该引脚由从器件(ADC)驱动。

    [引用 USER="falconjang"]当使用 GPIO16 ~GPIO19 SPI 端口时,如果通道被选作 GPIO,它是否会受到"MOSI"或"Miso"端口的影响?

    我不理解您的问题。 GPIO16、GPIO17、GPIO18必须配置为 SPI 引脚。 GPIO19可配置为 SPISTEA 或 GPIO、您可以自行选择。

    [引用 user="falconjang"]是否有正常(非 FIFO 模式)模式示例代码或参考手册?  [/报价]

    不、没有。 但是、FIFO 模式不启用或禁用 MOSI 引脚传输。

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

    重新安装"c2000ware"和 ccsstudio 后、问题得到解决。

    我不知道原因。

    我不知道为什么 MISO 信号在输出 MOSI 信号时不输出、而在输出 MISO 信号时不输出 MOSI 信号。

    TALK 是必须设置的位吗? 请详细解释通话位。

    如果有广告转换或 DA 转换源可用、请向我们发送电子邮件。

    感谢 Gus Martinez 的回答。

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

    很高兴听到问题得到解决。

    falconjang 说:
    说的是必须设置的位吗? 请详细解释通话位。[/引述]

    技术参考手册中对 TALK 位进行了说明、但下图显示了该位。 如果 TALK = 1、来自 SPIDAT 寄存器的数据将在 SPISIMO 引脚上驱动。 如果 TALK = 0、则不会在 SPISIMO 引脚上驱动数据。