MSP430学习心得---时钟

发布者:翅膀小鹰最新更新时间:2017-01-03 来源: eefocus关键字:MSP430  学习心得  时钟 手机看文章 扫描二维码
随时随地手机看文章

时钟初始化和GPIO

概述:

本实验的目的是了解用于执行对MSP430 Value Line设备的初始化过程的步骤。在这个练习中,您将编写初始化代码,并运行该设备使用各种时钟资源。

1、写初始化代码

2、运行CPU的MCLK的来源方式:VLO 、32768晶体、DCO

3、主体程序部分

4、观察LED闪光灯速度

 

MSP430时钟:

1、在MSP430单片机中一共有三个或四个时钟源:

(1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz,也可以接(400kHz~16Mhz);

(2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接(400kHz~16Mhz);     

(3)DCOCLK,数控振荡器,为内部晶振,由RC震荡回路构成;

(4)VLOCLK,内部低频振荡器,12kHz标准振荡器。

2、在MSP430单片机内部一共有三个时钟系统:

(1)ACLK,Auxiliary Clock,辅助时钟,通常由LFXT1CLK或VLOCLK作为时钟源,可以通过软件控制更改时钟的分频系数;

(2)MCLK,Master Clock,系统主时钟单元,为系统内核提供时钟,它可以通过软件从四个时钟源选择;

(3)SMCLK,Sub-Main Clock,系统子时钟,也是可以由软件选择时钟源。

Basic Clock Module Registers(基础时钟寄存器)

DCO control register                         DCOCTL

Basic clock system control 1                   BCSCTL1

Basic clock system control 2                   BCSCTL2

Basic clock system control 3                   BCSCTL3

SFR interrupt enable register 1                 IE1

SFR interrupt flag register 1                   IFG1

3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3

 

DCOCTL,DCO控制寄存器,地址为56H,初始值为60H

 

DCO2

DCO1

DCO0

MOD4

MOD3

MOD2

MOD1

MOD0

 

DCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义。

MOD0~MOD4: Modulation Bit,频率的微调。

一般不需要DCO的场合保持默认初始值就行了。

BCSCTL1,Basic Clock System Control 1,地址为57H,初始值为84H

 

XT2OFF

XTS

DIVA1

DIVA0

XT5V

RSEL2

RSEL1

RSEL0

 

RSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。

XT5V: 1.

DIVA0~DIVA1:选择ACLK的分频系数。DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8;

XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。

XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。

正常情况下把XT2OFF复位就可以了.

BCSCTL2,Basic Clock System Control 2,地址为58H,初始值为00H

 

SEM1

SELM0

DIVM1

DIVM0

SELS

DIVS1

DIVS0

DCOR

 

DCOR: Enable External Resistor. 0,选择内部电阻;1,选择外部电阻

DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8

SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.

DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8.

SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK

我用的时候一般都把SMCLK与MCLK的时钟源选择为XT2。

其它:

1. LFXT1: 一次有效的PUC信号将使OSCOFF复位,允许LFXT1工作,如果LFXT1信号没有用作SMCLK或MCLK,可软件置OSCOFF关闭LFXT1.

2. XT2: XT2产生XT2CLK时钟信号,如果XT2CLK信号没有用作时钟MCLK和SMCLK,可以通过置XT2OFF关闭XT2,PUC信号后置XT2OFF,即XT2的关闭的。

3. DCO振荡器:振荡器失效时,DCO振荡器会自动被选做MCLK的时钟源。如果DCO信号没有用作SMCLK和MCLK时钟信号时,可置SCG0位关闭DCO直流发生器。

4. 在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下:

(1)清OSCOFF/XT2

(2)清OFIFG

(3)延时等待至少50uS

(4)再次检查OFIFG,如果仍置位,则重复(1)-(4)步,直到OFIFG=0为止。

(5)设置BCSCTL2的相应SELM。

 

实例分析

1、CPU运行在VLO时钟下:

这是最慢的时钟,在约12千赫兹下运行。因此,我们将通过可视化的LED闪烁的红色慢慢地在约每3秒钟率。我们可以让时钟系统默认这种状态,设置专门来操作VLO。我们将不使用任何ALCK外设时钟在此实验室工作,但你应该认识到,ACLK来自VLO时钟。

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;           // 关闭看门狗定时器

P1DIR = 0x40;                          // P1.6 配置输出

P1OUT = 0;                            // 关闭LED

BCSCTL3 |= LFXT1S_2;                   // LFXT1 = VLO

IFG1 &= ~OFIFG;                       // 清除OSCFault 标志

__bis_SR_register(SCG1 + SCG0);          // 关闭 DCO

BCSCTL2 |= SELM_3 + DIVM_3;           // MCLK = VLO/8

while(1)

{

P1OUT = 0x40;                       // 开启LED

_delay_cycles(100);

P1OUT = 0;                          // 关闭 LED

_delay_cycles(5000);

}

}

2、CPU运行在晶振(32768Hz)时钟下:

晶体频率为32768赫兹,约3倍的VLO。如果我们在前面的代码中使用晶振,指示灯应闪烁大约每秒一次。你知道为什么32768赫兹是一个标准?这是因为这个数字是2的15次方,因此很容易用简单的数字计数电路,以每秒一次获得率 ——手表和其他时间时基。认识到ACLK来自外部晶振时钟。

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;        // 关闭看门狗定时器

P1DIR = 0x41;                       // P1.0 和P1.6配置输出

P1OUT = 0x01;                      // 开启P1.0

BCSCTL3 |= LFXT1S_0;                // LFXT1 = 32768Hz 晶振

while(IFG1 & OFIFG)

{

IFG1 &= ~OFIFG;                   // 清除 OSCFault 标志

_delay_cycles(100000);             // 为可见的标志延时

}

P1OUT = 0;                      // 关闭P1

__bis_SR_register(SCG1 + SCG0);     // 关闭 DCO

BCSCTL2 |= SELM_3 + DIVM_3;      // MCLK = 32768/8

while(1)

{

P1OUT = 0x40;                   // 开启 LED

_delay_cycles(100);

P1OUT = 0;                     / / 关闭LED

_delay_cycles(5000);

}

}

