我通过数据手册了解到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); //开启定时器 }