[STM32F4] stm32 AD采样中DMA中断

[复制链接]
6733|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循环模式和双缓存也许能开拓下你的思路。
 楼主| xmu_stm 发表于 2014-8-14 13:47 | 显示全部楼层
Eric2013 发表于 2014-8-14 11:37
采用DMA循环模式和双缓存也许能开拓下你的思路。

有使用DMA循环模式;
ADC自己转自己的,DMA自己传自己的,这样的话内存里的数组就不是我想要的了,顺序乱了
Eric2013 发表于 2014-8-14 14:24 | 显示全部楼层
xmu_stm 发表于 2014-8-14 13:47
有使用DMA循环模式;
ADC自己转自己的,DMA自己传自己的,这样的话内存里的数组就不是我想要的了,顺序乱 ...

怎么会乱呢,不会的,保证你的数组是通道数的整数倍即可。另外注意数据被覆盖。
jar1866 发表于 2014-8-14 20:31 | 显示全部楼层
我的做法是——计时器中断中ADC_Cmd(ENABLE)后,等到DMA传输中断完成,此时关闭ADC,下次计时器中断再次开始ADC, 算好时间即可,比如10个通道采样到DMA传输完成的时间小于计时器中断即可。
 楼主| xmu_stm 发表于 2014-8-15 16:03 | 显示全部楼层
顶下,求助
 楼主| xmu_stm 发表于 2014-8-15 16:44 | 显示全部楼层
求大牛解答啊啊啊啊
蜗牛的奋斗 发表于 2016-2-4 10:27 | 显示全部楼层
不知道问题解决了没有,能否把你的这部分代码发上来学习下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部