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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1、CPU运行在VLO时钟下:
这是最慢的时钟,在约12千赫兹下运行。因此,我们将通过可视化的LED闪烁的红 {MOD}慢慢地在约每3秒钟率。我们可以让时钟系统默认这种状态,设置专门来操作VLO。我们将不使用任何ALCK外设时钟在此实验室工作,但你应该认识到,ACLK来自VLO时钟。
#include <msp430g2231.h>
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 <msp430g2231.h>
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);
}
}
一周热门 更多>