3、CPU运行在晶振(32768Hz)和DCO时钟下:

最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望ACLK上运行的VLO或32768赫兹晶振。由于ACLK在我们目前的代码是在晶体上运行,我们会打开DCO计算。

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;            // 关闭看门狗定时器

if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

{

while(1);                               // If cal const erased, 挂起

}

BCSCTL1 = CALBC1_1MHZ;                // Set range

DCOCTL = CALDCO_1MHZ;                //设置DCO模式

P1DIR = 0x41;                          // P1.0 和P1.6配置输出

P1OUT = 0x01;                         // P1.0 开启

BCSCTL3 |= LFXT1S_0;                   // LFXT1 = 32768Hz

while(IFG1 & OFIFG)

{

IFG1 &= ~OFIFG;                       // 清除OSCFault 标志

_delay_cycles(100000);                 // 为可见标志延时

}

P1OUT = 0;                           // P1.6 关闭

// __bis_SR_register(SCG1 + SCG0);       // 关闭DCO

BCSCTL2 |= SELM_0 + DIVM_3;          // MCLK = DCO

while(1)

{

P1OUT = 0x40;                       // P1.6 开启

_delay_cycles(100);

P1OUT = 0;                         / / P1.6 关闭

_delay_cycles(5000);

}

}

4、CPU运行在DCO时钟下:

最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望在VLO或者是晶振下运行ACLK。由于ACLK在我们目前的代码是在VLO上运行,我们会打开DCO运行。

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;                // 关闭看门狗定时器

if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

{

while(1);                                   // If cal const erased,挂起

}

BCSCTL1 = CALBC1_1MHZ;                     // Set range

DCOCTL = CALDCO_1MHZ;                     // 设置DCO模式

P1DIR = 0x40;                               // P1.6 配置输出

P1OUT = 0;                                 // P1关闭

BCSCTL3 |= LFXT1S_2;                        // LFXT1 = VLO

IFG1 &= ~OFIFG;                             // 清除 OSCFault 标志

//__bis_SR_register(SCG1 + SCG0);              // 关闭DCO

BCSCTL2 |= SELM_0 + DIVM_3;                 // MCLK = DCO/8

while(1)

{

P1OUT = 0x40;                          // P1.6 关闭

_delay_cycles(100);

P1OUT = 0;                            // P1.6 开启

_delay_cycles(5000);

}

}


关键字:MSP430  学习心得  时钟 引用地址:MSP430学习心得---时钟

上一篇:Launchpad的温度测量及串口发送
下一篇:单片机中定时器与计数器的区别

推荐阅读最新更新时间:2024-03-16 15:28

