历史上的今天
返回首页

历史上的今天

今天是: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


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


}


推荐阅读

史海拾趣

Frequency Devices公司的发展小趣事

面对快速变化的市场需求,Frequency Devices公司展现出了敏锐的市场洞察力。在21世纪初,随着无线通信技术的快速发展,对高频电子元件的需求急剧增加。公司及时调整产品策略,加大了对无线通信领域高频产品的研发投入,并成功推出了一系列适用于手机、基站等通信设备的高频滤波器、功率放大器等关键元件。这些产品不仅满足了市场需求,还进一步巩固了公司在行业内的市场地位。

Great American Electronics公司的发展小趣事

在追求经济效益的同时,Frequency Devices公司始终不忘履行社会责任。公司积极响应国家环保政策,采用环保材料和生产工艺,减少对环境的影响。同时,公司还致力于可持续发展,通过技术创新和管理优化,不断提高资源利用效率,降低能耗和排放。这些努力不仅体现了公司的社会责任感,也为公司的长期发展奠定了坚实的基础。

CDIL[Continental Device India Pvt. Ltd.]公司的发展小趣事

CDIL采用无晶圆厂模式生产分立半导体器件,专注于功率半导体和高可靠性组件的研发与生产。这一模式使CDIL能够更加灵活地应对市场变化,降低生产成本,提高产品竞争力。同时,公司还采用自己的封装技术,确保产品能够满足太空应用等严苛环境的严格标准。

酷宅(Coolkit)公司的发展小趣事

酷宅科技在智能家居市场的发展中,选择了电子电工和照明类市场作为切入点。这个市场具有巨大的智能化需求,但生产厂家众多,垄断程度低,利润率也相对较低。酷宅凭借其在物联网技术方面的优势,迅速满足了这一市场的迫切需求,并获得了巨大的出货量。随着市场的不断扩大,酷宅科技又进一步进入小家电市场,瞄准了加湿器、香薰机等长尾品类,继续扩大其市场份额。

CAO Group Inc公司的发展小趣事

CAO Group并未满足于在牙科行业的成功,而是积极寻求多元化的发展道路。公司开始涉足医疗、执法和光电市场,通过不断推出创新产品和技术,成功拓展了新的业务领域。同时,公司还积极寻求与国际知名企业的合作,通过技术交流和资源共享,不断提升自身的竞争力和影响力。

CCS[Custom Computer Services]公司的发展小趣事

随着业务的不断发展,CCS公司意识到市场拓展的重要性。公司积极寻求与国内外知名企业的合作,通过战略合作的方式共同开拓市场。通过与这些企业的合作,CCS公司不仅获得了更多的业务机会,还提高了自身的品牌知名度和市场影响力。同时,CCS公司还积极参加各类行业展会和交流活动,与同行建立广泛的联系和合作关系,为公司的长远发展奠定了坚实的基础。

问答坊 | AI 解惑

关于verilog的一个问题

请帮我分析个程序吧我用40M晶振,那一个时钟周期就是25nsclk为输入,ledout为输出,想每一秒让ledout的电平变化一次程序编译都通过了,但就是下到实验板上后灯不闪请指教 module delay1s(clk,ledout);output ledout;integer count1,count2;//intege ...…

查看全部问答>

大赛I题

本帖最后由 paulhyde 于 2014-9-15 09:39 编辑 欢迎大家积极讨论  …

查看全部问答>

ST五张图片展现STM8L的低功耗

太阳能供电 一块土豆就可以供电,相比较某些产品用苹果展示,土豆应该是更省电的吧,呵呵 利用RF无线传输能量 利用手摇电筒制作成发电机供电 一杯热水就能供电?杯子底部的热电偶产生电能,一样可以供MCU使用 背景资料: 意法半 ...…

查看全部问答>

初次面试时的小贴士

初次/电话面试一般会比较笼统,建议应聘者从以下几个方面准备:          1. 面试前要浏览这家公司的网页以及相关信息,了解一下她的历史、业务情况等等。     2. 一般面试会问到你对未来3-5年内自己职业发展方向的规划,先考虑 ...…

查看全部问答>

自制简单LED频闪灯

在千篇一律的DIY、MOD场合里,许多玩家费尽心机所改造出来的灯光效果都是静止的,如果在Lanparty上千人一面的改造MOD比比皆是,你的改造又怎么能脱颖而出呢?增加一个动感的超炫灯光效果势在必行!想像一下在姹紫嫣红的炫目光彩照耀下,观众早已疲 ...…

查看全部问答>

在获取滚动条的SB_THUMBPOSITION事件位置值,总是不对

当触发滚动条的SB_THUMBPOSITION事件时,我把滚动条的滑块托到最后,得到值不是SCROLLINFO中的nMax值,为什么啊。…

查看全部问答>

请问下PXA270和基带是如何通信的?

请问下PXA270和基带是如何通信的?是不是通过UART口发送AT Command啊? 比如打电话功能是发送一个ATD……的命令给基带么? …

查看全部问答>

关于低通滤波器的问题

过程描述:我用TLV2460运算放大器搭了一个一阶低通滤波器电路,电路如下图,设计截止频率为1k hz,计算如下:f =1/(2*3.14*16k*0.01u)=995 hz。 问题描述:在示波器上观察波形,确实起到了低通的效果。  但是:在低频通带内时,输出信号波 ...…

查看全部问答>

LED研发高级工程师

工作地点在丹阳,民营企业,待遇从优,老板很nice,提供住宿。 要求如下: 1. 电子类相关专业,本科及以上学历 2. 有5年以上电子产品开发设计经验, 3年以上的项目管理经验. 3. 有LED灯模组、开关电源或车载逆变器等相关产品设计经验者优佳; 4 ...…

查看全部问答>

【晒心得】STM32F03--DMA传输

在前面串口传输的基础上,以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 ...…

查看全部问答>