MCU:MSP430F5529
本人想使用这款单片机的XT1高速频率模式,但是经过配置之后,XT1HFOFFG标志位一直为高。
我现在外部接的是12M无源晶振和2个30PF负载电容。
板子是自己做的,之前尝试过用32768HZ的晶振使用低速频率模式就能正常工作。换成告诉就有问题,网上的类型情况我也百度了,该改的都改了,可是还是有问题,下面是我的初始化代码:
求大佬帮我看看哪里有问题,谢谢了!
P5SEL |= BIT4+BIT5;
UCSCTL6 |= XTS + XT1DRIVE_1;
UCSCTL6 &= ~XT1OFF;
UCSCTL3 = SELREF__REFOCLK + FLLREFDIV__1 ;//FLL参考时钟XT1 FLL参考时钟1分频
__bis_SR_register(SCG0);//关闭FLL
UCSCTL0 = 0x0000;//DCO MOD最低
UCSCTL1 = DCORSEL_2 + 0 ;//DCO频率范围选择2 + 使能调制器
UCSCTL2 = FLLD__1 + 61 ;//预分频1 + 31倍倍频
__bic_SR_register(SCG0);//开启FLL
while(SFRIFG1 & OFIFG)
{
UCSCTL7 &= ~(DCOFFG + XT1HFOFFG + XT1LFOFFG +XT2OFFG);//清除XT1 XT2 DCO时钟错误标志
SFRIFG1 &= ~OFIFG;//清除时钟错误标志
}
UCSCTL4 = SELA__XT1CLK + SELM__XT1CLK + SELS__XT1CLK ;
UCSCTL5 = DIVPA__1 + DIVM__1 + DIVS__1 + DIVA__1 ;
XT1HFOFFG标志位一直为高,说明还是配置的不对,还得仔细看下说明书上MSP430F5529时钟的配置。
引用: alan000345 发表于 2019-7-11 09:00 XT1HFOFFG标志位一直为高,说明还是配置的不对,还得仔细看下说明书上MSP430F5529时钟的配置。
嗯 我就是看了才不明白 我明明已经开了XT1的高频模式,也选择了高频模式的范围。我真的不明白哪里还有问题了。我百度了很多这个案例,有人这个标志位没清零是因为寄存器配置有问题,我现在配置我确定是没错的,晶振用的无源加负载电容,可是就是标志位不能清零。
此问题已经解决。
我将以下程序进行了更改。
while(SFRIFG1 & OFIFG)
{
UCSCTL7 &= ~(DCOFFG + XT1HFOFFG + XT1LFOFFG +XT2OFFG);//清除XT1 XT2 DCO时钟错误标志
SFRIFG1 &= ~OFIFG;//清除时钟错误标志
}
UCSCTL4 = SELA__XT1CLK + SELM__XT1CLK + SELS__XT1CLK ;
UCSCTL5 = DIVPA__1 + DIVM__1 + DIVS__1 + DIVA__1 ;
改为了
UCSCTL4 = SELA__XT1CLK + SELM__XT1CLK + SELS__XT1CLK ;
UCSCTL5 = DIVPA__1 + DIVM__1 + DIVS__1 + DIVA__1 ;
while(SFRIFG1 & OFIFG)
{
UCSCTL7 &= ~(DCOFFG + XT1HFOFFG + XT1LFOFFG +XT2OFFG);//清除XT1 XT2 DCO时钟错误标志
SFRIFG1 &= ~OFIFG;//清除时钟错误标志
}
我的理解是要先让各个时钟分配到时钟源,只有当XT1知道自己没有被3个时钟的任何一个使用,它才会自己关闭。