目录

MSP430系统实时时钟RTC

【时钟初始化】系统时钟初始化需要注意的问题

MSP430F149时钟源选择(部分转)

MSP430 系统时钟 ACLK、MCLK、SMCLK

【MSP430时钟】MSP430 5438时钟系统介绍

MSP430X5XX的时钟系统与低功耗模式

MSP430X5XX的时钟系统与低功耗模式


MSP430系统实时时钟RTC

2012.1.11

读取实时时钟:

1、  RTCRDY 为0时,不能取读取实时时钟

RT0PS源于ACLK,为了实时时钟日历的正确的运行,ACLK必须是32768Hz。(易出错)

定时:

一、每小时闹一次:每一小时的15分钟闹一次:

1、将RTCAMIN设置成15;2、设置RTCAMIN的AE位和清除闹钟寄存器的其它所有AE位

3、AF会在:00:14:59到00:15:00、01:14:59到01:15:00、02:14:59到02:15:00等等时刻被置位。

二、在每天040000时刻闹:

1RTCAHOUR位置位成4;2、设置RTCHOUR的AE位和复位闹钟寄存器的所有其它AE位

3、AF就会在03:59:59到04:00:00时刻被置位。

三、在每天063000时刻闹:

1、 将RTCAHOUR设置成6,将RTCAMIN 设置成30。

2、设置RTCAHOUR和RTCAMIN的AE位,即可使能闹钟

3、 AF位将会在每一个06:29:59到06:30:00的过渡时刻被置位

四、在每周二 063000时刻闹:

1、  RTCADOW位设置成2,RTCAHOUR设置成6,RTCAMIN将要被设置成30。

2、  设置RTCADOW、RTCAHOUR和RTCAMIN的AE位,闹钟即被使能。

3、  AF位将会在RTCDOW位从1 到2的过渡后和06:29:59到06:30:00的过渡时刻被置位。

五、在每月第五天的063000时刻闹:

1、  RTCADAY位将要设置成5,RTCAHOUR位将要被设置成6,RTCAMIN位将要被设置成30。

2、  设置RTCADAY位、RTCAHOUR位和RTCAMIN位的AE位,闹钟即被使能。

3、  AF位将要在06:29:59到06:30:00的过渡时刻和RTCADAY等于5的时刻被置位。

实时时钟模式下的间隔时间中断:

RTCCTL01 = RTCBCD+RTCMODE+RTCTEVIE+RTCAIE;

RTCMODE: 0:Counter  1: Calendar

置位RTCAIE 位就使能了时钟中断功能

置位RTCTEVIE 位就使能时间间隔中断功能,置位RTCTEVIFG

RTCTEV00 分钟跳变

01 小时跳变

10 每天凌晨(00:00)

11 每天正午(12:00)

以上均在RTCMODE=1模式下。

//天中断。置位RTCRDYIE 位会使能中断,RTCRDY 位触发实时时钟中断RTCRDYIFG

计数器模式中的实时时钟中断

时间间隔中断:

实时时钟中断(RTCTEVIFG)

配置成8位、16位、24位或者32位中的一种溢出时引发一个触发事件。触发事件可由RTCTEV位进行选择

置位RTCTEVIE位使能中断

在计数器模式中,三个中断源是可用的,其分别是RT0PSIFGRT1PSIFGRTCTEVIFG。RTCAIFG位和RTCRDYIFG位被清除。RTCRDYIE和RTCAIE位可以忽略。

1通过设置RT0IP位,可以选择使RT0PSIFG位用来生成间歇中断。

2在计数器模式,RT0PS位时钟源,源自于ACLK或者SMCLK,也可以是基于ACLK或者SMCLK时钟源的2分频、4分频、8分频、16分频、32分频、64分频、128分频和256分频作为时钟源。

3设置RT0PSIE位可以使能中断。

1通过设置RT1IP位,可以选择地让RT1PSIFG位用来生成间歇中断。

2在计数器模式下,RT1PS位时钟源,源于ACLK、SMCLK或者是RT0PS位的输出,也可以是以上时钟源的2分频、4分频、8分频、16分频、32 分频、64分频、128分频和256分频后产生新的时钟源作为时钟。

3设置RT1PSIE位可以使能中断。

一个简单而安全读取实时时钟寄存器的方法是利用RTCRDYIFG中断标志位。置位RTCRDYIE位使能

RTCRDYIFG中断。一旦中断使能,在RTCRDY位上升沿的时候将会产生中断,致使RTCRDYIFG被置位。在这

一点上,这一应用几乎有完整的一秒钟安全地去读取任一个实时时钟寄存器。这一同步的处理方式防止在时间

