msp430设置基本时钟系统

来源:本站
导读:目前正在解读《msp430设置基本时钟系统》的相关信息,《msp430设置基本时钟系统》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《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<msp430x14x.h>

#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设置基本时钟系统》最后刷新时间 2024-03-14 01:09:40,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《msp430设置基本时钟系统》该内容的真实性请自行鉴别。