hallo every one!
i am having some trouble with my EDMA3.
i am trying to copy a block of data. when i set the destination field to a pre-define buffer it works well (the SRC data is copied to DST), but when i set DST to be an address that points to another PaRam set the IPR reg is set properly but i dont see the data transfer. i work with the global register (not the shadow).
this is my code:
//----------------set PaRam A---------------------------------------------------------
//OptBit is a pointer to Param OPT field
OptBit = &(PaRam[PaRam_A].OptUnion.OptBitStruct);
//set the OPT table
OptBit->RESERVED_1 = 0;
OptBit->ITCCHEN = 0;
//If final transfer completion chaining (TCCHEN = 1 in OPT) is enabled, the chain-triggered
//event occurs after the submission of the last transfer request of channel m is either
//submitted or completed (depending on early or normal completion).
OptBit->TCCHEN = 0;//Transfer complete chaining is enabled
OptBit->ITCINTEN = 0;
OptBit->TCINTEN = 1;
OptBit->RESERVED_2 = 0;
OptBit->RESERVED_3 = 0;
OptBit->TCC = PaRam_B;
OptBit->TCCMODE = 0;
OptBit->FWID = 0;
OptBit->RESERVED_4 = 0;
OptBit->STATIC = 1;/*if STATIC=0 then linking will accure*/
OptBit->SYNCDIM = 0;
OptBit->DAM = 0;
OptBit->SAM = 0;
PaRam[PaRam_A].Src = (UINT32*)(&FPGA_PaRam);//in L2
PaRam[PaRam_A].Acnt = PARAM_STRUCT_SIZE_IN_BYTES;//number of bytes(elements)
PaRam[PaRam_A].Bcnt = 1;//number of ACNT, hsa to be >= 1
address = (UINT32*)(ParamBaseAdd+((sizeof(PaRam)<<1)*(PaRam_B))+4);
PaRam[PaRam_A].Dst = (UINT32*)address;//(UINT32*)&(PaRam[PaRam_B].OptUnion.OptBitStruct);
PaRam[PaRam_A].SrcBidx = 0;
PaRam[PaRam_A].DstBidx = 0;
PaRam[PaRam_A].Link = 0xffff;
//PaRAM-base-relative value is 0000h to 3FFFh.
PaRam[PaRam_A].BcntRld = 0;
PaRam[PaRam_A].SrcCidx = 0;
PaRam[PaRam_A].DstCidx = 0;
PaRam[PaRam_A].Ccnt = 1;
MemoryRegsMap->ESR |= (1<<PaRam_A);
thanks to all !!