日期:2014-05-16  浏览次数:20790 次

burst读操作疑问:
我们采用omap的GPMC总线通信方式,异步的单个字读写没有问题,但是burst(一次可以读写多个word)模式问题来了

时序上是我在进行读操作的时候,从设备会根据CLK发送16个word
单个word读是:
memcpy((BasicAddress[inValue->baseCs]+inValue->Paddress),inValue->value,sizeof(WORD));
或者
*(BasicAddress[inValue->baseCs]+inValue->Paddress)=*inValue->value;

这16个我就没法读了
因为memcpy多个字符相当是多个*a=*b,一个(*a=*b)就是一个读操作,burst一次读16个word,倘若a的类型是(16*16bit),那也就一个读就OK了,
可是Ce最长的类型才32BIT。

不知道有没人知道什么方法可行,我很纠结。

类型定义的最原始地方在哪里,有没有可以把16个word当作一个单位来定义

------解决方案--------------------
burst 操作对于软件是透明的 你不需要真的一次读写16word 还是保持你原来代码即可
你的软件读一个word,cpu就产生burst 读 ,可以一次性读取多个byte,这16个word都存在cache里,如果你下次访问的是这16个word里的一个,就能直接从cache里读到了。这时候就体现出burst 的优势了。