Beispiel #1
0
Datei: main.c Projekt: dlugaz/All
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],