跳变的过程中读取时间值。当中断得到响应的时候,RTCRDYIFG会自动复位,也可以软件复位。

在计数器模式下,RTCRDY位保持复位。可以不关心RTCRDYIE位,并且RTCRDYIFG维持复位。

资料:

基于MSP430单片机时钟芯片RTC-4553温度误差软件补偿[机电之家行业下载站]

设置RTC时间:

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop Watchdog Timer

RTCCTL01 = RTCBCD+RTCHOLD+RTCMODE+RTCTEVIE+RTCAIE;
                                        // RTC enable, BCD mode,
                                        // alarm every Minute,
                                        // enable RTC interrupt
  // Init timeRTCSEC =  0x00;                       // Set Seconds
  RTCMIN =  0x32;                       // Set Minutes
  RTCHOUR = 0x10;                       // Set Hours

// Init date
  RTCDOW =  0x03;                       // Set DOW
  RTCDAY =  0x30;                       // Set Day
  RTCMON =  0x04;                       // Set Month
  RTCYEAR = 0x2008;                     // Set Year

RTCCTL01 &= ~RTCHOLD;                 // Enable RTC

P1DIR |= 0x01;                        // Set P1.0 to output direction

__bis_SR_register(LPM3_bits + GIE);   // Enter LPM3 w/ interrupt
}

读取RTC时间:

//
//                                                                           //
//                 读取RTC时钟                                               //
//                                                                           //
//
unsigned long GetTime(void)
{
  int hour,minute,second                             ;
  unsigned long time

【时钟初始化】系统时钟初始化需要注意的问题

MSP430F149时钟源选择(部分转)

(2011-02-21 15:30:54)

正在上传…重新上传取消转载

标签:

时钟源

msp430

谐振器

振荡器

时钟信号

教育

分类: MCU

MSP430的基本时钟源有3个:  LFXT1CLK,  XT2CLK,   DCOCLK ; ­

其中: LFXT1CLK:可以用低频钟表晶体、标准晶体、陶瓷谐振器或外接时钟源工作。 ­

­    XT2CLK:可以用标准晶体、陶瓷谐振器或外接450khz~8mhz的时钟源工作。 ­

­    DCOCLK:它是内部数字控制RC振荡器,可以调节。

MSP430的3种时钟信号是:  ACLK,  MCLK,  SMCLK;

­

其中: ACLK(辅助系统时钟):可选时钟源LFXT1CLK(只能是外部时钟源),且一般为32768hz手表晶体)。

­MCLK(主时钟):可选LFXT1CLK,XT2CLK, DCOCLK 三种时钟源。用于CPU和系统。 ­

­     SMCLK(子时钟):可选LFXT1CLK,XT2CLK, DCOCLK 三种时钟源。用于外围器件.

(Notice:­LFXT1CLK when XT2 oscillator not present on-chip.)

ACLK和MCLK的区别:ACLK一般用于低速外设 ­

         SMCLK主要用于高速外围模块

上电默认是内部800K的RC振荡器,

下面给出了切换LFXT和XT2作为系统时钟的例子:

切换为LFXT:

do
  {
  IFG1 &= ~OFIFG;                          
  for (i = 0xFF; i > 0; i--);              
  }
  while ((IFG1 & OFIFG));                  
  BCSCTL2 |= SELM_3;//选择钟表时钟

切换为XT2:

  BCSCTL1&=~XT2OFF;//启动XT2时钟
  do
  {
    IFG1 &= ~OFIFG;                          
    for (i = 0xFF; i > 0; i--);              
  }
  while ((IFG1 & OFIFG));
  BCSCTL2 |= SELM_2;
  BCSCTL2 |= SELS;//选择XT2时钟

2012-02-20 17:33:06

2009年10月04日 星期日 20:59

系统时钟问题:

系统默认使用DCO,使用外部高速晶振XT2时必须自己开启XT2,并延时50us等待XT2起振,然后手工清除IFG1中的OFIFG位

!!!!一定要注意操作顺序:打开XT2->等待XT2稳定->切换系统时钟为XT2

若后面两步操作反了,在通常情况下不会出现问题,但是在电压不稳MCU频繁复位的情况下,非常容易造成MCU死掉,只能掉电后重新上电才能可靠复位。

今天做了一下时钟的实验

对于MCLK若选择了XT2 的话,在外部晶振XT2的使用过程中,需要特别注意的是,一旦外部晶振失效的话带来什么样的效果?对于这个效果,经过测试发现,当使用XT2作为MCLK和SMCLK的时钟源时若XT2不稳定,丢失一些时钟信号时这时MCLK会自动转换DCO作为其时钟源,经过测试,而SMCLK确依然用的是XT2(XT2只是波动一下,并非不工作),但是用示波器怎么测不出8M的晶振呢,测其它的怎么能测呢?不过时钟这一点搞清楚了

