28335中ADC_DMA通道配置问题求助

2019-07-21 16:58发布

  在关于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部分手册,实在是看不懂了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
拉克丝
1楼-- · 2019-07-21 22:42
看这个三个函数的定义写了哪些位,然后对照器件手册中特定位含义的说明,就明白了函数的参数代表什么了:每个参数有注释的:

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;
}
Snow7
2楼-- · 2019-07-22 04:28
 精彩回答 2  元偷偷看……
米尔豪斯
3楼-- · 2019-07-22 08:53
DMACH1WrapConfig子函数中的数值是根据什么定出来的呢?
gygp
4楼-- · 2019-07-22 12:27
DMA直接设置地址吧
gygp
5楼-- · 2019-07-22 17:59
设定初始地址直接读取就行了。

一周热门 更多>