MSP430设置基本时钟系统

发布者:快乐旅途最新更新时间:2021-04-29 来源: eefocus关键字:MSP430  基本时钟系统  寄存器 手机看文章 扫描二维码
随时随地手机看文章

简介:上电复位后默认XT2关,ACLK来自XT1,MCLK和SMCLK都来自DCO。
掌握通过对寄存器的操作分配时钟信号:
设置ACLK来自XT1,MCLK来自XT2,SMCLK来自XT2。
各个时钟通道的分频自定。


通过这些基本的时钟模块,我们可以得到3个有用的时钟信号:

[1] ACLK辅助时钟(Auxillary Clock)

ACLK是LFXT1CLK时钟源经1、2、4、8分频后得到的。

ACLK可由软件选择作为各个外围模块的时钟信号,一般用于低速外设。

[2] MCLK主系统时钟(Main System Clock)

MCLK可由软件选择来自LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经1、2、4、8分频。

MCLK通常用于CPU运行,程序的执行和其他使用到高速时钟的模块。

[3] SMCLK子系统时钟(Sub System Clock)

SMCLK可由软件选择来自XT2CLK或DCOCLK,然后经1、2 、4、8分频。

SMCLK通常用于高速外围模块。


实验目的


设置基本时钟系统


实验要求


熟练掌握对MSP430基本时钟系统的操作和时钟资源的分配。


实验内容


[1] 了解MSP430F169的时钟资源。


了解3个时钟源,低频震荡器XT1,高频震荡器XT2,数控震荡器DCO。


了解3个系统时钟通道ACLK,MCLK,SMCLK。


ACLK的时钟源只能来自XT1。


MCLK的时钟源能来自XT1,XT2,DCO。


SMCLK的时钟源能来自XT2,DCO。


[2] 启动震荡器


了解震荡器失效标志的含义。


XT1和DCO震荡器上电即启动。


XT2震荡器需要操作XT2OFF 方能启动


掌握如何查询失效标志和处理震荡器失效问题


[3] 分配时钟资源


上电复位后默认XT2关,ACLK来自XT1,MCLK和SMCLK都来自DCO。


掌握通过对寄存器的操作分配时钟信号:


设置ACLK来自XT1,MCLK来自XT2,SMCLK来自XT2。


各个时钟通道的分频自定。


[4] 时钟信号的输出


时钟信号可以由P5.6、P5.5、P5.4输出。


需要修改I/O寄存器将管脚设置为输出和功能脚模式。


实验注意事项


[1] 检测震荡器是否工作,如果震荡器失效,则会有失效标志产生。在清除了失效标志以后不要立刻


再次去检查失效标志,最好延迟一段时间再去检查,因为震荡器起震需要一段毫秒级的时间。


[2] 注意上电后默认的时钟分配状态


[3] 程序开始要关闭看门狗(默认是开的),使用WDTCTL = WDTPW + WDTHOLD;语句。




#ifndef __SETCLOCK_H__


#define __SETCLOCK_H__


/************************************************************


* Basic Clock Module


************************************************************/


#define DCOCTL_ (0x0056) /* DCOCTL的定义 */


//DEFC( DCOCTL , DCOCTL_)


#define BCSCTL1_ (0x0057) /* BCSCTL1的定义 */


//DEFC( BCSCTL1 , BCSCTL1_)


#define BCSCTL2_ (0x0058) /* BCSCTL2的定义 */


//DEFC( BCSCTL2 , BCSCTL2_)


/* DCOCTL的位定义 */


#define MOD0 (0x01) /* Modulation Bit 0 */


#define MOD1 (0x02) /* Modulation Bit 1 */


#define MOD2 (0x04) /* Modulation Bit 2 */


#define MOD3 (0x08) /* Modulation Bit 3 */


#define MOD4 (0x10) /* Modulation Bit 4 */


#define DCO0 (0x20) /* DCO Select Bit 0 */


#define DCO1 (0x40) /* DCO Select Bit 1 */


#define DCO2 (0x80) /* DCO Select Bit 2 */


/* BCSCTL1的位定义 */


