MSP430F5x系列时钟系统
- 格式:wps
- 大小:15.00 KB
- 文档页数:2
MSP430F54系列UCS时钟1:UCS(Unified Clock System)包含5 个时钟源:XT1CLK:可以用于低频率的32.768KHZ 或者4~32MHZ 的频率。
但不是每一个设备都支持高频率的,有些只支持32.768KHZ。
VLOCLK:内部低功耗,低频率的时钟,典型值为10KHZ。
REFOCLK:内部时钟,典型值32.768KHZ。
DCOCLK: Internal digitally-controlled oscillator (DCO) that can be stabilized by the FLL。
XT2CLK:高频时钟源,外部时钟,4 MHz 到32 MHz。
2:我们可用的从UCS 模块出来的3 个时钟:ACLK:辅助时钟。
MCLK:主时钟。
;SMCLK:系统子时钟。
3:时钟操作:After a PUC, the UCS module default configuration is:1)XT1 in LF mode is selected as the oscillator source for XT1CLK. XT1CLK is selected for ACLK.2)DCOCLKDIV is selected for MCLK.3)DCOCLKDIV is selected for SMCLK.4)FLL operation is enabled and XT1CLK is selected as the FLL reference clock, FLLREFCLK.5 )XIN and XOUT pins are set to general-purpose I/Os and XT1 remains disabled until the I/O ports areconfigured for XT1 operation.6 )When available, XT2IN and XT2OUT pins are set to general-purpose I/Os and XT2 is disabled.4:设置时钟的相关寄存器:。
msp430f5419/38学习笔记之时钟系统(2011-11-30 10:41:30)分类: msp430标签:msp430f541xmsp430f543xucs时钟系统注:msp5419/38中,如果你使用SMCLK做TIMER_A的时钟,那么进入低功耗3或低功耗4是不会把SMCLK关掉的,这点5系列和其他系列的不一样。
UCS模块是一个低成本超低功耗系统,通过选择使用3个内部时钟信号,用户可以得到性能和功耗的最佳平衡点。
UCS可以由软件配置其工作模式,如配置成:不需要任何外部器件、使用1或 2个外部晶振等。
一、时钟系统UCS模块具有5个时钟源:XT1CLK:低频/高频振荡器,既可以与低频 32768HZ钟振、标准晶振、外部振荡器,又可以与外部4M-32MHZ时钟源一起使用,XT1CLK可以作为FLL模块内部的参考时钟。
有些芯片XT1CLK只允许使用外部的低频晶振,具体可参考数据手册;XT2CLK:可选高频振荡器,可与标准晶振,振荡器或者 4MHZ~32MHZ外部时钟源一起使用;VLOCLK:内部低功耗、低频振荡器,频率典型值为10KHZ;REFOCLK:内部低频振荡器,典型值为 32768HZ,可作为 FLL基准时钟源;DCOCLK:可以通过 FLL来稳定的内部数字控制振荡器(DCO);DCOCLK经过 FLL分频后可得DCOCLKDIV。
UCS模块可以提供3种时钟信号:ACLK:辅时钟;MCLK:系统主时钟;SMCLK:子系统主时钟。
二、UCS操作PUC之后,UCS的默认配置模式如下:XT1CLK 选择LF模式下的XT1作为时钟源,ACLK 选择 XT1CLK 作为时钟源;MCLK 选择DCOCLKDIV作为时钟源;SMCLK 选择DCOCLKDIV作为时钟源;FLL操作使能,FLL基准时钟(FLLREFCLK)选择XT1CLK;XIN 和 XOUT作普通IO 口使用,禁止了 XT1 功能,直到 I/O 口重新配置为 XT1 模式;如果有 XT2IN 和XT2OUT,则一并配置为普通 IO 口,禁止 XT2 功能。
MSP430的时钟设置MSP430大部分都有三时钟脉冲可供运行时选择,这三个时钟是,1)辅助时钟ACLK;2)系统主时钟MCLK;3)子系统时钟SMCLK。
这三种时钟脉冲的选择主要靠下面三个控制寄存器来完成,这三个控制寄存器是1)控制寄存器DCOCT其存储单元地址是56h;2) 基本始终控制寄存器1,BCSCTL1,地址57h;3) 基本始终控制寄存器2,BCSCTL2,地址58h。
下面对这三个寄存器的控制的软件状态状态进行介绍。
1)控制寄存器DCOCTLDCO2;DCO1;DCO0这三位共八个状态,控制时钟脉冲的8个频段。
000~111对应0~7;频率由低到高8个频段。
MOD.4~MOD.0这5为共32种状态,定义在32个周期中插入插入其他频率。
DCO2=0x80;DCO1=0x40;DCO0=0x20;MOD4=0x10;MOD3=0x08;MOD2=0x04;MOD1=0x02;MOD0=0x01其中TX2OFF为0,开启TX2振荡器,为1关闭;XTS=0开启低频模式,1开启高频模式;DIVA1和DIVA0控制分频模式0 0 不分频0 1 2分频1 0 4分频1 1 8分频TX5V一般设置为0RSEL2~RSEL0三位决定八个频段的不同频率,这样,RSEL2~RSEL0和DCO2~DCO0共可实现8*8=64个不同的频率。
由于430没有位操作,所以定义了每一位状态对应的名称:TX2OFF=0x80TXS=0x40DIVA1=0x20DIVA0=0x10TX5V=0x08RSEL2=0x04RSEL1=0x02RSEL0=0x01也就是每位所在的位置为1,其余位为0,这样,要对某一位操作,就可通过运算,在不改变其他位的情况下,对某一位进行置1或清0(如何做后面讲)。
SELM.1- SELM.0DIVM.1- DIVM.0SELS时钟源选择DIVS.1-DIVS.0 DCOR0 0 默认DCOCLK0 0默认MCLK=DCOCLK00 默认SMCLK=MCLK选择电阻0 1选择DCOCLK0 1 2分频选择SMCLK01 MCLK 2分频内电阻1 0 选择XT2CLK1 0 4分频默认选择DCOCLK10 MCLK 4分频或外电阻1 1 选择LFXTICLK1 18分频11 MCLK 8分频SELM1=0x80;SELM0=0x40;DIVM1=0x20;DIVM0=0x10;SELS=0x08;DIVS1=0x04;DIVS0=0x02;DCOR=0x01;下面看如何让在保证其他位不变的情况下给某一位清0或置1.例1要给BCSCTL2的bit3清0。
单片机原理及应用第六讲 MSP430F5XX6XX的时钟模块(UCS)实验报告报告人:实验内容1、实验1 6638芯片的上电默认时钟ACLK = REFO = 32.768kHz, MCLK = SMCLK =Default 1MHz2、实验2 时钟设置实例ACLK = REFO = 32kHz, MCLK = SMCLK =8MHz3、实验3 时钟设置实例ACLK = REFO = 32kHz, MCLK = SMCLK =12MHz4、实验3 时钟设置实例ACLK = REFO = 32kHz, MCLK = SMCLK =20MHz实验步骤步骤:(1) 将PC 和板载仿真器通过USB 线相连;(2) 打开CCS 集成开发工具,选择样例工程或自己新建一个工程,修改代码;(3) 选择对该工程进行编译链接,生成.out 文件。
然后选择,将程序下载到实验板中。
程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3 查看具体函数。
也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。
再按下实验板的复位键,运行程序。
(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议上电运行程序)。
关键代码:实验1:Main(){WDTCTL = WDTPW+WDTHOLD; // Stop WDTP4DIR |= BIT1; // P4.1 outputP1DIR |= BIT0; // ACLK set out to pinsP1SEL |= BIT0;P3DIR |= BIT4; // SMCLK set out to pinsP3SEL |= BIT4;while(1){P4OUT ^= BIT1;__delay_cycles(60000); // Delay}实验2:#include <msp430.h>int main(void){volatile unsigned int i;WDTCTL = WDTPW+WDTHOLD; // Stop WDTP4DIR |= BIT1; // P1.1 outputP1DIR |= BIT0; // ACLK set out to pinsP1SEL |= BIT0;P3DIR |= BIT4; // SMCLK set out to pinsP3SEL |= BIT4;UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2; // Set ACLK = REFOUCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx// Loop until XT1,XT2 & DCO stabilizes ‐In this case only DCO has to stabilize do {UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flag__bis_SR_register(SCG0); // Disable the FLL control loopUCSCTL1 = DCORSEL_5; // Select DCO range 16MHz operationUCSCTL2 |= 249; // Set DCO Multiplier for 8MHz// (N + 1) * FLLRef = Fdco, (249 + 1) * 32768 = 8MHz__bic_SR_register(SCG0); // Enable the FLL control loop// Worst‐case settling time for the DCO when the DCO range bits have been// changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx UG for // optimization , 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle __delay_cycles(250000);while(1){P4OUT ^= BIT1; // Toggle P1.1__delay_cycles(600000); // Delay}}实验3:#include <msp430.h>int main(void){volatile unsigned int i;WDTCTL = WDTPW+WDTHOLD; // Stop WDTP4DIR |= BIT1; // P1.1 outputP1DIR |= BIT0; // ACLK set out to pinsP1SEL |= BIT0;P3DIR |= BIT4; // SMCLK set out to pinsP3SEL |= BIT4;UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2; // Set ACLK = REFOUCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx// Loop until XT1,XT2 & DCO stabilizes ‐In this case only DCO has to stabilizedo {UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flag__bis_SR_register(SCG0); // Disable the FLL control loopUCSCTL1 = DCORSEL_5; // Select DCO range 16MHz operationUCSCTL2 |= 375; // Set DCO Multiplier for 8MHz// (N + 1) * FLLRef = Fdco, (249 + 1) * 32768 = 8MHz__bic_SR_register(SCG0); // Enable the FLL control loop// Worst‐case settling time for the DCO when the DCO range bits have been// changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx UG for // optimization , 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle __delay_cycles(250000);while(1){P4OUT ^= BIT1; // Toggle P1.1__delay_cycles(600000); // Delay}}实验3:#include <msp430f6638.h>void SetVcoreUp (unsigned int level);void main(void){volatile unsigned int i;WDTCTL = WDTPW+WDTHOLD; // Stop WDTP4DIR |= BIT1; // P4.1 outputP1DIR |= BIT0; // ACLK set out to pinsP1SEL |= BIT0;P3DIR |= BIT4; // SMCLK set out to pinsP3SEL |= BIT4;// Increase Vcore setting to level3 to support fsystem=25MHz // NOTE: Change core voltage one level at a time.. SetVcoreUp (0x01);SetVcoreUp (0x02);SetVcoreUp (0x03);UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFO UCSCTL4 |= SELA_2; // Set ACLK = REFO__bis_SR_register(SCG0); // Disable the FLL control loop UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operationUCSCTL2 = FLLD_1 + 609; // Set DCO Multiplier for 20MHz// (N + 1) * FLLRef = Fdco// (609 + 1) * 32768 = 20MHz// Set FLL Div = fDCOCLK/2__bic_SR_register(SCG0); // Enable the FLL control loop// Worst‐case settling time for the DCO when the DCO range bits have been// changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx // UG for optimization.// 32 x 32 x 25 MHz / 32,768 Hz ~ 780k MCLK cycles for DCO to settle__delay_cycles(782000);// Loop until XT1,XT2 & DCO stabilizes ‐In this case only DCO has to stabilize do{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flagwhile(1){P4OUT ^= BIT1; // Toggle P4.1__delay_cycles(600000); // Delay}}void SetVcoreUp (unsigned int level){PMMCTL0_H = PMMPW_H; // Open PMM registers for write// Set SVS/SVM high side new levelSVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;// Set SVM low side to new levelSVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;while ((PMMIFG & SVSMLDLYIFG) == 0); // Wait till SVM is settledPMMIFG &= ~(SVMLVLRIFG + SVMLIFG); // Clear already set flagsPMMCTL0_L = PMMCOREV0 * level; // Set VCore to new levelif ((PMMIFG & SVMLIFG))while ((PMMIFG & SVMLVLRIFG) == 0); // Wait till new level reached// Set SVS/SVM low side to new levelSVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;// Lock PMM registers for write accessPMMCTL0_H = 0x00;}实验现象分析实验1:示波器探头接P1.0时,测得频率为32kHz左右,接P3.4时,测得频率大概为1MHz。
基于MSP430单片机的电子时钟设计说明
一、需求分析
本设计的目标是基于MSP430单片机来设计一款电子时钟。
电子时钟
可以用来显示当前的时间,比如时、分、秒;同时还具有闹钟功能,即可
以设置每天一些时刻提醒用户,提醒用户做件事情。
设计时,要注意以下
几个方面:
1、时间流逝的准确性:电子时钟的核心功能是准确显示当前的时间,即时针、分针、秒针在正确地流逝;同时也要考虑时间的准确性,用户可
以设置任意时间,时钟计时要按照设置的时间进行计时。
2、系统稳定性:电子时钟的系统稳定性极其重要,不能因为短暂的
停电等扰动,导致系统失去稳定,时间乱跳。
3、外观设计:在外观设计方面,电子时钟要求具有精美、简约的外观,而且要求清晰显示时间内容,用户可以视觉上感受时间的运行,同时
操作简单,操作界面友好;同时,为了满足用户的要求,要能够设置闹钟,并且有红色指示灯和蜂鸣器来提醒。
二、设计要求
1、MSP430单片机:采用MSP430F169作为主控制器,芯片的16位CPU具有较强的数据处理能力,可以有效调整时间性能,满足电子时钟计
时要求。
2、时间及闹钟设置:采用4×4键盘模块作为时间及闹钟设置。
5529时钟系统
1.时钟源和时钟信号
5系列它主要是有5个时钟源(XT1、VLO、REFO、DCO、XT2),三个时钟信号(ALK、MCLK、SMCLK)。
XT1CLK:有两种工作模式LF模式和HF模式(有些设备只支持LF模式)。
可低至32768Hz的标准源,也可配置为4MHz到32MHz的HF模式。
同时,XT1DRIVE应该根据晶振配置其驱动能力(频率越高、驱动能力需要越高,否则会不起震)。
可用作FLL时钟参考源。
在BYPASS模式中,XT1会断电,而XIN则会接收外部的时钟信号输入,XOUT则被配置为普通I/O引脚。
VLOCLK:低功耗、频率典型配置为10KHz。
可用在对时钟精度要求不高的场合以降低功耗。
REFOCLK:低频振荡器,一般为32768Hz,可用作FLL的时钟参考源。
DCOCLK:内部RC振荡器,可通过FLL锁定在一个稳定的频率上。
XT2CLK:高频振荡器,为4MHz到32MHz。
也可作为FLL的时钟参考源。
XT2与XT1的区别除了在没有LF模式之外,XT2在低功耗模式下永远不会被关闭。
ACLK:一般设置为低速时钟源,与低速外设相匹配。
MCLK:CPU与SYS的时钟信号。
SMCLK:一般配置为高速时钟源。
与高速外设相匹配。
在不同低功耗模式下,各个时钟信号的开关情况不同。
2.DCOCLK产生原理
通过SELREL用来选择FLLREFCLK的时钟源,通过一个分频器之后就进入了频率积分器,这个用来当做标准源。
另一方面通过DCORSEL的配置,选择DC发生器产生的频率段(总共有8段)。
然后通过DCO和Modulator来选择一个初始的DCOCLK。
然后通过一个Prescaler和Divider进行一个分频,将分频后的时钟频率输入频率积分器,然后进行对比,通过调节DCO和MOD 的调节使两个输入的频率稳定在一个微小的差距之内。
这时候DCOCLK就稳定下来了。
所以公式为:f DCOCLK = D × (N + 1) × (f FLLREFCLK ÷ n);f DCOCLKDIV = (N + 1) × (f FLLREFCLK ÷ n)。
即如果我们要得到一个相应的f dcoclk则我们需要配置FLLD、FLLN、FLLREFCLK。
3.在低功耗模式中,外设请求信号唤醒相应时钟
对ACLK_REQ,MCLK_REQ,SMCLK_REQ置1,则如果外设向UCS请求时钟源,则可无视如OSCOFF=1的低功耗设置。
此时时钟信号就会处于活动状态。
如果请求源不是活动的,软件NMI应该执行请求。
如ACLK源自XT1,但XT1没使能,则振荡器错误条件发生,这时软件就会去处理。
4.UCS失效保护操作
如果晶体振荡器有打开却没有正确的操作,则会使相应的晶体振荡器错误位置1(XT1LFOFFG、XT1HFOFFG、XT2OFFG)。
一旦置1之后,必须软件清零,若错误仍然存在,错误位还是会自动置1。
XT1在LF模式下,且是FLL的时钟源,如果晶振发生错误则FLLREFCLK会自动选择REFO。
如果XT1是工作在HF模式下,晶振发生错误时,此时它没有FLLREFCLK去选择,它会自己降低频率以尝试锁定FLLREFCLK和DCOCLK/(D*(N+1))。
此时DCO就
会降低到0,DCOFFG置1。
DCOFFG也有可能是因为N倍频值过高,导致DCOtap移到最高位,即UCSCTL0.12到UCSCTL0.8全部置1。
如果用XT2作为FLL的参考源,则与XT1工作在HF模式一致。
当发现任一振荡器错误位置1,OFFIG的振荡器错误中断位也会被置1。
当OFIFG和OFIE都被置1,OFIFG就会请求中断。
NMI的进入和退出电路会移除掉请求。
OFFIG位需要软件清零。
错误源可在相应的位辨别出来。
如果是MCLK的时钟源发生错误,则它会自动转换成DCOCLKDIV。
如果MCLK是源自XT1的LF模式,则会导致MCLK的时钟源自动换成REFO。
这样不会改变SELM位设置,需用户软件修改。
SMCLK和ACLK与MCLK的处理一样。