振荡器失效时,msp430也会自动将DCO选作为MCLK的时钟源,用户可以在DCO维持下在中断中检测OFIFG标志位,设置使用另外一个晶体振荡器来临时替代问题时钟源俩继续工作或完成发生警报等应急处理工作。

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

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

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

专用知识:

在430中,一个时钟周期= MCLK晶振的倒数。如果MCLK是8M,则一个时钟周期为1/8us即为125ns;

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

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

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

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

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

(2)SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以选择DCO和XT2所产生的时钟信号并进行1、2、4、8分频作为其信号源。

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

430的一个时钟周期=MCLK晶振的倒数。如果MCLK是8M,则一个时钟周期为1/8微秒;
一个机器周期=一个时钟周期,即430每个动作都能完成一个基本操作;
一个指令周期=1~6个机器周期;
也就是说执行一条指令最多花6*1/8微秒。
 
_NOP()是单周期的指令,I/O口赋值是4周期的。
 

MSP430 系统时钟 ACLK、MCLK、SMCLK

2011-05-17 17:00:25

 MSP430基础时钟模块包含以下3个时钟输入源。

一、4个时钟振荡源

1、LFXT1CLK:  外部晶振或时钟1 低频时钟源 低频模式:32768Hz 高频模式:(400KHz-16MHz)

2、XT2CLK:    外部晶振或时钟2 高频时钟源(400KHz-16MHz)
   3、DCOCLK:    内部数字RC振荡器,复位值1.1MHz
   4、VLOCLK:    内部低功耗振荡器 12KHz

注:MSP430x20xx: LFXT1 不支持 HF 模式, XT2 不支持, ROSC 不支持.

(1)LFXT1CLK 低频时钟源:由LFXT1振荡器产生(如图2所示)。通过软件将状态寄存器中OSCOff复位后,LFXT1开始工作,即系统采用低频工作。如果LFXT1CLK没有用作SMCLK或MCLK信号,则可以用软件将OSCOff置位,禁止LFXT1工作。

(2)XT2CLK高频时钟源:由XT2振荡器产生。它产生时钟信号XT2CLK,其工作特性与LFXT1振荡器工作在高频模式时类似。可简单地通过软件设置XT2振荡器是否工作,当XT2CLK没有用作SMCLK或MCLK信号时,关闭XT2,选择其他时钟源。

3)DCOCLK 数字控制RC振荡器。由集成在时钟模块中的DCO振荡器产生。DCO振荡器是一个RC振荡器,频率可以通过软件调节,其控制逻辑如图3所示。当振荡器LFXT1、XT2被禁止或失效时,DCO振荡器被自动选作MCLK的时钟源。因此由振荡器失效引起的系统中断请求可以得到响应,甚至在CPU关闭的情况下也能得到处理。

由基础时钟模块可以提供系统所需的3种时钟信号,即:ACLK、MCLK、SMCLK。其中辅助时钟ACLK是LFXT1CLK信号经1、2、4、8分频后得到的。ACLK可由软件选作各个外围模块的时钟信号,一般用于低速外设;系统主时钟MCLK可由软件选择来自LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经1、2、4、8分频得到。MCLK主要用于CPU和系统。子系统时钟SMCLK可由软件选择来自LFXT1CLK和DCOCLK,或者XT2CLK和DCOCLK,然后经1、2、4、8分频得到,主要用于高速外设模块。

更多:新浪博客

原文:低功耗MCU动态时钟分析 - 21ic电子网

【MSP430时钟】MSP430 5438时钟系统介绍

2011-05-23 15:40:41

