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.

[参考译文] MSP430FR5969:我希望 MSP 点亮 LED 1或2秒、然后进入 LMP3.5 20秒。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1296003/msp430fr5969-i-want-the-msp-to-turn-on-the-led-for-1-or-2-seconds-and-then-go-into-lmp3-5-for-20-seconds

器件型号:MSP430FR5969

您好、TI 团队:

以下是我在 LMP3.5示例中找到的代码。 基本上、我已经编辑了代码来实现一个配置、在此配置中、MSP 保持在 LMP3.5模式下20秒、然后唤醒闪烁 LED 2秒、然后再次进入 LMP3.5模式。 代码正常工作、但 LED 始终保持亮起状态、从不熄灭。 有人可以审阅并告诉我应该编辑或可以为我编辑的内容吗?

#包含

void initboard(void);
void initRtc (void);
void WakeUpLPM35 (void);
volatile unsigned int blinkCounter = 0;
//将 LED 的状态存储在 FRAM 中,其中此变量
//在启动期间不会用 C 语言初始化。 这允许
///可轻松恢复和管理的某些变量
//存储在非易失性存储器中,无需闪存电荷泵。
//这样可以缩短启动时间。
#if defined (__TI_Compiler_version__)
#pragma persistent(ledState);
unsigned char ledState = 0;
#Elif Defined (__IAR_systems_ICC__)
_persistent unsigned char ledState;
#else
//对于其他编译器,将此变量插入 FRAM 存储器
unsigned char ledState;
#endif

int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT

//初始化板
initBoard();// GPIO 和 CS 的常规初始化代码

