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.

[参考译文] TMS320F280025C:使用 DMA 获取 ADC 结果的正确方法

Guru**** 2393755 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1320533/tms320f280025c-right-way-using-dma-to-get-adc-result

器件型号:TMS320F280025C
主题中讨论的其他器件:C2000WARE

您好、Gurus:

由于 C2000Ware 似乎没有 GS0RAM DMA 示例的外设、我想知道是否可以/安全地将数据从外设的存储器地址移动到 GS0RAM。

如数据表所示、280025C 的 DMA 总线连接到 ADC 结果和 GS0 RAM。

我想我可以修改示例"dma_ex2_gsram_transfer"、将"* srcAddr"更改为 ADC 结果地址(如 ADCARESULT0 0x0B00)、然后我可以开始了吗?

如果是、 这是否意味着当 DMA 触发源触发 DMA 事件时、来自 ADCRESULT0的数据会移动到 TRM 第1153页中的目标地址?

如果没有、如何使用 DMA 获得结果?

如果我使用 PWM1.SOCA 来触发 ADCSOC0和 DMA Teansfer、DMA 能否获得正确的结果? 或者我将获得以前的 ADC 转换结果?

以下是获取 ADC 结果的两种不同方法:

使用 PWM1.SOCA 触发 ADCSOC0、转换后将发生 ADCOC0并触发 ADCINT1、我 通过 ADCA.1设置 DMA 触发、然后我得到 ADC 结果。

2. 使用 PWM1.SOCA 来触发 ADCSOC0,转换后会发生 ADCOC0并触发 ADCINT1,但我没有使用 DMA,而是通过使用 CPU 获得 ADCRESULT0。

哪一个的延迟更低? 可以节省多少时间?

谢谢!

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

    您好!

    我想我可以修改示例"dma_ex2_gsram_transfer"、将"* srcAddr"更改为 ADC 结果地址(如 ADCARESULT0 0x0B00)、然后我可以开始了吗?

    如果是、 这是否意味着当 DMA 触发源触发 DMA 事件时、来自 ADCRESULT0的数据会移动到 TRM 第1153页中的目标地址?

    [/报价]

    该值应该正确、只要您设置了触发器并且您有正确的地址和突发/传输大小就足够了。

    如果我使用 PWM1.SOCA 来触发 ADCSOC0和 DMA teansfer,DMA 能得到正确的结果吗? 或者我将获得之前的 ADC 转换结果?

    我想说您更有可能得到之前的结果、因为 ADCSOCA 事件启动了转换、它实际上并不表示结果已就绪。

    使用 PWM1.SOCA 触发 ADCSOC0、在回答之后、将发生 ADCEOC0并触发 ADCINT1、我 通过 ADCA.1设置 DMA 触发、然后我得到 ADC 结果。

    2. 使用 PWM1.SOCA 来触发 ADCSOC0,在回答后,会发生 ADCOC0,并触发 ADCINT1,但我没有使用 DMA,而是用 CPU 得到 ADCRESULT0。

    哪一个的延迟更低? 可以节省多少时间?

    [/报价]

    抱歉、我不确定我是否完全理解您列出的两种配置。 第一个中断是由 ADC 中断还是 ADCSOCA 事件触发的 DMA? 第二个是否会改用 DMA 软件触发? 我认为使用 ADC 中断具有更少的延迟、并且您应该能够预计当前结果的传输。

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

    您好、Omer

    感谢您的回复。

    很抱歉,我不确定我是否很清楚您列出的两种配置。 第一个中断是由 ADC 中断还是 ADCSOCA 事件触发的 DMA? 第二个是否会改用 DMA 软件触发? 我想说使用 ADC 中断会有更少的延迟、您应该能够预期传输当前结果。

    第一种是使用由 ADC 中断源触发的 DMA。

    第二个方法是使用 CPU 来在 ADC 中断中获得 ADC 结果、如"Vin = AdcaResultRegs。 ADCRESULT1;"我认为这比 DMA 访问更慢、对吗?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    、第二种方法是使用 CPU 来获得 ADC 中断中的 ADC 结果、如"Vin = AdcaResultRegs. ADCRESULT1;"我认为这比 DMA 访问更慢、对吗?

    是的、使用 CPU 的速度几乎总是较慢、因为 CPU 可能 在最终移动数据之前运行其他中断或代码。