3.1时钟系统介绍
UCS模块支持低功耗。它内部含有三个时钟信号,用户可以自行选择,找到性能和功耗的平衡点。UCS软件
配置后,只需要一两个晶振或者电阻,而不需要使用外部振荡器。
UCS模块最多含有5个时钟源:
l  XT1CLK:低频/高频振荡器,可以使用低频 32768HZ 晶振和外部振荡器或者通过外部输入源输入
4MHZ~32MHZ时钟。
l  VLOCLK:内部低消耗,低频振荡器。典型值为 12KHZ。
l  REFOCLK:内部低频振荡器,典型值为 32768HZ,作为 FLL基准源。
l  DCOCLK:内部数字控制振荡器(DCO)可以通过 FLL来稳定。
l  XT2CLK:可选择的高频振荡器,可以使用标准晶振,振荡器或者外部时钟源输入4MHZ~40MHZ。 
UCS模块有三个时钟信号(/系统)可以使用:
l  ACLK: 辅助时钟。 ACLK 来自于XT1CLK, REFOCLK, VLOCLK, DCOCLK, DCOCLKDIV,和XT2CLK
(如果可以用)。DCOCLKDIV为DCOCLK 在 FLL 模块中通过 1、2、4、8、19、32 分频后得到的频率。
ACLK 可由软件位作各个外围模块的时钟信号。ACLK 经 1、2、4、8、16、32 分频。ACLK/n是 ACLK
经1、2、4、8、16、32分频后作为外部电路使用。
l  MCLK: 系统主时钟。 MCLK 可由软件选择为 XT1CLK, REFOCLK, VLOCLK, DCOCLK, DCOCLKDIV,
XT2CLK(如果可以用)。DCOCLKDIV 为 DCOCLK 在 FLL 模块中通过 1、2、4、8、19、32 分频后得
到的频率。MCLK 可以通过1、2、4、8、16、32分频。MCLK 作为 CPU和系统时钟。
l  SMCLK:辅助系统主时钟。SMCLK 可由软件选择 XT1CLK,REFOCLK,VLOCLK,DCOCLK,
DCOCLKDIV,XT2CLK(如果可以用)。DCOCLKDIV为 DCOCLK 在 FLL模块中通过 1、2、4、8、19、
32分频后得到的频率。SMCLK 可以通过 1、2、4、8、16、32 分频。SMCLK 主要用于高速外围模块。
系统通过合适的配置可以作为外部器件的时钟输入源。UCS模块图如下图所示:

MSP430学习笔记之二:时钟模块

MSP430系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控制振荡器(DCO),锁频环(FLL)及FLL+等模块构成。由于430系列单片机中的型号不同,而时钟模块也将有所不同。虽然不同型号的单片机的时基模块有所不同,但这些模块产生出来的结果是相同的.在MSP430F13、14中是有TX2振荡器的,而MSP430F11X,F11X1中是用LFXT1CLK来代替XT2CLK时钟信号的.在时钟模块中有3个(对于F13,F14)时钟信号源(或2个时钟信号源,对于F11X、F11X1):

1-LFXT1CLK: 低频/高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较常使用的晶体振荡器是32768HZ。

2-XT2CLK: 高频时钟源.由外接晶体振荡器。需要外接两个振荡电容器,较常用的晶体振荡器是8MHZ。

3-DCOCLK: 数字可控制的RC振荡器。

1-ACLK: 辅助时钟信号.由图所示,ACLK是从FLXT1CLK信号由1/2/4/8分频器分频后所得到的.由BCSCTL1寄存器设置DIVA相应为来决定分频因子.ACLK可用于提供CPU外围功能模块作时钟信号使用.

2-MCLK: 主时钟信号.由图所示,MCLK是由3个时钟源所提供的。他们分别是LFXT1CLK,XT2CLK(F13、F14,如果是F11,F11X1则由LFXT1CLK代替),DCO时钟源信号提供.MCLK主要用于MCU和相关系统模块作时钟使用。同样可设置相关寄存器来决定分频因子及相关的设置。

3-SMCLK: 子系统时钟,SMCLK是由2个时钟源信号所提供.他们分别是XT2CLK(F13、F14)和DCO,如果是F11、F11X1则由LFXT1CLK代替TX2CLK。同样可设置相关寄存器来决定分频因子及相关的设置。

MSP430X1X1系列产品中,其中XT1时钟源引脚接法有如3种应用。F13、14的XT1相同。需要注意的是,LFXT1只有工作在高频模式下才需要外接电容。

对以引脚较少的MSPX1XX系列产品中有着不同时基模块,具体如下:

MSP430X11X1:LFXT1CLK , DCO

MSP430F12X: LFXT1CLK , DCO

MSP430F13X/14X/15X/16X:LFXT1CLK , DCO , XT2CLK

MSP430F4XX: LFXT1CLK , DCO , XT2CLK , FLL+

时钟发生器的原理说明:问题的提出:1、高频、以便能对系统硬件请求和事件作出快速响应 2、低频率,以便将电流消耗降制至最少 3、稳定的频率,以满足定时器的应用。 4、低Q值振荡器,以保证开始或停止操作没有延时MSP430采用了一个折衷的办法:就是用一个低频晶镇振,将其倍频在高频的工作频率上。一般采用这种技术的实用方法有两种,一个是说、锁相环、一个是锁频环,而锁相环采用模拟的控制容易引起“失锁”和易引起电容量的改变。而TI采用的是锁频环技术,它采用数字控制器DCO和频率积分来产生高频的运行时钟频率。

