微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 利用MSP430调采集脉冲程序(疑问+解答)

利用MSP430调采集脉冲程序(疑问+解答)

时间:08-16 来源:互联网 点击:

从而程序先后执行了下面两条语句:

BCSCTL1 &= ~XT2OFF;

BCSCTL1 = divA_1; //对ACLK进行2分频;

执行以上两句确实实现了2.4s的准确定时,但同时引入问题是:执行第二句时,是对其赋值0X10, 以至于把默认的RSELX = 4改为0,从而DCO由800K降为50K左右,从而采集到的数据大大减少,

而正确的语句应为:BCSCTL1 | = divA_1; //对ACLK进行2分频;

从实际测试数据反推:(((2400/124)/272)/8) 其倒数再乘以1000得114526,即114K,

从DATASHEET图可以看出当DCOX=3 RSELX=4时,选取的是近110K的时钟,从而上面的奇怪现象得以解释。

并且要使外部晶体正确起振:

After a PUC, the basic clock module uses DCOCLK for MCLK. If required,

MCLK may be sourced from LFXT1 or XT2.

The sequence to switch the MCLK source from the DCO clock to the crystal

clock (LFXT1CLK or XT2CLK) is:

1) Switch on the crystal oscillator

2) Clear the OFIFG flag

3) Wait at least 50 µs

4) Test OFIFG, and repeat steps 1-4 until OFIFG remains cleared.

; Select LFXT1 (HF mode) for MCLK

BIC #OSCOFF,SR ; Turn on osc.

BIS.B #XTS,&BCSCTL1 ; HF mode

L1 BIC.B #OFIFG,&IFG1 ; Clear OFIFG

MOV #0FFh,R15 ; Delay

L2 DEC R15 ;

JNZ L2 ;

BIT.B #OFIFG,&IFG1 ; Re?test OFIFG

JNZ L1 ; Repeat test if needed

BIS.B #SELM1+SELM0,&BCSCTL2 ; Select LFXT1CLK

其C语言为:

Do

{

IFG1 &= ~OFIFG; //清除晶振失败标志

for (i = 0xFF; i > 0; i--); // 等待8MHz晶体起振

}

while ((IFG1 & OFIFG)); // 晶振失效标志仍然存在?

在调试程序中加入以上判别语句后,一切都下常起来。

结论:一切不合理的现象皆是有原因的,发现它,找到它,掌握它。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top