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