我在学习GD32F407芯片的编码,网上没有找到合适的代码学习,对照手册编写了ADC扫描模式DMA传输的代码,没有成功,我想传送4个AD数据,可是缓冲区得到两个数据,ADC状态寄存器报告溢出错误。
请教各位,我的代码问题在哪里,谢谢。
还有,哪个可以找到GD32F407实例代码,不想用库函数板,感觉不舒服。
代码如下:
uint32_t ADC2Array[4][4];
//设置PC0\PC1\PC2\PC3为模拟通道10,模拟通道11,模拟通道12,模拟通道13,
void ADC_Init_Config_with_DMA(void)
{
uint32_t nStatus;
uint32_t ADValue[16];
uint32_t i;
rcu_periph_clock_enable(RCU_GPIOC);
gpio_mode_set(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
//enable adc clock
rcu_periph_clock_enable(RCU_ADC1);
//reset adc
rcu_periph_reset_enable(RCU_ADCRST);
rcu_periph_reset_disable(RCU_ADCRST);
//set adc clock =10M
//pclk/n
adc_clock_config(ADC_ADCCK_HCLK_DIV20);
ADC_CTL0(ADC1)=0;
ADC_CTL1(ADC1)=0;
//set sample time 15
ADC_SAMPT0(ADC1) |=1+(1<<3)+(1<<6)+(1<<9);
adc_enable(ADC1);
/* wait for ADC stability */
//delay_1ms();
for(i=0;i<5000;i++);
/* ADC calibration and reset calibration */
adc_calibration_enable(ADC1);
//Scan mode enable
ADC_CTL0(ADC1)|=1<<8;
//DMA enable
ADC_CTL1(ADC1) |=1<<8;
ADC_RSQ2(ADC1) =0;
ADC_RSQ2(ADC1) |=10+(11<<5)+(12<<10)+(13<<15);
ADC_RSQ0(ADC1) |=3<<20;
ADC2_config_DMA();
}
void ADC1_config_DMA(void)
{
rcu_periph_clock_enable(RCU_DMA1);
dma_deinit(DMA1,DMA_CH2);
DMA_CHCTL(DMA1,DMA_CH2) |=(0<<6);
DMA_CHCTL(DMA1,DMA_CH2) |=(1<<25); //ch2,第一个设备
DMA_CHCTL(DMA1,DMA_CH2) |=(0<<23);
DMA_CHCTL(DMA1,DMA_CH2) |=(0<<21);
DMA_CHCTL(DMA1,DMA_CH2) |=(0<<19);
DMA_CHCTL(DMA1,DMA_CH2) |=(0<<18);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x2<<16);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x2<<13);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x2<<11);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x1<<10);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x0<<9);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x0<<8);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x1<<5);
DMA_CHFCTL(DMA1,DMA_CH2) |=(0<<2);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x0<<4);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x0<<3);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x0<<2);
DMA_CHCTL(DMA1,DMA_CH2) |=(0x0<<1);
DMA_CHFCTL(DMA1,DMA_CH2) |=(0<<7);
DMA_CHPADDR(DMA1,DMA_CH2)=ADC_RDATA(ADC1);
DMA_CHM0ADDR(DMA1,DMA_CH2) =(uint32_t) &ADC2Array[0][0];
DMA_CHCNT(DMA1,DMA_CH2) =4;
DMA_CHCTL(DMA1,DMA_CH2) |=1;
} |