低功耗设置的技巧问题: 1、LPM4:在振荡器关闭模式期间,处理机的所有部件工作停止,此时电流消耗最小。此时只有在系统上电电路检测到低点电平或任一请求异步响应中断的外部中断事件时才会从新工作。因此在设计上应含有可能需要用到的外部中断才采用这种模式。否则发生不可预料的结果。 2、LPM3:在DC发生器关闭期间,只有晶振是活动的。但此时设置的基本时序条件的DC发生器的DC电流被关闭。由于此电路的高阻设计,使功耗被抑制。注:当从DC关闭到启动DC0要花一端时间(ns-us) 3、LPM2:在此期间,晶镇振和DC发生器是工作的,所以可实现快速启动。4、LPM1:在此振荡器已经工作,所以不存在启动时间延时问题。结合上述特点,在写程序时要综合考虑低功好耗特性,对外部事件的安排也很重要。你必须在功能实现上综合考虑才能达到你预期的效果。使用C语言可用如下的语句:_BIS_SR(LMP3_bits)和_BIC_SR(LPM3 bits) LPM3和LPM3_EXIT 它们的定义是一样的。这里说明在C语言环境中有些定义的函数是不可见的。但你可以从in430.h文件看到它们的定义。

DCOCTL DCO控制寄存器

DCO.2 DCO.1 DCO.0 MOD.4 MOD.3 MOD.2 MOD.1 MOD.0

DCO.0-DCO.4 定义8种频率之一,可以分段调节DCOCLK频率,相邻两种频率相差10%。而频率由注入直流发生器的电流定义。

MOD.0-MOD.4 定义在32个DCO周期中插入的Fdco+1周期个数,而在下的DCO周期中为Fdco周期,控制改换DCO和DCO+1选择的两种频率。如果DCO常数为7,表示已经选择最高频率,此时不能利用MOD.0-MOD.4进行频率调整。

BCSCTL1 基本时钟系统控制寄存器1

XT2OFF TXS DIVA.1 DIVA.0 XT5V Rsel.2 Resl.1 Resl.0

XT2OFF 控制XT2振荡器的开启与关闭。

TX2OFF=0,XT2振荡器开启。

TX2OFF=1,TX2振荡器关闭(默认为TX2关闭)

XTS 控制LFXT1 工作模式,选择需结合实际晶体振荡器连接情况。

XTS=0,LFXT1 工作在低频模式(默认)。

XTS=1,LFXT1 工作在高频模式(必须连接有高频相应的高频时钟源)。

DIVA.0 DIVA.1 控制ACLK分频。

0 不分频(默认)

1 2分频

2 4分频

3 8分频

XT5V 此位设置为0。

Resl1.0,Resl1.1,Resl1.2 三位控制某个内部电阻以决定标称频率。

Resl=0,选择最低的标称频率。

……..

Resl=7,选择最高的标称频率。

BCSCTL2 基本时钟系统控制寄存器2

SELM.1 SELM.0 DIVM.1 DIVM.0 SELS DIVS.1 DIVS.0 DCOR

SELM.1 SELM.0 选择MCLK时钟源

0 时钟源为DCOCLK(默认)

1 时钟源为DCOCLK

2 时钟源为LFXT1CLK(对于MSP430F11/12X),时钟源为XT2CLK(对于MSP430F13/14/15/16X);

3 时钟源为LFTXTICLK。

DIVM.1 DIVM.0 选择MCLK分频

0 1分频(默认)

1 2分频

2 4 分频

3 8 分频

SELS 选择SMCLK时钟源

0 时钟源为DCOCLK(默认)

1 时钟源为LFXT1CLK(对于MSP430F11/12X),时钟源为XT2CLK(对于MSP430F13/14/15/16X)。

DIVS.1 DIVS.0 选择SMCLK分频。

0 1分频

1 2分频

2 4分频

4 8分频

DCOR 选择DCO电阻

0 内部电阻

1 外部电阻

PUC信号之后,DCOCLK被自动选择MCLK时钟信号,根据需要,MCLK的时钟源可以另外设置为LFXT1或者XT2。设置顺序如下:

[1] 复位OscOff

[2] 清除OFIFG

[3] 延时等待至少50us

[4] 再次检查OFIFG,如果仍然置位,则重复[3]、[4]步骤,直到OFIFG=0为止。

例子:

#include <msp430F2234.h>
void main (void)
{
unsigned int i;
P2DIR = 0x10; //设置P2.4输出
P2SEL = 0x10; //设置P2.4口为外围模块用作MCLK信号输出
BCSCTL1 &= ~XT2OFF; //使TX2有效,TX2上电时默认为关闭的.
do
{
IFG1 &= ~OFIFG; //清振荡器失效标志
for(i= 0xff; i>0; i--); //延时,待稳定.
}
while ((IFG1 & OFIFG)!=0); //若振荡器失效标志有效
BCSCTL2 |= SELM1; //使MCLK = XT2
for(;;);
}

