首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TI MSP430的低功耗模式

TI MSP430的低功耗模式
EN

Stack Overflow用户
提问于 2014-02-12 11:11:02
回答 1查看 8.1K关注 0票数 1

我正在使用MSP430F2274,并试图更好地理解低功耗模式的使用。

在我的程序中,我还使用了SimplicTi API,以便两个设备(一个是AP,由另一个ED连接)进行通信。

AP -接入点,它是,也是,通过UART连接到PC上,以便从用户那里获得一个字符串。

ED端设备,只需与AP (使用SimplicTi协议)并等待来自它的消息。

我想确保我理解低功耗模式的使用,并看看它是如何与SimplicTi API“一起来的”。

AP的“流程”如下(在“链接”到教育署之后,请参见下面的代码):

代码语言:javascript
复制
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
   // **A)** extract the "RXed" character (8 bits received from user) , use the while 
   // in order to be sure all the 8 bits are "desirialized" into a byte  
   while (!(IFG2 & UCA0RXIFG));   
   input_char = UCA0RXBUF;     // input_char is global variable.

   // **B)** if we received the "Enter" character , which indicates the 
   //    end of the string 
   if(input_char == '\r' && input_count > 0)      
   {

      TACCR0 = 10;   // **F)**
      TACTL = TASSEL_1 + MC_1; // ACLK, up mode
      // **E)** Enter LPM3, interrupts enabled !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      __bis_SR_register(LPM3_bits + GIE); 

    }//end if Enter


    // **C)** Any other char of the user's string when we 
   //    have not got more than the maximum amount of bytes(chars)
    else if (((FIRST_CHAR <= input_char && input_char <= LAST_CHAR) || ('a' <=  input_char && input_char <= 'z')) && (input_count < INPUT_MAX_LENGTH)) 
    {
        input[input_count++] = input_char;
    }


}  //end of UART RX INTERRUPT

TIMERA0中断处理程序是以下代码:

代码语言:javascript
复制
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
    if (i == strlen(morse))      // **D)** morse is a global array of chars  who holds the string that we wish to send 
    {
        SMPL_Send(sLID[0], (uint8_t*)EOT, 1);             // EOT is the last char to send 
        TACTL = MC_0;                         //disable  TimerA0 
    }


    else if (!letterSpace)
    {
       char ch = morse[i++];  
       SMPL_Send(sLID[0], (char*)ch, 1); 

       switch(ch)
       {
         case '.':
           {
             TACCR0 = INTERVAL * 3;
             letterSpace = 1;
             break;
           }

          case '-':
           {
              TACCR0 = INTERVAL * 3 * 3;
              letterSpace = 1;
               break;
            }
       } // switch 

   }  // else if 

}  //end TIMERA0 interrupt handler 

事情是这样的:

我使用TIMERA0处理程序来在不同数量的类型之后发送每个字节,不管字符被转换为"-“还是”a“。

为此,我相应地将计时器设置为不同的值(“-”的值是“-”的3倍)。

最后,当我传输完整个字符串(D)时,我会禁用计时器。

注意:在AP代码开始时执行以下方法以配置UART:

代码语言:javascript
复制
void UARTinit()
{
    P3SEL = 0x30;           // P3.4 and P3.5 as the UART  TX/RX pins: P3SEL |= BIT4 + BIT5;                
    UCA0CTL1 |= UCSSEL_2;  // SMCLK    

    // pre scale  1MHz/9600 =~ 104. 
    UCA0BR0 = 104;         
    UCA0BR1 = 0;     

    // 8-bit character and Modulation UCBRSx = 1
    UCTL0 |= CHAR;  
    UCA0MCTL = UCBRS0;  

    UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
    IE2 |= UCA0RXIE;                          // Enable UART INPUT interrupt

}  // end of UARTinit

所以我的问题是:

1)可以肯定的是,在A中,在中,我正在“轮询”UART的Rx缓冲区,它是合适的,还是对“任何情况”都有很好的实践,导致UART 处理程序在UART模块接收到整个字节(按照我的配置)后被调用

( 2)在AP主程序中,最后一条指令是将其“放入”LPM0中的中断使能:__bis_SR_register(LPM0_bits + GIE);

LPM0的时间:

  • CPU是禁用的
  • ACLK和SMCLK仍然活跃
  • MCLK被禁用

对于LPM3:

  • CPU是禁用的
  • MCLK和SMCLK被禁用
  • ACLK仍然活跃

在我看来,我不能输入LPM3,因为AP需要SMCLK时钟而不是禁用?(因为UART使用它)这是正确的吗?

3)在F)中,调用TIMERA0处理程序是一种正确的方法吗?我查看了TACRR0 = 10,因为它是一个很小的值,定时器将“在任何时间内”到达,因此它将进入TIMERA0处理程序来执行发送字符串字节的任务。

4)对于AP中的“回退”:据我所见,“流”是这样的:

输入LPM0 (main) --> UART被插入-->退出LPM0并进入UART处理程序-->当它接收到字节(通常是5)时,它进入LPM3 ->计时器完成计数到TACRR0值( 10) -->当TIMERA0处理程序发送完最后一个字节时-->当TIMERA0处理程序发送完它的最后一个字节时->我们“回滚”到使我们在UART处理程序中的LPM3?->

现在,??正在“回滚”到主程序内带我们到LPM0的指令,还是“待在这里”(在UART处理程序E中输入我们到LPM3的指令)?如果我们确实停留在E)上,我是否需要将它更改为LPM0原因,同样,UART使用的是SMCLK,它在LPM3中不活动,但在LPM0中确实是活动的?

5)任何其他评论将是超级的!

谢谢分配,盖伊。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-26 02:33:57

1)这是可行的

2)当您配置它时:

代码语言:javascript
复制
UCA0CTL1 |= UCSSEL_2;  // SMCLK

这意味着 UART 使用SMCLK,当您使MCU转向LPM3 3时,SMCLK将停止;这样UART将无法工作,因此应该配置UART使用ACLK,这将使UART在LPM3模式下工作。

3) .

4) .

5)见2

我希望这能帮到你

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21726265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档