我通过数据手册了解到MSP432E401Y的ADC采集最高速率为2M,但我使用ADC+UDMA+TIM触发的配置时速率始终上不去,提高触发频率时,采样的波形变得很奇怪,如采样正弦波时,显示的波形为一段连续的正常波形后跳变到另一端连续的正常波形,如果我想提高采样频率,我该怎么配置
void ADC_UDMAInit()
{
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
MAP_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0);
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
MAP_ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH3 | ADC_CTL_IE | ADC_CTL_END);
MAP_ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_TIMER, 2);
MAP_ADCIntClearEx(ADC0_BASE, ADC_INT_DMA_SS3);
MAP_ADCIntEnableEx(ADC0_BASE, ADC_INT_DMA_SS3);
MAP_ADCSequenceDMAEnable(ADC0_BASE, 3);
MAP_ADCSequenceEnable(ADC0_BASE, 3);
MAP_IntEnable(INT_ADC0SS3);
ADC0->SSTSH0 = 0x0;
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); //使能DMA外设
MAP_uDMAEnable();
MAP_uDMAControlBaseSet(pui8ControlTable);
MAP_uDMAChannelAssign(UDMA_CH17_ADC0_3); //为DMA分配外围映射
//UDMA_ATTR_USEBURST失能仅使用突发模式,UDMA_ATTR_ALTSELECT失能选择备用控制结构
//UDMA_ATTR_HIGH_PRIORITY失能将其通道设为高优先级,UDMA_ATTR_REQMASK失能屏蔽该通道外围设备的硬件请求信号。
MAP_uDMAChannelAttributeDisable(UDMA_CH17_ADC0_3,
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
//UDMA_PRI_SELECT使用主控制结构,
//数据大小为16,源地址无增量,目标地址增量为16,仲裁数为1
MAP_uDMAChannelControlSet(UDMA_CH17_ADC0_3 | UDMA_PRI_SELECT,
UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
UDMA_ARB_1);
//使用基础模式,sizeof(ADC_BUFF)/2为要传输的数据项的数量
MAP_uDMAChannelTransferSet(UDMA_CH17_ADC0_3 | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
(void *)&ADC0->SSFIFO3, (void *)&ADC_BUFF,
sizeof(ADC_BUFF)/2);
MAP_uDMAChannelEnable(UDMA_CH17_ADC0_3); //通道使能
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); //使能定时器0外设
MAP_TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC_UP); //配置定时器为半宽周期定时器
MAP_TimerLoadSet(TIMER0_BASE, TIMER_A, (120000000/20000)); //配置为定时器类型和装载值
MAP_TimerADCEventSet(TIMER0_BASE, TIMER_ADC_TIMEOUT_A); //配置定时器作为ADC触发
MAP_TimerControlTrigger(TIMER0_BASE, TIMER_A, true); //使能作为ADC触发
MAP_TimerEnable(TIMER0_BASE, TIMER_A); //开启定时器
}

