cmd文件如下:
MEMORY
{
L1D: o=00f00000h l=00007fffh
L1P: o=00e00000h l=00007fffh
L2: o=00800000h l=0007ffffh
MSMC: o=0c000000h l=001fffffh
DDR3: o=80000000h l=20000000h
}
SECTIONS
{
.csl_vect > MSMC
.text > MSMC
.stack > MSMC
.cinit > MSMC
.cio > MSMC
.const > MSMC
.data > MSMC
.switch > MSMC
.system > MSMC
.far > MSMC
.testMem > MSMC
.isram > L2
.mram > MSMC
.ddr > DDR3
}
程序如下:
#Pargam DAT_SECTION(srcBuff1,".mram")
#Pargam DAT_SECTION(srcBuff2,".mram")
#Pargam DAT_SECTION(dstBuff1,".mram")
#Pargam DAT_SECTION(dstBuff2,".mram")
unsigned char srcBuff1[512];
unsigned char srcBuff2[512];
unsigned char dstBuff1[512];
unsigned char dstBuff2[512];
CSL_Edma3ParamHandle hParamPing;
CSL_Edma3ParamSetup myParamSetup;
CSL_Edma3ChannelHandle hChannel;
CSL_Edma3Handle hMoudle;
void Edma3TxExample()
{
CSL_Edma3Obj edmaObj;
CSL_Edma3ChannelObj chObj;
CSL_Edma3CmdIntr regionIntr;
CSL_Edma3Context context;
CSL_Edma3ChannelAttr chAttr;
CSL_Status status;
unsigned char channelNum = 0;
usnigned 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_edma3DMAChannelToParamBlock(hMoudle,channelNum,&status);
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 = 0x00100008;
myParamSetup.srcAddr = (Uint32)srcBuff1;
myParamSetup.aCntbCnt = 0x00010040;
myParamSetup.dstAddr = (Uint32)dstBuff1;
myParamSetup.srcDstBidx = 0x0;
myParamSetup.linkBcntrld = 0x0000ffff;
myParamSetup.srcDstCidx = 0x0;
myParamSetup.cCnt = 0x00000001;
CSL_edma3ParamSetup(hParamPing,&myParamSetup);
CSL_edmaHwChannelControl(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);
}
void main()
{
int i;
for(i=0;i<512;i++)
{
srcBuff1[i] = 0x22;
srcBuff2[i] = 0x33;
dstBuff1[i] = 0x00;
dstBuff2[i] = 0x00;
}
Edma3TxExample();
}
问题描述:
1、如果将srcBuff1和dstBuff1的空间分配在.mram段,即共享内存,则数据可以传输,但从dstBuff1缓
冲中发现前32Byte为0,后32字节为正确传输的数据。从EDMA的参数配置中是应该将srcBuff1的64Byte传
输到dstBuff1;另外,在第一次传输后,如果将EDMA的参数配置的源地址和目的地址改为srcBuff2和
dstBuff2,再次触发,发现dstBuff2缓冲中的数据都为0,一个正确数据都没有传输成功。请高手帮忙解
释下?
2、如果将srcBuff1和dstBuff1的空间分配在.isram或者.ddr段,则dstBuff1缓冲中的前64Byte数据都为
0,即srcBuff1缓冲中的前64Byte都没有正确传输到dstBuff1,但为什么依然能判断到IPR标志,而数据
却传输不成功呢?