在关于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部分手册,实在是看不懂了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
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;
}
一周热门 更多>