MSP430时钟系统详解
2
while(1) { P1OUT = 0x40; _delay_cycles(100); P1OUT = 0; _delay_cycles(5000); } }
// 开启 LED // 关闭 LED
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); } } 3、CPU 运行在晶振(32768Hz)和 DCO 时钟下: 时钟下: 最慢的频率,我们可以运行 DCO 约在 1MHz(这也是默认速度) 。因此,我们将开始切换 MCLK 到 DCO 下。在大多数系统中,你会希望 ACLK 上运行的 VLO 或 32768 赫兹晶振。 由于 ACLK 在我们目前的代码是在晶体上运行,我们会打开 DCO 计算。
// 清除 OSCFault 标志 // 为可见标志延时
P1OUT = 0; // P1.6 关闭 // __bis_SR_register(SCG1 + SCG0); // 关闭 DCO BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO while(1) { P1OUT = 0x40; _delay_cycles(100); P1OUT = 0; _delay_cycles(5000); } }
// P1.6 关闭 // P1.6 开启
以下将会分析上面 4 个例子的代码细微差别: 个例子的代码细微差别:
首先让我们看一下 msp430x20x2.h 这个文件中的内容, 由于头文件信息量很大这里就只简单 说明和以上四个代码有关的部分,其余请大家自行阅读。 一、WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器(例 1、2、3、4) 头文件中的相关说明如下: #define __MSP430_HAS_WDT__ SFR_16BIT(WDTCTL); #define WDTIS0 (0x0001) #define WDTIS1 (0x0002) #define WDTSSEL (0x0004) #define WDTCNTCL (0x0008) #define WDTTMSEL (0x0010) #define WDTNMI (0x0020) #define WDTNMIES (0x0040) #define WDTHOLD (0x0080) #define WDTPW (0x5A00)
4
#include <msp430g2231.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器 if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); // If cal const erased,挂起 } BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P1DIR = 0x40; P1OUT = 0; BCSCTL3 |= LFXT1S_2; IFG1 &= ~OFIFG; //__bis_SR_register(SCG1 + SCG0); BCSCTL2 |= SELM_0 + DIVM_3; while(1) { P1OUT = 0x40; _delay_cycles(100); P1OUT = 0; _delay_cycles(5000); } } // Set range // 设置 DCO 模式 // P1.6 配置输出 // P1 关闭 // LFXT1 = VLO // 清除 OSCFault 标志 // 关闭 DCO // MCLK = DCO/8
MSP430 时钟系统 时钟系统讲解 系统讲解
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(基础时钟寄存器) DCOCTL ——DCO control register BCSCTL1——Basic clock system control 1 BCSCTL2——Basic clock system control 2 BCSCTL3——Basic clock system control 3 IE1——SFR interrupt enable register 1 IFG1——SFR interrupt flag register 1 3、MSP430 的时钟设置包括 3 个寄存器, 个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3 DCOCTL,DCO 控制寄存器,地址为 56H,初始值为 60H
实例分析
1、CPU 运行在 VLO 时钟下: 时钟下: 这是最慢的时钟,在约 12 千赫兹下运行。因此,我们将通过可视化的 LED 闪烁的红色慢慢 地在约每 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
3
#include <msp430g2231.h> void main(void) { WDTCTL = WDTPW + WDTHOLD;
// 关闭看门狗定时器
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); // If cal const erased, 挂起 } BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P1DIR = 0x41; P1OUT = 0x01; BCSCTL3 |= LFXT1S_0; while(IFG1 & OFIFG) { IFG1 &= ~OFIFG; _delay_cycles(100000); } // Set range //设置 DCO 模式 // P1.0 和 P1.6 配置输出 // P1.0 开启 // LFXT1 = 32768Hz
DCO2
DCO1 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
// P1.6 开启 / / P1.6 关闭
4、CPU 运行在 DCO 时钟下: 时钟下: 最慢的频率,我们可以运行 DCO 约在 1MHz(这也是默认速度) 。因此,我们将开始切换 MCLK 到 DCO 下。 在大多数系统中, 你会希望在 VLO 或者是晶振下运行 ACLK。 由于 ACLK 在我们目前的代码是在 VLO 上运行,我们会打开 DCO 运行。