MSP430X5XX的时钟系统与低功耗模式

MSP430X5XX的时钟系统与低功耗模式

MSP430 & KYON 2010-06-01 08:14:20 阅读246 评论3   字号: 订阅

引言:全新改版,关于MSP430x5xx时钟系统与低功耗模式介绍。用到低功耗的时候,不得不仔细的看文档,做比较实验,真繁琐。
430系列单片机中有各种时钟信号,第一次接触免不了一头雾水。而且如果想发挥430低功耗的优势,就不得不对它的时钟系统(Unified Clock System)有所了解。1. 时钟模块总览

转存失败重新上传取消

这是MSP430X5XX的时钟系统框图。乍一看很复杂,不过简化之后就清楚多了

转存失败重新上传取消

整个系统主要分为左右两大块,左边是时钟源模块,右边是时钟调整模块。
左边的模块——XT1、内建时钟(DCO)、XT2用来产生时钟源,也就是右边最终输出的时钟信号的基准信号。
而时钟调整模块负责将源时钟信号选通、分频输出成系统使用的三大时钟信号——MCLK,ACLK和SMCLK,分别是系统的主时钟(供CPU使用),辅助时钟(可给外设模块使用,也可以从管脚引出),子系统时钟(外设模块时钟,可从管教引出)。2. 调整模块
调整模块的主要工作分为两步:选通、分频。ACLK调整模块如下图所示

转存失败重新上传取消左端进线是时钟信号。红色标出来的是XT1CLK信号。由图易知,XT1CLK要变成ACLK信号,需要经过两次选通,一次分频,也就是我红色标出来的路径。第一个选通器可通过设置SELA来控制,分频器可以通过设置DIVA来控制,正常工作的时候,最后一个选通器总是打开的,这里不讨论。换言之,要想设置ACLK,我们只需要配置SELA和DIVA。例如,如果我们希望ACLK是XT1CLK的2分频的话,需要设置SELA={0},DIVA={1}。再给一个来自TI的例子

UCSCTL4 |= SELA_2;                        // Set ACLK = REFO

这句话将ACLK的源设置为REFO。
SELA具体的含义如下图所示:顺便说一句,TI的这个例子没有设置DIVA,用了默认值。3.REFO、VLO和DCO
有了上述的理解,再参照slau208e,我相信不难写出我们想要的代码。不过整个UCS中最有特色的部分还没有介绍,那就是REFO、VLO和DCO。
REFO是内建的参考时钟,它很稳定,可以作为FLL的时钟基准(FLL是什么待会再说)。MSP430F5418上的REFOCLK是32.768kHz的。
VLO是一个内建的低频时钟。在5418上,它的频率是8.6kHz。
DCO是Digitally-Controlled Oscillator,数控晶振。它可以产生频率很高的时钟。通过配置,它可以产生百兆以上的时钟信号。在5418上,电压等级1的时候,不用XT2,有FLL(这个FLL到底是什么呢?),我调出的最高频率是26MHz。
吊了这么半天胃口,来说一下这个FLL是什么东西。
FLL是Frequency Locked Loop,锁频环。先来个特写 FLL的作用是稳定DCO的输出,让它不受扰动的影响。它是一种反馈。前边我们说过,REFO是个很稳定的内部时钟信号。FLL可以拿REFOCLK做参考,以此来自动校准并稳定DCOCLK和DCOCLKDIV。除了REFOCLK之外,还可以用XT1或XT2做FLL的参考信号。当启用FLL之后(默认启用),图中的DCO,MOD可以不用设置,FLL会自行调整这两个值。DCO输出的频率与以下几个量有关:

FLLD,FLLN,FLLREFDIV,FLLREFCLK

计算公式如下:

fDCOCLK = D × (N + 1) × (fFLLREFCLK ÷ n)
fDCOCLKDIV = (N + 1) × (fFLLREFCLK ÷ n)

其中

D=1,2,4,8,16,32(对应FLLD=0,1,2,3,4,5)
N=FLLN
n=1,2,4,8,12,16(对应FLLREFDIV=0,1,2,3,4,5)
fFLLREFCLK为REFOCLK,XT1或XT2的实际频率。

比如,我们想设置DCO输出1MHz的时钟信号,可以设置这样一组值:

FLLD=1,对应D=2;FLLN=60;FLLREFDIV=2,对应n=4;fFLLREFCLK=fREFOCLK=32.768kHz

所以

