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.

[参考译文] AM2434:到2434 R5 DMA 的快速32位(或34位)并行 GPIO ADC 输入?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1355892/am2434-fast-32-bit-or-34-bit-parallel-gpio-adc-input-to-2434-r5-dma

器件型号:AM2434
主题中讨论的其他器件:ADS1605

与锁定螺纹相关:

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1295610/am2434-16-bit-parallel-gpio-read-with-dma/4925911?tisearch=e2e-sitesearch&keymatch=parallel%2520dma#4925911

请原谅这里的"新手"问题,但我暂时填补真正的处理器硬件和软件的人,我不是一个处理器家伙。

我需要将两个16位并行 ADC (ADS1605: https://www.ti.com/lit/ds/symlink/ads1605.pdf )连接到 ADS2434 R5 (AM2434BSDFIALVR、441引脚 ALV FCBGA),并在不使用 PRU 的情况下以1.25 MSPS (800 ns)的速率读取它们。

这似乎让 GPIO 保留为一个不错的选择,因为我们有很多备用的 GPIO 引脚,无法找到具有足够采样率/带宽和真正 SPI 输出与2434的本机 MCSPI 端口兼容的 delta-sigma ADC。 优先级很高的目标是接口没有 FPGA 或其他外部逻辑-我们需要使它在 ADC 和 CPU 之间是无缝的。

最大的问题是、2434能否通过硬件外设实现这些并行 ADC "自动"读取、以及通过 DMA 将样本写入缓冲区、而不会降低处理器的速度。

两个 ADS1605 ADC 将通过同一个外部低抖动采样振荡器运行、并通过 RESET 引脚进行同步、从而提供相干/同步采样。

当每个新样本准备就绪(每800ns 一次)时、DRDY 引脚将变为低电平、并且由于两个 ADC 同步、只需要一个 DRDY 信号作为 GPIO (中断?) 去抓取数据的输入。

2434上的 GPIO 看起来被分成16位的组。 由于我需要读取两个16位 ADC、如果这是作为一个32位读取来完成的、稍后在软件中将字分隔、但如果可以作为两个16位读取来完成、那也没关系。

作为增加的细微差别、我还想同时从每个 ADC 读取数据来读取超范围(OTR)引脚、但这会使每个输入进行17位读取(每个样本总计34位)。 我可以用 OTR 位替换每个 ADC 中的 LSB、并将输入数据视为15位 ADC、但这并不理想。

如果可以以32位的组形式读取输入、并且可以在每个 DRDY 脉冲上 DMA 两个流、则可以从每个 ADC 读取 ADC 数据为17位字(16数据+ 1 OTR、忽略其他15个)。

如果必须以16位为一组读取输入、则每个 DRDY 脉冲将进行三次读取:从第一个 ADC 读取16位、然后从第二个 ADC 读取16位、然后在第三次读取时忽略两个具有14位的 OTR 位。

大概 ADC CS 和 RD 引脚可以一直有效(低电平)、除了 CPU 在下一个 DRDY 下降沿之前读取这34个数据引脚所需的一切外、不需要进行位拆裂。

不过、数据流是可以实现的、我不能每隔800ns 就中断一次处理器来读取转换器。 在中断处理器或将处理器安排为处理帧之前、我需要从每个 ADC 采集4096个至4608个样本、才能通过 DMA 将这些样本存储在缓冲器中。

最好是在乒乓缓冲器之间进行交替存储。

在"缓冲区已满"状态(达到4096和4608之间的可编程结束限制)或定时器中断(周期=缓冲区大小*采样率)上"中断"处理器是可以接受的。

与我不是一个处理器的家伙和2434 TRM 超过10K 页... 我正在努力为这个架构提交一个板面布局布线而不做某些确认并行接口将工作在这个情况下。 使用 SPI 或 McBSP 时、这似乎都变得容易得多...

您可以对引脚/存储体分配(用于数据/OTR 状态)和引脚分配(GPIO、时钟、其他?)提供任何输入 那么总的来说、DRDY 脉冲以及外设配置(DMA、计时器、中断和 GPIO)和软件架构将会非常非常受欢迎。

非常感谢!

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

    您好、John:

    感谢您访问德州仪器 E2E 支持论坛。

    请允许我查看以上详细信息并与您联系。 请等待一段时间再返回。

    此致、

    图沙尔

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

    您好、John:

    感谢您的耐心等待。

    最大的问题是2434能否通过硬件外设"自动"读取这些并行 ADC、以及通过 DMA 将样本写入缓冲区而不会拉低处理器。

    这是可能的、但所有引脚都将位于同一组下。  

    例如、16个引脚应配置为存储体0、或另一个16引脚应配置为存储体1。

    我们需要每个 DRDY 状态引脚一个 DMA 通道来触发 DMA。

    源地址将是 DMA 通道的 GPIO 数据寄存器。

    现在,当 STATUS 引脚从高电平变为低电平或从低电平变为高电平时,HW 可以自动触发 DMA。

    因此、对于 GPIO 引脚的每次更改、数据都从 GPIO DAT 寄存器移动到目标缓冲区、而此操作需要持续进行、直到  X  然后在每个器件上 X 我们可以触发完成 DMA 事件。

    但是、我们没有这种方法的示例、但根据 SOC、它可以受到支持。

    请参阅下面的屏幕截图。

    此致、

    图沙尔