打印

430f5438A系统时钟从xt2返回默认配置

[复制链接]
1090|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qe123|  楼主 | 2016-1-15 12:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用430f5438A单片机,我使用外部xt2   22.118MHz的晶振,正常能跑起来,但有的时候会出现系统时钟返回默认配置的情况。我的单片机接有uart0和外部中断。我仔细看程序发现我在设置寄存器出错了,但是还能运行,这句 UCSCTL6 |= XT2DRIVE2(晶振的工作范围是24~32MHz)设置错了。应该设置成UCSCTL6 &= ~XT2DRIVE_1(晶振的工作范围是16~24MHz).这个寄存器设置错会导致系统时钟有返回默认值的情况吗?


SetVcoreUp(PMMCOREV_3);                     // Set VCore to 1.8MHz for 20MHz
  unsigned char i;
  P5SEL |= BIT2 + BIT3;                     //P5.2和P5.3选择为晶振XT2输入  
  UCSCTL6 &= ~XT2OFF;
  UCSCTL3 |= SELREF_2;  
  UCSCTL4 |= SELA_2;  
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
    SFRIFG1 &= ~OFIFG;                          // 清除振荡器失效标志
    for (i = 0xFF; i > 0; i--);                 // 延时,等待XT2起振
  } while (SFRIFG1 & OFIFG);                    // 判断XT2是否起振
  UCSCTL6 |= XT2DRIVE0;
  UCSCTL4 |= SELS_5 + SELM_5;                   //选择MCLK、SMCLK为XT2,
  return;

相关帖子

沙发
dirtwillfly| | 2016-1-15 14:17 | 只看该作者
一般时钟配置错误,会导致外部晶振不能正常起振。然后系统就会使用默认的dco

使用特权

评论回复
板凳
vivilzb1985| | 2016-1-15 22:36 | 只看该作者
能适用系统内部的DCO的就尽量用内部的,这样可以少一个晶振的设计。

使用特权

评论回复
地板
firstblood| | 2016-1-18 17:31 | 只看该作者
晶振的设置时非常关键的。

使用特权

评论回复
5
qe123|  楼主 | 2016-1-19 11:15 | 只看该作者
dirtwillfly 发表于 2016-1-15 14:17
一般时钟配置错误,会导致外部晶振不能正常起振。然后系统就会使用默认的dco ...

这两天一直在找这个问题的原因,我发现有时候我脱下衣服用手一摸就变慢了,而且用打火机一打就慢,但是没有看到重启(led指示灯),在程序运行过程中就返回到DOC了,搞不懂

使用特权

评论回复
6
dirtwillfly| | 2016-1-19 17:03 | 只看该作者
qe123 发表于 2016-1-19 11:15
这两天一直在找这个问题的原因,我发现有时候我脱下衣服用手一摸就变慢了,而且用打火机一打就慢,但是没 ...

你是不是触摸的离晶振比较近?
有时候晶振不起振,用手触摸一下就好了。手会影响起振电容

使用特权

评论回复
7
angerbird| | 2016-1-19 20:42 | 只看该作者
这个是需要将相关的寄存器配置好的。

使用特权

评论回复
8
qe123|  楼主 | 2016-1-20 08:15 | 只看该作者
dirtwillfly 发表于 2016-1-19 17:03
你是不是触摸的离晶振比较近?
有时候晶振不起振,用手触摸一下就好了。手会影响起振电容 ...

昨天我把程序修改了,只剩下时钟设置和io,在while中只有一个io输出,接到示波器,正常的时候是1M左右,问题是48K左右,很容易出现。触摸的地方是通过外部按键输入的,单片机检测键值,没有直接摸晶振

使用特权

评论回复
9
qe123|  楼主 | 2016-1-20 08:15 | 只看该作者
angerbird 发表于 2016-1-19 20:42
这个是需要将相关的寄存器配置好的。

是按照ti官方给的xt2 配置的

使用特权

评论回复
10
dirtwillfly| | 2016-1-20 12:18 | 只看该作者
qe123 发表于 2016-1-20 08:15
昨天我把程序修改了,只剩下时钟设置和io,在while中只有一个io输出,接到示波器,正常的时候是1M左右, ...

奇怪的问题。还没遇见过变化那么大的

使用特权

评论回复
11
dirtwillfly| | 2016-1-20 18:07 | 只看该作者
ti工程师的回答,觉得比较有道理,分享给大家:

使用特权

评论回复
12
dirtwillfly| | 2016-1-20 18:07 | 只看该作者
首先,对于你的静电测试方式,我有非常大的疑问。非常的不规范。在这样情况下造成任何芯片的损坏都是很正常的。一般冬天人体所带的静电可能会高达万伏,如果你是直接去干扰芯片而不是外壳之类就更不能接受了 第二,你是怎么确认芯片没有复位的 第三,F5438A应该是有fail-safe功能的,当检测到外晶振失效时会自动将时钟从原有时钟切到低速时钟。当你去摸芯片的时候,晶振摸死了,时钟就被切走了,并不会复位。

使用特权

评论回复
13
android2| | 2016-1-21 19:25 | 只看该作者
系统默认的dco的多高频率的

使用特权

评论回复
14
baimiaocun2015| | 2016-1-21 20:56 | 只看该作者
这个不很清楚的,一般的XT2接外部晶振的,主频就是这个的。

使用特权

评论回复
15
309030106| | 2016-1-27 17:21 | 只看该作者
一般冬天人体所带的静电可能会高达万伏,

怎么作防静电处理

使用特权

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

本版积分规则

82

主题

623

帖子

3

粉丝