关于msp430f149外部晶振和内部doc振荡器的问题

我之前用的是msp430g2553,它可以通过软件编程内部doc振荡器使系统时钟频率达到稳定16MHz,只需要使用两个语句DCOCTL=CALDCO_16MHZ;BCSC... 我之前用的是msp430g2553,它可以通过软件编程内部doc振荡器使系统时钟频率达到稳定16MHz,只需要使用两个语句
DCOCTL=CALDCO_16MHZ;
BCSCTL1=CALBC1_16MHZ;
现在我想换成msp430f149,在网上找到的示例程序里面基本都是使用外部高频晶振,而且都是8MHz,请问:
(1)可不可以使用更高频率的外部晶振?如果可以,最高能到多少?
(2)可不可以像g2553一样用软件编写内部DCO振荡器?如果可以,应该怎么写语句?
希望有识之士能帮忙解答一下,感激不尽~
展开
 我来答
liangsai
推荐于2017-09-25 · TA获得超过835个赞
知道小有建树答主
回答量:1508
采纳率:0%
帮助的人:642万
展开全部
不可以使用更高频率的外部晶振 可以像用软件编写内部DCO振荡器 分频可以 例如BCSCTL2 |= SELM_3; //主时钟8分频

MSP430 频率(时钟)配置
MSP430时钟:
1、在MSP430单片机中一共有四个时钟源:
(1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz晶振
(2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接400kHz~16Mhz;
(3)DCOCLK,数控振荡器,为内部时钟,由RC震荡回路构成,受温度和电压的影响较大;若外部不接稳定的晶振电路,直接由内部时钟工作,则会因环境变化而导致性能不稳定。
(4)VLOCLK,内部低频振荡器,12kHz标准振荡器。(要得到标准的12k则必须外接32768等晶振)
2、在MSP430单片机内部一共有三个时钟系统:
(1)ACLK:辅助时钟,通常由LFXT1CLK或VLOCLK作为时钟源,可以通过软件控制更改时钟的分频系数;
(2)MCLK:主时钟,为系统内核提供时钟,它可以通过软件从四个时钟源选择或者从四个时钟源分频后选择为主时钟;
(3)SMCLK:子时钟,也是可以由软件选择时钟源。
3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3
DCOCTL,DCO控制寄存器,地址为56H,初始值为60H
DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0
DCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义。
MOD0~MOD4: Modulation Bit,频率的微调。
一般不需要DCO的场合保持默认初始值就行了。

BCSCTL1,地址为57H,初始值为84H
XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0
RSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。
XT5V: 1.
DIVA0~DIVA1:选择ACLK的分频系数。DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8;
XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。
XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。
正常情况下把XT2OFF复位就可以了.

BCSCTL2,地址为58H,初始值为00H
SEM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR
DCOR: 0,选择内部电阻;1,选择外部电阻
DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8
SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.
DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8.
SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK
我用的时候一般都把SMCLK与MCLK的时钟源选择为XT2。

其它:
1. LFXT1: 一次有效的PUC信号将使OSCOFF复位,允许LFXT1工作,如果LFXT1信号没有用作SMCLK或MCLK,可软件置OSCOFF关闭LFXT1.
2. XT2: XT2产生XT2CLK时钟信号,如果XT2CLK信号没有用作时钟MCLK和SMCLK,可以通过置XT2OFF关闭XT2,PUC信号后置XT2OFF,即XT2的关闭的。
3. DCO振荡器:振荡器失效时,DCO振荡器会自动被选做MCLK的时钟源。如果DCO信号没有用作SMCLK和MCLK时钟信号时,可置SCG0位关闭DCO直流发生器。
4. 在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下:
(1)清OSCOFF/XT2
(2)清OFIFG
(3)延时等待至少50uS
(4)再次检查OFIFG,如果仍置位,则重复(1)-(4)步,直到OFIFG=0为止。
(5)设置BCSCTL2的相应SELM。

实例分析
1、CPU运行在VLO时钟下:
这是最慢的时钟,在约12千赫兹下运行。因此,我们将通过可视化的LED闪烁的红色慢慢地在约每3秒钟率。我们可以让时钟系统默认这种状态,设置专门来操作VLO。我们将不使用任何ALCK外设时钟在此实验室工作,但你应该认识到,ACLK来自VLO时钟。
#include<msp430g2131.h>
/*---------------------------------------------------------------------------------------------*/
Void main()
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器
BCSCTL1 |= XT2OFF; //XT2关闭 ACLK=32768hz DCO为默认值约800k
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO =12khz(大约)
// BCSCTL3 |= LFXT1S_0; // LFXT1 = 32.768khz (大约)
IE1 &= ~OFIE; //清除时钟错误中断
IFG1 &= ~OFIFG; // Clear OSCFault flag
BCSCTL2 |= SELM_3+SELS;// mclk时钟源为LFXT1CLK,smclk=LFXT1CLK=32768hz
// BCSCTL2 |= SELM_0+SELS; // mclk时钟源为DCOCLK,smclk=LFXT1CLK=32768hz
__delay_cycles(1000); //小延时等待振荡稳定
P1DIR=BIT0; //P1.0配置输出
P1OUT=BIT0; //P1.0输出高电平
While()
{
P1OUT^= BIT0; //P1.0电平反转;
_delay_cycles(100000);
}
}
/*---------------------------------------------------------------------------------------------*/
追问
我目前在做一个创新项目,需要比较高的运算速度,请问XT2的频率有上限吗?如果有,能接受的最高晶振频率是多少?
追答
26MHz
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式