TI中文支持网
TI专业的中文技术问题搜集分享网站

28335 DMA寄存器配置问题

最近在学习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

发现效果是一样的。。。不明白啥意思

赞(0)
未经允许不得转载:TI中文支持网 » 28335 DMA寄存器配置问题
分享到: 更多 (0)