c20160526 发表于 2024-8-30 06:55:23

32G12K128 DMA ADC 问题请教

问题是这样的,用的dma adc 功能可以采集,但只能采集到一路,
它并没有切换采集下一通道,我本来是想采集完一路,
切换下一路,然后再采集,
最后发现我这样写dma根本没切换
要把需要采集的通道一一写出来,然后再动用DMA
我是这样写的,看看为什么它没切换





问题是,只采集到了ma.
下面两路没切换采集,我这样理解不对吗

DebugLab 发表于 2024-8-30 09:08:49

#define                ADC_CH                3                        // 1~16, ADC转换通道数, 需同步修改 DMA_ADC_CHSW 转换通道
#define                ADC_NUM                256                        // 每个通道ADC转换次数, 需同步修改DMA_ADC_CFG2 转换次数
unsigned char xdata DMA_Buffer _at_ DMA_ADDR;

        DMA_ADC_RXAH=(unsigned char)(DMA_ADDR>>8);        //ADC转换数据存储地址
        DMA_ADC_RXAL=(unsigned char)DMA_ADDR;
        DMA_ADC_CFG2=0x0F;                                                        //每个通道ADC转换次数:256
        DMA_ADC_CHSW0=0x07;                                                        //ADC通道使能寄存器 ADC7~ADC0
        DMA_ADC_CHSW1=0x00;                                                        //ADC通道使能寄存器 ADC15~ADC8
void DMA_ADC_Isr(void) interrupt 13        //重映射中断向量
{
        DMA_ADC_STA=0;
        Dma_Flag=1;

}

c20160526 发表于 2024-8-30 11:04:19

DebugLab 发表于 2024-8-30 09:08
#define                ADC_CH                3                        // 1~16, ADC转换通道数, 需同步修改 DMA_ADC_CHSW 转换通道
#define                ADC_NUM                256       ...

你这也就是DMA的初始化和中断嘛,我没贴出来,我的问题是,采集没问题,如果采集多路,就要把多通道一起写出来,而不像其他写一个采集函数,然后想采集哪路,就调用采集函数

DebugLab 发表于 2024-8-30 11:11:15

c20160526 发表于 2024-8-30 11:04
你这也就是DMA的初始化和中断嘛,我没贴出来,我的问题是,采集没问题,如果采集多路,就要把多通道一起 ...

是的,主要是配置DMA_ADC_CHSW0和DMA_ADC_CHSW1,然后DMA会按顺序存指定地址

c20160526 发表于 2024-8-30 15:39:01

DebugLab 发表于 2024-8-30 11:11
是的,主要是配置DMA_ADC_CHSW0和DMA_ADC_CHSW1,然后DMA会按顺序存指定地址

嗯嗯,难道DMA采集不能采集一路完后,再切换采集下一路,如果想采集那些路就必须全部写上,然后启动Dma

DebugLab 发表于 2024-8-30 15:40:55

c20160526 发表于 2024-8-30 15:39
嗯嗯,难道DMA采集不能采集一路完后,再切换采集下一路,如果想采集那些路就必须全部写上,然后启动Dma ...

不用手动切换,自动的

梁工 发表于 2024-8-30 17:13:57

初始化时指定那些通道要参与DMA,启动后会自动切换通道直至按要求转换完成后,将标志置1.
页: [1]
查看完整版本: 32G12K128 DMA ADC 问题请教