打印
[研电赛技术支持]

GD32的DMA+ADC应用之二维数组转不动

[复制链接]
134|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Drencin|  楼主 | 2024-12-27 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#每日话题#
用GD32F103RC做一个ADC(5 channels)+DMA应用,当数据目的地址为二维数组时,无论怎么搞都会无法达到目的,详情如下:
uint16_t AD_buff[5][10];  //设置5个数组对应5个ADC通道,每个数组含10个值
ADC0_CH0  --> AD_buff[0][]
ADC0_CH1  --> AD_buff[1][]
ADC0_CH2  --> AD_buff[2][]
ADC0_CH3  --> AD_buff[3][]
ADC0_CH4  --> AD_buff[4][]
每次只采一个通道只转换一次只传输一次,使用ADC0转换完成事件请求DMA0传输数据,做一个中断服务程序,在中断服务程序中检查到DMA0传输完成后切换下一个ADC通道和传输目的地址(可以设置两个变量例如sample_index和channel_num代替数组的x/y序号),这意味着当ADC0_CH4采集数据并转换完成后又从ADC0_CH0开始,同时二维数组进一级(举例AD_buff[4][0]切换到AD_buff[0][1])。周而复始。

问题是:DMA0只会在AD_buff[0][0] ~ AD_buff[4][0]循环,无论怎么尝试(开/关ADC0循环或开/关DMA0循环各种操作)都无法存入AD_buff[0][1] ~ AD_buff[4][9]。

郁闷了。最后取消DMA传输,只在中断服务程序是直接从ADC0存入数组。任务方面虽然完成了,但ADC+DMA存二维数组这种问题到处都没找到应用实例,望高手们尝试一下,看看到底什么原因。


使用特权

评论回复
沙发
Amazingxixixi| | 2024-12-27 11:10 | 只看该作者
可以二维转换为一维数组

使用特权

评论回复
板凳
Amazingxixixi| | 2024-12-27 11:10 | 只看该作者
可以二维转换为一维数组

使用特权

评论回复
地板
Drencin|  楼主 | 2024-12-27 13:45 | 只看该作者
当5个通道对应不同的物理量时,一维数组在利用时仍然需要重新分组处理,增加代码量。如果仅着眼于数据获得,甚至都不必用到DMA(前面已提到最终应用时已经放弃了DMA改用ADC中断直接存数组)。我只是想知道为什么二维数组DMA处理不了。

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