打印

FR572X系列单片机退出低功耗后的操作

[复制链接]
3327|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
master_kang|  楼主 | 2014-7-8 12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 master_kang 于 2014-7-8 12:34 编辑

我需要实现RTC唤醒进入LPM3.5的单片机,但是不知道该怎样写,退出后是复位从主程序的开始处执行吗?
#include "driverlib.h"
void main(void)
{
    WDT_A_hold(WDT_A_BASE);//停止看门狗    Gpio_Init();
    Systerm_Clock_Config();
    set_rtc_default();//
    rtc_alarm_set(CALENDAREVENT,defaultTime,RTC_B_CALENDAREVENT_MINUTECHANGE);//设置RTC每分钟的中断事件模式,并开启中断
   RTC_B_startClock(RTC_B_BASE);//开启RTC_B
  while(1)
  {
        Gpio_Init();//初始化I/O口到通用I/O            PMM_lockLPM5();
            PMM_regOff();//关闭核心电压供电模块
            __bis_SR_register(LPM4_bits + GIE);//进入LPM3.5休眠模式
      __no_operation();

  }

}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=RTC_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(RTC_VECTOR)))
#endif
void RTC_B_ISR(void)
{
        switch (__even_in_range(RTCIV, 16)) {
        case 0: break;  //No interrupts
        case 2://RTCRDYIFG
                   //__no_operation();
                   //PMM_regOn();//
                   //__bic_SR_register_on_exit(LPM4_bits);
                   //__bic_SR_register_on_exit(LPM0_bits);
                   break;
        case 4:    //RTCEVIFG
               __bic_SR_register_on_exit(LPM4_bits);//退出LPM4,退出后程序跳到哪里呢?????????我的原来意思是跳到
                break;
        case 6:break;//RTCAIFG
        case 8: break;  //RT0PSIFG
        case 10: break; //RT1PSIFG
        case 12: break; //Reserved
        case 14: break; //Reserved
        case 16: break; //Reserved
        default: break;
        }
}
退出LPM4,退出后程序跳到哪里呢?我的理解是跳到while(1)循环里面的“__bis_SR_register(LPM4_bits + GIE);//进入LPM3.5休眠模式”之后继续执行,是这样吗?

相关帖子

沙发
dirtwillfly| | 2014-7-8 14:10 | 只看该作者
退出中断后,回到main函数继续执行代码。根据楼主的程序,是继续执行  __no_operation();

使用特权

评论回复
板凳
master_kang|  楼主 | 2014-7-9 08:17 | 只看该作者
dirtwillfly 发表于 2014-7-8 14:10
退出中断后,回到main函数继续执行代码。根据楼主的程序,是继续执行  __no_operation(); ...

可是我看手册上面说是会引起BOR复位啊?

使用特权

评论回复
地板
dirtwillfly| | 2014-7-9 08:32 | 只看该作者
master_kang 发表于 2014-7-9 08:17
可是我看手册上面说是会引起BOR复位啊?

:L哪里说得?能否截个图。

使用特权

评论回复
5
chunyang| | 2014-7-9 19:14 | 只看该作者
低功耗有多种模式,下一条指令的执行由退出低功耗的方式决定。如果是复位方式,那么程序自然是从起始处开始执行。如果是中断唤醒,那么进入的是中断服务程序,在退出中断后跳转到进入低功耗模式指令的下一条指令处继续运行,除非你的中断程序有特别指定。

使用特权

评论回复
6
master_kang|  楼主 | 2014-7-10 08:37 | 只看该作者
chunyang 发表于 2014-7-9 19:14
低功耗有多种模式,下一条指令的执行由退出低功耗的方式决定。如果是复位方式,那么程序自然是从起始处开始 ...

谢谢春阳大哥。:D

使用特权

评论回复
7
master_kang|  楼主 | 2014-7-11 17:43 | 只看该作者
搞了好久了,还是没搞定,现在低功耗是进去了,可是退出该怎么写啊?求给个方案。

使用特权

评论回复
8
master_kang|  楼主 | 2014-7-11 17:49 | 只看该作者
void main(void)
{

WDT_A_hold(WDT_A_BASE);
Gpio_Init();//都已经设置为输入下拉,根据需要
Systerm_Clock_Config();
defaultTime.Seconds    = 0x00;
defaultTime.Minutes    = 0x26;
defaultTime.Hours      = 0x13;
defaultTime.DayOfWeek  = 0x03;
defaultTime.DayOfMonth = 0x20;
defaultTime.Month      = 0x07;
defaultTime.Year       = 0x2011;
RTC_B_calendarInit(RTC_B_BASE,defaultTime,RTC_B_FORMAT_BCD);
RTC_B_setCalendarEvent(RTC_B_BASE,RTC_B_CALENDAREVENT_MINUTECHANGE);
RTC_B_clearInterrupt(RTC_B_BASE,RTCRDYIE + RTCTEVIE + RTCAIE);
RTC_B_enableInterrupt(RTC_B_BASE,RTCTEVIE);
RTC_B_startClock(RTC_B_BASE);

REF_disableTempSensor(REF_BASE);//禁止内部温度传感器,默认打开
PMM_disableSVSL();//禁止核心电压监控,默认代开
PMM_regOff();//关闭核心电压供电模块
__bis_SR_register(LPM4_bits + GIE);
}
//////////中断服务程序///////////
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=RTC_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(RTC_VECTOR)))
#endif
void RTC_B_ISR(void)
{
        switch (__even_in_range(RTCIV, 16)) {
        case 0: break;  //No interrupts
        case 2: break;         //RTCRDYIFG
        case 4:         //RTCEVIFG
                //Interrupts every minute
               // __no_operation();
                    //PMM_unlockLPM5();
                    PMM_regOn();//打开核心电压
                    //__bic_SR_register_on_exit(LPM4_bits);
                    LPM4_EXIT;//退出低功耗,但是就是退不出来呢?
                break;
        case 6: break;//RTCAIFG
        case 8: break;  //RT0PSIFG
        case 10: break; //RT1PSIFG
        case 12: break; //Reserved
        case 14: break; //Reserved
        case 16: break; //Reserved
        default: break;
        }
}

使用特权

评论回复
9
gxliu08| | 2014-7-11 19:15 | 只看该作者
学习学习,涨知识!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

61

帖子

1

粉丝