MSP430 时钟的初始化和GPIO

2019-07-26 16:24发布

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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
一品人生
2019-07-26 22:32
实例分析
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);
}
}

一周热门 更多>