器件型号: MSPM0G3507
尊敬的 TI 团队:
我尝试使用 DMA 传输进行连续 ADC 采样。 我需要 1024 个样本/秒 采样时间 0 设置为 976.56us (1/1024)。 例如、我修改了 ADC12_max_freq_DMA。 转换仅开始一次。 但是、通过设置“Enable Repeat Mode“(启用重复模式)、它应该会重新启动。 这是什么原因?
#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;
}
}