#define RSEL0 (0x01) /* Resistor Select Bit 0 */


#define RSEL1 (0x02) /* Resistor Select Bit 1 */


#define RSEL2 (0x04) /* Resistor Select Bit 2 */


#define XT5V (0x08) /* XT5V should always be reset */


#define DIVA0 (0x10) /* ACLK Divider 0 */


#define DIVA1 (0x20) /* ACLK Divider 1 */


#define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */


#define XT2OFF (0x80) /* Enable XT2CLK */


/* BCSCTL1 的 DIVA 的功能定义 */


#define DIVA_0 (0x00) /* ACLK Divider 0: /1 */


#define DIVA_1 (0x10) /* ACLK Divider 1: /2 */


#define DIVA_2 (0x20) /* ACLK Divider 2: /4 */


#define DIVA_3 (0x30) /* ACLK Divider 3: /8 */


/* BCSCTL2的位定义 */


#define DCOR (0x01) /* Enable External Resistor : 1 */


#define DIVS0 (0x02) /* SMCLK Divider 0 */


#define DIVS1 (0x04) /* SMCLK Divider 1 */


#define SELS (0x08) /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */


#define DIVM0 (0x10) /* MCLK Divider 0 */


#define DIVM1 (0x20) /* MCLK Divider 1 */


#define SELM0 (0x40) /* MCLK Source Select 0 */


#define SELM1 (0x80) /* MCLK Source Select 1 */


/* BCSCTL1 的 DIVS 的功能定义 */


#define DIVS_0 (0x00) /* SMCLK Divider 0: /1 */


#define DIVS_1 (0x02) /* SMCLK Divider 1: /2 */


#define DIVS_2 (0x04) /* SMCLK Divider 2: /4 */


#define DIVS_3 (0x06) /* SMCLK Divider 3: /8 */


/* BCSCTL1 的 DIVM 的功能定义 */


#define DIVM_0 (0x00) /* MCLK Divider 0: /1 */


#define DIVM_1 (0x10) /* MCLK Divider 1: /2 */


#define DIVM_2 (0x20) /* MCLK Divider 2: /4 */


#define DIVM_3 (0x30) /* MCLK Divider 3: /8 */


/* BCSCTL1 的 SELM 的功能定义 */


#define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */


#define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */


#define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */


#define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */


#endif


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////




#include


#include "BoardConfig.h"


#include "SetClock.h"


// 时钟设置函数// 系统时钟设定


void BCSInit (void)


{


DCOCTL = 0x60 + 0x00;// DCO设置为 3030KHz


BCSCTL1 = DIVA_0 + 0x07;// ACLK 为 LFXT1(低频模式)


BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0;// MCLK 为 XT2CLK// SMLCK为XT2CLK


}




void DelayMs(unsigned int ms)


{


unsigned char i;


while(--ms)


{


for(i=110;i>0;--i);


}


}


void main(void)


{


unsigned int i;


BoardConfig(0xb7);


BCSInit();


WDTCTL = WDTPW + WDTHOLD; // 停看门狗


//BCSCTL1 |= XTS; // ACLK = LFXT1 = HF模式


P2DIR |=0xff;


do


{


IFG1 &= ~OFIFG; // 清除振荡器失效标志


for(i = 0Xff;i > 0;i--); // 稳定时间


}while((IFG1 & OFIFG) != 0); // 如果振荡器失效标志存在




BCSCTL2 &=0x7F;// |= SELM1 + SELM0;


while(1)


{


for(i=0x01;i<0x80;i<<=1)


{


P2OUT = ~i;


DelayMs(100);


}


for(i=0x80;i>0x00;i>>=1)


{


P2OUT = ~i;


DelayMs(100);


}


BCSCTL2 |= SELM1 + SELM0; // MCLK = LFXT1 3是时钟源为LFTXT1CLK


} //开机高速运行一个周期后进入低速模式。


}


关键字:MSP430  基本时钟系统  寄存器 引用地址:MSP430设置基本时钟系统

上一篇:单片机在电力系统微机保护模块中的应用
下一篇:基于MSP430F149单片机与模糊控制的温控仪设计

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved