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.

[参考译文] TMS320F280039C:F280039C + 2x ADS131B04

Guru**** 2524550 points
Other Parts Discussed in Thread: C2000WARE, LAUNCHXL-F280039C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1248227/tms320f280039c-f280039c-2x-ads131b04

器件型号:TMS320F280039C
主题中讨论的其他器件:C2000WARELAUNCHXL-F280039C

您好!

我将 C2000 MCU (F280039C)与两个 ADC ADS131B04配合使用。 要求如下:  

  • 两个 ADC 通过同一共享 SPIB 连接(瓶颈)
  • 由 SPI 硬件控制的 ADC1芯片选择引脚
  •  由 SW 控制的 ADC2芯片选择引脚(瓶颈)
  • 16kSPS 的 ADC1采样率
  • 16kSPS 的 ADC2采样率
  • 两个 ADC 必须并行运行

这意味着必须在62.5us 内按如下方式处理两个 ADC:  

  1. DRDY 阳极外部 ISR -启动 SPI 传输以从 ADC1中读出数据  
  2. DRDY 阴极外部 ISR -通知(可省略)  
  3. SPI 传输完成 ISR -处理 ADC1数据并启动 SPI 传输以从 ADC2中读出数据
  4. SPI 传输完成 ISR - 处理 ADC2数据

当前设置为:

  • 120 MHz 的 CPU 时钟速度
  • 10MHz 的 SPI 时钟速度
  • 用于数据传输的 SPI + DMA

