搜索
bottom↓
回复: 5

DSP28335如何对信号连续采样并直接通过dma转移?adc_dma

[复制链接]

出0入0汤圆

发表于 2015-8-25 16:59:06 | 显示全部楼层 |阅读模式
本帖最后由 lofky 于 2015-8-25 17:19 编辑

小弟是想实现adc用同一或多个通道采样然后通过dma转存到指定区域,过程大概是:ad采够一个序列,中断置位,dma开始工作,移动16个result寄存器的16位结果,结束此次转换;adc继续采样,dma接着这样工作。根据已有的例程做了如下改动:
  1. //adc初始化
  2. AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
  3. AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
  4. AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 Non-Cascaded Mode
  5. AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1;//在转换完了一个序列就置位INT_SEQ1
  6. AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;
  7. AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run设置成连续模式
  8. AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
  9. AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0;
  10. AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0;
  11. AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x0;
  12. AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0;
  13. AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x0;
  14. AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
  15. AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x0;
  16. AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x0;
  17. AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x0;
  18. AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0x0;
  19. AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0;
  20. AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x0;
  21. AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0x0;
  22. AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0x0;
  23. AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x0;//同一个adc引脚输入

  24. AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 15;
复制代码

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1;//在转换完了一个序列就置位INT_SEQ1               这个是我加上去的
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run设置成连续模式                     这个是我加上去的


  1. <p>//DMA部分初始化</p><p>DMADest   = &DMABuf1[0];              //Point DMA destination to the beginning of the array
  2.         DMASource = &AdcMirror.ADCRESULT0;    //Point DMA source to ADC result register base
  3.         DMACH1AddrConfig(DMADest,DMASource);
  4.         DMACH1BurstConfig(15,1,1);
  5.         DMACH1TransferConfig(9,0,1);
  6.         DMACH1WrapConfig(1,0,0,1);
  7.         DMACH1ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,
  8.                          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

出0入0汤圆

发表于 2015-8-25 17:20:15 | 显示全部楼层
建议你多多DMA那章节,弄清楚到底是怎么工作的。28335的DMA功能相当强大,触发源、每次传多少数据,传几次,传到哪里都是可以灵活设置的。

出0入0汤圆

 楼主| 发表于 2015-8-26 23:03:55 | 显示全部楼层
steaven2000 发表于 2015-8-25 17:20
建议你多多DMA那章节,弄清楚到底是怎么工作的。28335的DMA功能相当强大,触发源、每次传多少数据,传几次 ...


谢谢你的建议,大概懂了dma怎么配置的了,现在程序大概实现了单通道ad连续采样并连续用dma更新选中的存储区域,但是有个问题,采样的速率像很慢一样,实际上不用dma,直接改此程序成ad采样中断中赋值给数组,得到的结果用graph看,是正玄波
不知道是什么原因?可能我还没懂ad_dma工作原理和过程。。附上现在的程序,请指教,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-9-27 15:26:49 | 显示全部楼层
lofky 发表于 2015-8-26 23:03
谢谢你的建议,大概懂了dma怎么配置的了,现在程序大概实现了单通道ad连续采样并连续用dma更新选中的存 ...

你单通道连续采样是自动触发的还是用外部触发的?像stm32f4里面能达到1us输出一个12位采样结果,28335有多快?还有采样精度怎么样?

出0入0汤圆

 楼主| 发表于 2015-10-7 11:17:42 | 显示全部楼层
本帖最后由 lofky 于 2015-10-7 11:20 编辑
tkloveyang 发表于 2015-9-27 15:26
你单通道连续采样是自动触发的还是用外部触发的?像stm32f4里面能达到1us输出一个12位采样结果,28335有 ...


28335ADC是12位,“转换时钟频率是12.5MHz,采样速率是6.25MSPS”。。应该是0.16us输出一个12位采样结果
上述程序有错,具体问题还没找出来,改了例程,4通道,一通道采样正弦波,还比较精确。。还没用熟

出0入4汤圆

发表于 2015-10-7 19:55:21 来自手机 | 显示全部楼层
tkloveyang 发表于 2015-9-27 15:26
你单通道连续采样是自动触发的还是用外部触发的?像stm32f4里面能达到1us输出一个12位采样结果,28335有 ...

F407最快做到7.2M采样,F28335最快12M多点,精度大家都是12位的,DSP还是快很多的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 20:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表