如下是我的操作函数,没起作用,忘大侠指点一二,QQ:1104997876
//*****************************************************************************
//void Test_SCATTER_DMA(void)
//*****************************************************************************
void Test_SCATTER_DMA(void)
{
u16 DIS[384],i,j,data[2];
tDMAControlTable MyTaskList[3];
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(ucDMAControlTable);
uDMAChannelSelectSecondary(UDMA_DEF_TMR1B_SEC_EPI0TX);
for(i=0;i<384;i++)
{
if(i<128)
{
data[0]= 0xaaaa;
data[1]= 0x5555;
}
if(i>128)
{
data[0]= 0xffff;
data[1]= 0xffff;
}
if(i>256)
{
data[0]= 0x5555;
data[1]= 0xaaaa;
}
if(i%2==0) DIS[i]=data[0];
else DIS[i]=data[1];
}
Get_DMAControTable(&MyTaskList[0],4,UDMA_SIZE_16,UDMA_SRC_INC_16,&DIS[0],UDMA_DST_INC_NONE,
(void*)0xA0000000,UDMA_ARB_8,UDMA_MODE_MEM_SCATTER_GATHER);
Get_DMAControTable(&MyTaskList[1],8,UDMA_SIZE_16,UDMA_SRC_INC_16,&DIS[128],UDMA_DST_INC_NONE,
(void*)0xA0000000,UDMA_ARB_8,UDMA_MODE_MEM_SCATTER_GATHER);
Get_DMAControTable(&MyTaskList[2],12,UDMA_SIZE_16,UDMA_SRC_INC_16,&DIS[256],UDMA_DST_INC_NONE,
(void*)0xA0000000,UDMA_ARB_8,UDMA_MODE_MEM_SCATTER_GATHER);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(ucDMAControlTable);
uDMAChannelSelectSecondary(UDMA_DEF_TMR1B_SEC_EPI0TX);
uDMAChannelAttributeDisable(UDMA_SEC_CHANNEL_EPI0TX,
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_ALTSELECT |
UDMA_ATTR_REQMASK);
/*
uDMAChannelControlSet(UDMA_SEC_CHANNEL_EPI0TX ,
UDMA_PRI_SELECT | UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_8 |
UDMA_ARB_8);
*/
uDMAChannelControlSet(UDMA_SEC_CHANNEL_EPI0TX ,
UDMA_ALT_SELECT | UDMA_SIZE_16 | UDMA_SRC_INC_16 | UDMA_DST_INC_NONE |
UDMA_ARB_8);
while(1)
{
uDMAChannelScatterGatherSet(UDMA_SEC_CHANNEL_EPI0TX,3,(void*)&MyTaskList,0);
uDMAChannelTransferSet(UDMA_SEC_CHANNEL_EPI0TX |
UDMA_PRI_SELECT , // 主结构
UDMA_MODE_MEM_SCATTER_GATHER ,
(void*)&MyTaskList[0] , // 源地址
(void*)&ucDMAControlTable[UDMA_SEC_CHANNEL_EPI0TX*0x10+0x200] ,// 目的地址
0x30);
uDMAChannelEnable(UDMA_SEC_CHANNEL_EPI0TX);
while(uDMAChannelModeGet(UDMA_SEC_CHANNEL_EPI0TX)!=UDMA_MODE_STOP)
{
WDR();
}
}
} |