franksunny的个人技术空间
获得人生中的成功需要的专注与坚持不懈多过天才与机会。 ——C.W. Wendte

MSP430的时钟问题

 

MSP430的时钟周期(振荡周期)、机器周期、指令周期之间的关系

通用知识

时钟周期也称为振荡周期:定义为时钟脉冲的倒数(时钟周期就是直接供内部CPU使用的晶振的倒数,例如12M的晶振,它的时钟周期就是1/12us),是计算机中的最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟频率越高,工作速度就越快。

机器周期:在计算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期。8051系列单片机的一个机器周期由6S周期(状态周期)组成。一个S周期=2个时钟周期,所以8051单片机的一个机器周期=6个状态周期=12个时钟周期。

指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期也不同。

专用知识:

430中,一个时钟周期 = MCLK晶振的倒数。如果MCLK8M,则一个时钟周期为1/8us

一个机器周期 = 一个时钟周期,即430每个动作都能完成一个基本操作;

一个指令周期 = 16个机器周期,具体根据具体指令而定。

另:指令长度,只是一个存储单位与时间没有必然关系。

 

 

MSP430根据型号的不同最多可以选择使用3个振荡器。我们可以根据需要选择合适的振荡频率,并可以在不需要时随时关闭振荡器,以节省功耗。这3个振荡器分别为:

1DCO  数控RC振荡器。它在芯片内部,不用时可以关闭。DCO的振荡频率会受周围环境温度和MSP430工作电压的影响,且同一型号的芯片所产生的频率也不相同。但DCO的调节功能可以改善它的性能,他的调节分为以下3步:a:选择BCSCTL1.RSELx确定时钟的标称频率;b:选择DCOCTL.DCOx在标称频率基础上分段粗调;c:选择DCOCTL.MODx的值进行细调。

2LFXT1  接低频振荡器。典型为接32768HZ的时钟振荡器,此时振荡器不需要接负载电容。也可以接450KHZ~8MHZ的标准晶体振荡器,此时需要接负载电容。

3XT2  450KHZ~8MHZ的标准晶体振荡器。此时需要接负载电容,不用时可以关闭。

低频振荡器主要用来降低能量消耗,如使用电池供电的系统,高频振荡器用来对事件做出快速反应或者供CPU进行大量运算。当然高端430还有锁频环(FLL)FLL+等模块,但是初步不用考虑那么多。

MSP4303种时钟信号:MCLK系统主时钟;SMCLK系统子时钟;ACLK辅助时钟。

1MCLK系统主时钟。除了CPU运算使用此时钟以外,外围模块也可以使用。MCLK可以选择任何一个振荡器所产生的时钟信号并进行1248分频作为其信号源。

2SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以选择任何一个振荡器所产生的时钟信号并进行1248分频作为其信号源。

3ACLK辅助时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。但ACLK只能由LFXT1进行1248分频作为信号源。

PUC复位后,MCLKSMCLK的信号源为DCO,DCO的振荡频率默认为800KHZACLK的信号源为LFXT1

MSP430内部含有晶体振荡器失效监测电路,监测LFXT1(工作在高频模式)和XT2输出的时钟信号。当时钟信号丢失50us,监测电路捕捉到振荡器失效。如果MCLK信号来自LFXT1或者XT2,那么MSP430自动把MCLK的信号切换为DCO,这样可以保证程序继续运行。但MSP430不对工作在低频模式的LFXT1进行监测。

 

为了实现具体的时钟可以设置跟时钟相关的寄存器,在低端430中是DCOCTLBCSCTL1BCSCTL2三个寄存器。而对于高端的430,则要考虑SCFI0SCFQCTLFLL_CTL0FLL_CTL1BTCTL等几个寄存器。具体设置,参看DataSheet

 

 

 

上传上来的时候,发现图片没有显示出来,不好意思
posted on 2007-06-07 22:14 frank.sunny 阅读(4112) 评论(7)  编辑 收藏 引用 所属分类: 硬件开发

FeedBack:
# re: MSP430的时钟问题
2007-06-26 15:50 | T
非常感谢~~  回复  更多评论
  
# re: MSP430的时钟问题
2007-08-30 00:21 | komputon
很好的blog,我也开了个,主要讨论MSP430单片机的应用开发。
http://www.blogsee.cn/u/komputon/index.html
欢迎来坐坐!  回复  更多评论
  
# re: MSP430的时钟问题
2008-08-19 11:51 | 喜欢】
我想请教一下怎么将dco设置为timer_a 的时钟
  回复  更多评论
  
# re: MSP430的时钟问题
2008-08-19 12:07 | frank.sunny
@喜欢】


不好意思,一年多没搞了,具体的datasheet都留在公司了,可以参看下跟TimeA相关的寄存器设置

具体实现思路,可以参考:先设置MCLK和SMCLK为DCO,然后TimeA选择为MCLK或SMCLK


  回复  更多评论
  
# re: MSP430的时钟问题
2008-10-09 18:25 | dp_mcu
好,谢谢,找了半天终于找到了!!!  回复  更多评论
  
# re: MSP430的时钟问题
2008-11-29 11:02 | 飞飞猫
你好 430的资料 可以传给我看看吗?
  回复  更多评论
  
# re: MSP430的时钟问题
2012-02-07 17:03 | leizisdu
谢谢博主讲解:)  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



常用链接

留言簿(13)

随笔分类

个人其它博客

基础知识链接

最新评论

阅读排行榜

评论排行榜