当前位置: 技术问答>linux和unix
burst读操作疑问:
来源: 互联网 发布时间:2017-03-04
本文导语: 我们采用omap的GPMC总线通信方式,异步的单个字读写没有问题,但是burst(一次可以读写多个word)模式问题来了 时序上是我在进行读操作的时候,从设备会根据CLK发送16个word 单个word读是: memcpy((BasicAddress[inValue->baseC...
我们采用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当作一个单位来定义
时序上是我在进行读操作的时候,从设备会根据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 的优势了。
你的软件读一个word,cpu就产生burst 读 ,可以一次性读取多个byte,这16个word都存在cache里,如果你下次访问的是这16个word里的一个,就能直接从cache里读到了。这时候就体现出burst 的优势了。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。