工具与软件:
尊敬的专家:
我的客户使用 DMA 1CH 将 ADC 结果传送到缓冲器。
ADCA:3eA (结果0、1、2)
ADCB:3eA (结果0、1、2)
ADCA 结果0、1、2和 ADCB 结果0、1通常传输到缓冲器、但 ADCB 结果2不传输到缓冲器。
我已附加 DMA 配置文件。
您能否指出错误。
谢谢
此致
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.
工具与软件:
尊敬的专家:
我的客户使用 DMA 1CH 将 ADC 结果传送到缓冲器。
ADCA:3eA (结果0、1、2)
ADCB:3eA (结果0、1、2)
ADCA 结果0、1、2和 ADCB 结果0、1通常传输到缓冲器、但 ADCB 结果2不传输到缓冲器。
我已附加 DMA 配置文件。
您能否指出错误。
谢谢
此致
你好、Robin、
只是为了确保我理解、他们是否 在尝试让 CPU 计时器定期触发 DMA、以便将数据从 ADCA 和 ADCB ADCRESULT0 -ADCRESULT15寄存器移动到 tADC 结构中每个元素的最后一个字段(替换 NULL)? 一些潜在问题:
我对他们希望如何将数据放入其结构有点困惑、请提供一个示例、说明他们希望随每个触发器移动的内容。
此致、
Delaney
尊敬的 Delaney:
将代码移到这里时出错了。 目标地址起始地址为 tADC[0].RawADCValue。 这是我想要的。
第一个触发器->传输0 (突发单次触发(ADCAResults0 / ADCAResults1 / ADCAResults2)->传输1 (突发单次触发(ADCBResults0 / ADCBResults1 / ADCBResults2)
第二次触发->重复
预期的结果是
ADCAResults0 -> tADC[0].RawADCValue
ADCAResults1 -> tADC[1].RawADCValue
ADCAResults2 -> tADC[2].RawADCValue
ADCBResults0 -> tADC[3].RawADCValue
ADCBResults1 -> tADC[4].RawADCValue
ADCBResults2 -> tADC[5].RawADCValue
因此、我将突发和传输源步长设置为29 (ADCB_BASE - ADCA_BASE - 3)(大小设置为3 /步长1)。
正如我在中设置的那样。 TXT、单稳态只用于突发不传输。 我按如下所示进行设置。
DMA_CONFIGMode (DMA_CH1_BASE、DMA_TRIGGER_TINT0、(DMA_CFG_Oneshot_enable | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT));
我仍然在努力,但无法找到我错过的东西。 我的代码的当前结果如下所示。
ADCAResults0 -> tADC[0].RawADCValue //已传输
ADCAResults1 -> tADC[1].RawADCValue //已传输
ADCAResults2 -> tADC[2].RawADCValue //已传输
ADCBResults0 -> tADC[3].RawADCValue //已传输
ADCBResults1 -> tADC[4].RawADCValue //已传输
ADCBResults2 -> tADC[5].RawADCValue //未传输。
谢谢!
此致、
你好、Robin、
明白了、感谢您的澄清。 除了0目标传输步骤之外、您的设置对您尝试实现的目标效果很好。 我认为您也希望将其更改为 sizeof (stADC)、因为这将是每次突发之间递增的地址数量。 请尝试此操作、看看是否能解决问题。 否则、请 在触发发生后查看并发送 DMA CH1控制寄存器的状态字段。 如果您尝试进行多次传输并在 stADC 结构中连续存储数据、则可能还会显示出您想要进行某种绕线操作(我假设如果您启用了连续模式、就会这样)。
此致、
Delaney