打印
[STM32F4]

stm32 AD采样中DMA中断

[复制链接]
6159|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xmu_stm|  楼主 | 2014-8-14 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xmu_stm 于 2014-8-15 16:44 编辑

现在利用stm32F4进行AD采样,双AD一共10个(1~10)通道,DMA每传送完这60个数据就会中断一次(每完成6遍AD过程发生一次DMA中断),中断处理完后会继续DMA传送。
    DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_CDR_ADDR; //ADC1_CDR 地址
    DMA_InitStructure.DMA_Memory0BaseAddr = (unsigned int)ADC_Value;   //ADC_Value是一个60维数组

为了防止在DMA中断处理时AD转换的结果乱序,我想在中断函数中先停止ADC转换,当退出DMA中断时再重新启动ADC转换,像下面这样,DMA是循环模式,AD转换是连续规则转换,请各位看下问题在哪里,我这样读出来的值不对
void DMA2_Stream0_IRQHandler(void){
        int i=0;
        if(DMA_GetITStatus(DMA2_Stream0,DMA_IT_TCIF0))
        {
                  ADC_Cmd(ADC1, DISABLE);  
                  ADC_Cmd(ADC2, DISABLE);
                for(i=0;i<10;i++)
                {
                         local_size=(ADC_Value+ADC_Value[10+i]+ADC_Value[20+i]+ADC_Value[30+i]+ADC_Value[40+i]+ADC_Value[50+i])*(3.3/4096)/6;
                }
          flag_PID=1;
                 ADC_Cmd(ADC1, ENABLE);  
                 ADC_Cmd(ADC2, ENABLE);
                ADC_SoftwareStartConv(ADC1);
                DMA_ClearITPendingBit(DMA2_Stream0,DMA_IT_TCIF0);                 
        }

}
沙发
Leeone| | 2014-8-14 10:58 | 只看该作者
第二次传输前在重新初始化下DMA

使用特权

评论回复
板凳
xmu_stm|  楼主 | 2014-8-14 11:08 | 只看该作者
Leeone 发表于 2014-8-14 10:58
第二次传输前在重新初始化下DMA

如果重新初始化,我的DMA传输完中断就没意义了啊,我需要DMA不断的传输数据。 ADC1_CDR_ADDR 中的值应该是不断变化的,这个会导致数据乱序吗

使用特权

评论回复
地板
Eric2013| | 2014-8-14 11:37 | 只看该作者
采用DMA循环模式和双缓存也许能开拓下你的思路。

使用特权

评论回复
5
xmu_stm|  楼主 | 2014-8-14 13:47 | 只看该作者
Eric2013 发表于 2014-8-14 11:37
采用DMA循环模式和双缓存也许能开拓下你的思路。

有使用DMA循环模式;
ADC自己转自己的,DMA自己传自己的,这样的话内存里的数组就不是我想要的了,顺序乱了

使用特权

评论回复
6
Eric2013| | 2014-8-14 14:24 | 只看该作者
xmu_stm 发表于 2014-8-14 13:47
有使用DMA循环模式;
ADC自己转自己的,DMA自己传自己的,这样的话内存里的数组就不是我想要的了,顺序乱 ...

怎么会乱呢,不会的,保证你的数组是通道数的整数倍即可。另外注意数据被覆盖。

使用特权

评论回复
7
jar1866| | 2014-8-14 20:31 | 只看该作者
我的做法是——计时器中断中ADC_Cmd(ENABLE)后,等到DMA传输中断完成,此时关闭ADC,下次计时器中断再次开始ADC, 算好时间即可,比如10个通道采样到DMA传输完成的时间小于计时器中断即可。

使用特权

评论回复
8
xmu_stm|  楼主 | 2014-8-15 16:03 | 只看该作者
顶下,求助

使用特权

评论回复
9
xmu_stm|  楼主 | 2014-8-15 16:44 | 只看该作者
求大牛解答啊啊啊啊

使用特权

评论回复
10
蜗牛的奋斗| | 2016-2-4 10:27 | 只看该作者
不知道问题解决了没有,能否把你的这部分代码发上来学习下!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

32

帖子

0

粉丝