#每日话题#
用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存二维数组这种问题到处都没找到应用实例,望高手们尝试一下,看看到底什么原因。
|