用pcf8563做时钟
//---库函数声明及相关定义---// #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit SDA=P3^1; //数据 sbit SCL=P3^0; //时钟 #define LCDIO P1 //1602数据口 sbit rs=P2^0; //1602数据命令选择引脚 sbit rd=P2^1; //读写选择抖? sbit lcden=P2^2; //1602选通引脚 uchar code table ={ 2010-11-29 MON }; ucha
[单片机]
用pcf8563做<font color='red'>时钟</font>
单片机时钟误差解决方法
1、采用高精度晶振方案 虽然采用高精度的晶振可以稍微提高电子钟计时的精确度,但是晶振并不是导致电子钟计时不准的主要因素,而且高精度的晶振价格较高,所以不必采用此方案。 2、动态同步修正方案 从程序人手,采用动态同步修正方法给定时,计数器赋初值。动态同步修正方法如下:由于定时,计数器溢出后,又会从O开始自动加数,故在给定时/计数器再次赋值前,先将定时,计数器低位(TLO)中的值和初始值相加,然后送人定时,计数器中,此时定时,计数器中的值即为动态同步修正后的准确值。具体程序如下: 采用此种方法后,相信制作的电子时钟的精度已有提高了。 3.自动调整方案 采用同步修正方案后,电子时钟的精度虽然提高了很多,但是由于晶振频率的偏差和一些其他
[单片机]
单片机<font color='red'>时钟</font>误差解决方法
MSP430学习笔记2-跑马灯程序,熟悉定时器寄存器的配置
这个例子主要还是熟悉有关定时器A的寄存器配置以及IAR的配置方式。 /*********************************************** 程序功能:实现流水灯以三种流动方式和四种流动速度 的不同组合而进行点亮 流动 ------------------------------------------------ 拨码开关设置:将LED位拨至ON,其余拨至OFF 测试说明:观察流水灯流动顺序和速度的变化 ************************************************/ #include msp430x14x.h typedef unsigned int u
[单片机]
基于MSP430的SLED控制系统的设计
自1971年Kurbativ等人首次制备出半导体SLED以来,SLED得到了惊人的发展。特别是近几年,其在光纤陀螺仪、光纤传感、光时域发射仪等方面得到了广泛的应用。SLED兼有LD和LED的优点,是一种自发辐射单程光放大非相干光源,具有发射谱宽、高输出功率、体积小、质量轻的特点。另外,由于其时间相干性短和空间相干性长,能有效地将光耦合进单模光纤。 对于SLED来说,其出射光功率及中心波长会随着驱动电流和管芯温度的漂移而发生变化。为了获得良好的光源性能,SLED管芯的电流和温度控制精度必须达到一定的水平。基于实现输出功率稳定、可靠,输出波长准确的目的,笔者设计了基于MSP430F449单片机的智能数字化SLED控制系统。 SLE
[单片机]
基于<font color='red'>MSP430</font>的SLED控制系统的设计
第010课 掌握Jz2440_ARM芯片时钟体系
第001节_S3C2440时钟体系结构 S3C2440是System On Chip(SOC),在芯片上不仅仅有CPU还有一堆外设。 至于有哪些外设,可以查看参考手册。在S3C2440参考手册的第一章PRODUCT OVERVIEW里面有个BLOCK DIAGRAM图: 可以把该图分为上中下三块,上面的是与CPU密切相关的,工作于FCLK;中间的一些对性能要求较高的设备,像LCD显示、相机等,在AHB BUS,H即为High,高速之意,工作于HCLK;下面的是一些对性能要求不那么高的低速设备,在APB BUS,P即为Peripheral之意,工作在PCLK。 在参考手册的特性里介绍了S3C2440的工作频率,Fclk最
[单片机]
第010课 掌握Jz2440_ARM芯片<font color='red'>时钟</font>体系
低功耗模式下微控制器时钟配置应用
在微控制器的低功耗应用中,对时钟的设置是很重要的一个方面。不同类型的微控制器在低功耗模式下对时钟的配置也各有不同。飞思卡尔公司推出的增强型8位微控制器HCS08系列具有很强的低功耗性能。其中,HCS08系列里的MC9S08QG8在同类产品的基础上对低功耗应用下的时钟又有了进一步的改进。 1 MC9S08QG8及其内部时钟模块介绍 微控制器MC9S08QG8是飞思卡尔公司新推出的一款8位增强型微控制器。它是小封装、低功耗的产品,但这并不意味着它是“低端”的产品;相反,它是一个高度集成的、功能丰富的、适用于各种应用的低价位单片机。MC9S08QG8采用高性能、低功耗的HCS08内核,具有很高的集成度,还包括更长的电池寿命(即使工作电
[应用]
msp430单片机应用之定时器、PWM、比较器
1。定时器使用查询和中断两种方式。大多数逻辑芯片输出0的能力大于输出1的能力。 (1)查询方式:TMSEL决定看门狗的工作模式,置一,看门狗工作在定时模式。SSEL选择看门狗定时器的时钟源。SSEL置一。IS0IS1决定了看门狗定时器的输出频率。(注意:使用查询方式时候要清除中断标志) main() { ... while(True) { if(IFG1&0x01) { P1OUT ^= 0x01;//翻转状态 IFG &=0xfe;//清除中断标志位 } } } (2)中断方
[单片机]
MSP430和CC3000的智能手机控制系统
1 系统结构及总体设计 本系统的结构框图如图1所示。系统总共分为5部分,分别是:无线路由器、智能手机、CC3000 Wi—Fi模块、MSP430单片机电路和直流电机驱动电路。首先,智能手机将Wi-Fi连接到无线路由器;接着打开智能手机中的SmartConfig的APP,配置CC3000 Wi—Fi模块,这样CC3000即可连接到无线路由器;然后打开电机控制APP,建立智能手机和CC3000 Wi—Fi模块的连接。其中,CC3000 Wi—Fi模块与MSP430单片机是通过SPI总线进行通信的。最后,可以通过智能手机中的电机控制APP对电机进行无线控制。 2 硬件设计 2.1 CC3000 Wi-Fi模块 系统无线通信部分采
[单片机]
<font color='red'>MSP430</font>和CC3000的智能手机控制系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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