MSP430编程(一)—— 时钟配置

  • 格式:pdf
  • 大小:97.37 KB
  • 文档页数:2

MSP430编程(一)——时钟配置
geweilin 2010.03.13
笔者认为这篇文章只适合msp430的初学者,如果你已经熟悉430编程,那么这篇文章对你的用途不大。
msp430的时钟非常灵活,这篇文章将以msp430x1xx为例主要介绍器件的基本时钟模块(
Basic Clock

Module,以下称:时基模块
)及其配置方法(以下所述均是针对msp430x1xx系列,其它系列读者可以参考
相应的User’s guide)。

(一) 时基模块简介
msp430的时基模块支持低功耗和超低功耗。使用3个内部时钟信号,用户可以在性能和低功耗之间找到
最佳的平衡点。这个时基模块可以被配置为不使用任何外部元件、使用一个电阻、使用一个或两个晶体振
荡器或陶瓷振荡器,所有这些完全可有软件控制。

时基模块包括2个或3个时钟源:

LFXT1CLK: 低频/高频振荡器,既可以使用低频的32768HZ的手表晶体,也可以使用450KHZ- 8MHZ的
标准的晶体振荡器或者陶瓷振荡器。

XT2CLK: 可选的高频振荡器,可以使用标准的晶体振荡器或者陶瓷振荡器,也可以使用450KHZ- 8MHZ
的外部时钟源。

DCOCLK: 内部RC型数控振荡器。

可以从时基模块获得3个时钟信号:

ACLK: 辅助时钟,ACLK由LFXT1CLK时钟源经过1、2、4或者8分频得到,他可由软件选择配置到某
个特定的外设上。

MCLK: 系统主时钟,MCLK可由软件选择LFXT1CLK、XT2CLK(如果可用的话)、或者DCOCLK作
为时钟源,经过1、2、4或者8分频后得到,它被用来供CPU和系统使用。

SMCLK: 系统子时钟,SMCLK可由软件选择LFXT1CLK、XT2CLK(如果有的话)、或者DCOCLK作
为时钟源,经过1、2、4或者8分频后得到,他可由软件选择供某个外设使用。

时基模块的框图如图1所示:
注意:对于msp430x11x和msp430x12xx系列的单片机没有XT2振荡器,而是由
LFXT1CLK代替XT2CLK。

(二) 时基模块的操作
在一次上电复位后,
MCLK和SMCLK都是以DCOCLK作为时钟源(约为800KHZ,具体请参考各器件的数

据手册),ACLK以LFXT1为时钟源且处于低频(LF)模式。状态寄存器控制位SCG0, SCG1, OSCOFF和
CPUOFF用于配置msp430的操作模式以及使能或禁能时基模块的部分时钟。DCOCTL, BCSCTL1, 和
BCSCTL2寄存器用于配置时基模块。

时基模块可以由软件在程序执行的任意时间进行配置或者重配置。如:
BCSCTL1 | = RSEL2 +RSEL1 +RSEL0;
(此处使用C语言编程,并基于IAR开发环境,后面凡涉及到代码的如无特殊说明均为这种情况)
图1 时基模块框图
(三) 时基模块的配置
在了解以上知识的基础上,我们就可以配置时基从而让单片机在选定的时基上工作了。为了避免文章内容的冗
长繁琐,且考虑到此篇文章的读者多为430的初学者,无需考虑低功耗等情况,此处只介绍使用外部晶体振荡
器作为系统主时钟的情况,其余情况在熟习430编程后参考User’s guide便很容易了,因而此处不在累述。

此处以笔者使用的msp430f149单片机为例(XT2引脚接8MHZ晶振),讲解如何将外部晶体配置为MCLK
的时钟源。上面已经说过在系统上电复位后,MCLK的时钟源是DCOCLK,用户可通过软件将其切换到LFXT1
或者 XT2。

将MCLK的时钟源从DCO时钟切换到外部晶体振荡器时钟的顺序为:
(1) 打开晶体振荡器
(2) 清楚OFIFG标志位
(3) 等待至少50
μs
(4) 测试OFIFG标志,重复1-4步直到OFIFG被清零。

其代码实现为:
void CLK_Init(void)
{
unsigned char i;
LOOP: BCSCTL1 &= ~
XT2OFF; //打开外部8M晶振
IFG1 &= ~OFIFG; //清除OFIFG
for( i=50; i>0; i-- ); //等待50μs以上
if( IFG1&BIT1 ) goto LOOP; //重复以上步骤直到OFIFG被清零
BCSCTL2 =
SELM1 | SELS | DIVS1 | DIVS0;
} //对XT2CLK不分频作为MCLK时钟, 8分频后作为SMCLK时钟