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

发布者:HarmoniousSoul最新更新时间:2015-11-10 来源: eefocus关键字:MSP430X5XX  时钟系统  低功耗模式 手机看文章 扫描二维码
随时随地手机看文章
引言:全新改版,关于MSP430x5xx时钟系统与低功耗模式介绍。用到低功耗的时候,不得不仔细的看文档,做比较实验,真繁琐。

430系列单片机中有各种时钟信号,第一次接触免不了一头雾水。而且如果想发挥430低功耗的优势,就不得不对它的时钟系统(Unified Clock System)有所了解。
1. 时钟模块总览
An Introduction to MSP430x5xx Unified Clock System - Moose W. Oler - 第一个字母是D
这是MSP430X5XX的时钟系统框图。乍一看很复杂,不过简化之后就清楚多了
 
An Introduction to MSP430x5xx Unified Clock System - Moose W. Oler - 第一个字母是D
整个系统主要分为左右两大块,左边是时钟源模块,右边是时钟调整模块。
左边的模块——XT1、内建时钟(DCO)、XT2用来产生时钟源,也就是右边最终输出的时钟信号的基准信号。
而时钟调整模块负责将源时钟信号选通、分频输出成系统使用的三大时钟信号——MCLK,ACLK和SMCLK,分别是系统的主时钟(供CPU使用),辅助时钟(可给外设模块使用,也可以从管脚引出),子系统时钟(外设模块时钟,可从管教引出)。
2. 调整模块
调整模块的主要工作分为两步:选通、分频。ACLK调整模块如下图所示
An Introduction to MSP430x5xx Unified Clock System - Moose W. Oler - 第一个字母是D
左端进线是源时钟信号。红色标出来的是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具体的含义如下图所示:
An Introduction to MSP430x5xx Unified Clock System - Moose W. Oler - 第一个字母是D
顺便说一句,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。[page]
吊了这么半天胃口,来说一下这个FLL是什么东西。
FLL是Frequency Locked Loop,锁频环。先来个特写
MSP430X5XX的时钟系统与低功耗模式 - Moose W. Oler - 重新分类
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的各个频率范围的可用上下限如下表所示:
从这个表中可以看出,除了前边谈到的几个参数,还有大量的其他寄存器参数。具体的含义可以从参考文献中查知。如果觉得翻看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

关键字:MSP430X5XX  时钟系统  低功耗模式 引用地址:MSP430X5XX的时钟系统与低功耗模式

上一篇:MSP430:P1OUT=4、P1OUT |=4、P1OUT &-=~8的意思
下一篇:MSP430心得体会

推荐阅读最新更新时间:2024-03-16 14:38

