这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 28335中ADC_DMA通道配置问题求助

共5条 1/1 1 跳转至

28335中ADC_DMA通道配置问题求助

菜鸟
2014-03-24 21:22:34     打赏

在关于DMA通道配置其中一个例程为:(注释自己加的,不知道对不,问题也在其中了)

DMACH1BurstConfig(15,1,10);  //每次burst传送的word个数为15,每次burst后源地址偏移1,目标地址偏移10

 
DMACH1TransferConfig(9,-15,(-150 + 1)); //一次传送中burst次数为9,后面两个怎么解释?为什么这样设置?
DMACH1WrapConfig(100,100,100,100);  //这个不是设置返回地址相关的额吗?为什么都设置为100?

后来又看了一个历程设置为:

DMACH1BurstConfig(3,1,10); //每次burst传送word个数为3,每次burst后源地址偏移1,目标地址偏移10
DMACH1TransferConfig(9,1,0);//一次传送中burst次数为9,完成一次burst后源地址偏移量(和上面的1有什么区别?),最后目标地址偏移为什么是0?
DMACH1WrapConfig(1,0,0,1); //为什么这次是这样设置返回地址的值?有什么限制吗?


拜托各位牛人帮忙了,小弟看了一天的DMA部分手册,实在是看不懂了。。。




关键词: 28335     DMA    

高工
2014-03-24 22:22:05     打赏
2楼

看这个三个函数的定义写了哪些位,然后对照器件手册中特定位含义的说明,就明白了函数的参数代表什么了:每个参数有注释的:


void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep)

{

         EALLOW;

         // Set up BURST registers:

         DmaRegs.CH1.BURST_SIZE.all = bsize;                        // Number of words(X-1) x-ferred in a burst

         DmaRegs.CH1.SRC_BURST_STEP = srcbstep;                               // Increment source addr between each word x-ferred

         DmaRegs.CH1.DST_BURST_STEP = desbstep;              // Increment dest addr between each word x-ferred

         EDIS;

}

void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep)

{

         EALLOW;

         // Set up WRAP registers:

         DmaRegs.CH1.SRC_WRAP_SIZE = srcwsize;                             // Wrap source address after N bursts

      DmaRegs.CH1.SRC_WRAP_STEP = srcwstep;                               // Step for source wrap

         DmaRegs.CH1.DST_WRAP_SIZE = deswsize;                             // Wrap destination address after N bursts

         DmaRegs.CH1.DST_WRAP_STEP = deswstep;                                     // Step for destination wrap

         EDIS;

}

void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep)

{

         EALLOW;

         // Set up TRANSFER registers:

         DmaRegs.CH1.TRANSFER_SIZE = tsize;  // Number of bursts per transfer, DMA interrupt will occur after completed transfer

         DmaRegs.CH1.SRC_TRANSFER_STEP = srctstep;                      // TRANSFER_STEP is ignored when WRAP occurs

         DmaRegs.CH1.DST_TRANSFER_STEP = deststep;                     // TRANSFER_STEP is ignored when WRAP occurs

         EDIS;

}



但是DMACH1TransferConfig(9,-15,(-150 + 1)); //一次传送中burst次数为9,后面两个怎么解释?为什么这样设置?

这个里面为负数的两个参数,代表指针增加/减小的步长,器件手册上用的十六进制有符号,例如0xF0000表示将地址减小4096.这里用负数赋值更容易理解


菜鸟
2014-03-25 00:39:09     打赏
3楼
注释还是理解不好。。。这个貌似就是《TMS320F2833x DSP应用开发与实践》给的的例程

1、就是说DMACH1TransferConfig(9,1,0); //一次传送中burst次数不是9而是10了对吗?后面的1指的是两次brust之间源地址的偏移量,但是最后一个目标地址偏移为什么设置为0?还是不太懂。。。

2、DMACH1WrapConfig(1,0,0,1);//这个还是不明白。按照程序中的数值关系,Wrap source address 为1,但是后面的Wrap destination address成0了,这样的目的是什么?

3、DMACH1WrapConfig子函数中的数值是根据什么定出来的


高工
2014-03-25 09:09:55     打赏
4楼
void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) Bsize: 每一个脉冲传递的字的个数,实际脉冲数为bsize+1 Srcbstep:每传递一个字后,源地址A增量 Desbstep:每传递一个字后,目的地址A增量 void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep) Tsize:每一帧的脉冲个数,脉冲递减到0时(即一帧传递完成,也是DMA传递完成),产生DMA中断。实际帧数为tsize+1 Srctstep:每个脉冲的最后一个字传递结束后,源地址A增量 Deststep:每个脉冲的最后一个字传递结束后,目的地址A增量 void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep) Srcwsize:当已经传递的脉冲数为srcwsize+1的整数倍时,源地址(B)增加srcwstep(常为0),并装载入源地址A Deswsize:当已经传递的脉冲数为deswsize+1的整数倍时,目的地址(B)增加deswstep(常为0),并装载入目的地址A

菜鸟
2014-03-25 23:05:48     打赏
5楼
恩,谢谢啦!看了好几个程序的相关设置,不过还是觉得应该是DMACH1WrapConfig(1,0,1,0);合适点。另外今天明白了DMACH1WrapConfig(100,100,100,100);这样设置相当于不用Wrap功能了。DMACH1TransferConfig(9,1,0)中的transfer_size的大小是和burst_size相配合设定出来的。

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]