|
本帖最后由 lofky 于 2015-8-25 17:19 编辑
小弟是想实现adc用同一或多个通道采样然后通过dma转存到指定区域,过程大概是:ad采够一个序列,中断置位,dma开始工作,移动16个result寄存器的16位结果,结束此次转换;adc继续采样,dma接着这样工作。根据已有的例程做了如下改动:
- //adc初始化
- AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
- AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
- AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 Non-Cascaded Mode
- AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1;//在转换完了一个序列就置位INT_SEQ1
- AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;
- AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run设置成连续模式
- AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
- AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0;
- AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0;
- AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x0;
- AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0;
- AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x0;
- AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
- AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x0;
- AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x0;
- AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x0;
- AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0x0;
- AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0;
- AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x0;
- AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0x0;
- AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0x0;
- AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x0;//同一个adc引脚输入
- AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 15;
复制代码
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1;//在转换完了一个序列就置位INT_SEQ1 这个是我加上去的
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run设置成连续模式 这个是我加上去的
- <p>//DMA部分初始化</p><p>DMADest = &DMABuf1[0]; //Point DMA destination to the beginning of the array
- DMASource = &AdcMirror.ADCRESULT0; //Point DMA source to ADC result register base
- DMACH1AddrConfig(DMADest,DMASource);
- DMACH1BurstConfig(15,1,1);
- DMACH1TransferConfig(9,0,1);
- DMACH1WrapConfig(1,0,0,1);
- DMACH1ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,
- OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_ENABLE); </p>
复制代码 DMASource = &AdcMirror.ADCRESULT0;不是很理解,这里是自己把AdcRegs.ADCRESULT0数据转移到了AdcMirror.ADCRESULT0去了?
DMACH1BurstConfig(15,1,10);目的地址需要+10?觉得应该改成DMACH1BurstConfig(15,1,1);
DMACH1TransferConfig(9,0,1);不理解,因为是连续不断,感觉这个没有意义,改成DMACH1TransferConfig(x,0,0);x任意正数
DMACH1ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,
OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_ENABLE);
改成
DMACH1ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_ENABLE,SYNC_DISABLE,SYNC_SRC,
OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_DISABLE);使之连续不断
程序还在调试,思路有点乱,不知道adc+dma是怎么个工作过程,例程都是只转移一次,没有连续转移的,上传个adc_dma的例程
请大虾指导小弟
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|