AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;//设定采样窗口宽度 16个ADCLK周期
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 Non-Cascaded Mode 选择双序列发生器模式
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; //使能SEQ1中断
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;//复位SEQ1至CONV00状态
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;//双序列发生器顺序采样模式
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;//每个序列发生器最大采样通道数为4总共采样可采样8通道
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x2;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x3;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3; // Set up ADC to perform 4 conversions for every SOC
对于上述ADC配置为双序列排序器顺序采样模式,DMA的数据传送如下:
DMACH1BurstConfig(3,1,10);//一次burst传输4个字,源地址每次加1,目的地址每次加10
DMACH1TransferConfig(9,1,0);//一次DMA有10次burst,一次burst完源地址加1,目的地址不变
DMACH1WrapConfig(1,0,0,1);//每两次burst源地址回到首地址,每一次burst目的地址回到首地址+1
问题1:此例程中只允许了SEQ1排序器,也就是说只有ADCRESULT0-3能采到数据,但是DMA配置确是用到了ADCRESULT4-7,此时没有给SEQ2排序器开始即AdcRegs.ADCTRL2.bit.SOC_SEQ2 = 1这一句没有,也并没有定义MAX_CONV2,ADCRESULT4-7并没有数据.难道传的是0过去?
问题2:DMA由ADC的SEQ1中断触发,此时DMA一直在传ADC的结果寄存器数据。定义了1个长度为40的数组,会不会出现ADC的转换太慢,而DMA一直传的数据都是不变的呢?此例程中并没有允许ADC的连续模式 |