This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

請教EDMA3為何全都是複製128X8大小到目標位址

我要用DMA傳一張2048X1024的圖到dstAddress

但我傳過去後,發現只有最左上角128X8的圖複製過去,其它區塊全都是複製左上角128X8大小的圖,全都重覆,

而不是複製整張2048X1024的圖, 能否幫我看一下下面我那裡設定錯了嗎? 還是我的觀念錯了? 

我看EDMA_Fill()這函式就是傳BCNT X 128 bytes, ACNT = 128, 難道不能這樣傳一張圖嗎

dataByteSize = 2048X1024

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_EN, //keep PARAM unchanged
CSL_EDMA3_SYNC_AB,
CSL_EDMA3_ADDRMODE_INCR,
CSL_EDMA3_ADDRMODE_INCR);
EDMACCRegs->PARAMSET[uiChannel].SRC= GLOBAL_ADDR(srcAddress);
EDMACCRegs->PARAMSET[uiChannel].SRC_DST_BIDX= CSL_EDMA3_BIDX_MAKE(0, 128);
EDMACCRegs->PARAMSET[uiChannel].LINK_BCNTRLD= CSL_EDMA3_LINKBCNTRLD_MAKE(0xFFFF, 0);
EDMACCRegs->PARAMSET[uiChannel].SRC_DST_CIDX= 0;
EDMACCRegs->PARAMSET[uiChannel].CCNT= 1;

while(dataByteSize) //the reminding must be multiple of 128 bytes
{
uiBCNT= dataByteSize/128;
if(uiBCNT>65535)
uiBCNT= 65535;

EDMACCRegs->PARAMSET[uiChannel].A_B_CNT= CSL_EDMA3_CNT_MAKE(128, uiBCNT);
EDMACCRegs->PARAMSET[uiChannel].DST= GLOBAL_ADDR(dstAddress);

//Manually trigger the EDMA//
(*TPCC_ESR)= 1<<(uiChannelShift);

//wait for completion//
while(0==((*TPCC_IPR)&(1<<(uiChannelShift))));

//clear completion flag//
(*TPCC_ICR)= 1<<(uiChannelShift);

dataByteSize -= uiBCNT*128;
dstAddress += uiBCNT*128;
}