Ejemplo n.º 1
0
Archivo: main.c Proyecto: dlugaz/All
//*****************************************************************************
//
//! Start a DMA transfer and wait for it to finish.
//!
//! This function will perform the steps necessary to initiate a DMA transfer
//! It waits until the transfer is complete before returning to the caller.
//!
//! \param ulChannel DMA Channel
//!
//! \return Zero if there is no error 
//
//*****************************************************************************
unsigned long
StartAndCompleteSWTransfer(unsigned long ulChannel)
{
    unsigned long ulIdx;
    //
    // Clear interrupt status
    //
    MAP_uDMAIntClear(0xffffffff);
    MAP_uDMAChannelRequest(ulChannel);
    //
    // Wait for the mode to change to stopped
    //
    ulIdx = 0;
    while(MAP_uDMAChannelModeGet(ulChannel) != UDMA_MODE_STOP)
    {
        ulIdx++;
        if(ulIdx > 200000)
        {
            break;
        }
    }
    if(MAP_uDMAChannelIsEnabled(ulChannel))
    {
        UART_PRINT("Error, channel was enabled at end of transfer\n");
        return 1;
    }
    UART_PRINT("Transfer complete \n\r");
    return(0);
}
Ejemplo n.º 2
0
//*****************************************************************************
//
//! Start the DMA SW transfer
//!
//! \param None
//!
//! This function
//!        1. Starts the SW controlled uDMA transfer
//!
//! \return None.
//
//*****************************************************************************
void UDMAStartTransfer(unsigned long ulChannel)
{
    //
    // Request for channel transfer
    //
    MAP_uDMAChannelRequest(ulChannel);
}
Ejemplo n.º 3
0
Archivo: main.c Proyecto: dlugaz/All
//*****************************************************************************
//!
//! Initialize Scatter Gather DMA Transfer
//!
//! \param None
//! 
//! \return None
//!
//*****************************************************************************
void
InitSGTransfer()
{
    int i;
    char * pvSrcBuf,*pvDstBuf;
    
    //
    // Source Buffer
    //
    pvSrcBuf=malloc(BUFF_SIZE);
    if(pvSrcBuf == NULL)
    {
        UART_PRINT("Failed to allocate Src buffer\n\r");
        return ;
    }
    for(i=0;i<BUFF_SIZE;i++)
        *(pvSrcBuf+i)=i;

    MAP_uDMAChannelAssign(UDMA_CH0_SW);
    MAP_uDMAChannelAttributeDisable(UDMA_CH0_SW,UDMA_ATTR_ALTSELECT);
    iDone=0;

    pvDstBuf=malloc(BUFF_SIZE);
    if(pvDstBuf == NULL)
    {
        UART_PRINT("Failed to allocate Dst buffer\n\r");
        return ;
    }
    
    //
    // Call to Set Up Scatter Gather Mode Transfer
    //
    SetupSGMemTransfer(UDMA_CH0_SW,pvSrcBuf,pvSrcBuf+BUFF_SIZE/2,
                       pvDstBuf,BUFF_SIZE/2);
    MAP_uDMAChannelRequest(UDMA_CH0_SW);
    
    //
    // Checking for the Completion
    //
    while(!iDone);
    
    //
    // Checking Correctness of SG Transfer
    //
    if(memcmp(pvSrcBuf,pvDstBuf,BUFF_SIZE)==0)
        UART_PRINT("SG Mode Memory to Memory Transfer Completed \n\r\n\r");
    else
        UART_PRINT("SG Mode Memory to Memory Transfer Failed! \n\r\n\r");

    free(pvDstBuf);

}