This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F6736:在 MSP430F6736中设置并退出低功耗模式

Guru**** 2943400 points

Other Parts Discussed in Thread: MSP430F6736

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/825224/msp430f6736-low-power-mode-set-and-exit-in-msp430f6736

器件型号:MSP430F6736

大家好、

我正在使用 MSP430F6736控制器。 我想使用 UART 连接其他器件。 在串行端口初始化期间、我设置低功耗模式 __ bis_SR_register (LPM0_Bits | GIE);。 如果我执行这个指令、在清除这个低功耗模式(_BIC_SR_IRQ(LPM0_bits);). 如果没有低功耗模式、UART 接收器部件将无法正常工作。 如何 以正常方式执行? 请为我的问题提供建议。

谢谢、此致、

Anitha.L

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Anitha、

    请参阅以下代码示例:

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430F673x 演示- USCI_A0、超低功耗 UART 9600回波 ISR、32kHz ACLK
    //
    说明:回波接收到的字符、使用的 RX ISR。 正常模式为 LPM3、
    // USCI_A0 RX 中断触发 TX 回波。
    // ACLK = 32768Hz 晶振,MCLK = SMCLK = DCO ~1.045MHz
    //带有32768Hz XTAL 的波特率分频器@9600 = 32768Hz/9600 = 3.41
    //请参阅用户指南了解波特率分频器表
    //
    
    ////// MSP430F673x
    // --------
    // /|\| XIN|-
    // || | 32kHz
    // ---|RST XOUT|-
    // | |
    // | P1.3/UCA0TXD|--- >//
    | | 9600 - 8N1
    // | P1.2/UCA0RXD|<---
    //
    // M. Swanson
    // Texas Instruments Inc.
    // 2011年12月
    //使用 CCS 生成版本:5.1.0和 IAR 嵌入式工作平台版本:5.40.1/
    
    #include 
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    //设置 P1.2 UCA0RXD、P1.3 UCA0TXD
    P1SEL |= BIT2 | BIT3; //将 P1.2、P1.3设置为非 IO
    P1DIR |= BIT2 | BIT3; //启用 UCA0RXD、UCA0TXD
    
    //设置 LFXT1
    UCSCTL6 &=~(XT1OFF); // XT1打开
    UCSCTL6 |= XCAP_3; //内部负载电容
    //循环直到 XT1故障标志被清除
    操作
    {
    UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG; //清除故障标志
    } while (SFRIFG1和 OFIFG); //测试振荡器故障标志
    
    //设置 eUSCI_A0
    UCA0CTLW0 |= UCSWRST; //**将状态机置于重置中**
    UCA0CTLW0 |= UCSSEL_1; // CLK = ACLK
    UCA0BRW_L = 0x03; // 32kHz/9600=3.41 (请参阅用户指南)
    UCA0BRW_H = 0x00; //
    UCA0MCTLW = 0x5300; //调制 UCBRSx=0x53、UCBRFx=0
    UCA0CTLW0 &=~UCSWRST; //**初始化 USCI 状态机**
    UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断
    
    _bis_SR_register (LPM3_bits | GIE); //进入 LPM3、中断被启用
    __no_operation(); //对于调试
    器}
    
    // USCI_A0中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=USCI_A0_Vector
    __interrupt void USCI_A0_ISR (void)
    #Elif defined (__GA0__)#pragma vector=USCI_A0_COMPILE_ERROR
    (void
    
    )(USCI_COMPILE_INTERRUPTIC_)(void)(UCI_TRIBUCI_TRIBRATOR)(UCI_ENTRIBUCI_ERSI_EN
    #endif
    {
    开关(__evo_in_range (UCA0IV、4))
    {
    USCI_NONE 案例:中断; //无中断
    USCI_UART_UCRXIFG 案例: // RXIFG
    while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器准备就绪?
    UCA0TXBUF = UCA0RXBUF; // TX -> RXed 字符
    中断;
    案例 USCI_UART_UCTXIFG:中断; // TXIFG
    案例 USCI_UART_UCSTTIFG:中断; // TTIFG
    案例 USCI_UART_UCTXCPTIFG:中断;// TXCPTIFG
    默认值:break;
    }
    }
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ling、

    我在下面的代码中也遇到了相同的问题。 在此代码中、如果我禁用 低功耗模式(我是指控制器在工作模式下运行)、我没有获得接收器中断。

    为什么在激活模式中未激活接收器中断?

    如果我启用低功耗模式、为什么接收器中断工作正常?

    3.如何在正常模式下获得接收器中断?

    谢谢、此致、

    Anitha.L

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Anitha、

    您是否在禁用低功耗模式时启用了全局中断?

    _bis_SR_register (GIE); //中断被启用 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ling、

    是的、我在没有低功耗模式的情况下启用全局中断。 但我没有获得接收器中断。 仅在低功耗模式下、接收器中断发生、但它阻止了其他操作。 如何在不设置低功耗模式的情况下获得接收器中断?

    谢谢、此致、

    Anitha.L

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Anitha、

    请尝试此操作、

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430F673x 演示- USCI_A0、超低功耗 UART 9600回波 ISR、32kHz ACLK
    //
    说明:回波接收到的字符、使用的 RX ISR。 正常模式为 LPM3、
    // USCI_A0 RX 中断触发 TX 回波。
    // ACLK = 32768Hz 晶振,MCLK = SMCLK = DCO ~1.045MHz
    //带有32768Hz XTAL 的波特率分频器@9600 = 32768Hz/9600 = 3.41
    //请参阅用户指南了解波特率分频器表
    //
    
    ////// MSP430F673x
    // --------
    // /|\| XIN|-
    // || | 32kHz
    // ---|RST XOUT|-
    // | |
    // | P1.3/UCA0TXD|--- >//
    | | 9600 - 8N1
    // | P1.2/UCA0RXD|<---
    //
    // M. Swanson
    // Texas Instruments Inc.
    // 2011年12月
    //使用 CCS 生成版本:5.1.0和 IAR 嵌入式工作平台版本:5.40.1/
    
    #include 
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    //设置 P1.2 UCA0RXD、P1.3 UCA0TXD
    P1SEL |= BIT2 | BIT3; //将 P1.2、P1.3设置为非 IO
    P1DIR |= BIT2 | BIT3; //启用 UCA0RXD、UCA0TXD
    
    //设置 LFXT1
    UCSCTL6 &=~(XT1OFF); // XT1打开
    UCSCTL6 |= XCAP_3; //内部负载电容
    //循环直到 XT1故障标志被清除
    操作
    {
    UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG; //清除故障标志
    } while (SFRIFG1和 OFIFG); //测试振荡器故障标志
    
    //设置 eUSCI_A0
    UCA0CTLW0 |= UCSWRST; //**将状态机置于重置中**
    UCA0CTLW0 |= UCSSEL_1; // CLK = ACLK
    UCA0BRW_L = 0x03; // 32kHz/9600=3.41 (请参阅用户指南)
    UCA0BRW_H = 0x00; //
    UCA0MCTLW = 0x5300; //调制 UCBRSx=0x53、UCBRFx=0
    UCA0CTLW0 &=~UCSWRST; //**初始化 USCI 状态机**
    UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断
    
    _bis_SR_register (GIE);//启用中断
    
    while (1)
    {
    _no_operation (); //对于调试
    器}
    }
    
    // USCI_A0中断服务例程
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
    #pragma vector=USCI_A0_Vector
    __interrupt void USCI_A0_ISR (void)
    #Elif defined (__GISR__)__USCI_A0_AURATIC_
    (void
    
    )(void)#USCI_IFT_USCI_COMPI_(void)(void)(void)#_A0)(void USCI_COMPIAC_A0_)(void
    #endif
    {
    开关(__evo_in_range (UCA0IV、4))
    {
    USCI_NONE 案例:中断; //无中断
    USCI_UART_UCRXIFG 案例: // RXIFG
    while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器准备就绪?
    __no_operation(); //用于调试器
    UCA0TXBUF = UCA0RXBUF; // TX -> RXed 字符
    中断;
    案例 USCI_UART_UCTXIFG:中断; // TXIFG
    案例 USCI_UART_UCSTTIFG:中断; // TTIFG
    案例 USCI_UART_UCTXCPTIFG:中断;// TXCPTIFG
    默认值:break;
    }
    }