TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6455控FPGA进行数据转储操作

为什么下面这段代码会感觉是没有顺序执行了,导致FPGA的时序不对,数据有误!

temp = * nandWorkMode;
while(temp!=0x00660000)
{
temp = * nandWorkMode;
}
* nandStartCmd=START_READ + i;
SetEdma3Src(param_num, (Uint32)NAND_DATA_BASRADDR);
SetEdma3Dst(param_num, (Uint32)(nandReadBuf+0x2000*i));
SetEdma3ESR(regin, chan_num);
dataIPR=GetEdma3IPR(regin,tcc);
while(dataIPR==0)
{
	dataIPR=GetEdma3IPR(regin,tcc);	
}
SetEdma3ICR(regin,tcc);

本来按照我们的设计是应该先执行* nandStartCmd=START_READ + i,然后执行后面有关EDMA的操作;
但是为什么现在感觉是先执行了后面关于EDMA的操作,然后才执行的* nandStartCmd=START_READ + i;
这和我当前使用的编译器有关吗?
noaming:

你好,

nandStartCmd这句 和后面的edma程序是什么关系呢?

star zhang:

回复 noaming:

nandStartCmd这句是用来启动FPGA进行下次的操作,而后面的EDMA程序是完成
一个数据搬移操作的。两者应该说没有什么关系的。

noaming:

回复 star zhang:

如果两者没有关系,你感觉是并行运行的话,或许是DMA执行的速度很快。

你可以单步一下,就知道了。

star zhang:

回复 noaming:

原先也好像单步调试过,单步的时候是对的。

noaming:

回复 star zhang:

非多任务时,程序本身就是顺序执行的,不存在并行的道理。只有执行上的速度差异。

star zhang:

回复 noaming:

同时当我把下面这行代码放在最开头的话,代码又应该说是正确的在执行(顺序的执行)。

* nandStartCmd=START_READ + i;

noaming:

回复 star zhang:

是不是因为这样就有了一定的延时?你可以在这句不开头的情况下,在这句后面加一段延时试试看。

star zhang:

回复 noaming:

现在我这设计的是一个多任务的,这里的代码就是处在一个任务里面的,另外我的系统里面还有一些其他的任务。

star zhang:

回复 noaming:

加延时的办法也试过的,有效,但是会对我这个任务所要完成工作的性能有影响!

noaming:

回复 star zhang:

一个任务中的程序,都是顺序执行的。

加延时有效,说明这符合你系统的要求,延时恰当即可不要太长,这对工作性能应该是不存在影响的

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6455控FPGA进行数据转储操作
分享到: 更多 (0)