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

MSP430低功耗3模式时钟切换问题

想测试一下MSP430F149从LPM3模式退出后8M时钟能否正常工作,时钟用8M,SMCLK=8M,UART1用SMCLK时钟分到115200。从LPM3模式退出后串口发送错误,本来程序里发送一个字节,结果收到两个字节,感觉LPM3退出后串口波特率有问题,如果不进LPM3模式则串口发送正确,请各位高手给分析一下位什么串口发送出错。

void clk_init(void)
{
  BCSCTL1&=~XT2OFF;     //

  do
  {IFG1 &= ~OFIFG;           //清OSCFault标志
     for(i=0xFF;i>0;i–);    //延时等待
  }
  while((IFG1 & OFIFG) != 0); //查OSCFault,为0时转换完成
   BCSCTL2|= SELM1 +SELS;
}
//****************************************************************************

           //串口初始化
//****************************************************************************
void InitUART(void)

{
    P3DIR|=BIT6;
    P3DIR&=~BIT7;
    P3SEL |= 0xC0;                            // P3.6,7 = USART0 TXD/RXD
      ME2 |= URXE1 + UTXE1;                     // Enable USART1 T/RXD

    UCTL1 |= CHAR;                            // 8-bit character

      
    UTCTL1 |= SSEL1;                          // UCLK =SMCLK

    UBR01 = 0x45;                             // 115200

    UBR11 = 0x00;                             //
      

    UMCTL1 = 0x4A;                            // Modulation

    UCTL1 &= ~SWRST;                          // Initialize USART state machine
    IE2 |=0x10;
    IFG2&= ~URXIFG1;

}

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  clk_init();
  InitUART();
    P2IE |= BIT0;                         // P2.0中断使能,在端口中断里退出LPM3
   P2IES |= BIT0;                        // P2.0 IO口边沿中断触发模式,下边沿有效
   P2IFG &= ~BIT0;
   
    __enable_interrupt(); //开全局中断
 while(1)
 {
     BCSCTL1|=XT2OFF;     LPM3;
    clk_init();
     
         TXBUF1=0x47;
    while (!(IFG2 & UTXIFG1));
 }}

/// P2口中断服务程序
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
   LPM3_EXIT;                       //
  P2IFG &= ~BIT0;                       // P2.0清除相应中断标志位
}

yun li4:

回复 灰小子:

发送完加个延时就好了,谢谢解答

赞(0)
未经允许不得转载:TI中文支持网 » MSP430低功耗3模式时钟切换问题
分享到: 更多 (0)