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.

[参考译文] F28M35H52C:慢速 SPI FIFO 读取/写入

Guru**** 2390755 points
Other Parts Discussed in Thread: F28M35H52C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/721991/f28m35h52c-slow-spi-fifo-read-write

器件型号:F28M35H52C

大家好、

我正在尝试加快 Concerto 芯片(F28M35H52C) C28x 端的一些 SPI 传输速度。 它基于中断、获取 Rx-FIFO 中断(SpiaRegs.SPIFFRX.bit.RXFFIENA=1)、然后在 FIFO 中读取/写入新的数据。

我的问题是、是否应该花费大约32个 CPU 周期(大约32/150=0.21 usec)来读取/写入 FIFO 中的一个字。 至少这是我要测量的值。 例如、以下代码(在 禁用中断的情况下从 FIFO 读取单个字以不影响时序) 将导致 consumedCycles==32。

Int receivedData;
int consumedCycles;
Dint;
uint32_t volatile blockEntryCount = CpuTimer0Regs.TIM.all;
receivedData = SpiaRegs.SPIRXBUF;
consumedCycles = blockEntryCount - CpuTimer0Regs.TIM.all;
EINT;

 

请告诉我这是否符合预期、或者是否可以使其运行得更快。 看起来很慢

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

    Christian、

    这是不可预料的。 这应该是单周期操作。

    我有一些想法:

    • 此代码段是否从闪存执行? 如果是、闪存等待状态是否配置正确?
    • 如果您将 SPI 读取替换为简单的存储器读取、结果是什么? 它是否仍然是32个周期?
    • 上拉"Disassembly"窗口、在 DINT 上放置一个断点、然后单步执行该函数。 是否插入了额外的代码?
    • 您的构建优化级别设置为什么?
    • 此外、请尝试使用 CCS 配置文件时钟来查看结果是否相同: https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/218382


    谢谢、
    标记

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

    抱歉、我一直低估了访问闪存中某些相关数据的成本(即、我的设置与我给出的代码示例不完全相同)。

    正如您所建议的、我将 SPI FIFO 读取替换为存储器读取、这让我意识到瓶颈在其他地方。

    此致、
    Christian