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.

[参考译文] TMS320F28379D:SPI 40MHz

Guru**** 2847400 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1575204/tms320f28379d-spi-40mhz

部件号: TMS320F28379D
主题: SysConfig 中讨论的其他器件

工具/软件:

您好:

今天我的问题很简单(我想)

我尝试在控制器模式下使用 40MHz 处具有 8 位数据长度的 SPI 模块。 但在这样的速度下、DriverLib 处于仿真模式而没有任何优化代码、传输速度似乎快于缓冲区的填充。

因此、当我尝试用几个字节(16 位字左对齐)填充缓冲器时、时钟不是连续的、CS 信号会切换(这与我的应用不兼容)

是否有办法在我填充 FIFO 时阻止传输?

我尝试了 Talk 位、但似乎禁用 FIFO。

谢谢你。

Vince

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

    尊敬的 Vince:

    我明天会回复您的主题。

    此致、

    Delaney

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

    尊敬的 Vince:

    对延迟深表歉意。 写入数据的 CPU 是否在代码中连续发送? 它写得不够快似乎很奇怪 — 您配置了什么 SYSCLK 频率? 如果我也能看到您的代码逻辑、它可能会有所帮助。

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的评分

    假设 Tabuint16_TabSPITest 确实包含我需要使用 SPI 传输的字节、则触发传输的方式为:

    此代码用 ISR 编写、用于测试。 因此、没有任何其他 ISR 会中断 SPI 缓冲区的文件长。

    该代码在 10MHz 时按预期运行。

    我已经检查了 SPI 频率。

    若要设置:

    -我在 Device_init () 函数中将 LSPCLK 的预分频设置为 1 ,该函数在 CPU1 程序的开头调用

    -我还 在 device.h 中设置了 device_LSPCLK_FREQ 符号,因为 SPI driverlib 函数将使用它来配置 SPI 模块

    -在 Sysconfig 中,我声明相同的配置。 这样 SysConfig 就可以检查我选择的选项

    在 40MHz 处、它只需 200ns 即可发送一个字节、  

    在仿真模式下使用 DriverLib、我认为我需要 40 条指令将一个字节传输到 SPI 缓冲区并不奇怪:

    你怎么看?

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

    尊敬的 Vince:

    谢谢你的答复,我将研究这个,并得到你在 1-2 天.

    此致、

    Delaney

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

    尊敬的 Vince:

    对此再次表示歉意。 您仍然看到该问题吗?

    如果将每个字节的数据写入 TX 缓冲区只需要 40 条指令、该时间应该约为 50ns(假设每个指令两个时钟周期,这可能会有所不同)。 即便如此、传输该字节所需的时间也远小于 200ns。 如果您愿意 、还可以使用 CCS 中的时钟功能来检查确切的周期数:对周期进行计数。

    我不知道如何在写入 TX FIFO 后阻止传输、它会开始自动将数据移出。

    谢谢、

    Delaney

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

    尊敬的 Vince:

    另请注意、在该器件上、大多数 GPIO 的最大 GPIO 开关频率为 25MHz。 为了达到 40MHz 的 SPI 频率、您需要在模块中配置高速模式并使用其中一个高速 GPIO。 这是你在做什么?

    此致、

    Delaney

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

    尊敬的 Delaney:

    是的、我确实看到了这个问题。

    您是对的、50ns 就足以填满缓冲区、但程序可以管理许多中断。 解决方案是在填充缓冲区时禁止中断、但我总是担心错过这样做的一个中断(我打开了有关该问题的另一个线程)

    关于循环计数器的提示将非常有用,谢谢。

    你关于非阻塞传输的答案很清楚,这就是我想要知道的。

    顺便说一下、是的、我按照指定的方式配置了高速模式。

    我可以在关闭此主题之前再提出其他问题吗?

    我想手动管理 CS 引脚 (PTE)(自行管理)。 但 SysConfig 不允许我释放此引脚。 我的意思是,要做的是,我有..

    1) 选择一个在我的应用中未使用的引脚 (GPIO23)

    2) 声明 GPIO、该 GPIO 最初是 SPI_PTE

    这种方法有许多缺点:

    -可通过 SPI 模块访问的 GPIO 在应用程序中必须是空闲的

    -这些 GPIO 是罕见的,如果我们需要使用高速模式:在我的例子中,必须声明 GPIO66 为 PTE(23 无法访问)

    是否有办法不通过 Susconfig 为 PTE 声明任何引脚、就像我们使用 PWM 模块那样、使用自定义引脚使用功能

    谢谢您 Delaney

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

    尊敬的 Vincent:

    是的、您可以选择“自定义“作为“用例“(与 ePWM 相同)的用例、并为“已使用的引脚“选择除 PTE 引脚以外的所有引脚。 请参阅下面的:

    如果回答了您的问题(以及对您有帮助的任何其他回答)、请支持此回答。

    此致、

    Delaney

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

    我感觉是假的:) 我发誓我看着这个选项!!!

    谢谢您 Delaney。 请尽快发言