免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3269 | 回复: 1
打印 上一主题 下一主题

编写sport通信模块中的cache问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-28 17:44 |只看该作者 |倒序浏览
  这一阵子在编写一个sport口通信模块,在DMA中断中对数据进行头检查时,一直会有很多头信息丢失,用各种方法找原因,最后怀疑是cache的问题,但是在DMA读中断以及写中断中都使用了flush_dcache。。。
  在这个问题上停了好几天,最后在看blackfin的官方文档时才发现它们的区别


  在读中断中应该使用invalidate_dcache 调用这个函数后,不论要读问的内存是否在cache中,都会强制性的读取内存中的实际内容。
  在写中断中用flush_dcache是没错的,它的作用是将cache内容回写到外存中。如果系统配置了cache方式为write_through,这个操作也可以不做。


  希望能对有同样问题的朋友有所帮助。

论坛徽章:
0
2 [报告]
发表于 2007-11-19 23:32 |只看该作者
最差的解决办法是Disable DCache。
invalidate dcache是一种办法,但是要注意使用的指令,Blackfin有两个名字差不多的指令,不要用错了。
最好的办法是在Linux内核预留一定SDRAM不映射Cache,然后使用dma_alloc_coherent从uncached memory中分配内存。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP