2011-06-23 04:58 AM
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-dma2013-09-18 03:34 AM
Well,
it can be very useful for me too. Have you solved it?2013-09-18 07:04 AM
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.