#define N (512) /*** functions ***/ void systemInit(); //volatile:指明变量是易变的,每次使用都要从他的地址取数 CSL_CPINTC_RegsOvly gCPIntc0Registers = (CSL_CPINTC_RegsOvly)CSL_CP_INTC_0_REGS; #pragma DATA_SECTION(srcbuf, ".srcbuf") #pragma DATA_ALIGN(srcbuf, 8) unsigned int srcbuf[N]; #pragma DATA_SECTION(combuf, ".combuf") #pragma DATA_ALIGN(combuf, 8) unsigned int combuf[N]; void systemInit() { // KeyStone_main_PLL_init(100, 10,1); // 100x10/1=1000MHz // // KeyStone_DDR_init(66.66667, 20, 1, NULL); // 66.667x20/1=1333Mhz // EDMA_init(); TSCInit(); InitMainPLL(); // 100x10/1=1000MHz InitDDR3_667M(); edma_Init(); } void edma_Init () { int i; unsigned int * uipPaRAM; /*clear PaRAM*/ uipPaRAM= (unsigned int *)&(gEDMACC0Regs->PARAMSET[0]); for(i=0; i<8*CSL_EDMA3_TPCC0_NUM_PARAMSETS; i++) *uipPaRAM++=0; uipPaRAM= (unsigned int *)&(gEDMACC1Regs->PARAMSET[0]); for(i=0; i<8*CSL_EDMA3_TPCC1_NUM_PARAMSETS; i++) *uipPaRAM++=0; uipPaRAM= (unsigned int *)&(gEDMACC2Regs->PARAMSET[0]); for(i=0; i<8*CSL_EDMA3_TPCC2_NUM_PARAMSETS; i++) *uipPaRAM++=0; /*Assign PaRAM for different channels*/ for(i=0; iTPCC_DCHMAP[i] = i<< CSL_TPCC_TPCC_DCHMAP0_PAENTRY_SHIFT; for(i=0; iTPCC_DCHMAP[i] = i<< CSL_TPCC_TPCC_DCHMAP0_PAENTRY_SHIFT; for(i=0; iTPCC_DCHMAP[i] = i<< CSL_TPCC_TPCC_DCHMAP0_PAENTRY_SHIFT; /*Assign TC/Queue for different channels*/ gEDMACC0Regs->TPCC_DMAQNUM[0]= 0x10101010; gEDMACC0Regs->TPCC_DMAQNUM[1]= 0x10101010; gEDMACC1Regs->TPCC_DMAQNUM[0]= 0x32103210; gEDMACC1Regs->TPCC_DMAQNUM[1]= 0x32103210; gEDMACC1Regs->TPCC_DMAQNUM[2]= 0x32103210; gEDMACC1Regs->TPCC_DMAQNUM[3]= 0x32103210; gEDMACC1Regs->TPCC_DMAQNUM[4]= 0x32103210; gEDMACC1Regs->TPCC_DMAQNUM[5]= 0x32103210; gEDMACC1Regs->TPCC_DMAQNUM[6]= 0x32103210; gEDMACC1Regs->TPCC_DMAQNUM[7]= 0x32103210; gEDMACC2Regs->TPCC_DMAQNUM[0]= 0x32103210; gEDMACC2Regs->TPCC_DMAQNUM[1]= 0x32103210; gEDMACC2Regs->TPCC_DMAQNUM[2]= 0x32103210; gEDMACC2Regs->TPCC_DMAQNUM[3]= 0x32103210; gEDMACC2Regs->TPCC_DMAQNUM[4]= 0x32103210; gEDMACC2Regs->TPCC_DMAQNUM[5]= 0x32103210; gEDMACC2Regs->TPCC_DMAQNUM[6]= 0x32103210; gEDMACC2Regs->TPCC_DMAQNUM[7]= 0x32103210; /*clear any events and status*/ gEDMACC0Regs->TPCC_ECR= 0xFFFFFFFF; gEDMACC0Regs->TPCC_EECR= 0xFFFFFFFF; gEDMACC0Regs->TPCC_ICR= 0xFFFFFFFF; gEDMACC0Regs->TPCC_IECR= 0xFFFFFFFF; gEDMACC0Regs->TPCC_EMCR= 0xFFFFFFFF; gEDMACC0Regs->TPCC_SECR= 0xFFFFFFFF; gEDMACC1Regs->TPCC_ECR= 0xFFFFFFFF; gEDMACC1Regs->TPCC_ECRH= 0xFFFFFFFF; gEDMACC1Regs->TPCC_EECR= 0xFFFFFFFF; gEDMACC1Regs->TPCC_EECRH= 0xFFFFFFFF; gEDMACC1Regs->TPCC_ICR= 0xFFFFFFFF; gEDMACC1Regs->TPCC_ICRH= 0xFFFFFFFF; gEDMACC1Regs->TPCC_IECR= 0xFFFFFFFF; gEDMACC1Regs->TPCC_IECRH= 0xFFFFFFFF; gEDMACC1Regs->TPCC_EMCR= 0xFFFFFFFF; gEDMACC1Regs->TPCC_EMCRH= 0xFFFFFFFF; gEDMACC1Regs->TPCC_SECR= 0xFFFFFFFF; gEDMACC1Regs->TPCC_SECRH= 0xFFFFFFFF; gEDMACC2Regs->TPCC_ECR= 0xFFFFFFFF; gEDMACC2Regs->TPCC_ECRH= 0xFFFFFFFF; gEDMACC2Regs->TPCC_EECR= 0xFFFFFFFF; gEDMACC2Regs->TPCC_EECRH= 0xFFFFFFFF; gEDMACC2Regs->TPCC_ICR= 0xFFFFFFFF; gEDMACC2Regs->TPCC_ICRH= 0xFFFFFFFF; gEDMACC2Regs->TPCC_IECR= 0xFFFFFFFF; gEDMACC2Regs->TPCC_IECRH= 0xFFFFFFFF; gEDMACC2Regs->TPCC_EMCR= 0xFFFFFFFF; gEDMACC2Regs->TPCC_EMCRH= 0xFFFFFFFF; gEDMACC2Regs->TPCC_SECR= 0xFFFFFFFF; gEDMACC2Regs->TPCC_SECRH= 0xFFFFFFFF; } void main() { int i; CACHE_disableCaching(144); systemInit(); //注:成功初始化时钟和edma for(i=0;i<512;i++) { srcbuf[i] = i; combuf[i] = 0; } combuf[0] = 1; combuf[1] = 1; combuf[2] = 1; printf("combuf[0] = %d\r\n",combuf[0]); Edma3Example(); printf("combuf[0] = %d\r\n",combuf[0]); printf("combuf[63] = %d\r\n",combuf[63]); printf("combuf[64] = %d\r\n",combuf[64]); } int Edma3Example() { CSL_Edma3ParamHandle hParamPing; CSL_Edma3ParamSetup myParamSetup; CSL_Edma3ChannelHandle hChannel; CSL_Edma3Handle hMoudle; CSL_Edma3Obj edmaObj; CSL_Edma3ChannelObj chObj; CSL_Edma3CmdIntr regionIntr; CSL_Edma3Context context; CSL_Edma3ChannelAttr chAttr; CSL_Status status; unsigned char channelNum = 0; unsigned char instNum = 1; CSL_edma3Init(&context); hMoudle = CSL_edma3Open(&edmaObj,instNum,NULL,&status); chAttr.regionNum = CSL_EDMA3_REGION_GLOBAL; chAttr.chaNum = channelNum; hChannel = CSL_edma3ChannelOpen(&chObj,instNum,&chAttr,&status); CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_0); CSL_edma3MapDMAChannelToParamBlock(hMoudle,channelNum,0); hParamPing = CSL_edma3GetParamHandle(hChannel,0,&status); regionIntr.region = CSL_EDMA3_REGION_GLOBAL; regionIntr.intr = 0x1; regionIntr.intrh = 0x0; CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTR_ENABLE,®ionIntr); myParamSetup.option = 0x0010000c; myParamSetup.srcAddr = (Uint32)srcbuf; myParamSetup.aCntbCnt = CSL_EDMA3_CNT_MAKE(4, 512); myParamSetup.dstAddr = (Uint32)combuf; myParamSetup.srcDstBidx = CSL_EDMA3_BIDX_MAKE(4, 4); myParamSetup.linkBcntrld = 0x0000ffff; myParamSetup.srcDstCidx = 0x0; myParamSetup.cCnt = 0x00000001; CSL_edma3ParamSetup(hParamPing,&myParamSetup); CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL); regionIntr.region = CSL_EDMA3_REGION_GLOBAL; regionIntr.intr = 0x0; regionIntr.intrh = 0x0; do { CSL_edma3GetHwStatus(hMoudle,CSL_EDMA3_QUERY_INTRPEND,®ionIntr); } while (!(regionIntr.intr & 0x1)); CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTRPEND_CLEAR,®ionIntr); CSL_edma3ChannelClose(hChannel); CSL_edma3Close(hMoudle); return 0; } 问题:从L2传输到DDR3中,调用Edma3Example后,combuf全部为0. 运行后打印: [C66xx_0] Main PLL Initialization is OK. [C66xx_0] DDR_STATUS=0xc0000004. DDR3 Initialization is OK. [C66xx_0] combuf[0] = 1 [C66xx_0] combuf[0] = 0 [C66xx_0] combuf[63] = 0 [C66xx_0] combuf[64] = 0