MSP430G2553时钟系统要点总结

MSP430G2553时钟系统要点总结

个人总结的MSP430G2553各个模块功能要点,主要侧重于实用编程与理解。本章主要侧重于第四部分寄存器的理解与使用。后面章节陆续发布。
文档下载地址(CSDN免费下载,不需积分

时钟总览

BCS+功能框图
MSP430共4个时钟源,其中G2553中无XT2
ACLK可以来自XT1或VLO,当LFXT1Sx=10时选择VLO,否则选择XT1.选择后送给分频器,由DIVAx确定分频系数,分频后得到ACLK。
MCLK可以由SELMx选择低频时钟(XT1或VLO)或DCO,之后送给分频器,由DIVMx确定分频系数,可以由CPUOFF选择是否关断。
SMCLK也可以选择低频或DCO,由SELS选择。由DIVSx选择分频系数,由SCG1选择关闭SMCLK。

时钟源的选用

VLO : 一般来讲,VLO和LFXT1CLK是低速时钟,VLO是时钟系统内部产生的低频信号,频率范围在4~20kHz,典型值为12kHz,精确度较差,但是功耗极低,静态功耗到达500nA;

XT1 : 在需要精确定时的低频信号时,则需要通过LFXT1CLK接入外部低频晶振,通常使用32.768kHz的手表晶振,这个低频晶振能产生精确的定时,向内部低速设备提供时钟信号,定时唤醒CPU等。

DC0 : 在需要CPU处理大量数据的快速运算时,则需要用到内部的DCO模块或者外接高频晶振,同样内部的DCO既节约了器件成本又有极低的功耗特性,方便使用,但是DCO提供的时钟受到温度等外部条件的影响较大,精确度不高,因此如需要精确高速时钟信号,则需要外接高速晶振。另外由于锁频环(FLL)在G2553中没有集成,所以不再赘述。

默认状态

PUC以后,ACLK选择XT1CLK(32768),MCLK和SMCLK选择DCO,为人工配置前DCO为1MHz

控制寄存器

在这里插入图片描述
DCO主要控制寄存器,配合系统函数CALDCO_xMHZ使用。
例:MCLK和SMCLK设为8MHZ,ACLK设为32768HZ
(只需将DCO配置成8MHZ即可,DCO需配置三个参数DCOX,MODX,RSELX,其中一个在DAOCTL,另一个在BCSCTL1.)

在这里插入图片描述

在这里插入图片描述
主要用途:ACLK分频、配置DCO与CALBC1_8MHZ搭配使用。
例:

在这里插入图片描述

在这里插入图片描述
主要功能:MCLK、SMCLK选择时钟源,MCLK、SMCLK分频
例:MCLK设为4MHZ,SCLK设为2MHZ

在这里插入图片描述
BCSCTL2 |= SELM_3 + DIVM_3;
单片机出厂的时候,DCO开环校验了4个频率分别是1/8/12/16MHz,最高频率为20MHZ
设定方法:
DCOCTL|= DCO0+DCO1+DCO2; //设定DCO最高频率
BCSCTL1|=RSEL3;

在这里插入图片描述

在这里插入图片描述
XT1,VLO功能配置寄存器
主要功能:LFXT1S_x选择VLO or XT1,XCAP_x选择电容(32768选12.5pf),XT1失效判断

在这里插入图片描述

在这里插入图片描述

例程

例一、在单片机MSP430G2553中,使用VLO作为辅助时钟ACLK源,取时钟频率为12kHz。

#include "msp430g2553.h" 
void main(void) 
{ 
	WDTCTL = WDTPW + WDTHOLD; 		// 禁用看门狗 
	BCSCTL3 |= LFXT1S_2; 			// ACLK = VLO 
	IFG1 &= ~OFIFG; 				// Clear OSCFault flag 
	BCSCTL2 |= SELM_3 + DIVM_3; 	// MCLK = VLOCLK/8 
	P1DIR = 0x13; 					// 设置P1.0, P1.1,1.4 为	output 
	P1SEL |= 0x01;					// P1.0输出ACLK 
	while(1) 
	{ 
	P1OUT |= 0x02; 					// P1.1 = 1 
	P1OUT &= ~0x02; 				// P1.1 = 0 
	}; 
}

例二、在单片机MSP430G2553中,使用LFXT1的外部晶振32.768kHz作为辅助时钟ACLK及主时钟MCLK的源。

#include "msp430g2553.h" 
void main(void) 
{ 
	volatile unsigned int i; 
	BCSCTL3 |= XCAP_1 + LFXT1S_0 +LFXT1OF; 	//LFXT1=32.768kHz cap=12.5pF 
	do 
	{ 
		IFG1 &= ~OFIFG;							 // Clear OSCFault flag 
		for(i=255;i>0;i--); 
	} 
	while((IFG1 & OFIFG)!=0); 
	BCSCTL2 |= SELM_3 + DIVM_3; 			// MCLK = LFXT1/8 
	P1DIR |= 0x13; 							// P1.0,1 and P1.4 outputs 
	P1SEL |= 0x11; 							// P1.0 ACLK output 
	while(1) 
	{ 
		P1OUT |= 0x02; 							// P1.1 = 1 
		P1OUT &= ~0x02;							 // P1.1 = 0 
	}; 
}

例三、在单片机MSP430G2553中,使用DCO作为MCLK和SMCLK的时钟源。

#include "msp430g2553.h" 
void main(void) 
{ 
	WDTCTL = WDTPW + WDTHOLD;			
	P1DIR |= 0x13; 					//设置P1.0,P1.1 and P1.4为output 
	P1SEL |= 0x11; 					//启用I/O第二功能,P1.0输出ACLK,P1.4输出SMCLK 
	DCOCTL|= DCO0+DCO1+DCO2;		//设定DCO最高频率 
	BCSCTL1|=RSEL3; 
	while(1) 
	{ 
		P1OUT |= 0x02; 				// P1.1 = 1 
		P1OUT &= ~0x02;				// P1.1 = 0 
	} 
} 

原创文章 3 获赞 3 访问量 147

猜你喜欢

转载自blog.csdn.net/weixin_44863470/article/details/106083810