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.

[参考译文] TMS320F28388D:BiSS 接口移至 CLA 有关 SPI ISR 的问题

Guru**** 2535020 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1397044/tms320f28388d-biss-interface-move-to-cla-question-about-spi-isr

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARESysConfig

工具与软件:

您好!

 我能够获得 biss 接口代码设置和 TI 的 CLA 启动代码、到目前为止一切都在工作。

 出于性能原因、我们希望在 CPU2上的 CLA 中运行 setup/start biss 接口、并触发 CPU1中的 SPI RX ISR。

 我不建议重点关注 BiSS、实际上我们需要让 CPU2/CLA 启动 SPI 请求、并让 CPU1为 SPI RX ISR 提供服务。

 我遇到的一个问题是、启动操作需要刷新 SPI 接口、CPU2需要拥有该接口? 其次、如果 CPU1需要处理 ISR 并使用 SPI、它如何将其取回。

 这可能是关于如何使其发挥作用的任何建议都是很好的。

Dorion

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

    您好、Dorion:  

    感谢您的咨询。

    总之、您想让 SPI 由 CPU2触发、但 让 CPU1处理中断? 出于好奇心、这对您的计划有什么好处?

    通过"刷新 SPI 接口"、您是否只是想发送重复的虚拟数据?

    同时、请允许我再留出一天时间对 CPU1/CPU2的所有权进行评论。

    此致、

    Allison

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

    您好、Allison、

     是的、我需要 CPU2 CLA 来设置 CLB 以开始执行该过程(我们从 TI 收到 BiSS 接口代码)、

     现在需要为 BISS 操作的每次启动完成此代码。 我真的不明白为什么。 都很重要、只是复位 FIFO  

    静态空 cla_bissc_configureSpiLength (bissCLAInterface_t * pCLABiss、uint16_t word_len、uint16_t fifo_level)

       pCLABiss->SpiRegs->SPICCR.All &=~(SPI_CCR_SPISWRESET);
       //设置 CCR 寄存器中的字长

       pCLABiss->SpiRegs->SPICCR.All =(pCLABiss->SpiRegs->SPICCR.All &~(SPI_CCR_SPICHAR_M))| WORD_len;

       //设置 RX 和 TX FIFO 的级别
       //复位 TX FIFO 并启用 SPI 模块
       pCLABiss->SpiRegs->SPIFFTX.ALL =(pCLABiss->SpiRegs->SPIFFTX.ALL &(~SPI_FFTX_TXFFIL_M))|(uint16_t) fifo_level;
       pCLABiss->SpiRegs->SPIFFRX.ALL =(pCLABiss->SpiRegs->SPIFFRX.ALL &(~SPI_FFRX_RXFFIL_M))|(uint16_t) fifo_level;

       //复位 TX FIFO
       pCLABiss->SpiRegs->SPIFFTX.ALL &=~SPI_FFTX_TXFIFO;
       pCLABiss->SpiRegs->SPIFFTX.ALL |= SPI_FFTX_TXFIFO;

       //启用 SPI
       pCLABiss->SpiRegs->SPICCR.All |= SPI_CCR_SPISWRESET;
    }

     我已尝试将此代码放在其他地方、但会变得不一致。 如果有一种更好的方法可以做到这一点、这样我们每次启动读取操作时就不需要做这件事、那会很好! 该 SPI 代码可能缺少一些内容。 如果可将其删除、CLA2与 SPI 没有依赖关系、仅依赖于 CLB。

     然后、当 RX 中断的 ISR 进入时、我想从 CPU1为其提供服务。 现在、我使用的是 SPIB。 我们在 CPU1上有循环来为该中断提供服务。

     CPU1 CLA 与另一个应用程序相关联、并且由于性能原因、CPU2目前的时序非常紧、该应用程序的代码无法移至 CPU2。

     CPU1在时序上不是那么严格、但很接近。因此、通过将这个 BiSS 代码移到 CLA 中(首先在 CPU1上尝试过、效果很好、并显著提高了我们的性能)、我想将代码移至未使用的 CPU2 CLA。 但通过需要数据的 CPU1提供 RX 中断服务。

     希望这是有道理的。

     我还需要知道、即使 CLB 在 CPU2-CLA 上运行、可能存在一些硬件限制会阻止我的运行。

    Dorion

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

    您好、Dorion:

    返回到 MCU 的消息是否会更改大小? 否则、 应该不需要针对每条消息执行该函数。 电平和字大小可以保持恒定。

    关于是否一个 CPU 可以拥有外设、而另一个 CPU 服务中断:我认为所有权需要传递回 CPU1。  每个 CPU 都有自己的 PIE 模块、因此如果您希望两个 CPU 都响应中断信号、则必须在 CPU1 和/或 CPU2上独立配置 PIE 模块以进行响应。  让我仔细检查一下这一点。

    此致、

    Allison

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

    因此尺寸和长度不会改变。 但 BISS 接口只有在经过配置后才能运行。 这是非常好的。

    我以为您只能更改所有权、但我不确定所有权更改后是否会在 SPI 内部重置。

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

    很抱歉、除非每次都配置 SPI 填充、否则它不会运行。 我以为可能有东西正在重置、但我看不到任何东西。

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

    您好、Dorion:

    让我看看,如果我理解你要做什么,你想:

    1. 让 CPU2 CLA 运行您上面发送的 BiSS 代码的开始
    2. 完成此操作后、在 CPU1上触发 ISR 以执行一些 SPI 操作  

    如果是、我认为您可以做的就是设置一个 CPU2 CLA 任务、只要您想要进行这个 BiSS 初始化、就可以由 CPU2触发软件。 电感。 您 可以设置 CLA 任务的任务结束中断、以便在 CPU2上触发(它将在任务完成所有执行后分支到)。 在此 ISR 中、可通过软件触发回 CPU1的 IPC 中断。 在 CPU1上的该 IPC ISR 中、您可以执行所需的 SPI 发送/接收。

    为了将 SPI 实例的所有权移交给 CPU1、我认为您可以 在触发 IPC 中断之前执行以下类似操作:

    据我所知、在初始化 SPI 后移交所有权不是问题。 如果有任何问题、您还可以在调试器中检查、看看此操作是否清除了 SPI 初始化寄存器、但我不认为应该清除。

    如果我对您的用例有任何误解、请告诉我。 查看 C2000ware 中针对 F2838x 的一些双核示例可能也有帮助、其中一些示例进行了一些类似的操作。

    此致、

    Delaney

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

    Delaney,

     您已经非常接近了。 我希望 SPI RX 中断线路中断 CPU1、而不是让 CLA 中断 CPU2、然后中断 CPU1。 CLA 将仅触发从器件 SPI 操作并启动时钟、但 CPU1将为 SPI 的 RX 提供服务。

     我找到了一种方法、让 CLA 代码不依赖于 SPI (这很好)、因此我可以保留 CPU1上的 SPI 所有权、但只需在 CPU2上启动 CLB。

     我相信我看到、两个 CPU 都可以获得外设中断、通常只有一个 CPU 处理外设中断。  我还需要确保的是、CPU1是否具有 SPI RX ISR、那么也不需要使用 SPI 控制来获取 ISR。 有道理?

     此外、如何将 CLB 3和4所有权转移到上面的 CPU2某些命令?

    Dorion

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

    您好、Dorion:

    感谢您的反馈。 我也会让 Delaney 进一步评论。

    与此同时、您能扩展一下 SPI 通信的本质吗? F28388是控制器/主器件、C2000与什么通信、以及您目前对 SPI 配置是否有任何困难? 或者只是解决了 SPI 中断问题吗?

    如果要将 CLB 所有权初始化为 CPU2、可以使用 SysConfig SYSCTRL 模块或使用相应的 DriverLib 轻松完成此操作:

    此致、

    Allison