快速学Arm(22)--lpc2300系统时钟
这些天又忙着一些活,没有时间来看Arm.开发板要从2478改为2378,我就又开始翻看2378的资料.其实二者差不多,不过2478支持LCD,而2378不支持,其他的大同小异. 前面讲过了一些关于时钟,PLL之类的东西,不过我本人也在学习的过程中.如果拿开发板提供的C语言的模板直接写程序,快速上手应该不是难事,索性没有特别紧迫的活,学得细一点没什么坏处.查看了一些资料,再来分析一下系统时钟. 和前面讲得很像,LPC2300系列ARM有3个时钟源,分别是主振动器,内部RC振动器,RTC振动器,每个振动器可根据不同应用要求选择使用.上面就是示意图.其中:内部RC振动器频率为4MHz,可用作看门狗定时器时钟源,RTC时钟源,
[单片机]
快速学Arm(22)--lpc2300<font color='red'>系统</font><font color='red'>时钟</font>
TI - MCU - MSP430使用指南6 -> CS时钟系统
MSP430产品能做到超低功耗主要得益于对时钟的严谨设计,在所有MSP430产品中,总共有以下几种时钟类型: MCLK : Master Clock,MCU主时钟,决定着CPU,CRC等运行的速度。 SMCLK:Subsystem Master Clock,子系统时钟,这个时钟总是由MCLK分频得到,可以是1、2、4、8等分频,与MCLK属于同步时钟,主要可用于常规外设的时钟源。 ACLK:Auxiliary clock,辅助时钟,可以由XT1CLK(外部时钟)或REFCLK(内部时钟)产生,这个时钟频率必须在32KHz左右,最常规的应该在32768Hz,不能超过40KHz。 VLOCLK:Internal very-low-
[单片机]
TI - MCU - MSP430使用指南6 -> CS<font color='red'>时钟</font><font color='red'>系统</font>
STM8 AWU超低功耗模式
__interrupt void AWU_IRQHandler(void) { AWU- CSR = AWU- CSR; /* 清除更新中断标志位 */ } void Enter_Halt() { CLK_DeInit(); AWU_DeInit(); AWU_Cmd(ENABLE); CLK_SlowActiveHaltWakeUpCmd(ENABLE);//进入超低功耗模式 asm( halt ); } 欢迎使用Markdown编辑器写博客 本Markdown编辑器使用 StackEdit 修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Mark
[单片机]
STM32 系统时钟和SysTick定时器
1.STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL (1)HSI是高速内部时钟,RC振荡器,频率为8MHz; (2)HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz – 16MHz; (3)LSI是低速内部时钟,RC振荡器,频率为40KHz; (4)LSE是低速外部时钟,接频率为32.768KHz的石英晶体; (5)PLL为锁相环倍频输出,严格的来说并不算一个独立的时钟源,PLL的输入可以接HSI/2、HSE或者HSE/2。倍频可选择为2 – 16倍,但是其输出频率最大不得超过72MHz。 其中,40kHz的LSI供独
[单片机]
STM32入门系列-STM32时钟系统时钟初始化配置函数
在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main。那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使用库函数编写的LED程序,在system_stm32f10x.c文件中可以找到SystemInit()函数,SystemInit()代码如下: void SystemInit (void) { /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ /* Set HSION bit */ RCC- CR |= (ui
[单片机]
英飞凌多模式反激控制器改善中高端LED照明性能并降低功耗
2016年3月7日,德国慕尼黑讯 英飞凌科技股份公司(FSE: IFX / OTCQX: IFNNY)近日推出一款面向LED应用的多模式反激控制器IC。它可缩短灯具 点亮时间 ,节省器件数量,降低运行和待机功耗。IRS2982S专为满足中高端LED设计的性能和效率要求而设计,是一款适合各种室内、室外、办公室和工厂照明方案需求的多功能控制器解决方案。 IRS2982S配备600 V高压启动单元,使得 点亮时间 小于0.5秒,而且节省了外部分压电阻。可配置的临界导通模式(CrCM)和断续导通模式(DCM)确保它满足各种各样的应用需求,适合全电流范围内的调光LED转换器设计。IRS2982S的主要应用是CV(恒压)模式的隔离
[电源管理]
英飞凌多<font color='red'>模式</font>反激控制器改善中高端LED照明性能并降<font color='red'>低功耗</font>
STM32F407系统时钟解析
STM32F4时钟系统初始化是在system_stm32f4xx.c中的SystemInit()函数中完成的。对于系统时钟关键寄存器设置主要是在SystemInit函数中调用SetSysClock()函数来设置的。我们可以先看看SystemInit()函数体: //@brief Setup the microcontroller system // Initialize the Embedded Flash Interface, the PLL and update the // SystemFrequency variable. //@param None //@retval None void System
[单片机]
STM32F407<font color='red'>系统</font><font color='red'>时钟</font>解析
STM8L低功耗HALT模式一些总结
进入HALT注意事项 将未使用到的IO口设置为输出低; 关闭所有用到的外设时钟(如 ADC、USART等); 失能所使用到的外设; 实测进入HALT模式待机约为0.3uA 下面列出示例代码,如有错误,还请广大网友指出。 ^_^ #include stm8l15x.h uint8_t sys_1ms_flg = 0; uint16_t SleepTime = 0; /*LED工作2S灭 进入HALT模式 外部唤醒 */ void main(void){ CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,ENABLE); /* 使能外设时钟 */ TIM
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved