主题 : s3c2440的程序是否要在CACHE中才能跑几百兆的! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 5662
精华: 0
发帖: 8
金钱: 80 两
威望: 55 点
综合积分: 16 分
注册时间: 2009-05-03
最后登录: 2009-09-07
楼主  发表于: 2009-08-31 10:33

 s3c2440的程序是否要在CACHE中才能跑几百兆的!

我尝试过BOOT机后,把点LED的小程序下载到不同的地址运行。用软件指令延时的方法粗算运行的速度。发现一个是正常的400MHZ的运行速度。一个只有12MHZ的运行速度。同是DOWNLOAD到RAM中,因为DOWNLOAD的地址段不同,差别这么大。后来发现RAM的影射地址,跑得快的那个被定义成CACHE,跑得慢那个没被定义。我想应该是这个原因吧?程序必须被拷贝到RAM中的CACHE中才能跑得快。只不知道是2440内部为BOOT机设定的4K大小的RAM,还是16K指令CACHE呢?而且网上很多人提到的2440 TEST程序里的Paint_Bmp()显示图片程序效果特慢也是因为这个原因。因为CPU只跑12MHZ所以慢罗!另外CPU指令跑的速度同时也会受到读写外部RAM的速度,就是总线的速度影响呢?
zhb
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-08-31 11:02
你是说只有enable ARM的ICache才能达到400MHz的效果?
S3C2440A CPU用户手册第7章 Clock & Power Management的“CLOCK SOURCE SELECTION”一节,其中有

NOTES:
1. Although the MPLL starts just after a reset, the MPLL output (Mpll) is not used as the system clock until the software
writes valid settings to the MPLLCON register. Before this valid setting, the clock from external crystal or EXTCLK source
will be used as the system clock directly. Even if the user does not want to change the default value of MPLLCON
register, the user should write the same value into MPLLCON register.

也就是说,在你向MPLLCON中写入合法值之前,CPU用的频率就是外部晶振的频率(12M,在mini2440上)

会是这个东西影响?
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 5662
精华: 0
发帖: 8
金钱: 80 两
威望: 55 点
综合积分: 16 分
注册时间: 2009-05-03
最后登录: 2009-09-07
2楼  发表于: 2009-08-31 11:31
我的意思是问,程序是否一定要拷贝到Cache中才能跑到400MHZ以上。其他地方跑的,就算在RAM中,也只是12MHZ这么慢而已?
zhb
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2009-08-31 11:43
Cache才多大?连一个普通的Supervivi都装不下。
我想你指的应该是ARM的ICache(指令Cache)吧,它可以避免CPU每次都从外部RAM中取指令。但至于CPU的主频,我想应该只取决于供给CPU的Clock频率,也就是S3C2440A的FCLK频率
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 5662
精华: 0
发帖: 8
金钱: 80 两
威望: 55 点
综合积分: 16 分
注册时间: 2009-05-03
最后登录: 2009-09-07
4楼  发表于: 2009-08-31 12:02
//64MB
// 0x30000000 ~ 0x30ffffff : Download Area (16MB) Cacheable
// 0x31000000 ~ 0x33feffff : Non-Cacheable Area
// 0x33ff0000 ~ 0x33ff47ff : Heap & RW Area
// 0x33ff4800 ~ 0x33ff7fff : FIQ ~ User Stack Area
// 0x33ff8000 ~ 0x33fffeff : Not Useed Area
// 0x33ffff00 ~ 0x33ffffff : Exception & ISR Vector Table
以上是BOOT程序的地址分布表 0x30000000 ~ 0x30ffffff 地址段有CATCHE支持,程序拷贝到那里运行跑得了400MHZ,但在0x31000000 ~ 0x33feffff 没有CATCHE支持的地址段跑的话,只有12MHZ。是这样么?
zhb
级别: 新手上路
UID: 8113
精华: 0
发帖: 16
金钱: 90 两
威望: 24 点
综合积分: 32 分
注册时间: 2009-08-11
最后登录: 2021-02-10
5楼  发表于: 2009-09-04 09:57
你要先设置MPLL."就算在RAM中",如果你不设置MPLL,"也只是12MHZ这么慢"
思考和怀疑
级别: 新手上路
UID: 56526
精华: 0
发帖: 15
金钱: 80 两
威望: 16 点
综合积分: 30 分
注册时间: 2011-10-09
最后登录: 2012-03-14
6楼  发表于: 2011-11-15 16:15
我也碰到了这个问题,MPLL已经设置了。
    //init FCLK=400M, so change MPLL first
    ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
,但运行起来的程序还是12MHZ,非常慢,我用ADS的软的SIMULATOR ARM7TDMI 20M的同样程序比
S3C2440快3-4倍。
有人说是没有打开CACHE和MMU的问题,请问如何打开呀?
:)
级别: 骑士
UID: 61588
精华: 5
发帖: 248
金钱: 1500 两
威望: 300 点
综合积分: 596 分
注册时间: 2012-01-02
最后登录: 2018-03-05
7楼  发表于: 2013-06-14 20:27
还是老帖子有味道。