cancel
Showing results for 
Search instead for 
Did you mean: 

ADC DMA wonder

ybitton
Associate II
Posted on June 23, 2011 at 13:58

Hi,

I convert two adc channels(1,2) and using DMA to transfer them to memory.

ADC channel1 -> MemConvertedValue[0]

ADC channel2 -> MemConvertedValue[1]

Normaly it works OK, but while i am in debug mode and ocusenly pressing the reset icon in IAR, i have noticed that the DMA has swaped memory locatins:

ADC channel1 -> MemConvertedValue[1]

ADC channel2 -> MemConvertedValue[0]

Can any one know why?

Here is the configuration code i did:

  

  /* DMA1 channel1 configuration ----------------------------------------------*/

  DMA_DeInit(DMA1_Channel1);

  

  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;

  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&MemConvertedValue;

  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

  DMA_InitStructure.DMA_BufferSize = 2;

  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

 

  DMA_Init(DMA1_Channel1, &DMA_InitStructure);

  

  DMA_Cmd(DMA1_Channel1, ENABLE);

  

  /* Enable ADC1 DMA */

  ADC_DMACmd(ADC1, ENABLE);

  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

  ADC_InitStructure.ADC_ScanConvMode = ENABLE;

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; 

  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

  ADC_InitStructure.ADC_NbrOfChannel = 2;

 

  ADC_Init(ADC1, &ADC_InitStructure);

  ADC_RegularChannelConfig(ADC1, MW_Channel_1, 1, ADC_SampleTime_55Cycles5);

  ADC_RegularChannelConfig(ADC1, MW_Channel_2, 2, ADC_SampleTime_55Cycles5);

  /* Enable ADC1 */

  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC1 reset calibaration register */

  ADC_ResetCalibration(ADC1);

  /* Check the end of ADC1 reset calibration register */

  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibaration */

  ADC_StartCalibration(ADC1);

  /* Check the end of ADC1 calibration */

  while(ADC_GetCalibrationStatus(ADC1));

#adc-dma
2 REPLIES 2
Nickname925_O
Associate II
Posted on September 18, 2013 at 12:34

Well,

it can be very useful for me too.

Have you solved it?

frankmeyer9
Associate II
Posted on September 18, 2013 at 16:04

Can any one know why?

 

It might be something closely related to this:

Normaly it works OK, but while i am in debug mode and ocusenly pressing the reset icon in IAR, i have noticed that the DMA has swaped memory locatins:

 

I'm no IAR WB user, so I don't know what then happens.