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.

[参考译文] TMS320F28388D:SPI 时钟

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/972414/tms320f28388d-spi-clock

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARE

您好 TI

我正在制作一个 SPI 接口、用于从外部 ADC 收集数据。 外部 ADC 可处理高达35MHz 的时钟。

我只能从 SPI 获取2MHz 时钟、以从 ADC 获取数据。 我是否有任何方法可以更快地实现它? 或者、我应该使用 ePWM 模块来触发来自 SPI 的数据、而不是 再次使用 SPI 时钟?

我的问题是、我有2个16位的字符串、这使其变为32位。 如果我以2MHz 的频率运行、我仍然需要16us 才能获取数据。 我真的想更快地获取数据、以便更快地获取数据。

但愿你能帮帮我。  

注意事项

Asbjørn Schram Anneberg

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

    Scram、

    此器件上的 SPI 接口可在高达50MHz 的频率下运行。

    您是否说您无法获得大于2MHz 的 SPI CLK (或)您无法获得与大于2MHz 的外部 ADC 进行通信的 SPI?

    无法获得大于2MHz 的 SPI CLK?

    SPI 波特率= LSPCLK /(SPIBRR + 1)。 LSPCLK 是可配置的并且是 SYSCLK 的功能。 因此、您需要检查 SYSCLK、LSPPCLK、SPIBRR 设置。

    1) 1)确保 SYSCLK 以200MHz 的频率运行。 您可以通过将 GPIO73配置为 CLKOUT 引脚来轻松实现此目的

    GPIO_setPinConfig (GPIO_73_XCLKOUT);//将 GPIO73配置为 XCLKOUT 引脚。

    SYSCTL_selectClockOutSource (SYSCTL_CLOCKOUT_SYSCLK);//配置 XCLKOUT = SYSCLK

    SYSCTL_setXClk (SYSCTL_XCLKOUT_DIV_8);//XCLKOUT 观察到的频率= XCLKOUT / 8

    使用此代码设置、如果您在 GPIO73上观察到25MHz、则它会告诉您 SYSCLK 以200MHz 的频率运行。

    2) 2)检查 LSPCLK 的配置设置。

    ClkCfgRegs.LOSPP.bit.LSPCLKDIV =??? (检查您是否为该计时太低)

    3) 3)检查 SPIBRR 寄存器的配置设置

    无法使 SPI 与高于2MHz 的外部 ADC 通信?

    此问题的根源应该是外部 ADC 的配置设置、而 F28388d SPI 对此没有任何控制。

    此致、

    曼诺伊

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

    您好、Manoj

    我无法使 SPI 执行大于2MHz 的任务。
    我的 SYSCLK 以200MHz 的频率运行、而我的 LSPCLK 以50MHz 的频率运行。

    这是我的 SPI 主器件的初始化函数、它使用函数"spi_setConfig"为 SPI 配置 clk

    当我尝试使 clk 更接近2MHz 时、它开始使我在 SPICLK 的 GPIO 上测量的 clk 信号变平。

    void initSPIBMaster (void)
    {
    //
    //必须在配置 SPI 之前将其复位
    //
    SPI_disableModule (SPIB_BASE);
    
    //
    // SPI 配置。 使用1MHz SPICLK 和16位字大小。
    //
    SPI_setConfig (SPIB_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL1PHA0、//此设置经过分频、因此它会在下行时触发。
    SPI_MODE_MASTER、2000000、16);
    SPI_disableLoopback (SPIB_BASE);
    SPI_setEmulationMode (SPIB_BASE、SPI_emulation_stop_after_transmit);
    
    //
    //配置完成。 启用模块。
    //
    SPI_enableModule (SPIB_BASE);
    } 

    在下面、您可以看到我的 SYSCLK 以及更多的设置:

    //
    //定义以传递到 sysctl_setclock()。 将按如下方式配置时钟:
    // PLLSYSCLK = 25MHz (XTAL_OSC)* 32 (IMULT)/(2 (REFDIV)* 2 (ODIV)* 1 (SYSDIV))
    //
    #define DEVICE_SETTON_CFG (SYSCTL_OSCSRC_XTAL | SYSCTL_IMULT (32)|\
    SYSCTL_REFDIV (2)| SYSCTL_ODIV (2)|\
    SYSCTL_SYSDIV (1)| SYSCTL_PLL_ENABLE |\
    SYSCTL_DCC_BASE_1)
    
    //
    // 200MHz SYSCLK 频率基于上述 device_setClock_CFG。 如果
    使用不同的时钟配置、请更新下面的//代码!
    //
    #define DEVICE_SYSCLK_FREQ (((DEVICE_OSCSRC_FREQ * 32)/(2 * 2 * 1))
    
    //
    //基于上述 DEVICE_SYSCLK_FREQ 的50MHz LSPCLK 频率和默认
    //低速外设时钟分频器4。 如果
    使用了不同的 LSPCLK 分频器、请更新以下代码!
    //
    #define DEVICE_LSPCLK_FREQ (DEVICE_SYSCLK_FREQ / 4) 

    找到的是 hw_spi.h:

    //
    //
    //以下是 SPIBRR 寄存器中位字段的定义
    //
    ../../*********
    #define SPI_BRR_SPI_BIT_RATE 0U
    #define SPI_BRR_SPI_BIT_RATE _M 0x7FU // SPI 比特率控制
    //********* 

    希望这有助于理解我的问题

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

    Schram、

    您的 XTAL 时钟频率是多少(输入时钟)?

    device.h 中定义的宏假设输入时钟频率为25MHz? 您是否在定制电路板(或) LaunchPad 上运行此代码?

    我尝试通过以下更改来运行 SPI_ex6_EEPROM C2000Ware 示例、以在25MHz 下运行、但未发现任何问题。

    在 device.h 中进行了更改

    #define DEVICE_LSPCLK_FREQ         (DEVICE_SYSCLK_FREQ / 1)

    对 device.c 所做的更改

    SYSCTL_setLowSpeedClock (SYSCTL_LSPCLK_PRESALE_1);

    在 SPI_ex6_EEPROM.c (initSPI 函数)中所做的更改

    GPIO 58、59、60、61引脚提供高速 SPI 模式。 下面是一个示例、我已将 GPIO60配置显示为 SPICLKA 引脚。 您需要对 GPIO 58、59、61执行相同的操作。

       GPIO_setMasterCore (60、GPIO_CORE_CPU1);
       GPIO_setPinConfig (GPIO_60_SPIA_CLK);
       GPIO_setPadConfig (60、GPIO_PIN_TYPE_PULLUP);
       GPIO_setQualificationMode (60、GPIO_QUAL_异 步);

    SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA1、
                     SPI_MODE_MASTER、25000000、16);

       SPI_enableHighSpeedMode (SPIA_BASE);

    此致、

    曼诺伊

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

    您好、Manoj

    Thak´解决了我的问题。  

    仍然有问题、但这是我自己要解决的问题。 我安装了 controlCARD 的 PCB 需要进行调整。 因为现在我在 GPIO 26上使用 SPI。

    我是否可以通过任何方法将 GPIO 24、25、26和27上的 SPI 设置为高于2MHz?

    此致  

    Asbjørn μ A

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

    Asbjørn μ A、

    如果您不打算使用高速 SPI 引脚、则应该只能实现12.5MHz 全双工通信。

    表6-10总结了此器件上可用的高速 SPI 引脚选项。 高速 SPI 的 GPIO 配置

    如果您可以进行12.5MHz 全双工通信、则只需要更改 SPI_setConfig 函数、如下所示。

    SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA1、
                     SPI_MODE_MASTER、1250000、16);

    此致、

    曼诺伊