打印

在RTX中使用低功耗STOP模式好像不行

[复制链接]
1885|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ssj36|  楼主 | 2013-5-28 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题
沙发
ssj36|  楼主 | 2013-5-28 12:36 | 只看该作者
已把任务设成了privileged mode,还是不行,谁用过?

使用特权

评论回复
板凳
IJK| | 2013-5-28 13:51 | 只看该作者
在RTX中使用低功耗STOP模式好像不行,什么不行?
会死机,不能唤醒吗?

使用特权

评论回复
地板
ssj36|  楼主 | 2013-5-28 15:36 | 只看该作者
不是不能唤醒,而是不休眠,我让它stop 30秒,运行到__WFI()一下就执行过去了(除了RTC ALARM中断,其他的我在NVIC中都禁止了)
执行部分代码如下:

  SCB->SCR |= SCB_SCR_SLEEPDEEP;
  
  /* Select STOP mode entry --------------------------------------------------*/
  if(PWR_STOPEntry == PWR_STOPEntry_WFI)
  {   
    /* Request Wait For Interrupt */
    __WFI();
  }
  else
  {
    /* Request Wait For Event */
    __WFE();
  }
  
  /* Reset SLEEPDEEP bit of Cortex System Control Register */
  SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);  

使用特权

评论回复
5
ssj36|  楼主 | 2013-5-28 15:41 | 只看该作者
把PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);放在privileged mode,即执行os_sys_init之前就正确。不知为何?RTX下做过低功耗的人好像不多吗?

使用特权

评论回复
6
ssj36|  楼主 | 2013-5-28 16:21 | 只看该作者
前面描述的条理性不好,我重新说下:
1. 由于PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI)中的SCB->SCR |= SCB_SCR_SLEEPDEEP;要求运行在特权模式,所以我通过设置 #define OS_RUNPRIV 1,把所有的RTX任务都设为特权模式。
2. 在任一个rtx任务中,调用PWR_EnterSTOPMode(),让系统STOP 30s,(为了明显起见,除了RTC ALARM中断,其他的中断事先在NVIC中都未使能)
3. 程序运行到__WFI(),没有休眠30s,一下就通过并往下执行。同时我特别在__WFI()处设了断点,在keil NVIC调试界面里没有看到任何中断发生。
4. 而把PWR_EnterSTOPMode()放在os_sys_init前执行,一切正常,休眠30s。谁碰到过这类问题,盼帮助解决。

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