您的位置 首页 发布

MSP430F5529 番外(二)纠正XT1装备过错

错误更正说明:在第三章讲UCS时钟系统的时候,实验二是将MCLK和ACLK配置为XT1(F5529的XT1为32768KHZ)当时的程序如下:*1配置IO口54和

过错更正阐明:

在第三章讲UCS时钟体系的时分,试验二是将MCLK和ACLK装备为XT1(F5529的XT1为32.768KHZ)
其时的程序如下:
/*1.装备IO口5.4和5.5为XT1功用。*/
/*2.装备XCAP为XCAP_3,即12PF的电容。*/
/*3.铲除XT1OFF标志位。*/
/*4.等候XT1起振。*/
#include<msp430.h>
void main(void){
P1SEL |= BIT0;
P1DIR |= BIT0;//丈量ACLK用
P2SEL |= BIT2;
P2DIR |= BIT2;//丈量SMCLK用
P7SEL |= BIT7;
P7DIR |= BIT7;//丈量MCLK用
P5SEL |= BIT4|BIT5; //装备为XT1功用,电路板上晶振接于这两脚
UCSCTL6 |= XCAP_3;//装备电容为12pF
UCSCTL6 &= ~XT1OFF; //使能XT1
/*下面是很重要的一步:*/
/* XT1刚刚起振的时分可能有过错,导致时钟过错标志方位位,必须先清零*/
/*OFIFG即Osc Fault Flag,坐落SFRIFG1中*/
while(SFRIFG1 & OFIFG) //如果有时钟过错{
UCSCTL7 &=~(XT2OFFG+DCOFFG+XT1LFOFFG);//铲除3种时钟过错标志
SFRIFG1&=~(OFIFG);//铲除时钟过错标志位}
UCSCTL4&=(UCSCTL4&(~(SELA_7|SELM_7)))|SELA_0|SELM_0;
//将SMCLK和MCLK时钟源装备为XT1
}
其时由于手里没有频率计,并没有测输出。
昨日实践测了一下,发现该程序存在问题:实践丈量MCLK为876KHZ左右,ACLK虽然是32.768KHZ,但我感觉仍是内部的REFO。
回答如下:这是官方的例程

ACLK = SMCLK = MCLK =XT1 =32768

int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

P1DIR |= BIT0; // ACLK set out to pins
P1SEL |= BIT0;
P2DIR |= BIT2; // SMCLK set out to pins
P2SEL |= BIT2;
P7DIR |= BIT7; // MCLK set out to pins
P7SEL |= BIT7;

P5SEL |= BIT4+BIT5; // Select XT1

UCSCTL6 &= ~(XT1OFF); // XT1 On
UCSCTL6 |= XCAP_3; // Internal load cap
UCSCTL3 = 0; // FLL Reference Clock = XT1

// Loop until XT1,XT2 & DCO stabilizes – In this case loop until XT1 and DCo settle
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag

UCSCTL6 &= ~(XT1DRIVE_3); // Xtal is now stable, reduce drive strength

UCSCTL4 = SELA_0 + SELS_0 + SELM_0; // SMCLK = MCLK =ACLK = LFTX1

}

留意划红线的句子,要用等号赋值。由于默许 SELS 和SELM的值是不为0的,所以用或赋值的话会犯错。

默许值请看下表:

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/256173.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部