F2418在运行的过程中可以更改ACLK的时钟源吗

[复制链接]
 楼主| Rollo 发表于 2017-5-31 20:56 | 显示全部楼层 |阅读模式
单片机是MSP430F2418,最开始ACLK的时钟源是单片机内部的VLO,在运行的过程中我想把ACLK的时钟源改成外部的32768的晶振,代码如下所示:
#include "msp430.h"
void main(void)
{
  unsigned long i=0xffff;
  _BIC_SR(0xFFFF);                      //将SR中的各位清零,内联函数。通过看它的汇编代码可以知道。一个直接后果是GIE被复位,所有的可屏蔽中断关断。
  
  WDTCTL=WDTPW+WDTHOLD;                 //关闭看门狗定时
  
  BCSCTL1&=~XT2OFF;                     //打开XT2
  BCSCTL2 |= (SELM_2+DIVM_2+SELS);        //MCLK、SMCLK选择xt2(5MHz,所以MCLK=1.25MHz,SMCLK=5MHz
  BCSCTL3 |=  (XT2S_2+LFXT1S_2+XCAP_1);                  //6pF电容
  IFG1 &= ~OFIFG;
  
  P5SEL |= BIT4+BIT6;
  P5DIR |= BIT4+BIT6;
  P1SEL |= BIT4;
  P1DIR |= BIT4;
  
  IFG1&=~(WDTIFG+OFIFG+NMIIFG+PORIFG+RSTIFG);  //中断标志清零
  FCTL3=FWKEY;                          //ACCVIFG清零
  IE1|=OFIE+NMIIE+ACCVIE;               //中断初始化设置
  
  while(i)
  {
    i--;
  }
  BCSCTL3 = (XT2S_2+LFXT1S_0+XCAP_1);
  
  do
  {
    IFG1 &= ~OFIFG;                      // Clear OSCFault flag
    for (i = 0xFF; i > 0; i--);          // Time for flag to set
  }
  while (IFG1 & OFIFG);                 // OSCFault flag still set  
  
  while(1);
}
结果程序一直在  while(i) { i--;}这段代码中,但是只要我将 BCSCTL3 = (XT2S_2+LFXT1S_0+XCAP_1);这句话注释掉,程序又能正常执行,这是怎么回事?
Rangar 发表于 2017-5-31 21:05 | 显示全部楼层
BCSCTL3 = (XT2S_2+LFXT1S_0+XCAP_1);这一句在while(i)循环语句之后,怎么会有影响
Stannis 发表于 2017-5-31 21:22 | 显示全部楼层
看来是时钟出现错误
Brand2 发表于 2017-5-31 21:33 | 显示全部楼层
如果外部晶振没有马上起振,导致程序进入时钟错误中断中
kkzz 发表于 2017-6-2 22:08 | 显示全部楼层
没有配置成功。
kkzz 发表于 2017-6-2 22:09 | 显示全部楼层
没有配置成功。
hudi008 发表于 2017-6-2 22:10 | 显示全部楼层
运行中可以更改ACLK的时钟源
lzmm 发表于 2017-6-2 22:10 | 显示全部楼层
会影响到其他程序的正确执行
minzisc 发表于 2017-6-2 22:10 | 显示全部楼层
时钟错误
selongli 发表于 2017-6-2 22:11 | 显示全部楼层
模块或时钟配置过程中,中断使能都是需要关闭
fentianyou 发表于 2017-6-2 22:11 | 显示全部楼层
aclk没什么问题
youtome 发表于 2017-6-2 22:12 | 显示全部楼层
辅助时钟ACLK为什么要改变呢?
cemaj 发表于 2017-6-2 22:12 | 显示全部楼层
这个时钟源选择不对吧。
jimmhu 发表于 2017-6-2 22:13 | 显示全部楼层
最开始ACLK的时钟源是单片机内部的VLO?
kkzz 发表于 2017-6-2 22:13 | 显示全部楼层
时钟信号最好不要更改,不稳定。
hudi008 发表于 2017-6-2 22:13 | 显示全部楼层
要注意留出足够的切换时钟源的时间
lzmm 发表于 2017-6-2 22:13 | 显示全部楼层
建议不要切换时钟源。
minzisc 发表于 2017-6-2 22:13 | 显示全部楼层
检查一下配置的代码看看。
selongli 发表于 2017-6-2 22:13 | 显示全部楼层
常用例程都是初始化结束后才使能总中断和模块中断
fentianyou 发表于 2017-6-2 22:13 | 显示全部楼层
ACLK的时钟源分别是DCOCLK(数控震荡器)、DCOCLK
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

730

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部