Hello!
I have a trouble to use ADC0,I want use ADC0 to sample and convert ,and used EDMA to transfer ADC0 channel 52 result. I used PIT timer channel 2 to trigger ADC0 channel 52,ADC0 channel 52 I used inject mode . when I usd ADC0 end of convert interrupt,it is right,adc Interrupt periodic trigger. But when I used EDMA it only trigger once. Below code is ADC EDMA Init code. ADC 0 Init at another place.
void Drv_AdcInit(void)
{
#ifdef CP_ADC_CONVERT_BY_DMA
adcEdmaTestDestAddr = (uint32_t *)malloc(sizeof(uint32_t));
EDMA_DRV_ConfigSingleBlockTransfer(EDMA_CHN1_NUMBER,
EDMA_TRANSFER_MEM2MEM,
0xffe001d0,
adcEdmaTestDestAddr,
EDMA_TRANSFER_SIZE_4B,
1);
ADC_DRV_EnableDma(INST_ADCONV1);
ADC_DRV_EnableChannelDma(INST_ADCONV1,ADC0_CHANNEL);#else
ADC_DRV_EnableInterrupts(INST_ADCONV1,ADC_FLAG_INJECTED_EOC);
ADC_DRV_EnableChannelInterrupt(INST_ADCONV1,ADC0_CHANNEL);
INT_SYS_InstallHandler(ADC0_EOC_IRQn,ADC_EOC_IRQHandler,NULL);
INT_SYS_SetPriority(ADC0_EOC_IRQn, 7);
#endif
ADC_DRV_EnableChannel(INST_ADCONV1,ADC_CONV_CHAIN_INJECTED,ADC0_CHANNEL);EDMA_DRV_StartChannel(EDMA_CHN1_NUMBER);
}
And below code is EDMA channel 1 callback.
void cpAdcEdma(void)
{
adcEdmaTest++;
adcEdmaTestValue = ((uint16_t)(*adcEdmaTestDestAddr & 65535));
*adcEdmaTestDestAddr = NULL;
}
My problem is when I set a breakpoint into EDMA callback. It just enter once, so I need help.
Tks!
I see the Error Status Register (DMA_ES) in S32 IDE memory window, the value is 0x80000102. Correspond to the figure below.
But I dont how to do.
Below code is EDMA config code.
edma_channel_config_t dmaController1Chn1_Config = {
.channelPriority = EDMA_CHN_DEFAULT_PRIORITY,
.virtChnConfig = EDMA_CHN1_NUMBER,
.source = EDMA_REQ_ADC_0_MUX0,
.callback = cpAdcEdma,
.callbackParam = NULL,
.enableTrigger = false
};
const edma_channel_config_t * const edmaChnConfigArray[] = {
&dmaController1Chn0_Config,
&dmaController1Chn1_Config
};const edma_user_config_t dmaController1_InitConfig0 = {
.chnArbitration = EDMA_ARBITRATION_FIXED_PRIORITY,
.groupArbitration = EDMA_ARBITRATION_FIXED_PRIORITY,
.groupPriority = EDMA_GRP0_PRIO_LOW_GRP1_PRIO_HIGH,
.haltOnError = false
};