退出低功耗后的操作

[复制链接]
354|10
手机看帖
扫描二维码
随时随地手机跟帖
yszong| | 2019-4-18 19:59 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
wyjie|  楼主 | 2019-4-18 20:02 | 显示全部楼层

我需要实现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休眠模式”之后继续执行,是这样吗?

使用特权

评论回复
wuhany| | 2019-4-18 20:06 | 显示全部楼层
退出中断后,回到main函数继续执行代码。根据楼主的程序,是继续执行  __no_operation();

使用特权

评论回复
wyjie|  楼主 | 2019-4-18 20:09 | 显示全部楼层
可是我看手册上面说是会引起BOR复位啊?

使用特权

评论回复
shimx| | 2019-4-18 20:09 | 显示全部楼层
:L哪里说得?能否截个图。

使用特权

评论回复
shimx| | 2019-4-18 20:13 | 显示全部楼层
低功耗有多种模式,下一条指令的执行由退出低功耗的方式决定。如果是复位方式,那么程序自然是从起始处开始执行。如果是中断唤醒,那么进入的是中断服务程序,在退出中断后跳转到进入低功耗模式指令的下一条指令处继续运行,除非你的中断程序有特别指定。

使用特权

评论回复
wyjie|  楼主 | 2019-4-18 20:17 | 显示全部楼层
搞了好久了,还是没搞定,现在低功耗是进去了,可是退出该怎么写啊?求给个方案。

使用特权

评论回复
liliang9554| | 2019-4-18 20:21 | 显示全部楼层
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;
        }
}

使用特权

评论回复
zhangmangui| | 2019-4-18 23:04 | 显示全部楼层
手册都会详细介绍进入低功耗后的唤醒方式

使用特权

评论回复
wyjie|  楼主 | 2019-4-20 07:59 | 显示全部楼层

唉,还是没有什么结果,算了,先结贴吧,多谢大家啦

使用特权

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

本版积分规则

927

主题

12706

帖子

5

粉丝