fDCOCLK=2×(60+1)×(32.768/4)=999.424kHz,fDCOCLKDIV=fDCOCLK/2=499.712kHz

实际测试fDCOCLK=1.006MHz。4.频率范围和电压等级
MSP430把内核的工作频率划分为若干范围,比如543x和541x的工作频率就被分为了8个范围。每个范围又被DCO这个参数分为了32个小段,每个小段又被MOD分为32个小小段(待验证)。所以可以把DCO看作是粗调旋钮,MOD是微调旋钮。另外,需要注意的是,这个频率范围是指DCO的频率范围,当DCO被禁用的时候,这个范围就没意义了。
喜欢超频的同学都知道,核心电压和工作频率之间有着密切的关系。430单片机也是如此,它有4个电压等级,涵盖了从1.2V到2V广阔的核心电压范围。
一般来说,核心电压越高,频率范围越大,功耗越大;核心电压越低,频率范围越小,功耗越小。
当电压等级为1的时候(默认电压等级),5418的各个频率范围的可用上下限如下表所示:

5418各频率范围上下限详表

从这个表中可以看出,除了前边谈到的几个参数,还有大量的其他寄存器参数。具体的含义可以从参考文献中查知。如果觉得翻看pdf太累的话,可以向我索要xls格式的详表(moosewolerATgmailDOTcom),上边有我加的批注和公式,可以帮助大家方便的设置频率。5.UCS关键寄存器
详表中我用颜色对8个UCS相关的寄存器进行了分组。这8个寄存器可以分为6组:

  • UCSCTL0、UCSCTL1:DCO配置寄存器。配置DCO频率范围。禁用FLL的时候,设置DCO的开环输出频率。
  • UCSCTL2、UCSCTL3:FLL配置寄存器。这个已经在3.REFO、VLO和DCO中讲过了
  • UCSCTL4、UCSCTL5:MCLK、SMCLK、ACLK配置寄存器。这个在2. 调整模块中讲过了
  • UCSCTL6:外置晶振配置寄存器。可以设定外接晶振的驱动电流,内置电容等参数。
  • UCSCTL7:UCS模块错误寄存器。可以指示UCS当前的错误状态
  • UCSCTL8:UCS请求寄存器。这个后面解释

因为54xx系列单片机内置晶振(REFO),所以

  • FLL配置寄存器是最重要的一组寄存器,它直接和工作频率相关。
  • 其次是DCO配置寄存器,说它重要,只是因为DCORSEL这个参数在这组寄存器中。当设置的频率无法达到的时候,先确定一下频率范围是否合适。

这两个寄存器弄明白了,就可以让UCS输出正常的工作频率了。
其他的寄存器都各有各的作用,具体怎么用可以查看参考文献。6.MSP430的低功耗模式A.1 一个设置时钟频率的样例

void McuSetFrequency(void)
{
    // 关看门狗
    WDTCTL = WDTPW+WDTHOLD;
    // 关FLL,等设置完成后,再开启FLL
    __bis_SR_register(SCG0);
    // MCLK=SMCLK=1MHz; ACLK=32.768kHz; FLL允许
    UCSCTL0    = 0x0000;
    UCSCTL1    = 0x0010;
    UCSCTL2    = 0x103C;
    UCSCTL3    = 0x0022;
    UCSCTL4    = 0x0233;
    UCSCTL5    = 0x0000;
    UCSCTL6    = 0x0101;
    UCSCTL7    = 0x0000;
    UCSCTL8    = 0x0007;
    // 重新开启FLL
    __bic_SR_register(SCG0);
    // 延时等待FLL自动调整DCO,250000是根据8MHz时钟设置的。
    // 最惨的状况是FLL把DCO从0开始调到31后才稳定,这个延时即是根据这种情况算得的。
    __delay_cycles(250000);
    // 等待异常标志清除
    // 用VLO和REFO做MCLK的时钟源的时候,不需要考虑这些标志,直接用。do
    {
        // 清异常标志
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
        SFRIFG1 &= ~OFIFG;                    
    }while (SFRIFG1&OFIFG);     // 看看异常是否还在
}

参考文献:
[slau208e] MSP430x5xx Family User Guide
[slas612]   MSP430F543x(A), MSP430F541x(A) Mixed Signal Microcontroller
[slac166o] MSP430F54xx Code Examples Rev0

注:
所有带文献编号的参考文献可以从www.ti.com网站获得。http://moosewoler.blog.163.com/blog/static/698660520105181420966/

