MSP430始终怎么设置?
展开全部
ACLK 辅助时钟 只由LFXT1CLK时钟源提供 有低频(默认) 和高频两种工作模式
常用的为32768Hz
MCLK 主系统时钟 可由XT2CLK、LFXT1CLK、DCOCLK提供时钟源,默认为DCOCLK提供。常用为8MHz
SMCLK 辅助系统时钟 可由DCOCLK和XT2CLK提供时钟源,默认为DCOCLK。
LFXT1:可接高速和低速晶振,在低速模式下,它可以外接32k的晶振而不需要负载电容,在单片机内部已经集成了几个电容供选择。同时,通过寄存器进行配置,它还可以接内部的VLOCLK,这个晶振是一个12k的低速晶振。高速模式下它可以接0.4~16M的晶振。通常将LFXT1配置成一个32k的振荡源,为ACLK提供低速的时钟信号。
XT2:高速振荡器,它可以接一个0.4~16M的晶振,它相当于高速模式下的LFXT1。通常将它配置成一个高速的振荡源,为MCLK何SMCLK提供高速时钟信号。
DCO:内部数字控制振荡器,它的频率可以通过DCOCLK进行配置。在系统PUC之后,DCOx=7,MODx=3.
在系统PUC之后,SMCLK与MCLK都以DCO作为时钟源,震荡频率在800KHz左右,ACLK以LFXT1作为时钟源,工作在LF模式下内部6pF的负载电容。
主要由两个寄存器控制时钟:基本时钟系统控制寄存器:BCSCTL1,BCSCTL2,DCOCLK
BCSCTL1: 控制XT2的开启和关闭以及LFXT1的工作模式 默认XT2关闭,LFXT1的工作模式为低频。还控制ACLK的分频比 默认为/1。
BCSCTL2: 控制MCLK和SMCLK的时钟源的选择以及它们的分频比。
OFIFG是振荡器标失效标志位,当用外部晶振时,如果外部晶振起震了,那OFIFG就会变为0,默认是1
寄存器IFG1的OFIFG位在时钟的应用步骤:
(1) 复位Oscoff,即打开要打开的晶体振荡器。
(2) 清除OFIFG
(3) 延时等待时间大于50us
(4) 再次检查OFIFG,如果仍然置位则重复2,3步骤,直到OFIFG==0
例子
#include<msp430x14x.h>
#define unsigned char uint;
main()
{
uint i=0;
WDTCTL=WDTPW+WDTHOLD ; //关闭看门狗
BCSCTL1 &=~XT2OFF ; //启动XT2,XT2上电后默认是关闭的
do
{
IFG1&=~OFIFG ; \\清除震荡器失效标志
for(i=0;i<0xff;i++); \\延时,待稳定
}
while((IFG1&=OFIFG )!=0) \\检查震荡器失效标志
BCSCTL2 |= SELM1; //使MCLK =XT2
}
常用的为32768Hz
MCLK 主系统时钟 可由XT2CLK、LFXT1CLK、DCOCLK提供时钟源,默认为DCOCLK提供。常用为8MHz
SMCLK 辅助系统时钟 可由DCOCLK和XT2CLK提供时钟源,默认为DCOCLK。
LFXT1:可接高速和低速晶振,在低速模式下,它可以外接32k的晶振而不需要负载电容,在单片机内部已经集成了几个电容供选择。同时,通过寄存器进行配置,它还可以接内部的VLOCLK,这个晶振是一个12k的低速晶振。高速模式下它可以接0.4~16M的晶振。通常将LFXT1配置成一个32k的振荡源,为ACLK提供低速的时钟信号。
XT2:高速振荡器,它可以接一个0.4~16M的晶振,它相当于高速模式下的LFXT1。通常将它配置成一个高速的振荡源,为MCLK何SMCLK提供高速时钟信号。
DCO:内部数字控制振荡器,它的频率可以通过DCOCLK进行配置。在系统PUC之后,DCOx=7,MODx=3.
在系统PUC之后,SMCLK与MCLK都以DCO作为时钟源,震荡频率在800KHz左右,ACLK以LFXT1作为时钟源,工作在LF模式下内部6pF的负载电容。
主要由两个寄存器控制时钟:基本时钟系统控制寄存器:BCSCTL1,BCSCTL2,DCOCLK
BCSCTL1: 控制XT2的开启和关闭以及LFXT1的工作模式 默认XT2关闭,LFXT1的工作模式为低频。还控制ACLK的分频比 默认为/1。
BCSCTL2: 控制MCLK和SMCLK的时钟源的选择以及它们的分频比。
OFIFG是振荡器标失效标志位,当用外部晶振时,如果外部晶振起震了,那OFIFG就会变为0,默认是1
寄存器IFG1的OFIFG位在时钟的应用步骤:
(1) 复位Oscoff,即打开要打开的晶体振荡器。
(2) 清除OFIFG
(3) 延时等待时间大于50us
(4) 再次检查OFIFG,如果仍然置位则重复2,3步骤,直到OFIFG==0
例子
#include<msp430x14x.h>
#define unsigned char uint;
main()
{
uint i=0;
WDTCTL=WDTPW+WDTHOLD ; //关闭看门狗
BCSCTL1 &=~XT2OFF ; //启动XT2,XT2上电后默认是关闭的
do
{
IFG1&=~OFIFG ; \\清除震荡器失效标志
for(i=0;i<0xff;i++); \\延时,待稳定
}
while((IFG1&=OFIFG )!=0) \\检查震荡器失效标志
BCSCTL2 |= SELM1; //使MCLK =XT2
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询