我现在用MSP430F6系列单片机,使用两个外部晶振,XT1和XT2,但是这两个晶振不起振,我用TI的库函数例程也是不起振。给32768Hz的晶振接两个22pF电容也不管用。我没有思路了,请各位大神帮帮忙啊!!拜托喽!!程序如下
void Init_Clk()
{
P7SEL |= 0x03; // 选择XT1使能
UCSCTL6 |= XCAP_3 + XT1DRIVE_0;
UCSCTL6 &= ~(XT1OFF );
//打开XT1全选外部晶振;配置XT1的电容;XT1在低频模式
UCSCTL4 |= SELS_5 + SELM_5; //MCLK=XT2CLK,SMCLK=XT2CLK,UCSCTL4 默认ACLK=XT1CLK 时 //钟源发生错误,ACLK会自动选择REFOCLK
//其余时钟会选择DCO——CLK
do
{
UCSCTL7 &= ~( XT1LFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}
while(SFRIFG1&OFIFG); // Test oscillator fault flag
}
貌似我隐约的记得不是这么配置时钟的啊,可以看看ti的官方寄存器版本的
官方例程
#include
void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P5DIR |= 0x10; // P5.4= output direction
P5SEL |= 0x10; // P5.4= MCLK option select
BCSCTL1 &= ~XT2OFF; // XT2= HF XTAL
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 |= SELM_2; // MCLK= XT2 (safe)
for (;;); // Do nothing
}
和我的那个区别在于时钟源选择在晶振启动后,我也按照这个配置了XT2,还是不行啊