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 数据发送和接收过程发送到 CPU2

Guru**** 2578945 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1253250/tms320f28379d-sending-spi-data-transmit-and-receive-process-to-cpu2

器件型号:TMS320F28379D

大家好、希望大家都好。

我使用的是 F28379D 双 CPU Launchpad。

我将运行一段通过 ISR 执行的控制代码。 此 ISR 每15kHz (66.6微秒)执行一次。 我正在使用器件上的 SPI 模块从传感器读取数据。 在我的串行时钟速度下、 从我的传感器发送和接收 SPI 数据信号需要24.6微秒。  

这个冗长的传感器事务会限制 ISR 频率-从而禁止我在较高的频率下执行它。 我想知道能否与 CPU2并行处理 SPI 传感器事务、以及在 CPU1上执行的控制代码。 我想知道能否使用 IPC 模块实现?

我想在 CPU2上触发获取传感器读数、并将数据发送到 CPU1以进行处理和使用。  

目前、我的代码结构如下所示:

主代码(CPU1)
----------------

*设置 GPIO
*设置外设(SPI、ADC ePWM 等)
*设置 ISR (每个 ePWM 载波周期触发一次)

ISR
----------------
*读取传感器数据
*读取电流
*执行控制算法  
*确认 ISR、启用进一步中断


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="517064" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1253250/tms320f28379d-sending-spi-data-transmit-and-receive-process-to-cpu2我想知道我是否可以与 CPU2并行执行 SPI 传感器事务、同时在 CPU1上执行我的控制代码。 我想知道是否可以使用 IPC 模块执行此操作?

    这应该是可行的。  

    不过、我想知道您的 SPI 传输是否已优化。 如果不是、尝试对其进行优化而不是在两个 CPU 之间划分软件是否更有意义? 一些您可以使用的 SPI 优化:启用 SPI FIFO 以使 SPI 总线尽可能繁忙、使用 DMA 传输数据以减轻 CPU 的负担。

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

    您好,Gus

    我当前没有使用 SPI FIFO。 我想问:这会如何减少我的主 ISR 中每个 SPI 事务所用的时间?

    您还能解释一下我如何使用 DMA 传输数据吗? 这是如何工作的、以及这如何帮助优化我的 SPI 转换?

    对于我正在使用的器件、4MHz 的串行时钟是我可以运行的最大时钟频率。 在这个频率下、每次完整的数据事务都会在示波器上花费12.6微秒。

    我想知道您的建议对减少 ISR 中的这段时间有何帮助?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="517064" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1253250/tms320f28379d-sending-spi-data-transmit-and-receive-process-to-cpu2/4742502 #4742502"]我想知道您的建议如何帮助减少我的 ISR 中的这段时间?  [/报价]

    在您的软件流描述中、您提到:

    Unknown 说:
    ISR
    ----------------
    *读取传感器数据
    *读取电流
    *执行控制算法  
    *确认 ISR ,启用进一步的中断[/报价]

    据此、我假设读取的传感器数据会阻止 ISR 中的后续步骤。 我想、如果您能够更快地获取传感器数据、就可以更快地完成 ISR。 如果我的假设不正确、请告诉我。  

    对于我正在使用的设备,4 MHz 串行时钟是我可以操作的最大时钟频率。 在这个频率下、我的示波器上的每个完整数据事务都需要12.6微秒。

     在本例中、您实现的 SPI 总线负载是多少? 换句话说、100%负载意味着您可以在12.6us 内传输12.6us * 4Mhz = 50位。 如果 SPI 传输中存在大量死区时间、则可能是由于 SPI 例程的结构所致。 例如、如果将数据写入 SPI、则会轮询数据以完成传输、然后写入新数据、这会引起一些 CPU 延迟损失。 您可以使用 FIFO 并执行以下操作:一次将8个字符写入 SPI FIFO、然后等待所有字符的传输。  

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

    Gus、您好!

    我的数据事务使用两个单独的 SPI 模块。 我在事务期间在下面附加了一个串行时钟波形的图像。  

                        

    完整的传感器事务需要12.4 us。 单个 SPI 事务耗时3.6us。 事务之间的时间为0.8us。 每个 ISR 都会执行此过程。  

    我想知道您提到的更改会如何影响我的 SPI 数据事务波形? 我认为我的波形中没有太多的死区时间?

    据此、我假设读取的传感器数据会阻止 ISR 中的后续步骤。 我想、如果您能够更快地获取传感器数据、就可以更快地完成 ISR。 如果我的假设不正确、请告诉我。  

    [/报价]

    是的、您的假设是正确的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想知道您提到的更改将如何影响我的 SPI 数据事务波形? 我认为我的波形中没有太多的死区时间?

    您可以消除0.8us 死区时间(假设从器件支持此功能)、但您是对的、它不会将总传输时间缩短超过1.6us (0.8us x 2)。 是否可以选择更高的 SPI 时钟速度?

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

    Gus、您好!  

    我仔细查看了器件数据表、发现我实际上可以在8MHz SPI 时钟下工作。 目前、这允许使用20KHz ISR、但是、我用于向 ISR 添加更多代码的空间非常小。  

    我认为我可能必须在第二个 CPU 上执行 SPI 事务、或者在可能的情况下、使用具有嵌套中断的并发处理(如果可能的话)、不过我觉得合适的选择是将 SPI 事务发送到第二个 CPU。

    你怎么看?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我研究了器件数据表后发现我实际上可以在8MHz SPI 时钟下工作。 目前、这允许使用20KHz ISR、但是、我用于向 ISR 添加更多代码的空间非常小。  [/报价]

    这意味着您可能会将 SPI 传感器事务削减一半(12.4us / 2)。  

    我想我可能需要要么在第二个 CPU 上执行 SPI 事务,要么在可能的情况下使用嵌套中断的并发处理(如果可能),但我觉得是正确的选择将 SPI 事务发送到第二个 CPU。

    完全由你决定。 我不能以一种方式或另一种方式指引你。  

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

    大家好、Gus、

    我当时想使用第二个 CPU、对于如何进行设置、您有什么建议吗? 我好像无法在 CPU2上设置 GPIO。 或者、您是否建议我打开一个新问题?