历史上的今天
今天是:2025年04月29日(星期二)
2021年04月29日 | MSP430设置基本时钟系统
2021-04-29 来源:eefocus
简介:上电复位后默认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 } //开机高速运行一个周期后进入低速模式。 }
史海拾趣
|
请帮我分析个程序吧我用40M晶振,那一个时钟周期就是25nsclk为输入,ledout为输出,想每一秒让ledout的电平变化一次程序编译都通过了,但就是下到实验板上后灯不闪请指教 module delay1s(clk,ledout);output ledout;integer count1,count2;//intege ...… 查看全部问答> |
|
太阳能供电 一块土豆就可以供电,相比较某些产品用苹果展示,土豆应该是更省电的吧,呵呵 利用RF无线传输能量 利用手摇电筒制作成发电机供电 一杯热水就能供电?杯子底部的热电偶产生电能,一样可以供MCU使用 背景资料: 意法半 ...… 查看全部问答> |
|
在千篇一律的DIY、MOD场合里,许多玩家费尽心机所改造出来的灯光效果都是静止的,如果在Lanparty上千人一面的改造MOD比比皆是,你的改造又怎么能脱颖而出呢?增加一个动感的超炫灯光效果势在必行!想像一下在姹紫嫣红的炫目光彩照耀下,观众早已疲 ...… 查看全部问答> |
|
在获取滚动条的SB_THUMBPOSITION事件位置值,总是不对 当触发滚动条的SB_THUMBPOSITION事件时,我把滚动条的滑块托到最后,得到值不是SCROLLINFO中的nMax值,为什么啊。… 查看全部问答> |
|
过程描述:我用TLV2460运算放大器搭了一个一阶低通滤波器电路,电路如下图,设计截止频率为1k hz,计算如下:f =1/(2*3.14*16k*0.01u)=995 hz。 问题描述:在示波器上观察波形,确实起到了低通的效果。 但是:在低频通带内时,输出信号波 ...… 查看全部问答> |
|
工作地点在丹阳,民营企业,待遇从优,老板很nice,提供住宿。 要求如下: 1. 电子类相关专业,本科及以上学历 2. 有5年以上电子产品开发设计经验, 3年以上的项目管理经验. 3. 有LED灯模组、开关电源或车载逆变器等相关产品设计经验者优佳; 4 ...… 查看全部问答> |
|
在前面串口传输的基础上,以DMA方式传输串口发送的数据。 #include \"stm32f0xx.h\" #define USART_DR_Base 0x40013828 #define SENDBUFF_SIZE 500 uint8_t Tx_Buffer[SENDBUFF_SIZE]; uint16_t i; //uint8_t Tx_Buffer[SENDBUFF_SIZE] = \"EEWORL ...… 查看全部问答> |




