void EDMA_copy(unsigned int srcAddr, unsigned int dstAddr,
unsigned int byteCount, EDMA_CC_Channel_Num CC_channel, DMA_Wait wait)
{
CSL_TpccRegs* EDMACCRegs;
unsigned int uiChannel;
volatile Uint32 * TPCC_ESR;
volatile Uint32 * TPCC_IPR;
volatile Uint32 * TPCC_ICR;
EDMACCRegs= gpEDMA_CC_regs[CC_channel>>16];
uiChannel = CC_channel&0xFF;
EDMACCRegs->PARAMSET[uiChannel].OPT=
CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS,
CSL_EDMA3_TCCH_DIS,
CSL_EDMA3_ITCINT_DIS,
CSL_EDMA3_TCINT_EN,
uiChannel,
CSL_EDMA3_TCC_NORMAL,
CSL_EDMA3_FIFOWIDTH_NONE,
CSL_EDMA3_STATIC_DIS,
CSL_EDMA3_SYNC_A,
CSL_EDMA3_ADDRMODE_INCR,
CSL_EDMA3_ADDRMODE_INCR);
EDMACCRegs->PARAMSET[uiChannel].SRC= GLOBAL_ADDR(srcAddr);
EDMACCRegs->PARAMSET[uiChannel].A_B_CNT= (2<<16)|(byteCount&0xFFFF);
EDMACCRegs->PARAMSET[uiChannel].DST= GLOBAL_ADDR(dstAddr);
EDMACCRegs->PARAMSET[uiChannel].SRC_DST_BIDX= 0;
EDMACCRegs->PARAMSET[uiChannel].LINK_BCNTRLD= 0xFFFF;
EDMACCRegs->PARAMSET[uiChannel].SRC_DST_CIDX= 0;
EDMACCRegs->PARAMSET[uiChannel].CCNT= 1;
if(uiChannel<32)
{
TPCC_ESR= &EDMACCRegs->TPCC_ESR;
TPCC_IPR= &EDMACCRegs->TPCC_IPR;
TPCC_ICR= &EDMACCRegs->TPCC_ICR;
}
else
{
TPCC_ESR= &EDMACCRegs->TPCC_ESRH;
TPCC_IPR= &EDMACCRegs->TPCC_IPRH;
TPCC_ICR= &EDMACCRegs->TPCC_ICRH;
uiChannel -= 32;
}
/*Manually trigger the EDMA*/
(*TPCC_ESR)= 1<<(uiChannel);
if(wait)
{
/*wait for completion*/
while(0==((*TPCC_IPR)&(1<<(uiChannel))));
/*clear completion flag*/
(*TPCC_ICR)= 1<<(uiChannel);
}
}