Part Number: MSPM0G3507
Hi TI team,
I try to do a Continuous ADC Sampling with DMA transfer. I need 1024 samples/s. The Sample Time 0 is set to 976.56us (1/1024). As example I modified the adc12_max_freq_dma. The conversion started only once. But with the setting 'Enable Repeat Mode' it should restart. What is the reason for this?
#include "ti_msp_dl_config.h"
#define ADC_SAMPLE_SIZE (1024)
/* When FIFO is enabled 2 samples are compacted in a single word */
#define ADC_FIFO_SAMPLES (ADC_SAMPLE_SIZE >> 1)
uint16_t gADCSamples[ADC_SAMPLE_SIZE];
volatile bool gCheckADC;
int main(void)
{
SYSCFG_DL_init();
/* Configure DMA source, destination and size */
DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID,
(uint32_t) DL_ADC12_getFIFOAddress(ADC12_0_INST));
DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t) &gADCSamples[0]);
DL_DMA_setTransferSize(DMA, DMA_CH0_CHAN_ID, ADC_FIFO_SAMPLES);
DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);
/* Setup interrupts on device */
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
gCheckADC = false;
DL_ADC12_startConversion(ADC12_0_INST);
while (1) {
while (false == gCheckADC) {
__WFE();
}
gCheckADC = false;
DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
delay_cycles(1600000);
DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
}
}
void ADC12_0_INST_IRQHandler(void)
{
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
case DL_ADC12_IIDX_DMA_DONE:
gCheckADC = true;
DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);
DL_ADC12_enableConversions(ADC12_0_INST);
break;
default:
break;
}
}





