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.

[参考译文] MSP432P401R:最佳做法是使用 DMA 在3个通道上实现1MSPS 速率

Guru**** 2589275 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/623361/msp432p401r-best-practices-hitting-the-1-msps-rate-over-3-channels-using-dma

器件型号:MSP432P401R

我的客户在使用 DMA 的3个通道上达到1 MSPS (实际上需要600kHz)速率时遇到问题。  

我正在努力使 ADC14以每通道200kSPS 的速率运行,在3个通道之间交替运行,总速率为600kSPS。 我以48MHz 的频率运行,让 Timer_A 触发 ADC 样本,在3个模拟通道之间循环。 仅使用 ADC 中断而不使用 DMA,我接近600kSPS 的速率,但缺少样片,正如预期的那样。 我通过这种方式(不带 DMA)开始将输入线路、时钟和 ADC 按我的要求工作。 现在,我正在尝试将 DMA 合并到混合中。

我需要 DMA 来处理2种传输场景: (1)直接进入 SPI TX、(2)直接进入本地 RAM 阵列(用于 SPI 传输前的预处理步骤)。

我已经绘制了 Project|Examples|Resource Explorer 的轮廓,但没有看到任何这种复杂的东西。 是否还有其他示例来源?

显然,只有1个 DMA 通道支持由 ADC 触发(DMA 通道7)。 如果我正在对3个通道(A0-A2)进行采样,则在扫描完所有3个通道后 DMA 将被触发,因此将发生3个传输,并且 DMA 中断将关闭。 然后、在 DMA 中断中、我必须更新目标地址以向下移动3个条目。 这需要太长的时间、因此缺少样本。

您以多快的速度运行处理器?   [48MHz]

运行 ADC 的分辨率是多少?    [14位]

您的 ADC14CLK 是什么?  [24MHz]

您的 ADDC 14PDIV 是什么? [我不知道这是什么;使用 ADC_divider _2)  

您使用的是什么时钟源?  [MCLK]

SLAA707.pdf 看起来很相关、但在审查后对客户不有用。

可根据要求提供代码以供内部审查。

谢谢!  

Blake

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Blake、
    有关这些评论的几个方面。 首先、由于使用的是 ADC 分频器、这意味着无法实现1MSPS。 仅转换所需的时钟数(假设为14位分辨率)为16个时钟、因此 ADC (16个时钟/12MHz)不支持1us (1MSPS)计时。 其次、ADC 需要处于手动触发的扩展采样模式或具有自动触发的脉冲采样模式。 如果您使用带手动触发器的脉冲采样模式、则同步需要额外的时钟周期、这将禁止1MSPS。

    一次收集多少数据? 这是连续的数据流、还是以突发方式收集? 我可以举一个例子、但任何其他背景都将有所帮助。

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

    尊敬的 Chris:

    感谢您的快速响应。

    客户回复:

    我~2分频来使48MHz 时钟降至我认为~是最大 ADC14时钟速率(24MHz)。 最大 ADC14时钟速率是多少? 是否必须超频才能获得1MSPS?

    具有自动触发器的脉冲采样模式最适合我们。

    一次收集多少数据? 这是连续的数据流、还是以突发方式收集? 我可以举一个例子、但任何其他背景都将有所帮助。

    有两种情况: (1)在一种“监视”模式下,我们需要通过 SPI 转储连续的数据流。 在此模式下,3个通道的采样值必须以200kHz/通道的速率采集,并通过 SPI 总线实时转储;(2)在“运行”模式下,将以600kHz (200kHz/3通道)的总速率连续收集一些波特值的数据(800us/baud)。 这可能是几千个样本。 乒乓/双缓冲可能适用于这种情况。 或者、我们可以对单个缓冲器进行采样、处理并再次执行它。

    非常需要14位分辨率。 这是一款电池供电的器件、因此非常需要使用 DMA 来最大限度地延长睡眠时间。

    谢谢!  Blake

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

    Blake、

      从技术上讲,您不应该为大于25MHz 的 ADC 提供任何数据(根据数据表 http://www.ti.com/lit/ds/symlink/msp432p401r.pdf#page=65 )。  ADCOSC 是一个用于 ADC 的内部25MHz 振荡器。  在提供24MHz 或48Mhz 以及在外设内进行分频方面存在一些子问题、因此我通常建议在使用 HFXT 时仅使用 ADCOSC 或 SMCLK 的24MHz 信号。

      我未能为这两个用例列举示例、但希望所附示例将提供一些想法。  在此示例中、我以1MSPS 运行 ADC、它会移动三个通道的序列、以便每个通道的有效采样率为~333Khz。  此外、我还没有在实验中测试过这一点、只是验证了时序。  如果您发现任何问题、请告诉我、我将尝试就此进行实验。

    e2e.ti.com/.../adc14_5F00_multiple_5F00_channel_5F00_repeat_5F00_timera_5F00_source_5F00_05.c

    Chris

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

    Blake、

      附加的文件出错。  仲裁应该被设定为4、这样、进入 DMA 的每个 ADC 触发器(ADC 在序列结束时触发 DMA)使得 DMA 移动全部三个数据段(任务大小被设定为3)。  我忽略了 TRM 第450页上的注释。

    因此、在本示例中、我提供 N 等于3且2^R = 1。  因此、DMA 将始终执行序列"1"、直到 N=1。  这将导致3个单独的序列、每个序列需要一个触发器、因此、尽管所有三个序列都准备就绪、但每个触发器只移动一个数据。  外设散聚描述(注意任务 A)中也说明了这一点:

    谢谢、此致、

    Chris