[N32G45x]

DMA中断,ADC数据错位

[复制链接]
680|13
手机看帖
扫描二维码
随时随地手机跟帖
准备植发程序猿|  楼主 | 2022-11-10 16:44 | 显示全部楼层 |阅读模式
关闭DMA传输完成中断,需要先禁用通道使能位(CHEN),才能禁用传输完成中断使能位(TXCIE) :DMA1_CH1->CHCFG &= 0xfffe;  DMA1_CH1->CHCFG &= 0xfffd;)
打开DMA传输完成中断,需要先启用传输完成中断使能位(TXCIE),然后启用通道使能位(CHEN) :DMA1_CH1->CHCFG |= 0x0002; DMA1_CH1->CHCFG |= 0x0001;但是关闭DMA通道(CHEN)后,再启用DMA通道,获取ADC的值就会错位(获取3个通道的ADC值)
DMA中断怎样可以直接关闭,或者怎样才能不让获取的值错位。求助大佬们!!!


使用特权

评论回复
sy12138| | 2022-11-11 17:58 | 显示全部楼层
DMA得和ADC同步关掉或者开启

使用特权

评论回复
准备植发程序猿|  楼主 | 2022-11-14 09:44 | 显示全部楼层
sy12138 发表于 2022-11-11 17:58
DMA得和ADC同步关掉或者开启

试过同步使能、失能ADC软件启动和DMA通道,还是会错位

使用特权

评论回复
xch| | 2022-11-14 16:52 | 显示全部楼层
准备植发程序猿 发表于 2022-11-14 09:44
试过同步使能、失能ADC软件启动和DMA通道,还是会错位

啥叫“错位”?

使用特权

评论回复
一周一天班| | 2022-11-14 17:17 | 显示全部楼层
不要用规则采样adc,每次采样一个通道好了,时间上差不多。多通道规则有很多隐患,你这个就是其中之一。还有是通道之间串扰,采用电容被影响。dma采样的第一个通常丢弃。

使用特权

评论回复
准备植发程序猿|  楼主 | 2022-11-14 21:51 | 显示全部楼层
xch 发表于 2022-11-14 16:52
啥叫“错位”?

int a[3]={0};
第一个数据在数组第1位,第二个数据在数组的第2位,第三个数据在数组的第0位.

使用特权

评论回复
准备植发程序猿|  楼主 | 2022-11-14 21:55 | 显示全部楼层
一周一天班 发表于 2022-11-14 17:17
不要用规则采样adc,每次采样一个通道好了,时间上差不多。多通道规则有很多隐患,你这个就是其中之一。还有 ...

用DMA一直传输就不会错位,关闭后打开DMA就错位了。
关闭DMA中断一定要失能DMA通道才能关闭吗?还是这款芯片的bug.

使用特权

评论回复
一周一天班| | 2022-11-15 06:30 | 显示全部楼层
所有mcu都有这个问题

使用特权

评论回复
xch| | 2022-11-15 08:32 | 显示全部楼层
准备植发程序猿 发表于 2022-11-14 21:51
int a[3]={0};
第一个数据在数组第1位,第二个数据在数组的第2位,第三个数据在数组的第0位. ...

第一次启动ADC序列不会出问题吧?如果也出问题,应该是启动设置寄存器的顺序问题。
DMA 应当先启动。

使用特权

评论回复
qinlicn| | 2022-11-15 08:45 | 显示全部楼层
还是看一下官方的勘误手册吧。我用的L40x系列MCU,DMA搬运ADC数据就是有bug的,我现在ADC多通道已经不用DMA了。

使用特权

评论回复
一周一天班| | 2022-11-15 09:09 | 显示全部楼层
你这样使用方式,所有的MCU都会出问题。

使用特权

评论回复
sy12138| | 2022-11-18 10:13 | 显示全部楼层
按照这个操作一下
0eb85e0b86b04132f7e2c7a3dccadba.png

使用特权

评论回复
GGG3| | 2022-11-22 09:45 | 显示全部楼层
问题解决了吗

使用特权

评论回复
icdebnvfih| | 2023-2-16 10:57 | 显示全部楼层
qinlicn 发表于 2022-11-15 08:45
还是看一下官方的勘误手册吧。我用的L40x系列MCU,DMA搬运ADC数据就是有bug的,我现在ADC多通道已经不用DMA ...

大佬,这个多通道的有没有例程可以参考一下呢

使用特权

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

本版积分规则

10

主题

32

帖子

0

粉丝