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-27 04:02
二、P1DIR = 0x40;                               // P1.6 配置输出
    P1OUT = 0;                                 // P1关闭      (例1、2、3、4)
其中DIR 和P1OUT分别配置IO口的方向和输出值,这里不在赘述,请参考手册。

三、BCSCTL3 |= LFXT1S_2;                   // LFXT1 = VLO       (例1和例4)
    BCSCTL3 |= LFXT1S_0;                   // LFXT1 = 32768Hz    (例2和例3)
#define __MSP430_HAS_BC2__                  

SFR_8BIT(DCOCTL);                        
SFR_8BIT(BCSCTL1);                       
SFR_8BIT(BCSCTL2);                       
SFR_8BIT(BCSCTL3);                       

#define MOD0                   (0x01)        
#define MOD1                   (0x02)        
#define MOD2                   (0x04)        
#define MOD3                   (0x08)        
#define MOD4                   (0x10)        
#define DCO0                   (0x20)        
#define DCO1                   (0x40)        
#define DCO2                   (0x80)        
                                                                                 
#define LFXT1OF                (0x01)        
#define XT2OF                  (0x02)        
#define XCAP0                  (0x04)      
#define XCAP1                  (0x08)      
#define LFXT1S0                (0x10)      
#define LFXT1S1                (0x20)      
#define XT2S0                  (0x40)      
#define XT2S1                  (0x80)      

#define XCAP_0                 (0x00)        
#define XCAP_1                 (0x04)        
#define XCAP_2                 (0x08)        
#define XCAP_3                 (0x0C)        

#define LFXT1S_0               (0x00)        
#define LFXT1S_1               (0x10)   
#define LFXT1S_2               (0x20)   
#define LFXT1S_3               (0x30)   

#define XT2S_0                 (0x00)   
#define XT2S_1                 (0x40)   
#define XT2S_2                 (0x80)   
#define XT2S_3                 (0xC0)      


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

__bis_SR_register()是在intrinsics.h这个头文件中定义了,实现的功能是将SR中的位置零。
关于头文件中的代码作用
#ifdef __cplusplus
extern "C"
{
#endif
#ifdef __cplusplus
}
#endif
一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C++虽然常被认为是C的超集,但是C++的编译器还是与C的编译器不同的。C中调用C++中的代码这样定义会是安全的。

一周热门 更多>