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.

[参考译文] TM4C1231H6PGE:当被用作 SPI 主器件时、SSI1Fss 行为的问题

Guru**** 2468610 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/674467/tm4c1231h6pge-question-on-ssi1fss-behavor-of-ssi1-when-used-as-spi-master

器件型号:TM4C1231H6PGE

大家好、我刚刚在这个上输入了一个帖子、但是似乎没有成功(页面加载从未完成、我不得不取消)、所以我将在这里再次输入、如果重复、我会道歉。

我通过 SSI1模块将以下序列写入 SPI 总线:

"

(笑声)

SSIDataPut (SSI1_base、0x40);

SSIDataPut (SSI1_base、0x0A);

SSIDataPut (SSI1_base、0xA0);

"

但我看到/CS 线路在每个字节之间变为高电平然后变为低电平、请参阅随附的图片、这是否正常? 为什么发送 FIFO 应该能够保持多达8个字节? 我将 SPI 速度降至100KHz、这没什么帮助。 是否有办法使 SSI1Fss 引脚保持低电平直到发送所有字节?

谢谢

Richard

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

    是、当 TM4C /CS 引脚由 SSI 外设控制时、这是正常操作。

    如果要强制/CS 在整个事务期间保持低电平、则应"手动"控制引脚作为 GPIO 外设、 这样、您就可以在传输期间强制它处于低电平、方法是在发送第一个字节之前强制它处于低电平、并在完成传输/接收时将其上拉至高电平。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ralph、感谢您的确认!

    谢谢
    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ralph、我需要做什么来手动控制引脚作为 GPIO? 是否可以通过启用 SSI 模块并独立地将 FSS1Fss 重新配置为 GPIO 引脚来启用 SSI1CLK/SSI1Tx/SSI1Rx? 还是必须将所有4个引脚启用为 GPIO?

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

    理查德/拉尔夫... 如果我可以的话。

    只需要将 SPI 初始化:CLK、TX 和 RX 作为 SPI。   您可以初始化任何方便的 GPIO 引脚以用作 SPI 芯片选择。  (然后将该 GPIO 部署为输出)

    这为从器件的芯片选择提供了最大的控制和灵活性-增强 了您的 SPI 操作...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你 CB1! 因此、我们不执行以下操作:

    GPIOPinTypeSSI (GPIO_PORTD_base、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);

    我只需要:

    GPIOPinTypeSSI (GPIO_PORTD_base、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_0);

    将 GPIO_PIN_1 (应该是 SSI1Fss)配置为 GPIO 并让我的代码单独驱动它?

    谢谢
    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CB1、如果有示例代码、我将不胜感激、谢谢!

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的硬件设计已经将 SSI1Fss 设置为片选、因此我无法使用另一个 GPIO 引脚。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CB1、我尝试了以下代码、它似乎正常工作、感谢您的帮助!

    Richard

    "
    //必须启用 SSI1外设才能使用。
    SysCtlPeripheralEnable (SYSCTL_Periph_SSI1);

    //启用 GPIOD 以使用 SSI1
    SysCtlPeripheralEnable (key_SYS_Periph_port);

    //为端口 D0、D2和 D3上的 SSI1功能配置引脚复用
    //如果您的器件不支持引脚复用、则无需执行此步骤。
    GPIOPinConfigure (GPIO_PD0_SSI1CLK);
    // GPIOPinConfigure (GPIO_PD1_SSI1FSS);
    //将 PD1配置为 GPIO!!
    GPIOPinTypeGPIOOutput (key_base_port、GPIO_PIN_1);
    GPIOPinConfigure (GPIO_PD2_SSI1RX);
    GPIOPinConfigure (GPIO_PD3_SSI1TX);

    //配置 SSI 引脚以正确使用
    GPIOPinTypeSSI (KEY_SSI_BASE_PORT、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_0);
    "
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Richard、对您来说很好。   请记住供应商 Ralph 的说明-您必须将 GPIO 驱动至(适当的)从器件的"CS"级别-并将其保持在该级别-直到您的"多字节数据传输"完成。   (我记得您的长度为3字节/24位)

    您可以创建一个完整的 SPI 传输函  数、其中包括对用作从器件芯片选择的 GPIO 的正常"SPI PUT & SPI G得 es"(夹在中间)调用。  (即 CS 信号的置位是(两者)"第一步和最后一 步"-步执行 SPI 数据传输功能。)

    请注意,这里(许多)经常"未能充分掌握或未能充分掌握" 这样一个事实, 即"SSIDataGet () "返回前面的"SSIDataPut( )"中的数据。   这两个函数调用必须"链接"(通常是背靠背)-自行发出"SSIDataGet ()"将不会成功...

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

    再次感谢 CB1! 你简直太棒了!!

    此致、

    Richard