【嵌入式】MSP430系统实时时钟RTC学习日志(完善中)相关推荐

  1. STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读

    记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...

  2. 【STM32学习】实时时钟 —— RTC

    [STM32学习]实时时钟 -- RTC 零.参考 一.工作原理 1.RTC介绍 2.工作过程 二.相关寄存器 三.代码说明 1.rtc初始化 2.关于中断 3.中断配置代码(仅供参考) 3.1 秒中 ...

  3. stm32之实时时钟RTC(掉电计时保持、秒中断、闹钟中断、溢出中断)

    前言:stm32系列产品普遍都有实时时钟RTC模块,它提供一个掉电保持计时功能,掉电后由后备供电区域供电.除了提供时间和日期之外,还可以设置闹钟提醒,且可以在待机模式下设置闹钟唤醒系统.在一些小容量. ...

  4. linux设备树例程,iTOP-iMX6-设备树内核-实时时钟RTC以及Linux-c测试例程

    当 Linux 开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电 池,以至于在系统关机的时候仍然可以工作的器件. Linux 有两个系列广泛兼容的用户空间 RTC 设备节点: • ...

  5. imx6 linux 时钟,迅为-iMX6开发板-驱动-实时时钟RTC以及Linux-c测试例程

    当Linux开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电 池,以至于在系统关机的时候仍然可以工作的器件. Linux 有两个系列广泛兼容的用户空间 RTC 设备节点: /de ...

  6. ESP32设备驱动-DS3231实时时钟(RTC)驱动

    DS3231实时时钟(RTC)驱动 1.DS3231介绍 DS3231 是一款低成本.极其精确的 I2C 实时时钟 (RTC),具有集成的温度补偿晶体振荡器 (TCXO) 和晶体. 该设备包含电池输入 ...

  7. ESP8266-Arduino编程实例-PCF8563实时时钟(RTC)驱动

    PCF8563实时时钟(RTC)驱动 1.PCF8563介绍 PCF8563 是针对低功耗优化的 CMOS 实时时钟 (RTC) 和日历. 还提供了可编程时钟输出.中断输出和低电压检测器. 所有地址和 ...

  8. 蓝桥杯嵌入式 ---- “空手套白狼“ 之 实时时钟 RTC

    文章目录 前言 一.RTC初始化 二.RTC应用函数 三.RTC中断函数 四.RTC在主函数的应用 前言 本文是基于嵌入式开发板CT117E,stm32f103RBT6."空手套白狼&quo ...

  9. 实时时钟 (RTC)

    文章目录 一.RTC简介 二.主要特性 三.功能描述 1. 概述 2. 复位过程 3. 读RTC寄存器 4. 配置RTC寄存器 5. RTC标志的设置 四.RTC寄存器描述 1. RTC控制寄存器高位 ...

最新文章

  1. Element-ui表格选中回显
  2. 自己珍藏一些有趣的Python子程序
  3. DL之DeconvNet:DeconvNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  4. ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调
  5. [NOIP2005] 提高组 洛谷P1051 谁拿了最多奖学金
  6. origin 设置数据显示位数
  7. 记录一个crontab的中使用python脚本的坑
  8. Flutter进阶—网络与本地异步加载资源
  9. USBCAN上位机软件的使用
  10. EPUB、CAJ 、PDF 格式的区别,有什么好用的安卓epub阅读器
  11. mysql notifier启动_开机的时候mysql notifier报错无法启动怎么办?
  12. Calibre中使用DeDRM插件进行Kindle电子书解锁
  13. POJ3169 Layout , 最短路算法解差分约束问题
  14. 爱她就送ta一场樱花雨
  15. 大前端 (六) -- HTML5 标签 5
  16. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.6 异构建模的方法...
  17. 按键精灵脚本-windows桌面自动化操作
  18. 手机5g什么时候普及_5G网络什么时候普及,5G手机什么时候买比较合适?
  19. UIResponder事件处理 _Lenny Kwok
  20. 仙剑5手游服务器维护,仙剑奇侠传手游5月20日活动有哪些?5.20日例行维护时间...

热门文章

  1. Python神经网络编程 | 专场送书活动
  2. 51单片机串口SBUF是特殊寄存器,只要不写入新的数据就不会消失,写入新的数据就会覆盖之前的,单片机复位后初始值为不确定值
  3. c语言寄存器头文件共用重复定义,C语言头文件的使用
  4. 微信小程序WebView嵌入别人网页的解决办法
  5. 宽带响应超时服务器无应答,宽带服务器无应答怎么办
  6. 项目初期BUG记录-20220622
  7. 1分钟链圈 | 比特大陆推出挖矿路由器!苏宁正式上线区块链产品“星际家园”...
  8. 短视频怎么获得高流量?简单小技巧,让你的短视频被更多人看到
  9. windows PHP 5 版本的下载
  10. Windows9x系统下汉字输入法的基本原理