最近在学习28335,其中dma 的寄存器配置一直不大明白,希望有朋友能解答下:
利用DMA传输adc 的数据时
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) // bsize代表每一帧需要转换的通道数, srcbstep代表每传输一个通道后源地址增加数,desbstep代表每传输一个通道后目标地址增加数
void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep)// tsize代表需要传输的帧数(16个通道轮流传输完算一次,总共需要传输的次数)。后面2个变量不懂
void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep) // 前面srcwsize为≥0整数时 当已经传递的脉冲数为srcwsize+1的整数倍时,上一帧的源地址+1作为这一次的源地址
当已经传递的脉冲数为deswsize+1的整数倍时,上一帧的目标地址+1作为这一次的源地址
不知道我的注释理解有没有问题,如果总共有16通道的ADC数据,每个通道采集BUF_SIZE个点(也就是采集BUF_SIZE次)那么如下配置对吗?每次传输16通道的数据,共传输BUF_SIZE次,但是,每次传输,是怎么控制DMA传输的呢?
DMACH1BurstConfig(15,1,BUF_SIZE);
DMACH1TransferConfig(BUF_SIZE-1,0,1); DMACH1WrapConfig(0,0,0,1); //Don't use wrap function
yq k:
凡高
最近在学习28335,其中dma 的寄存器配置一直不大明白,希望有朋友能解答下:
利用DMA传输adc 的数据时
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) // bsize代表每一帧需要转换的通道数, srcbstep代表每传输一个通道后源地址增加数,desbstep代表每传输一个通道后目标地址增加数
void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep)// tsize代表需要传输的帧数(16个通道轮流传输完算一次,总共需要传输的次数)。后面2个变量不懂
void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep) // 前面srcwsize为≥0整数时 当已经传递的脉冲数为srcwsize+1的整数倍时,上一帧的源地址+1作为这一次的源地址
当已经传递的脉冲数为deswsize+1的整数倍时,上一帧的目标地址+1作为这一次的源地址
不知道我的注释理解有没有问题,如果总共有16通道的ADC数据,每个通道采集BUF_SIZE个点(也就是采集BUF_SIZE次)那么如下配置对吗?每次传输16通道的数据,共传输BUF_SIZE次,但是,每次传输,是怎么控制DMA传输的呢?
DMACH1BurstConfig(15,1,BUF_SIZE); DMACH1TransferConfig(BUF_SIZE-1,0,1); DMACH1WrapConfig(0,0,0,1); //Don't use wrap function
最近在学习28335,其中dma 的寄存器配置一直不大明白,希望有朋友能解答下:
利用DMA传输adc 的数据时
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) // bsize代表每一帧需要转换的通道数, srcbstep代表每传输一个通道后源地址增加数,desbstep代表每传输一个通道后目标地址增加数
void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep)// tsize代表需要传输的帧数(16个通道轮流传输完算一次,总共需要传输的次数)。后面2个变量不懂
void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep) // 前面srcwsize为≥0整数时 当已经传递的脉冲数为srcwsize+1的整数倍时,上一帧的源地址+1作为这一次的源地址
当已经传递的脉冲数为deswsize+1的整数倍时,上一帧的目标地址+1作为这一次的源地址
不知道我的注释理解有没有问题,如果总共有16通道的ADC数据,每个通道采集BUF_SIZE个点(也就是采集BUF_SIZE次)那么如下配置对吗?每次传输16通道的数据,共传输BUF_SIZE次,但是,每次传输,是怎么控制DMA传输的呢?
DMACH1BurstConfig(15,1,BUF_SIZE);
DMACH1TransferConfig(BUF_SIZE-1,0,1); DMACH1WrapConfig(0,0,0,1); //Don't use wrap function
BIN YAO1:
DMACH1BurstConfig(15,1,1);
DMACH1TransferConfig(BUF_SIZE-1,0,1);
DMACH1WrapConfig(65535,0,65535,0);
这样配置出来的结果是:1,2,3,4,5……15,16,1,2,3,4,5……15,16,1,2,3……共BUF_SIZE个循环
DMACH1BurstConfig(15,1,BUF_SIZE);
DMACH1TransferConfig(BUF_SIZE-1,0,0);
DMACH1WrapConfig(65535,0,0,1);
这样配置出来的结果是:1,1,1,1,1……2,2,2,2,2……3,3,3,3,3……………………16,16,16,16
前一种是我个人使用的方式,后一种是我按照寄存器说明理解的方式
最近在学习28335,其中dma 的寄存器配置一直不大明白,希望有朋友能解答下:
利用DMA传输adc 的数据时
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) // bsize代表每一帧需要转换的通道数, srcbstep代表每传输一个通道后源地址增加数,desbstep代表每传输一个通道后目标地址增加数
void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep)// tsize代表需要传输的帧数(16个通道轮流传输完算一次,总共需要传输的次数)。后面2个变量不懂
void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep) // 前面srcwsize为≥0整数时 当已经传递的脉冲数为srcwsize+1的整数倍时,上一帧的源地址+1作为这一次的源地址
当已经传递的脉冲数为deswsize+1的整数倍时,上一帧的目标地址+1作为这一次的源地址
不知道我的注释理解有没有问题,如果总共有16通道的ADC数据,每个通道采集BUF_SIZE个点(也就是采集BUF_SIZE次)那么如下配置对吗?每次传输16通道的数据,共传输BUF_SIZE次,但是,每次传输,是怎么控制DMA传输的呢?
DMACH1BurstConfig(15,1,BUF_SIZE);
DMACH1TransferConfig(BUF_SIZE-1,0,1); DMACH1WrapConfig(0,0,0,1); //Don't use wrap function
凡高:
回复 BIN YAO1:
你好,我的方式和你第二种方式主要区别在 DMACH1TransferConfig(BUF_SIZE-1,0,0); 最后一个参数 我是1,你这是0,这个数据具体什么意思能说下嘛?
DMACH1WrapConfig(65535,0,0,1); 第一个我觉得65535 和0 没啥区别,不知道是否这样
另外 这三个寄存器配置能讲解下吗?你的方式 的配置方式不是很明白、
最近在学习28335,其中dma 的寄存器配置一直不大明白,希望有朋友能解答下:
利用DMA传输adc 的数据时
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) // bsize代表每一帧需要转换的通道数, srcbstep代表每传输一个通道后源地址增加数,desbstep代表每传输一个通道后目标地址增加数
void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep)// tsize代表需要传输的帧数(16个通道轮流传输完算一次,总共需要传输的次数)。后面2个变量不懂
void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep) // 前面srcwsize为≥0整数时 当已经传递的脉冲数为srcwsize+1的整数倍时,上一帧的源地址+1作为这一次的源地址
当已经传递的脉冲数为deswsize+1的整数倍时,上一帧的目标地址+1作为这一次的源地址
不知道我的注释理解有没有问题,如果总共有16通道的ADC数据,每个通道采集BUF_SIZE个点(也就是采集BUF_SIZE次)那么如下配置对吗?每次传输16通道的数据,共传输BUF_SIZE次,但是,每次传输,是怎么控制DMA传输的呢?
DMACH1BurstConfig(15,1,BUF_SIZE);
DMACH1TransferConfig(BUF_SIZE-1,0,1); DMACH1WrapConfig(0,0,0,1); //Don't use wrap function
凡高:
回复 yq k:
不大明白 你的理解,DMACH1BurstConfig(BUF_SIZE-1,0,1); BUF_SIZE应该是每个AD通道采集的点数吧,所以是不是应该放最后一个参数
最近在学习28335,其中dma 的寄存器配置一直不大明白,希望有朋友能解答下:
利用DMA传输adc 的数据时
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) // bsize代表每一帧需要转换的通道数, srcbstep代表每传输一个通道后源地址增加数,desbstep代表每传输一个通道后目标地址增加数
void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep)// tsize代表需要传输的帧数(16个通道轮流传输完算一次,总共需要传输的次数)。后面2个变量不懂
void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep) // 前面srcwsize为≥0整数时 当已经传递的脉冲数为srcwsize+1的整数倍时,上一帧的源地址+1作为这一次的源地址
当已经传递的脉冲数为deswsize+1的整数倍时,上一帧的目标地址+1作为这一次的源地址
不知道我的注释理解有没有问题,如果总共有16通道的ADC数据,每个通道采集BUF_SIZE个点(也就是采集BUF_SIZE次)那么如下配置对吗?每次传输16通道的数据,共传输BUF_SIZE次,但是,每次传输,是怎么控制DMA传输的呢?
DMACH1BurstConfig(15,1,BUF_SIZE);
DMACH1TransferConfig(BUF_SIZE-1,0,1); DMACH1WrapConfig(0,0,0,1); //Don't use wrap function
凡高:
我用下面的配置
DMACH1BurstConfig(15,1,BUF_SIZE); DMACH1TransferConfig(BUF_SIZE-1,0,0); DMACH1WrapConfig(0,0,0,1); //Don't use wrap function
发现效果是一样的。。。不明白啥意思