关闭

msp430学习笔记之时钟

标签: msp430时钟结构
303人阅读 评论(0) 收藏 举报
分类:

1 相关知识

1、在MSP430单片机中一共有三个时钟源

(1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz,也可以接(400kHz~16Mhz);

(2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接(400kHz~16Mhz);     

(3)DCOCLK,数控振荡器,为内部晶振,由RC震荡回路构成;


2、在MSP430单片机内部一共有三个时钟系统

(1)ACLK,Auxiliary Clock,辅助时钟,通常由LFXT1CLK作为时钟源,可以通过软件控制更改时钟的分频系数;

(2)MCLK,Master Clock,系统主时钟单元,为系统内核提供时钟,它可以通过软件从三个时钟源选择;

(3)SMCLK,Sub-Main Clock,系统子时钟,也是可以由软件选择时钟源。

3、相关寄存器


2 代码实现

//平台为msp430f149
#include<msp430f149.h>

#define		XT1			0x10
#define		XT2			0x11

#define		DELAY_COUNT		1000

//选择32k晶振频率
void select_xt1(void){

	unsigned char i;
	
	do{
        IFG1 &= ~OFIFG;                 //清除晶振失败标志
        for (i = 0xFF; i > 0; i--);     //等待32kHz晶体起振
    }while ((IFG1 & OFIFG));            //晶振失效标志仍然存在?
	
	BCSCTL2 |= SELM_3;					//MCLK = 32kHz
}

//选择8M晶振
void select_xt2(void){
	
	unsigned char i;
	
	/*------选择系统主时钟为8MHz-------*/
    BCSCTL1 &= ~XT2OFF;                 //打开XT2高频晶体振荡器
    do{
        IFG1 &= ~OFIFG;                 //清除晶振失败标志
        for (i = 0xFF; i > 0; i--);     //等待8MHz晶体起振
    }while ((IFG1 & OFIFG));             //晶振失效标志仍然存在?
	
    BCSCTL2 |= SELM_2 + SELS +DIVM_3;           //MCLK = 1MHz,SMCLK = 8MHz

}


void clock_config(unsigned char select_xt){
		
	WDTCTL = WDTPW + WDTHOLD;				// 停止看门狗  
	if(select_xt == XT1){					
		select_xt1();
	}else if(select_xt == XT2){
		select_xt2();
	}else{
		return ;							//系统默认DCO,约800Hz
	}
		
}

void delay(unsigned int x){
	unsigned int i,j;
	for(i = 0;i < x;i++)
		for(j = 1001;j>1;j--);
}

int main(){
	clock_config(XT2);
	
	P2DIR = 0x80;      //bit7 为输出
	P2OUT = 0xff;      //
	while(1){
		P2OUT = 0x7f;      //led灯亮
		delay(DELAY_COUNT);
		P2OUT = 0xff;      //led灯灭
		delay(DELAY_COUNT);
		
	}
	
	return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5025次
    • 积分:103
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档