S3C44B0x 开cache后造成不一致问题的解决办法
来源:互联网 发布:中国数据新闻大赛 编辑:程序博客网 时间:2024/05/16 12:10
关于s3c44b0的cpu内部8Kcache SRAM的初始化问题。主要是因为cpu_init()调用了icache_enable()函数,而该函数又调用了s3c44b0_flush_cache()而引发的问题
s3c44b0_flush_cache()函数就这么几行,代码如下:
static void s3c44b0_flush_cache(void)
{
volatile int i;
/* flush cycle */
for(i=0x10002000;i<0x10004800;i+=16)
{
*((int *)i)=0x0;
}
}
首先莫名的是:计数用的变量i要用volatile来修饰!也许这就是arm或说是嵌入式或说是基于硬件的C程序与基于PC的C程序不同之处吧。加volatile是为了防止编译器把i给合谐掉,然后就是赋值句*((int *)i)=0x0:这个对写过或是看过arm程序的都知道吧,不解释。
关键在于for(i=0x10002000;i<0x10004800;i+=16)参看s3c44b0手册,cache set0:3地址是0x1000000~0x10002000;cache tag0:3+LRU地址是0x10002000~0x10004800。刚开始以为刷新cache是要向cache set0:3写0,而其实应该向且cache tag0:3+LRU空间写入0来刷新cache。有点意思的是:cache tag和LRU RAM写入的地址。(参看s3c44b0手册关于cache tag部分)由于cache tag和LRU RAM是16字节读写的,故i的增加应该是以16为单位的。
接下来是设置非缓冲区范围。
NCACHBE0 = 0xC0000000;
NCACHBE1 = 0x00000000;
完全依据程序员个人主观,呵呵 当然是要好的想法:比如不应该把IO地址放入缓冲区,而应该把它放入非缓冲区;不应该不把SDRAM放入非缓冲区,而应该放入缓冲区。所以,这里把除SDRAM地址外的所有映射地址做为非缓冲区。然后依据地址设置NCACHBE0和NCACHBE1。NCACHBE0在在这里是有用的,高地址为0x0c000000,低地址为0x00000000;而 NCACHBE1可以理解为不用它,所以起始和终止地址都设为0
在设置完之后就只要开启cpu cache功能就可以。
reg = SYSCFG;
reg |= 0x00000006; /* 8kB */
SYSCFG = reg;
当然,坚持一惯的风格,操作SYSCFG寄存器方式为:读---操作---回写。这里把8K内部RAM全作为cache
除了s3c44b0_flush_cache()外,其他都很简单,呵呵 不是吗
- S3C44B0x 开cache后造成不一致问题的解决办法
- 动态库的gcc版本不一致造成的编译问题的解决办法
- Series 60 3rd---调整list box位置和大小后造成与scroll bar不一致的解决办法
- Series 60 3rd---调整list box位置和大小后造成与scroll bar不一致的解决办法
- Series 60 3rd---调整list box位置和大小后造成与scroll bar不一致的解决办法
- DSP的cache一般在何时会生效,防止在cache使用造成数据不一致
- nginx反向代理tomcat,由于客户端输入的端口不一致造成网页basehref错误的问题及解决办法
- 项目启动容器不一致造成的编码问题
- hive datanucleus cache 不一致问题
- s3C44B0X中关于frameBuffer的问题
- S3C44B0X中关于frameBuffer的问题
- s3C44B0X中关于frameBuffer的问题
- 【IE Cache】IE浏览器造成的请求Cache问题 的解决方案
- cache周时过期问题的解决办法
- Spring Cache无效的问题以及解决办法
- Spring Cache无效的问题以及解决办法
- 由于格式(format)多次namenode造成的集群id(ClusterID)不一致问题
- sdk升级后和adt版本不一致的问题
- 微软一站式示例代码库新功能:提供带个示例代码下载和最新示例代码索引
- Flex读写XML文件
- 2011新年礼物 - Linux 推荐及其应用软件推荐
- 给纯SDK程序加上自己的ICO图标
- java数据库连接池-自己写的
- S3C44B0x 开cache后造成不一致问题的解决办法
- tomcat初步
- 博客文章
- 简单介绍
- 实力才是王道
- OfferKeyEventL && HandleKeyEventL
- mysql日期比较
- oracle10.2.0.4/5版本数据库无法启动dbconsole问题解决
- Access数据库中函数一列表