TI中文支持网
TI专业的中文技术问题搜集分享网站

请帮看一下F5510的时钟设置是否正确?

//======================== MCU时钟初始化 ==========================
//ACLK = LFXT1 = 32kHz, SMCLK = HF or default DCO, MCLK = HF or default DCO
void MCU_init()
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
// Enable XT1
  P5SEL |= BIT4+BIT5;                             // Port select XT1
  UCSCTL6 &= ~(XT1OFF);                     // XT1 On
  UCSCTL6 |= XCAP_3;                           // Internal load cap 12pF,参考F5xx用户手册Page91 & Page108
// Enable XT2,需要外部负载电容
  P5SEL |= BIT2+BIT3;                             // Port select XT2
  UCSCTL6 &= ~XT2OFF;                       // Set XT2 On

// Loop until XT1、XT2 & DCO stabilizes
  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    UCSCTL6 &= ~XT2DRIVE0;                // Decrease XT2 Drive according to expected frequency                                                                    // 参考F5xx用户手册Page108,目前设置为24~32MHz
  UCSCTL4 |= SELA_0 + SELS_5 + SELM_5;      // Select ACLK=XT1,SMCLK=XT2 or DCO,MCLK for XT2 or DCO
}

Charles Wu:

代码初看起来没有问题,现在是芯片晶振起振出了问题?有些寄存器配置和具体硬件有关。比如32k晶振要求的负载电容是多少,XT2接的高频晶振是几M?请楼主再把问题描述的清楚一点吧。

Yun Zhang:

回复 Charles Wu:

这个程序,原先使用上发生问题,XT1是常见的12.5pF负载电容(但并未在PCB上焊接电容、只有1只32768晶振);XT2原用的24.576MHz,配二只负载电容为27pF,最初工作基本正常(从ACLK的看门狗的LED闪烁、及SMCK源的串口输出字符串判断),但工作大约5秒后,明显感觉时钟不再对了,一个100ms的循环可以花费1分钟以上。

后来将XT2换成7.3728MHz的,并对应调整串口设置后,前面那些异常不再出现了。

想问一下,如果XT2想用尽量高速的,例如24.576MHz,该如何设置?

F5510内部的ACLK精度和稳定性,能与常见的20ppm的32768晶振一致吗?

Charles Wu:

回复 Yun Zhang:

代码中将XT2DRIVE0清成了0,XT2的Driver 没有开到最大,当外接晶振频率过高时,可能发生停振。将那句代码去掉再试试。

Charles Wu:

回复 Charles Wu:

另外,楼主所提到的ACLK精度,是否是指片内的REFO?REFO典型误差在3V,25C时是+/-1.5%,还是无法做到晶振的精度。

Yun Zhang:

回复 Charles Wu:

发现问题了,不应该是时钟系统的事情。

只要以下程序启动,就会出现不正常的现象:

void GDO2_ISR(void)

{

 TI_CC_GDO2_PxSEL &=~TI_CC_GDO2_PIN;      // 普通IO

 TI_CC_GDO2_PxDIR &=~TI_CC_GDO2_PIN;      // input

 TI_CC_GDO2_PxREN |= TI_CC_GDO2_PIN;       //  

 TI_CC_GDO2_PxIES &=~TI_CC_GDO2_PIN;      // P2.0 Lo->Hi edge

 TI_CC_GDO2_PxIE  |= TI_CC_GDO2_PIN;           // P2.0 interrupt enabled,GDO2

 TI_CC_GDO2_PxIFG &=~TI_CC_GDO2_PIN;      // P2.0 IFG cleared  

}

这是用于CC1101的外部中断,当CC1101接收到同步信号(或者数据,依据IOCFG2的设置而定)后,读出数据并回复和保存。

以前用于F2132时都是正常的,但移植到F5510后,就出了问题。

请问是什么地方忽略掉了?

Charles Wu:

回复 Yun Zhang:

IFG的清除在IE置位之后,会否是误进入P2的中断了,换个次序试试。

赞(0)
未经允许不得转载:TI中文支持网 » 请帮看一下F5510的时钟设置是否正确?
分享到: 更多 (0)