static void SetupSGMemTransfer(unsigned long ulChannel,void *pvSrcBuf0, void *pvSrcBuf1,void *pvDstBuf,unsigned long size) { // // Create task0 // tDMAControlTable task0=uDMATaskStructEntry(size, UDMA_SIZE_8, UDMA_SRC_INC_8, pvSrcBuf0, UDMA_DST_INC_8,pvDstBuf, UDMA_ARB_8, UDMA_MODE_MEM_SCATTER_GATHER); // // create task1 // tDMAControlTable task1=uDMATaskStructEntry(size, UDMA_SIZE_8, UDMA_SRC_INC_8, pvSrcBuf1, UDMA_DST_INC_8, (char *)pvDstBuf+size, UDMA_ARB_8, UDMA_MODE_AUTO); // // Copy to TaskList // memcpy(&TaskList[0],&task0,sizeof(tDMAControlTable)); memcpy(&TaskList[1],&task1,sizeof(tDMAControlTable)); memset(pvDstBuf,0,size); // // Setup Scatter Gather with two tasks // MAP_uDMAChannelScatterGatherSet(ulChannel, 2,TaskList,0); MAP_uDMAChannelEnable(ulChannel); }
// fragment buffers. These are memory to memory operations, but using the // peripheral channel. // // Task 4-6: each copy one of the fragment buffers to the UART using peripheral // scatter-gather transfer. // // For all the tasks, the data size and increment sizes are 8-bits. // //***************************************************************************** tDMAControlTable g_TaskTableSrc[] = { // // Task 1: copy source buffer fragment 1 // uDMATaskStructEntry(sizeof(g_ucSrcBuf1), UDMA_SIZE_8, UDMA_SRC_INC_8, &g_ucSrcBuf[SRC_IDX_1], UDMA_DST_INC_8, g_ucSrcBuf1, UDMA_ARB_8, UDMA_MODE_PER_SCATTER_GATHER), // // Task 2: copy source buffer fragment 2 // uDMATaskStructEntry(sizeof(g_ucSrcBuf2), UDMA_SIZE_8, UDMA_SRC_INC_8, &g_ucSrcBuf[SRC_IDX_2], UDMA_DST_INC_8, g_ucSrcBuf2, UDMA_ARB_8, UDMA_MODE_PER_SCATTER_GATHER), // // Task 3: copy source buffer fragment 3 // uDMATaskStructEntry(sizeof(g_ucSrcBuf3), UDMA_SIZE_8, UDMA_SRC_INC_8, &g_ucSrcBuf[SRC_IDX_3],