4989|3

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430F5438A 24M外部晶振震荡幅度很小 [复制链接]

1芯积分
使用MSP430F5438A 做实验板,XT2外接24M晶振,两个22PF电容接地。使用TI官网示例代码测试,发现晶振震荡频率正确但幅度最大为0.7V,峰峰值为0.45V,不知道这样的结果是不是正常?更换电容和8M晶振后问题依旧。使用100MHZ示波器测量。希望大家帮忙讲下是怎么回事?谢谢。
下面是使用的测试代码:
#include
#include "hal_pmm.h"
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
   SetVCore(PMMCOREV_2);                     // Set VCore to 1.8MHz for 20MHz
      
  P11DIR = BIT1+BIT2;                       // P11.1-2 to output direction
  P11SEL |= BIT1+BIT2;                      // P11.1-2 to output SMCLK,MCLK
  P5SEL |= 0x0C;                            // Port select XT2

  UCSCTL6 &= ~XT2OFF;                       // Enable XT2
  UCSCTL3 |= SELREF_2;                      // FLLref = REFO
                                            // Since LFXT1 is not used,
                                            // sourcing FLL with LFXT1 can cause
                                            // XT1OFFG flag to set
  UCSCTL4 |= SELA_2;                        // ACLK=REFO,SMCLK=DCO,MCLK=DCO

  // Loop until XT1,XT2 & DCO stabilizes
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

  UCSCTL6 &= ~XT2DRIVE0;                    // Decrease XT2 Drive according to
                                            // expected frequency
  UCSCTL4 |= SELS_5 + SELM_5;               // SMCLK=MCLK=XT2

  while(1);                                 // Loop in place
}

最新回复

你的PMM电源管理寄存器什么样? /* 功能说明: P1.6(23号脚)输出25M P1.2(19号脚)输出5K占空比25%的方波 P1.3(20号脚)输出5K占空比75%的方波 */ #include "msp430x54xA.h" #define FRE 5000 #define PERIOD 25000000/FRE #define DUTY0 PERIOD*0.25 #define DUTY1 PERIOD*0.75 void clock_init(); void io_init(); void timer_init(); void clock_init() {   PMMCTL0 = PMMPW + PMMCOREV_3;   SVSMHCTL = SVSHRVL_3 + SVSMHRRL_3;   P5SEL |= BIT2 + BIT3;                        //打开5.2  5.3的第二功能   UCSCTL6 &= ~XT2OFF;                        //开启XT2 8M晶振   UCSCTL3 |= SELREF_2;                        //fll  == refo clk   UCSCTL4 |= SELA_2;                        //aclk == refo clk   do                                         //解除失败标志位   {     UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);     SFRIFG1 &= ~OFIFG;   }   while (SFRIFG1&OFIFG);   UCSCTL6 |= XT2DRIVE_1;                //根据晶振来匹配   UCSCTL4 = SELS__XT2CLK + SELM__XT2CLK;   //选择SMCLK和MCLK } void io_init() {   P1DIR |= BIT2+BIT3+BIT6;   P1SEL |= BIT2+BIT3+BIT6; } void timer_init() {   TA0CTL = TASSEL1 + TACLR;   TA0CCR0 = PERIOD-1;   TA0CCTL1 = OUTMOD_7;   TA0CCR1 = DUTY0-1;   TA0CCTL2 = OUTMOD_7;   TA0CCR2 = DUTY1-1;   TA0CTL |= MC_1; } //延时函数 void dealy600ms()                     //延时函数 {   unsigned char m,n;   for(m=0;m  详情 回复 发表于 2013-5-1 10:29
 
点赞 关注

回复
举报

114

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

XT2晶振幅值

幅值大小正确不我不是很清楚,但是我你用24M的晶振,驱动电流至少得在第三档次,也就是XT2DRIVE_3,
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

板凳
 
单片机的晶振振荡错误有没有报错呢?
 
个人签名《MCU工程师炼成记》作者之一
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

4
 
你的PMM电源管理寄存器什么样?
/*
功能说明:
P1.6(23号脚)输出25M
P1.2(19号脚)输出5K占空比25%的方波
P1.3(20号脚)输出5K占空比75%的方波
*/
#include "msp430x54xA.h"

#define FRE 5000
#define PERIOD 25000000/FRE
#define DUTY0 PERIOD*0.25
#define DUTY1 PERIOD*0.75

void clock_init();
void io_init();
void timer_init();

void clock_init()
{
  PMMCTL0 = PMMPW + PMMCOREV_3;
  SVSMHCTL = SVSHRVL_3 + SVSMHRRL_3;
  P5SEL |= BIT2 + BIT3;                        //打开5.2  5.3的第二功能
  UCSCTL6 &= ~XT2OFF;                        //开启XT2 8M晶振
  UCSCTL3 |= SELREF_2;                        //fll  == refo clk
  UCSCTL4 |= SELA_2;                        //aclk == refo clk

  do                                         //解除失败标志位
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
    SFRIFG1 &= ~OFIFG;
  }
  while (SFRIFG1&OFIFG);

  UCSCTL6 |= XT2DRIVE_1;                //根据晶振来匹配
  UCSCTL4 = SELS__XT2CLK + SELM__XT2CLK;   //选择SMCLK和MCLK
}

void io_init()
{
  P1DIR |= BIT2+BIT3+BIT6;
  P1SEL |= BIT2+BIT3+BIT6;
}

void timer_init()
{
  TA0CTL = TASSEL1 + TACLR;
  TA0CCR0 = PERIOD-1;
  TA0CCTL1 = OUTMOD_7;
  TA0CCR1 = DUTY0-1;
  TA0CCTL2 = OUTMOD_7;
  TA0CCR2 = DUTY1-1;
  TA0CTL |= MC_1;
}
//延时函数

void dealy600ms()                     //延时函数
{
  unsigned char m,n;
  for(m=0;m<100;m++)
    for(n=0;n<200;n++);
}
//
void main( void )
{
  unsigned char temp,i;
  WDTCTL = WDTPW + WDTHOLD;
  
  clock_init();
  io_init();
  timer_init();
   P10DIR|=0XFF;
  P10OUT=0XFF;         //设置P4口为输出,并输出高电平关闭LED
           
  temp=0x01;
  while(1)
  {  
    P10OUT=0x00;
    dealy600ms();
    dealy600ms();  
    for(i=0;i<8;i++)
    {
    P10OUT = ~(0xff&(temp<     dealy600ms();                 //调用延时
    }  
   }
  //_BIS_SR(CPUOFF);
}
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表