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.

[参考译文] TMS320F28388D:DMA 复制后的第一个采样为0

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1467283/tms320f28388d-first-sample-after-dma-copy-is-0

器件型号:TMS320F28388D
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

我正在处理一个使用 TI F28388D 微控制器的项目、尝试使用 DMA 将 ADC 数据传输到缓冲区。 然而、DMA 缓冲区中的第一个样本总是存在 
0、我不确定原因。 我已按照勘误表添加了一个虚拟通道(1)。 这里是我的设置摘要

 

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void ConfigureADC(void)
{
EALLOW;
// Set ADC clock prescaler to divide by 4 (50MHz ADC clock)
AdcaRegs.ADCCTL2.bit.PRESCALE = 6;
AdcbRegs.ADCCTL2.bit.PRESCALE = 6;
AdccRegs.ADCCTL2.bit.PRESCALE = 6;
AdcdRegs.ADCCTL2.bit.PRESCALE = 6;
// Set pulse positions to late
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcdRegs.ADCCTL1.bit.INTPULSEPOS = 1;
// Configure ADC SOC0 for each ADC
// ADC-A SOC0 Configuration
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 13; // ePWM5 SOCA trigger
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 3; // ADCINA3 channel
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14; // Acquisition window
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void DMAInit(void)
{
// Initialize DMA
DMAInitialize();
/* The Burst size is BUFFER_SIZE/2 because we are setting up the DMA in 32 bits
* mode. And each burst will transfer 2 adc samples of 16 bit each.
*/
DMACH1AddrConfig(&state.activeAdcBuffer->adcA_buffer[0], &AdcaResultRegs.ADCRESULT0); // ADC-A buffer
DMACH1BurstConfig(1, 0, 2); // Common burst configuration
DMACH1TransferConfig((BUFFER_SIZE/2)-1, 0, 2); // Common transfer configuration
DMACH1ModeConfig(
DMA_ADCAINT1, PERINT_ENABLE, ONESHOT_DISABLE, CONT_DISABLE, SYNC_DISABLE,
SYNC_SRC, OVRFLOW_DISABLE, THIRTYTWO_BIT, CHINT_END, CHINT_ENABLE
);
// DMA setup for ADC-A (Channel 2)
DMACH2AddrConfig(&state.activeAdcBuffer->adcA_buffer[0], &AdcaResultRegs.ADCRESULT0); // ADC-A buffer
DMACH2BurstConfig(1, 0, 2); // Common burst configuration
DMACH2TransferConfig((BUFFER_SIZE/2)-1, 0, 2); // Common transfer configuration
DMACH2ModeConfig(
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    尊敬的 Amarjit:

    您是否已查看 C2000ware 中的 adc_ex6_soc_continuous_dma 示例? 它位于以下路径中:[C2000ware install]/device_support/f2838x/examples/cpu1/adc/adc_ex6_soc_continuous_dma。 您应该能够遵循此步骤查看与 ADC 结果寄存器连接所需的 DMA 配置。

    很遗憾、直接代码审查 不是我们在 E2E 上可以支持的功能。 但是、如果您对 DMA 配置有任何具体问题、或如何修改示例以适合您的用例、我可以为您提供帮助。

    此致、

    Delaney