MSP430 时钟设置
时间:08-09
来源:互联网
点击:
1、在MSP430单片机中一共有三个时钟源:
一个LFXT1CLK,为低速/高速晶振源,通常接32.768khz,也可以接(400khz~8Mhz);
一个为XT2CLK,外接标准高速晶振,通常是接8Mhz,也可以接(400khz~8Mhz);
还有一个叫DCOCLK,为内部晶振,有RC震荡回路构成。
2、在MSP430单片机内部一共有三个时钟系统:
一个为ACLK,通常由LFXT1CLK作为时钟源,可以通过软件控制改时钟的分频系数树;
一个为MCLK(Main CLK)一听就知道是主时钟单元,为系统内核提供时钟,它可以通过软件从三个时钟源选择;
还有一个为SMCLK,称作辅助主时钟,也是可以由软件选择时钟源。
Basic Clock Module Registers(基础时钟寄存器)
DCO control register
Basic clock system control 1
Basic clock system control 2
Basic clock system control 3
SFR interrupt enable register 1
SFR interrupt flag register 1
3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2
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最高。
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;
配置输出
P1OUT = 0;
关闭LED
BCSCTL3 |= LFXT1S_2;
IFG1 &= ~OFIFG;
清除OSCFault 标志
__bis_SR_register(SCG1 + SCG0);
关闭 DCO
BCSCTL2 |= SELM_3 + divM_3;
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);
挂起
}
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
设置DCO模式
P1DIR = 0x41;
和P1.6配置输出
P1OUT = 0x01;
开启
BCSCTL3 |= LFXT1S_0;
while(IFG1 & OFIFG)
{
IFG1 &= ~OFIFG;
清除OSCFault 标志
_delay_cycles(100000);
为可见标志延时
}
P1OUT = 0;
关闭
// __bis_SR_register(SCG1 + SCG0); 关闭DCO
BCSCTL2 |= SELM_0 + divM_3;
while(1)
{
P1OUT = 0x40;
开启
_delay_cycles(100);
P1OUT = 0;
关闭
_delay_cycles(5000);
}
}
一个LFXT1CLK,为低速/高速晶振源,通常接32.768khz,也可以接(400khz~8Mhz);
一个为XT2CLK,外接标准高速晶振,通常是接8Mhz,也可以接(400khz~8Mhz);
还有一个叫DCOCLK,为内部晶振,有RC震荡回路构成。
2、在MSP430单片机内部一共有三个时钟系统:
一个为ACLK,通常由LFXT1CLK作为时钟源,可以通过软件控制改时钟的分频系数树;
一个为MCLK(Main CLK)一听就知道是主时钟单元,为系统内核提供时钟,它可以通过软件从三个时钟源选择;
还有一个为SMCLK,称作辅助主时钟,也是可以由软件选择时钟源。
Basic Clock Module Registers(基础时钟寄存器)
DCO control register
Basic clock system control 1
Basic clock system control 2
Basic clock system control 3
SFR interrupt enable register 1
SFR interrupt flag register 1
3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2
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最高。
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;
配置输出
P1OUT = 0;
关闭LED
BCSCTL3 |= LFXT1S_2;
IFG1 &= ~OFIFG;
清除OSCFault 标志
__bis_SR_register(SCG1 + SCG0);
关闭 DCO
BCSCTL2 |= SELM_3 + divM_3;
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);
挂起
}
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
设置DCO模式
P1DIR = 0x41;
和P1.6配置输出
P1OUT = 0x01;
开启
BCSCTL3 |= LFXT1S_0;
while(IFG1 & OFIFG)
{
IFG1 &= ~OFIFG;
清除OSCFault 标志
_delay_cycles(100000);
为可见标志延时
}
P1OUT = 0;
关闭
// __bis_SR_register(SCG1 + SCG0); 关闭DCO
BCSCTL2 |= SELM_0 + divM_3;
while(1)
{
P1OUT = 0x40;
开启
_delay_cycles(100);
P1OUT = 0;
关闭
_delay_cycles(5000);
}
}
MSP430 单片机 电流 电阻 振荡器 LED 看门狗 相关文章:
- 由MSP430和CC1100构成的无线传感器网络(08-01)
- 基于MSP430F413的智能遥控器(03-28)
- 基于MSP430单片机的智能无功补偿控制器设计(04-26)
- 远程心电监测系统的研究与设计(03-19)
- 基于MSP430的便携式心率计的设计(03-28)
- 基于MSP430的极低功耗系统设计(05-04)