您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 系统时钟请教
本帖共有820个阅读者
发表帖子 发表投票 回复主题
系统时钟请教
hustzzy(论坛新手)
hustzzy
头衔:社区公民
帮派:无帮无派
帖数:10
金钱:183
积分:13
注册时间:2012/6/21
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
系统时钟请教

现在手上有一块531的板子,外部晶振27M,PLL设置的Set_PLL(16,4)。

程序全部放在内部RAM,带仿真器运行。程序中设置了一个定时中断,其中周期设置为47081;这样每ms产生一次中断。

这样判断出来运行速度大约是50M,照理说CCLK应该是27*16=400M才对啊,也就是应该250us产生一个中断,

请问一下这个从在哪里?

寄存器状态:

PLL_CTL:2000H

PLL_DIV:0004H

VR_CTL:00DBH

PLL_STAT:00A2H

PLL_lockCNT:0200H


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/6/21 11:12:40
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

1. 你在配置完PLL寄存器后是否启动 idle();指令,如果不启动idle()质量,PLL配置值将不会生效。

2. 27*16 = 432M ,你启用的地址其实内核定时器还是系统,如果是系统定时器,你的定时器工作在108M系统时钟下为何配置47081是定时1mS?

3. 在进入中断和出中断时都会消耗大量的内核时钟,所以即使你定时1mS,以此中断时来计算内核时钟,也是不科学的,因为你忽略了进出中断消耗的大量时钟。

4. 如果你想计算你的内核运行多快,有一个很简单的代码,写一个死循环的代码,随便运行什么,然后打开计算机的时钟,运行代码10S,停下代码,打开寄存器中内核寄存器的sysles寄存器,将两个32位的数据拼成一个64位的数据,然后将数据转为10进制,除以10S,得到的值就是你CPU每秒运行的次数,如果接近432 000 000 ,说明你的CPU工作在432M下。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/6/21 13:39:49
hustzzy(论坛新手)
hustzzy
头衔:社区公民
帮派:无帮无派
帖数:10
金钱:183
积分:13
注册时间:2012/6/21
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

1. 你在配置完PLL寄存器后是否启动 idle();指令,如果不启动idle()质量,PLL配置值将不会生效。

这个有。

2. 27*16 = 432M ,你启用的地址其实内核定时器还是系统,如果是系统定时器,你的定时器工作在108M系统时钟下为何配置47081是定时1mS?

这个可能以前理解错了,Timer应该是用的是系统定时器SCLK,因而准确定时应该是用108000来定义1ms,或者是108*1024*1.024,这个还望高人指点?

但是目前只有上述数字的一半,这个又错在哪里呢?

3. 在进入中断和出中断时都会消耗大量的内核时钟,所以即使你定时1mS,以此中断时来计算内核时钟,也是不科学的,因为你忽略了进出中断消耗的大量时钟。

这个方法确实不好,按照你说的下面的方法试一下?

4. 如果你想计算你的内核运行多快,有一个很

简单的代码,写一个死循环的代码,随便运行什么,然后打开计算机的时钟,运行代码10S,停下代码,打开寄存器中内核寄存器的sysles寄存器,将两个32位的数据拼成一个64位的数据,然后将数据转为10进制,除以10S,得到的值就是你CPU每秒运行的次数,如果接近432 000 000 ,说明你的CPU工作在432M下。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/6/21 14:01:45
hustzzy(论坛新手)
hustzzy
头衔:社区公民
帮派:无帮无派
帖数:10
金钱:183
积分:13
注册时间:2012/6/21
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
除了示波器之外,有没有程序可以测试我的系统频率SCLK?

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/6/21 14:08:01
hustzzy(论坛新手)
hustzzy
头衔:社区公民
帮派:无帮无派
帖数:10
金钱:183
积分:13
注册时间:2012/6/21
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
测试了一下,内核速度确实是432M。

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/6/21 14:32:04
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

用系统定时器,系统定时器为32位,将周期设置大一点,如你设置定时周期为FFFFFFFF,系统时钟108兆,那么进一次中断的时间是39.7S,测一下从运行到进中断的时间即可。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/6/21 16:24:23
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154124 Call, 1 Queries, Processed in 0.015625 second(s),