主 MCU 内核无法足够快地处理两个 ADC。 是否有办法提高此过程的效率(使用更多硬件外设功能或 CLA)?

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

    Lukas,

    Unknown 说:
    由 SPI 硬件控制的 ADC1芯片选择引脚

    在这里、我假设您是指 SPI STE 直接驱动 ADC1? 如果是、如何在从 ADC2读取数据时确保 SPI STE 为高电平?

    [quote userid="388006" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1248227/tms320f280039c-f280039c-2x-ads131b04是否有办法可以使这个过程更加高效(使用更多的硬件外设特性或 CLA)?

    可能是在 DRDY ISR 中丢失了一些 CPU 周期。 我可能会在这里尝试进行优化。 换句话说、是否可以 不必使用此引脚进行轮询/中断? 我认为、如果您留出足够的时间来转换第一个样本、则只要数据速率保持在 ADS 数据表中所述的 Fdata 范围内、就可以从 ADC 连续读取数据、而不必依赖于 DRDY 引脚。 MCU 上的 PWM 可轻松配置为  以任何所需的速率连续生成 DMA 传输、从而将 CPU 从公式中移除。  DMA 可配置为在每个 PWM 事件期间向 SPI TX 缓冲区传输6个虚拟字符(我假设您将使用8位模式、因此3x8位=每个 ADC 24位、总共需要6个虚拟字符才能从每个 ADC 读取样本)。 SPI 可配置为 每次它的缓冲区中还有6个以上的字符时生成一个 DMA 事件。 然后、DMA 将6个字符从 SPI 传输到存储器、并在传输完成时生成 CPU 中断。  

    唯一复杂的部分是 ADC 片选引脚。  一个选项(不一定是最容易实现的)是在 F280039C 上利用 CLB 逻辑块。 您可以使用 CLB 逻辑块来基本上对 SPI 时钟进行计数。 使用两个 CLB_OUTPUTXBAR 引脚来驱动 ADC 上的片选引脚。 让 CLB 检测 SPI STE 引脚变为低电平(或可能让 PWM 引脚变为高电平)、然后在该点将  CLB_OUTPUTXBAR1设置为低电平、将 CLB_OUTPUTXBAR2设置为高电平。  当已计数到24个 SPI CLK 时、将 CLB_OUTPUTXBAR1设置为高电平、将 CLB_OUTPUTXBAR1设置为低电平。 为确保准确无误、您可能必须在 SPI 字符之间添加一些延迟(请参见 SPIFFCT 寄存器中的 TXDLY)。  

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

    感谢您的建议。

    我们将首先在内部讨论这一点、并决定如何进一步进行。 此时、我使用三个中断来按如下方式处理两个 ADC:ADC1 DRDY ISR:读出 ADC1数据->  SPI 传输完成 ISR:读出 ADC2数据并处理 ADC1数据-> SPI 传输完成 ISR:处理 ADC2数据。 采样率限制为高达8kSPS。  

    不过,我现在又要面对另一个问题。 应用程序 在连接调试器的情况下正常运行(在调试模式下)。 加电复位后、应用在一段时间后卡住。 问题是、我无法在没有复位的情况下连接正在运行的目标(MCU)。 可以帮帮我吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    加电复位后,应用程序在一段时间后卡滞。 问题是、我无法在没有复位的情况下连接正在运行的目标(MCU)。 可以帮助我吗?

    可以将调试探针连接到正在运行的目标。 下面是一个很好的视频、其中介绍了该过程。 它用于较旧版本的 CCS、但我认为应该适用于更高版本。

    https://www.youtube.com/watch?v=xEBjObfW-8Y 

    如果不起作用、您基本上需要手动启动目标配置、连接到目标、然后加载项目符号(而不是.out 文件)。

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

    我知道这个视频。 上周我尝试了相应的跑步目标、但没成功。 当我尝试连接正在运行的目标时、总是会收到相同的错误:  

    当我按"粗鲁重试"键时、调试器会连接、但应用程序会停止。 当我按下"Resume"按钮时、应用程序会卡住。 应用程序将在调试器复位后再次运行、但应用程序状态丢失。  

    如何手动启动目标配置?   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道此视频。 上周我尝试了相应的跑步目标、但没成功。 当我尝试连接正在运行的目标时,我总是得到相同的错误: 

    您可以尝试 C2000ware 库中的一个标准示例、或许是一个 LED 闪烁示例、以验证是否可以连接到正在运行的目标。

    如何手动启动目标配置?   [/报价]

    我猜测即使是手动方法也会导致相同的错误。 如果您仍想尝试、可以参考下面的视频。

    https://www.youtube.com/watch?v=NNQJWCWaypY

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

    我刚刚尝试通过一个闪烁的 LED 示例来连接到正在运行的目标、结果是相同的。 有什么想法吗?   

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

    您能否说明一下您使用的是 TI EVM 还是定制硬件?

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

    我将定制硬件与  F280038C MCU 配合使用、 我使用的 是 XDS110调试探针。 但我还有一个开发板(LAUNCHXL-F280039C)、它曾用于 预开发和评估。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用带有  F280038C MCU 的定制硬件。 我使用的 是 XDS110调试探针。 但我还有一个开发板(LAUNCHXL-F280039C)、它曾用于 预开发和评估。  [/报价]

     是否无法连接到该 LAUNCHXL-F280039C 上正在运行的目标?

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

    没错、我尝试了两种方法但结果却同样糟糕。

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

    我会尝试重新创建、但可能需要几天时间。

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

    Lukas,

    我能够尝试一下这个方法。 我认为问题可能在于、当您连接到目标时加载的 GEL 文件。 我使用 C2000ware 随附的闪烁示例尝试了这一点。  打开目标配置文件(在工程目录中的 targetConfigs 下)、然后在高级选项卡的 C28xx_CPU1条目下尝试清除初始化字段中指定的 GEL 文件。 然后重复视频中的步骤。

    注意:请确保目标配置文件设置为活动状态。 在这里、我只是将目标配置 w/o GEL 文件保存在一个不同的名称下。

    在本例中、我可以通过单击错误图标来启动调试会话。 这将连接到目标并加载程序符号、而不会将其复位。 目标在连接时将停止、但如果您不希望、可以从程序加载选项中取消选中。

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

    尊敬的 Gus:  

    这个过程运转良好。 当我禁用"连接时暂停目标"时、调试器会连接到目标、但我只能终止调试器。 其他调试可能会被禁用(断点、暂停、...)。   不过,这个小问题是我可以忍受的东西。  

    GEL 文件的此路径有什么用途?   

    非常感谢您的帮助。  

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

    路径指向目标配置启动时加载的 GEL 文件的位置。 GEL 文件包含一些在某些仿真器事件(例如目标连接、复位等)期间调用的函数。 您可以在此处了解更多相关信息。

    https://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_debug-gel.html