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时钟