原创 你的MSP430F24x,跑的真的是16M吗?

2009-8-18 19:58 3011 2 2 分类: MCU/ 嵌入式

1、标准起振程序。
  BCSCTL1 &= ~XT2OFF;
  do
  {
  IFG1 &= ~OFIFG;
  for (i=255; i>0; i--);
  }while ((IFG1 & OFIFG) !=0);

  BCSCTL2 |= SELM_2 + SELS;                //选择XT2作为MCLK,SMCLK的时钟,16MHZ
  BCSCTL3 |= XT2S_2;              //选择正确的频率范围 16M
2、测试使用UART,和用定时器 选择 SMCLK 16M,发现是正常的。现象为定时器定时示波器观察波形正确;UART
38400,串口正确。
3、但是使用
while(1)
{


   Delay0_9ms(); // for(int i = 3600;i>0;--i); 一条for语句 4个时钟
   P3OUT ^= BIT1;
}


通过示波器观察,端口,正平宽,显示大约12.4ms,明显是跑的是1.几M的内部时钟。也就是说16M的时钟没有 作为主时钟。但多次下载,有时显示的事 870us,表明16M正常了,但是很不稳定。


4、接着我使用这样的语句起振。
  do
  {
  IFG1 &= ~OFIFG;
  for (i=4000; i>0; i--);
  }while ((IFG1 & OFIFG) !=0);
基本能保证每次起振。但是0.1%,的概率还是没有起振。


5、接着我用


  BCSCTL1 &= ~XT2OFF;
  do
  {
  IFG1 &= ~OFIFG;
  for (i=4000; i>0; i--);
  }while ((IFG1 & OFIFG) !=0);
for (i=4000; i>0; i--);  
  do
  {
  IFG1 &= ~OFIFG;
  for (i=4000; i>0; i--);
  }while ((IFG1 & OFIFG) !=0);
0.9ms的延迟 是准的。说明,16M的时钟作为了主时钟。


6、我的理解,MSP430外围电路肯定是好的,只要不用16M一点问题没有。而且用16M每次都能作为SMCLK,因为定时器,和UART波特率每次都是对了。这说明16M作为MCLK过程是和SMCLK不一样的。,MCLK需要更严格。所以延迟要更大,可能光延迟还不够。用经典的延迟 0XFF,基本不能让MCLK变成16M,用(5)的方法,我也不能保证每次都让MCLK为16M。


7、待解决

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条