各位好,
我就是进行了一下EDMA的搬移测试,我调用的Keystone_Common.c里面的EDMA3的初始化函数进行初始化,EDMA_Init();
之后我用Keystone_Common.c里面的EDMA_copy()函数进行数据搬移,是能正常搬移的,但是因为这个函数就是用A-同步模式,里面的参数设置是只支持搬移连续地址上的数据,就是BCNT和CCNT都为1,ACNT就设置为要搬移的个数。原本的配置是如下:
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= (1<<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;
因此我的数据搬移需求所以改动了一下里面的设置,就是把改了一下ACNT的值和BCNT的值和BIDX以及CIDX改动了一下,如下:
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= ((byteCount/2)&0xFFFF<<16)|(2&0xFFFF);
EDMACCRegs->PARAMSET[uiChannel].DST= GLOBAL_ADDR(dstAddr);
EDMACCRegs->PARAMSET[uiChannel].SRC_DST_BIDX= 0x00020002;//0;
EDMACCRegs->PARAMSET[uiChannel].LINK_BCNTRLD= 0x0000FFFF;
EDMACCRegs->PARAMSET[uiChannel].SRC_DST_CIDX= 0x00020002;
EDMACCRegs->PARAMSET[uiChannel].CCNT= 1;
之后数据搬移就不能成功了,就一直卡在while(0==((*TPCC_IPR)&(1<<(uiChannel))));这个地方,就是没有搬移完成,可以从内存中看到只搬移了一个ACNT大小的数据,我想知道这是为什么?是我还需要进行一些什么其他的配置嘛?
非常希望各位能提供一下帮助,感谢。