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.

[参考译文] CC3220:打开后更改 SPI 参数

Guru**** 2560390 points
Other Parts Discussed in Thread: CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/760164/cc3220-change-spi-params-after-opening

器件型号:CC3220

尊敬的 TI 论坛:

我将 CC3220用作 SPI 主器件、我想知道在打开端口后是否可以更改 SPI 参数。 我想添加抽象层、我不关心 SPI 是否已打开。
我可以考虑两种实施方法:

1) 1)直接更改 SPI_Params (需要注意 SPI 未处于活动状态、并且我不确定在打开端口后是否使用了这些参数)

2) 2)检查端口是否已打开、关闭它、更改 SPI_Params 并再次打开它。

是否可以这样做,如果可以,是否有更多关于如何做到这一点的信息?
我遇到的问题是、如果 SPI_CLOSE ()未打开、我会调用 SPI_CLOSE ()、然后我卡在有故障的 ISR 中。

谢谢!

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

    SPI_Params 结构被传递到 SPI_open(),因此您需要关闭并重新打开端口以更改参数。 您应该使用变量或标志来跟踪应用程序代码中端口的状态。

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

    此外、Sarah 还提供了答案。 如果使用 TI 驱动程序、则需要关闭而不是重新打开以更改参数。 但还有另外两种替代方法。 您可以直接通过寄存器或通过 driverlib 外设库配置 SPI 外设。 可在 SDK \ti\devices\cc32xx\driverlib\中找到适用于 CC3220的 Driverlib。

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

    感谢您的添加。 使用 driverlib 确实是我的首选、但不幸的是、文档不是很好。

    我尝试根据在"SPIConfigSetExpClk()函数中完成的操作直接编辑寄存器。 我似乎需要修改寄存器 SPI_CHCONF (我认为在 driverlib 中被称为 MCSPI_O_CH0CONF)。 我想将速度设置为2.5MHz 和20MHz。 CC3220主 CLK 是40MHz、我之前已经被告知过、所以我需要 根据 CC3220技术参考手册将 CLKD 设置为2 (=0x1)和16 (=0x4)。 要将寄存器修改为16的分频器、我尝试了以下语法、但我收到了 GSPI_base 的错误、否则我不知道如何引用寄存器:

    HWREG (GSPI_base + MCSPI_O_CH0CONF)=(0x4 << 2); 

    我认为、如果我不设置 SPI_CHCTRL 寄存器的 EXTCLK 位、我还需要确保 CLKG 设置为0。
    有人能帮我找到正确的语法/宏吗?

    非常感谢!

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

    遗憾的是、我对 CC32xx SPI 外设寄存器的了解不够深入、没有研究 TRM 就无法回答。 很抱歉,但我没有时间这么做。

    请等待 TI 方面的回答。

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

    尊敬的 MJ:

    寄存器级外设的所有文档都在技术参考手册( http://www.ti.com/lit/swru465 ) 中,有时也在数据表中。

    如果找不到 GSPI_base 的定义、则可能需要包含 hw_memmap.h

    还请记住、我们不建议您将 TI 驱动程序 API 与直接在任何外设上编辑寄存器混合使用。

    此致、
    Sarah

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

    感谢你们的帮助! 最后、我使用了 TI 驱动程序、因为它最终是最简单的实现方式

    不过,我仍有疑问。 在尝试使用寄存器时、我在找到正确的宏时遇到了问题、例如这里的0x04设置:

    HWREG (GSPI_base + MCSPI_O_CH0CONF)=(0x4 << 2); 

    我从先前的项目(例如、FR5969)中使用了0x04、它将是一个名为 SPI_CLKD_DIV_2的宏、然后您将按如下方式设置寄存器:

    SPI_CHCONF = SPICLKD_DIV_2 |(+额外选项) 

    这些宏都将位于单个"FR5969.h"文件中、因此很容易使用 CTRL + F 来实现正确的功能。
    除了分别搜索所有 driverlib 头文件之外、还有其他类似的方法来查找这些宏吗?

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

    尊敬的 MJ:

    我认为我们最接近的是 source/ti/devices/cc32xx/inc 文件夹中的宏、但每个外设都有一个不同的文件。 这些宏与 TRM 中的寄存器名称一致。

    我认为 MSP430和 MSP432客户以前经常使用寄存器级配置、因此更易于使用。 第1代 CC3200通常依赖于 driverlib、后者将寄存器抽象化到 API (例如将所需的时钟速度传递给作为 ulSPIClk 参数的 SPIConfigSetExpClk)。


    TI 驱动程序是 CC3220中添加的抽象层、旨在标准化整个 SimpleLink 平台上的外设。 例如、这应使客户在将来从 MSP432迁移到 CC3220时更轻松、更直观。 您使用的哪一层当然是基于便利性(有时还包括代码大小)的选择、因为它们都相互作用。

    我希望这会有所帮助!

    此致、
    Sarah

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

    再次感谢 Sarah! 在这种情况下、几乎所有问题都得到了解答。 SimpleLink 器件都使用 TI 驱动程序、这一点我真的很喜欢。 我更好地了解了代码结构。
    报头文件确实会有所帮助,但我需要使用另一种方法来定义它们:-)

    我选择了您的答案和 JAN、以便我们可以结束该主题。