历史上的今天
今天是:2025年04月18日(星期五)
2018年04月18日 | MSP430学习小结3-MSP430基本时钟模块
2018-04-18 来源:eefocus
与51、AVR等单片机不同msp430的时钟信号源有LFXT1,XT2,DCO三种。
1、LFXT1:可接高速和低速晶振,在低速模式下,它可以外接32k的晶振而不需要负载电容,这种方式较为常见主要用来为ACLK提供低速的时钟信号,以供低速外设使用。
2、XT2:高速振荡器,它可以接一个0.4~16M的晶振,它相当于高速模式下的LFXT1。通常将它配置成一个高速的振荡源,为MCLK何SMCLK提供高速时钟信号。
3、DCO:内部数字控制振荡器,它的频率可以通过DCOCLK进行配置。在系统PUC之后,DCOx=7,MODx=3,表示选择了最高的频率。
前面介绍了MSP430中有三个个时钟信号源,MSP430的时钟信号也有三种主时钟MCLK,子系统时钟SMCLK,辅助时钟ACLK。
其中MCLK是用给系统使用的,SMCLK用给高速外设使用的,而ACLK主要用给低速外设使用。
在系统PUC之后,默认SMCLK与MCLK都以DCO作为时钟源,震荡频率在1.1M左右,ACLK以LFXT1作为时钟源,工作在LF模式下内部6pF的负载电容。
一般情况下选择XT2作为主时钟,时钟模块初始化程序如下:
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
/*------选择系统主时钟为8MHz-------*/
BCSCTL1 &= ~XT2OFF; // 打开XT2高频晶体振荡器
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); // 等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); // 晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //主时钟和从时钟都选择高频晶振
…………………………………………………….
注意:a.最好将IFG1&=~OFIFG;放入do –while循环中,我调了好一阵程序,发现IFG1似乎置位之
后不能自动复位。
b.在XT2出现错误的情况下将XT2设定为MCLK SMCLK的时钟源,单片机会自动的把时钟源更换
为DCO振荡器。当时钟信号丢失50us时,振荡器失效。如果MCLK信号来自LFXT1或者XT2,
那么MSP430自动把MCLK的信号切换为DCO,这样可以保证程序继续运行。MSP430不对低频
模式的LFXT1进行监测。
b.BCSCTL2=SELM_2+SELS;语句必须放在while之后,因为当XT2没有起振之前,XT2处于错误
阶段,因此在XT2没有起振之前将它设定为主时钟与子系统时钟后,单片机会自动的将DCO
设定为SMCLK MCLK的时钟源。
史海拾趣
|
内容提要: 本书讲述了TMS320F2812芯片的基本特点、硬件结构、内部功能模块的基本原理等内容,并在结合应用实例的基础上详细阐述了各功能模块的应用。同时专门针对电机控制领域的应用,详细介绍了基于TMS320F2812数字信号处理器的永磁同步电机控制 ...… 查看全部问答> |
|
图像(视频)采集模块1. 概述HMP-I系列图像采集模块实现将PAL制式模拟视频信号实时采集并压缩成标准JPEG格式的图象文件。该系列目前有两个型号:HMP-Ia和HMP-Ib,Ia型接口为UART串口、Ib型接口为SPI串口,两个型号的其他功能如不特别说明则相同。该 ...… 查看全部问答> |
|
我usart1工作一切正常,现在我又打开了usart2,485芯片拉低,发送数据到uart2,进入中断,但是一进入中断,我查了sr寄存器状态,idle=1, rxne=0,这是为何? 以至于我读不到数据后就出中断了uart4的话,我是已经在rx量到信号了,但 ...… 查看全部问答> |
|
由于PCB尺寸限制,想用STLINK的SWD方式,网上一般有3种版本: (1) SWDCK(TCK),SWDIO(TMS),GND,nSYSRST,VCC (2)SWDCK(TCK),SWDIO(TMS),GND,nSYSRST (3)SWDCK(TCK),SWDIO(TMS),GND 另外,买的英蓓特的开发板,他们用了一个10脚的IDC插 ...… 查看全部问答> |
|
我正在使用msp430F5418单片机的低功耗模式,数据手册上说进入低功耗的时间是微妙级的,但我自己测试,要经过18s,我的单片机的电流才能降低到6uA。(我的数字板上只有晶振和单片机,其他任何元器件都没有接,完全测的单片机的电流) 请问有没有 ...… 查看全部问答> |
|
#include #define CPU_F ((double)8000000) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //延时1毫秒 const char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X40}; char t ...… 查看全部问答> |




