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.

[参考译文] CCS/TMS320F2808:Simulink R2018a SPI:发送和接收超过16个字

Guru**** 2539510 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/755902/ccs-tms320f2808-simulink-r2018a-spi-send-and-receive-more-than-16-words

器件型号:TMS320F2808

工具/软件:Code Composer Studio

大家好、

我有一个关于 Simulink 的问题。 从 MATLAB R2017b 启动时、Simulink 可以从 SPI 接口接收和发送 NX1矢量、N 可以是50、100等、但我的处理器(F2808)的 RXFIFO 和 TXFIFO 大小有限、可以一次容纳16x1矢量。 在进行 SPI 通信时、我通过检查处理器的寄存器来验证这一点。 例如、我将50x1矢量从主器件发送到我的从器件(F2808)、假设数字从1到50、但在寄存器中、我看到最后16个数字、即从35到50。 我认为这是一个巨大的问题。 我使用的是 R2018a 版本。 我感谢你的任何帮助。

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

    我们建议您也可以通过 以下地址与 Mathworks 支持部门联系:www.mathworks.com/.../。


    此致、
    Sudhakar
    ------------------------------------------------------
    如果帖子回答了您的问题、请使用 "验证答案" 按钮进行标记。
    其他有用链接:
    C2000入门     C2000闪存常见问题/常见问题      仿真常见问题解答
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您的建议、但我现在确实希望将此问题标记为 TI 认为已解决、我希望保持未解决状态、或许会吸引一些用户的注意。

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这取决于您是如何查看寄存器以及何时查看的。

    显然、SPI 只有16字 FIFO、因此需要管理多于16字的 FIFO 的传输。 当您使用 MATLAB 生成的代码时、我不知道如何实现该代码、MATLAB 团队将会有更好的见解。 由于 F2808是从器件、并且它接收16个字、因此通过查看 SPIRXBUF 寄存器、您只能看到 FIFO 中存在的16个字中的第一个字。 您需要将 FIFO 中的所有数据读出到数组或结构中、以便在程序中的其他位置使用。

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

    您好!

    您可以在 Tx FIFO 上使用 SPI Tx 中断来发送 ISR 内部的数据块。

    例如,如果有50个数据值,则可以将中的数据值拆分为5*10。

    将 Tx FIFO 配置为深度10、每次发送10个数据值时、使用计数器计数5。

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

    将 Tx FIFO 配置为深度10、每次发送10个数据值时、使用计数器计数5。

    -按照 ISR、您的意思是我应该使用 SPIRXINT 和 SPITXINT 吗?

    -这意味着在 CCS 中手动更改从 Simulink 生成的代码、还是我只能从 Simulink 模型配置它? PS:我知道如何通过 Simulink 模型(配置参数)设置 Tx 中断级别。 我想知道在 Simulink 模型中是否有任何方法使用 SPI Tx 中断级别。 如果有办法,那就很容易了。 否则、我必须从 CCS 中手动更改代码(通过向 model_step ()添加代码)。

    -我理解您试图说什么,但首先确保从端正确接收50x1矢量是不是更好的?

    -这是否意味着要对1个接收过程执行5个发送过程? 但是、我想我需要确保在传输某些内容之前正确接收传入矢量。 也许同样的想法是 vaild、在这里可以使用 RX 中断、并且可以将传入矢量读入5个片段、即10x1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我认为 Venkatesh 可以从 Simulink 端回答、但我可以解决 SPI 方面的问题。

    如果您还需要接收50个字、是的、您还需要设置 RX ISR 以处理 RX FIFO 的读取。 您将需要 SPIRXINT 和 SPITXINT。

    AFAIK,这就是 Simulink 应该能够做到的。 我以前没有使用过它、因此我无法肯定。 ,您能解决这个问题吗?

    它实际上取决于您的从属方,一次发送一个字与发送多个字没有太大的区别。

    -您需要匹配主从进程之间的进程数。 如您所知、SPI FIFO 只能在需要处理前发送/接收多达16个字。 如果不以与发送相同的速率处理接收端、则会存在接收器溢出的风险。

    为了帮助理解 SPI 和 FIFO、请尝试运行 F2808的 SPI FIFO 回送示例。 您可以调整需要发送的总字数、FIFO 中断级别和其他内容。 看看它们如何影响传输您可以尝试10次5字的突发、5次10字的突发、50次1字的突发、您甚至可以使发送器和接收器中断级别不同。 深入了解 SPI 模块后、您可以添加 Simulink 模型的抽象层、我敢打赌、您将确切知道要转动哪些旋钮来使其实现所需的功能。

    供参考、我将在今天之后的1月2日之前下班。 我将尝试查看没有花那么多时间的人是否可以监控此线程、但无法保证任何内容。

    节日快乐!
    -Mark