//确定是来自 LPMx.5还是常规复位。
如果(SYSRSTIV = SYSRSTIV_LPM5WU)
{
//在从 LPM3.5唤醒时,重新
WakeUpLPM35 ();// LPMx.5唤醒特定的初始化代码
_enable_interrupt ();// RTC 中断应立即触发...

否则
{
ledState = 0;//初始化 LED 状态变量
P1OUT = 0x00;//初始化 P1OUT 为零
initRtc ();// RTC_B 的常规初始化代码

//使用 P4.6 LED 作为心跳,表示设备已重新启动,或者
//从 LPMx.5或完全加电
P4OUT |= BIT6;

//使用计时器 A 短暂延迟,使 P1.0 LED 闪烁
TA0CCTL0 = CCIE;// TACCR0中断被启用
TA0CCR0 = 1000;
TA0CTL = TASSEL__ACLK | MC__UP;// SMCLK、向上计数模式
__ bis_SR_register (LPM3_bits | GIE);
TA0CTL &=~(MC__UP);//停止计时器

P4OUT &=~BIT6;//清除 P4.6 LED

//按顺序进入 LPM3.5。
PMMCTL0_H = PMMPW_H;//打开 PMM 寄存器以进行写入
PMMCTL0_L |= PMMREGOFF;//并设置 PMMREGOFF

//使能中断后进入 LPM3.5模式。 请注意、该运算确实
//不返回。 LPM3.5将通过一个复位事件退出、这会导致一个
//重新启动代码。
__ bis_SR_register (LPM3_bits | GIE);
___ no_operation();

返回1;

void initBoard (void)
{
//端口配置
//从变量复位之前恢复 P1.0 LED 状态
//存储在 FRAM 中
P1OUT = ledState;
P1DIR = 0xFF;
P2OUT = 0x00;
P2DIR = 0xFF;
P3OUT = 0x00;
P3DIR = 0xFF;
P4OUT = 0x00;
P4DIR = 0xFF;
PJOUT = 0x00;
PJSEL0 |= BIT4 | BIT5;
PJDIR = 0xFFFF;

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~μ A LOCKLPM5;

//设置时钟
CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
CSCTL2 = SELAM_0 | SELS_3 | SELM_3;//设置 ACLK = XT1;MCLK = DCO
CSCTL3 = DIIVA_0 | DIVS_0 | DIVM_0;//将所有分频器设置为1
CSCTL4 &&~LFXTOFF;//启用 LFXT1

正确
{
CSCTL5 &=~LFXTOFFG;//清除 XT1故障标志
SFRIFG1 &=~OFIFG;
}while (SFRIFG1和 OFIFG);//测试振荡器故障标志
CSCTL0_H = 0;//锁定 CS 寄存器

void initRtc (void)
{
//配置 RTC_B
//配置 BCD 模式,停止 RTC,然后启用 RTC
RTCCTL01 = RTCBCD | RTCHOLD | RTCTEV_0;
//将 RTC 第二级分频器设置为256
//每2秒发生一次 RTC 中断
RTCPS1CTL = RT1IP_7 | RT1PSIE;

//启动 RTC 日历模式
RTCCTL01 &=~μ H RTCHOLD;

空 WakeUpLPM35 (空)
{
// Re 配置/启动
//配置 BCD 模式,停止 RTC,然后启用 RTC
RTCCTL01 |= RTCBCD | RTCHOLD | RTCTEV_0;
//将 RTC 第二级分频器设置为256
//每2秒发生一次 RTC 中断
RTCPS1CTL = RT1IP_7 | RT1PSIE;

//启动 RTC 日历模式
RTCCTL01 &=~μ H RTCHOLD;


#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=RTC_vector
__interrupt void RTC_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (RTC_vector))) RTC_ISR (void)
#else
#错误编译器不受支持!
#endif
{
开关(__even_in_range (RTCIV、RTCIV_RTCOFIFG))
{
案例 RTCIV_NONE:中止;
案例 RTCIV_RTCRDYIFG:中断;
案例 RTCIV_RTCTEVIFG:中断;
案例 RTCIV_RTCAIFG:中断;
案例 RTCIV_RT0PSIFG:中断;
情形 RTCIV_RT1PSIFG:


如果(blinkCounter == 0)
{

P1OUT |= BIT0;


否则
{

P1OUT &=~BIT0;


BlinkCounter ++;
if (blinkCounter > 20)
{
BlinkCounter = 0;



中断;
案例 RTCIV_RTCOFIFG:中止;

//计时器 A0中断服务例程
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=TIMER0_A0_vector
__interrupt void Timer_A (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (TIMER0_A0_vector)) Timer_A (void)
#else
#错误编译器不受支持!
#endif
{
__ bic_SR_register_on_exit (LPM4_bits);

谢谢!

此致、

普赫拉吉·辛格

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

    尊敬的 Pukhraj:

    我把你的代码放在一个更"可读"的形式。  查看逻辑电路、我看到 P1.0在 RTC ISR 中被清零/置位。  如果你为该指令设置了一个断点、代码执行会在这里停止吗?  此外、您是否在 FR5969 Launchpad 上运行此代码?  根据 ISR、P1.0似乎只设置=1一次(当 blinkCounter = 0时)、它的其余设置时间为0、这将使 LED 保持关闭。  在 FR5969 Launchpad 上、P1.0 = 0将熄灭 LED、P1.0将点亮 LED。  这就是我询问您是否正在使用 Launchpad 的原因。

    #include <msp430.h>
    
    void initBoard(void);
    void initRtc(void);
    void WakeUpLPM35(void);
    volatile unsigned int blinkCounter = 0;
    // Stores the state of the LED in FRAM where this variable
    // is not C-initialized during start-up. This allows
    // certain variables to easily be restored and managed
    // in a non-volatile memory with no flash charge-pump required.
    // This allows faster start-up time.
    #if defined(__TI_COMPILER_VERSION__)
    #pragma PERSISTENT(ledState);
    unsigned char ledState = 0;
    #elif defined(__IAR_SYSTEMS_ICC__)
    __persistent unsigned char ledState;
    #else
    // For other compilers, insert this variable into FRAM memory
    unsigned char ledState;
    #endif
    
    int main(void)
    {
    WDTCTL = WDTPW | WDTHOLD; // Stop WDT
    
    // Initialize board
    initBoard(); // Regular init code for GPIO and CS
    
    // Determine whether we are coming out of an LPMx.5 or a regular RESET.
    if (SYSRSTIV == SYSRSTIV_LPM5WU)
    {
    // When woken up from LPM3.5, reinit
    WakeUpLPM35(); // LPMx.5 wakeup specific init code
    __enable_interrupt(); // The RTC interrupt should trigger now...
    }
    else
    {
    ledState = 0; // Initialize LED state variable
    P1OUT = 0x00; // For initialize P1OUT to zero initially
    initRtc(); // Regular init code for RTC_B
    }
    
    // Use P4.6 LED as a heart beat for to represent device restarted either
    // from LPMx.5 or a complete power-up
    P4OUT |= BIT6;
    
    // Use Timer A for a short delay to blink P1.0 LED
    TA0CCTL0 = CCIE; // TACCR0 interrupt enabled
    TA0CCR0 = 1000;
    TA0CTL = TASSEL__ACLK | MC__UP; // SMCLK, UP mode
    __bis_SR_register(LPM3_bits | GIE);
    TA0CTL &= ~(MC__UP); // Stop Timer
    
    P4OUT &= ~BIT6; // Clear P4.6 LED
    
    // Sequence to enter LPM3.5.
    PMMCTL0_H = PMMPW_H; // Open PMM Registers for write
    PMMCTL0_L |= PMMREGOFF; // and set PMMREGOFF
    
    // Enter LPM3.5 mode with interrupts enabled. Note that this operation does
    // not return. The LPM3.5 will exit through a RESET event, resulting in a
    // re-start of the code.
    __bis_SR_register(LPM3_bits | GIE);
    __no_operation();
    
    return 1;
    }
    
    void initBoard(void)
    {
    // Port Configuration
    // Restore P1.0 LED state before reset from a variable
    // stored in FRAM
    P1OUT = ledState;
    P1DIR = 0xFF;
    P2OUT = 0x00;
    P2DIR = 0xFF;
    P3OUT = 0x00;
    P3DIR = 0xFF;
    P4OUT = 0x00;
    P4DIR = 0xFF;
    PJOUT = 0x00;
    PJSEL0 |= BIT4 | BIT5;
    PJDIR = 0xFFFF;
    
    // Disable the GPIO power-on default high-impedance mode to activate
    // previously configured port settings
    PM5CTL0 &= ~LOCKLPM5;
    
    // Setup Clocks
    CSCTL0_H = CSKEY >> 8; // Unlock CS registers
    CSCTL1 = DCOFSEL_0; // Set DCO to 1MHz
    CSCTL2 = SELA_0 | SELS_3 | SELM_3; // set ACLK = XT1; MCLK = DCO
    CSCTL3 = DIVA_0 | DIVS_0 | DIVM_0; // Set all dividers to 1
    CSCTL4 &= ~LFXTOFF; // Enable LFXT1
    
    do
    {
    CSCTL5 &= ~LFXTOFFG; // Clear XT1 fault flag
    SFRIFG1 &= ~OFIFG;
    } while (SFRIFG1 & OFIFG); // Test oscillator fault flag
    CSCTL0_H = 0; // Lock CS registers
    }
    
    void initRtc(void)
    {
    // Configure RTC_B
    // Configure BCD mode, stop the RTC, and enable RTC
    RTCCTL01 = RTCBCD | RTCHOLD | RTCTEV_0;
    // Set the RTC second stage divider to 256
    // RTC interrupts every 2 seconds
    RTCPS1CTL = RT1IP_7 | RT1PSIE;
    
    // Start RTC calendar mode
    RTCCTL01 &= ~RTCHOLD;
    }
    
    void WakeUpLPM35(void)
    {
    // Re-configure / start RTC
    // Configure BCD mode, stop the RTC, and enable RTC
    RTCCTL01 |= RTCBCD | RTCHOLD | RTCTEV_0;
    // Set the RTC second stage divider to 256
    // RTC interrupts every 2 seconds
    RTCPS1CTL = RT1IP_7 | RT1PSIE;
    
    // Start RTC calendar mode
    RTCCTL01 &= ~RTCHOLD;
    }
    
    
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=RTC_VECTOR
    __interrupt void RTC_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(RTC_VECTOR))) RTC_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
    switch (__even_in_range(RTCIV, RTCIV_RTCOFIFG))
    {
    case RTCIV_NONE: break;
    case RTCIV_RTCRDYIFG: break;
    case RTCIV_RTCTEVIFG: break;
    case RTCIV_RTCAIFG: break;
    case RTCIV_RT0PSIFG: break;
    case RTCIV_RT1PSIFG:
    
    
    if (blinkCounter == 0)
    {
    
    P1OUT |= BIT0;
    
    }
    else
    {
    
    P1OUT &= ~BIT0;
    
    }
    blinkCounter++;
    if (blinkCounter > 20)
    {
    blinkCounter = 0;
    
    }
    
    break;
    case RTCIV_RTCOFIFG: break;
    }
    }
    
    // Timer A0 interrupt service routine
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=TIMER0_A0_VECTOR
    __interrupt void Timer_A(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(TIMER0_A0_VECTOR))) Timer_A (void)
    #else
    #error Compiler not supported!
    #endif
    {
    __bic_SR_register_on_exit(LPM4_bits);
    }

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

    您好、Dennis、

    问题仍然存在。 LED 始终保持亮起且从不熄灭、而我希望它亮起2秒并在20秒内熄灭(LMP3.5模式)。 您的代码无法正常运行!

    谢谢!

    此致、

    普赫拉吉·辛格

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

    尊敬的 Pukhraj:

    我正在编辑之前的帖子、并且错过了您最近的回复。  您是否在使用 FR5969 Launchpad?

    另外、观察 RTC ISR 中的逻辑、它显示 P1.0仅在 blinkCount =0时设置、在其余计数期间(高达>20)、P1.0被清除(LED 关闭)。

        if (blinkCounter == 0)
        {
    
        P1OUT |= BIT0;
    
        }
        else
        {
    
        P1OUT &= ~BIT0;
    
        }
        blinkCounter++;
        if (blinkCounter > 20)
        {
        blinkCounter = 0;
    
        }

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

    您好、Dennis、

    我使用的是 MSP430FR5969。  

    我所做的是、当 blinkCounter 最初为0时、LED 将开启、然后它将关闭、直到 BreakCounter 增加到20。 然后它将重复

    谢谢!

    此致、

    普赫拉吉·辛格

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

    您能否在 RTC ISR 中的"P1OUT &&~BIT0;"行设置一个断点、程序是否会在该指令上停止?

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

    您可以详细说明如何使用断点进行检查。 是否应在此期间连接主板?

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

    我看的是 MSP430FR5969 Launchpad 原理图、 "P1OUT |= BIT0"会点亮 LED;P1OUT 且=~BIT0 会熄灭 LED

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

    是的、这是我所做的、当 BlinkCounter 为0时将其打开、随着每次中断后 blinkCounter 值增加1、它应该保持关闭状态、直到 blinkCounter 再次复位为0。

    谢谢!

    此致、

    普赫拉吉·辛格

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

    好的、感谢您的澄清。  让我们尝试 在 ISR 中设置一个断点。  您以前是否在调试模式下使用过 MSP430FR5969 Launchpad? 还是只编译代码、对 MSP 进行编程并让其运行?

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

    我从不使用调试模式。 并将其刷写到 MSP430FR5969

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

    好的、没问题。  了解最新消息并使用调试器的最快方法是在 YouTube 上观看此视频

    不必理会视频是演示针对汇编代码(您将使用 C 语言)的调试器这一事实、但步骤完全一样。

    请注意在时间3:40插入视频时、他展示了如何设置断点。  

    我需要离开一个地方,但会与你再次检查。

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

    尊敬的 Pukhraj:

    您是否有机会观看视频并尝试在代码中设置断点?

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

    您好、Dennis、

    视频很好、问题解决了。

    以下是在有人需要时需要的代码

    #包含

    void Board_Init (void);
    void RTC_Init (void);
    void EnterLPM35 (void);
    void WakeUpLPM35 (void);
    void new_board (void);
    int main (空)
    {
    WDTCTL = WDTPW | WDTHOLD;//停止 WDT
    new_board();


    void new_board (void){

    //确定是来自 LPMx.5还是常规复位。
    如果(SYSRSTIV = SYSRSTIV_LPM5WU)
    {
    //在从 LPM3.5唤醒时,重新
    WakeUpLPM35 ();// LPMx.5唤醒特定的初始化代码
    _enable_interrupt ();// RTC 中断应立即触发...
    while (1);//在从 RTC ISR 返回后一直循环。

    否则
    {
    //初始化 board 和 RTC,然后输入 LPM3.5
    Board_Init ();// GPIO 和 CS 的常规初始化代码
    RTC_Init ();// RTC_B 的常规初始化代码
    P1OUT = 0x00;//初始化 LED 状态变量
    EnterLPM35 ();//该函数将不会返回。


    空 Board_Init (空)
    {
    //端口配置
    P1OUT = 0x00;
    P1DIR = 0xFF;
    P2OUT = 0x00;
    P2DIR = 0xFF;
    P3OUT = 0x00;
    P3DIR = 0xFF;
    P4OUT = 0x00;
    P4DIR = 0xFF;
    PJOUT = 0x00;
    PJSEL0 |= BIT4 | BIT5;
    PJDIR = 0xFFFF;

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置
    PM5CTL0 &=~μ A LOCKLPM5;

    //设置时钟
    CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
    CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
    CSCTL2 = SELA__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;//设置 ACLK = XT1;MCLK = DCO
    CSCTL3 = DIVA_1 | DIVS__1 | DIVM_1;//将所有分频器设置为1
    CSCTL4 &&~LFXTOFF;//启用 LFXT1
    正确
    {
    CSCTL5 &=~LFXTOFFG;//清除 XT1故障标志
    SFRIFG1 &=~OFIFG;
    }while (SFRIFG1和 OFIFG);//测试振荡器故障标志
    CSCTL0_H = 0;//锁定 CS 寄存器

    空 RTC_Init (空)
    {
    //配置 RTC_B
    RTCCTL01 = RTCBCD | RTCHOLD | RTCTEV__MIN | RTCTEVIE;// BCD 模式、RTC 保持、启用 RTC
    //每分钟的事件中断
    RTCYEAR = 0x2011;//年= 0x2011
    RTCMON = 0x10;//月= 0x10 = 10月
    RTCDAY = 0x07;//天= 0x07 =第7
    RTCDOW = 0x05;//周中某天= 0x05 =星期五
    RTCHOUR = 0x11;//小时= 0x11
    RTCMIN = 0x59;//分钟= 0x59
    RTCSEC = 0x01;//秒= 0x30

    RTCCTL01 &=~μ V RTCHOLD;//启动 RTC 日历模式

    void EnterLPM35 (void)
    {
    PMMCTL0_H = PMMPW_H;//打开 PMM 寄存器以进行写入
    PMMCTL0_L |= PMMREGOFF;//并设置 PMMREGOFF

    //使能中断后进入 LPM3.5模式。 请注意、该运算确实
    //不返回。 LPM3.5将通过一个复位事件退出、这会导致一个
    //重新启动代码。
    __ bis_SR_register (LPM4_BITS | GIE);

    空 WakeUpLPM35 (空)
    {
    //恢复端口设置
    P1OUT = 0x00;
    P1DIR = 0xFF;
    P2OUT = 0x00;
    P2DIR = 0xFF;
    P3OUT = 0x00;
    P3DIR = 0xFF;
    P4OUT = 0x00;
    P4DIR = 0xFF;
    PJOUT = 0x00;
    PJSEL0 |= BIT4 | BIT5;
    PJDIR = 0xFFFF;

    //重新配置/启动 RTC
    RTCCTL01 |= RTCBCD | RTCHOLD | RTCTEV__MIN | RTCTEVIE;// BCD 模式,RTC 保持,启用 RTC
    //每分钟的事件中断
    RTCCTL01 &=~μ H RTCHOLD;

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置。 这也将重新激活 RTC
    //设置。
    PM5CTL0 &=~μ A LOCKLPM5;

    //恢复时钟以便读取 RTC
    CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
    CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
    CSCTL2 = SELA__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;//设置 ACLK = XT1;MCLK = DCO
    CSCTL3 = DIVA_1 | DIVS__1 | DIVM_1;//将所有分频器设置为1
    CSCTL4 &&~LFXTOFF;//启用 LFXT1
    正确
    {
    CSCTL5 &=~LFXTOFFG;//清除 XT1故障标志
    SFRIFG1 &=~OFIFG;
    }while (SFRIFG1和 OFIFG);//测试振荡器故障标志
    CSCTL0_H = 0;//锁定 CS 寄存器

    #if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
    #pragma vector=RTC_vector
    __interrupt void RTC_ISR (void)
    #Elif 已定义(_ GNU _)
    void __attribute__((interrupt (RTC_vector))) RTC_ISR (void)
    #else
    #错误编译器不受支持!
    #endif
    {
    开关(__even_in_range (RTCIV、RTCIV_RTCOFIFG))
    {
    情形 RTCIV_NONE:
    中断;
    情形 RTCIV_RTCRDYIFG:
    中断;
    情形 RTCIV_RTCTEVIFG:
    P1OUT ^= BIT3;//切换 LED
    // P1OUT ^= BIT0;//切换 LED
    __delay_cycles (500000);
    __delay_cycles (500000);
    P1OUT &=~BIT3;//切换 LED
    // P1OUT &&~BIT0;//切换 LED
    new_board ();//输入 LPM3.5
    中断;
    情形 RTCIV_RTCAIFG:
    中断;
    案例 RTCIV_RT0PSIFG:
    中断;
    情形 RTCIV_RT1PSIFG:
    中断;
    情形 RTCIV_RTCOFIFG:
    中断;

    谢谢!

    此致、

    普赫拉吉·辛格