5277|6

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】高手请进,F1121A晶振使用中的奇怪现象 [复制链接]

本人编写了一个F1121A的程序,分别使用32768和4M外晶振时(其它硬件一样),出现了不可解释的现象.描述如下(程序附后):

分别使用这两种晶振时,程序基本一样,不同的是使用32768外晶振时,用CCTL2进行DCO调整,频率稳定在800K,每0.12ms中断一次,并用看门狗做定时计数器,约0.625ms中断一次;使用4MHz外晶振时,用CCTL2做定时计数器,约1ms中断一次,禁用看门狗.

使用32768晶振时,程序基本正常,但上电不好:当缓慢接通电源时,程序有时不能正常处理接收的外部信号.为此,我对振荡器失效中断标志进行了复位,复位处理后解决了上电的问题.但在调试过程中发现:尽管程序中对振荡器失效中断标志OFIFG进行复位操作能解决上电问题,但其实振荡器失效中断标志OFIFG根本就没有被复位.不知这是怎么回事?

换成4M外晶振时,如果SMCLK/MCLK直接取4M,不分频,则程序处理基本正常,但处理效果不如32768外晶振的好,有丢信号的情况发生.如果进行2分频给SMCLK/MCLK(即2M),则明显的丢信号,来不及处理.这不应该呀!此时,主频是2M比32768时的800K高,中断处理比32768晶振时执行的语句少:1)32768时CCTL2进行DCO调整,每0.12ms中断一次,处理复杂;而2M时CCTL2进行定时捕获中断,1ms一次,处理简单;2)32768时看门狗定时器每0.625ms中断一次,而2M时看门狗根本不中断.其它的中断和主程序完全一样.

另外,试验发现,在使用4M外晶振的情况下,对振荡器失效中断标志OFIFG进行复位的操作能够真正将OFIFG清零.

不知我的程序哪里还有问题?请高手指点....

以下是程序的相关初始化部分:

使用32768外晶振时:
=========================================
#include "msp430x11x1.h"
RESET mov #300h,SP ;
dint
mov.b #0H,IE1
SetupBC mov.b #XT2OFF+DIVA1+RSEL2,&BCSCTL1 ;
SetupBC2 mov.b #0,&BCSCTL2 ;
SetupWDT mov #WDT_MDLY_0_5,&WDTCTL ; WDT 0.5ms Interval Timer=1M
bic.b #WDTIE,&IE1 ; disa××e WDT Interrupt

Setup_TA mov #TASSEL1+ID0+MC1+TACLR,&TACTL ;
mov #CM0+CCIS0+CAP+CCIE,&CCTL2 ;
....
eint

BIT.B #OFIFG,IFG1
JZ pos_ofifg_clear
BIC.B #OFIFG,IFG1
pos_ofifg_clear:
bis.b #WDTIE,&IE1 ; ena××e WDT Interrupt

=========================================================

使用4M外晶振(2分频)时:
==============================================
#include "msp430x11x1.h"
RESET mov #300h,SP ;
dint
mov.b #0H,IE1
SetupBC mov.b #XT2OFF+XTS+DIVA0+RSEL2,&BCSCTL1 ;
SetupBC2 mov.b #SELM1+DIVM0+SELS+DIVS0,&BCSCTL2 ;
BIS #SCG0,SR
SetupWDT mov #WDT_MDLY_0_5,&WDTCTL ;
bic.b #WDTIE,&IE1 ;

Setup_TA mov #TASSEL1+ID1+ID0+MC1+TACLR,&TACTL ;
....
eint

BIT.B #OFIFG,IFG1
JZ pos_ofifg_clear
BIC.B #OFIFG,IFG1
pos_ofifg_clear:

MOV &TAR,R14 ;
ADD #250,R14 ;
MOV R14,&CCR2 ;
MOV #CCIE,&CCTL2 ;

最新回复

引用: Oscillator Fault The oscillator fault signal warns of a possi××e error condition with the crystal oscillator. The oscillator fault can be ena××ed to generate an NMI interrupt by setting the OFIE bit. The OFIFG flag can then be tested by NMI the interrupt service routine to determine if the NMI was caused by an oscillator fault. A PUC signal can trigger an oscillator fault, because the PUC switches the LFXT1 to LF mode, therefore switching off the HF mode. The PUC signal also switches off the XT2 oscillator. 该叙述只针对1xx系列,4xx和2xx系列的又是不同的。  详情 回复 发表于 2006-7-29 09:00
 
点赞 关注

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
请版主看一看吧!
OFIFG不能复位可能是哪些原因造成的?
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
简单地说:LFXT1工作在LF模式时,MCLK与OFIFG位状态无关。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
Oscillator Fault
The oscillator fault signal warns of a possi××e error condition with the crystal
oscillator. The oscillator fault can be ena××ed to generate an NMI interrupt by
setting the OFIE bit. The OFIFG flag can then be tested by NMI the interrupt
service routine to determine if the NMI was caused by an oscillator fault.
A PUC signal can trigger an oscillator fault, because the PUC switches the
LFXT1 to LF mode, therefore switching off the HF mode. The PUC signal also
switches off the XT2 oscillator.
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
但无法解释的是,尽管OFIFG不能复位,但对OFIFG进行复位操作(代码如下)却可以明显提高上电时程序正常工作的比例.

BIT.B #OFIFG,IFG1
JZ pos_ofifg_clear
BIC.B #OFIFG,IFG1
pos_ofifg_clear:
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 
这很可能是因为运行上述增加的代码,推迟了执行后续代码的时间。其作用应当是相当于增加了等待晶振稳定的延时程序。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用:

Oscillator Fault
The oscillator fault signal warns of a possi××e error condition with the crystal
oscillator. The oscillator fault can be ena××ed to generate an NMI interrupt by
setting the OFIE bit. The OFIFG flag can then be tested by NMI the interrupt
service routine to determine if the NMI was caused by an oscillator fault.
A PUC signal can trigger an oscillator fault, because the PUC switches the
LFXT1 to LF mode, therefore switching off the HF mode. The PUC signal also
switches off the XT2 oscillator.
该叙述只针对1xx系列,4xx和2xx系列的又是不同的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表