打印

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

[复制链接]
830|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
如果外部晶振没有马上起振,导致程序进入时钟错误中断中

使用特权

评论回复
5
kkzz| | 2017-6-2 22:08 | 只看该作者
没有配置成功。

使用特权

评论回复
6
kkzz| | 2017-6-2 22:09 | 只看该作者
没有配置成功。

使用特权

评论回复
7
hudi008| | 2017-6-2 22:10 | 只看该作者
运行中可以更改ACLK的时钟源

使用特权

评论回复
8
lzmm| | 2017-6-2 22:10 | 只看该作者
会影响到其他程序的正确执行

使用特权

评论回复
9
minzisc| | 2017-6-2 22:10 | 只看该作者
时钟错误

使用特权

评论回复
10
selongli| | 2017-6-2 22:11 | 只看该作者
模块或时钟配置过程中,中断使能都是需要关闭

使用特权

评论回复
11
fentianyou| | 2017-6-2 22:11 | 只看该作者
aclk没什么问题

使用特权

评论回复
12
youtome| | 2017-6-2 22:12 | 只看该作者
辅助时钟ACLK为什么要改变呢?

使用特权

评论回复
13
cemaj| | 2017-6-2 22:12 | 只看该作者
这个时钟源选择不对吧。

使用特权

评论回复
14
jimmhu| | 2017-6-2 22:13 | 只看该作者
最开始ACLK的时钟源是单片机内部的VLO?

使用特权

评论回复
15
kkzz| | 2017-6-2 22:13 | 只看该作者
时钟信号最好不要更改,不稳定。

使用特权

评论回复
16
hudi008| | 2017-6-2 22:13 | 只看该作者
要注意留出足够的切换时钟源的时间

使用特权

评论回复
17
lzmm| | 2017-6-2 22:13 | 只看该作者
建议不要切换时钟源。

使用特权

评论回复
18
minzisc| | 2017-6-2 22:13 | 只看该作者
检查一下配置的代码看看。

使用特权

评论回复
19
selongli| | 2017-6-2 22:13 | 只看该作者
常用例程都是初始化结束后才使能总中断和模块中断

使用特权

评论回复
20
fentianyou| | 2017-6-2 22:13 | 只看该作者
ACLK的时钟源分别是DCOCLK(数控震荡器)、DCOCLK

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

730

帖子

1

粉丝