打印
[Cortex-M0技术交流]

求救版主:关于NUC120芯片掉电模式的操作是如何

[复制链接]
3057|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mcuzone-ARM2|  楼主 | 2011-11-13 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
版主,你好!我用NUC120的定时器0每隔1秒使LED闪烁显示,表征系统在普通模式下正常工作。定时器时钟源选用外部12M晶振。系统上电进入掉电模式,LED不闪烁显示,等待GPIO中断唤醒之。唤醒后,系统又开始正常工作,LED闪烁显示。GPIO采用按键取反,标志位POWER_ON_OFF为1表示开机(系统打开),标志位为0表示关机(进入掉电模式)。我的程序代码能够正常进行开/关机1次,第二次想让他再次开机(重新唤醒掉电)就不行了,很奇怪啊。。。程序代码在下面,忘得以指点!!!


#include "NUC1xx.h"
#include "Driver/DrvSYS.h"
#include "Driver/DrvGPIO.h"
#include "Driver/DrvTIMER.h"

/**定时器0中断回调函数**/
void TMR0_ISR_Callback(uint32_t num)
{
static volatile uint8_t temp = 0;
if(num == 0)
{
  temp ++;
  if(temp == 2)temp = 0;
  if(temp == 0)
  {
   DrvGPIO_ClrBit(E_GPA,12);
  }
  else
  {
   DrvGPIO_SetBit(E_GPA,12);
  }
}  
}
/**定时器0初始化**/
void Timer_Initinization(void)
{
DrvTIMER_Init();
DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC, 0x00);  
DrvSYS_SetIPClock(E_SYS_TMR0_CLK, 1);      /* Enable TIMER0 engine clock */
DrvTIMER_Open(E_TMR0, 1, E_PERIODIC_MODE);  /* Using TIMER0 at PERIODIC_MODE, 1 ticks/sec */
DrvTIMER_SetTimerEvent(E_TMR0, 1, (TIMER_CALLBACK)TMR0_ISR_Callback, 0);
DrvTIMER_EnableInt(E_TMR0);   /* Enable Timer-0 interrupt function */
DrvTIMER_Start(E_TMR0);       /* Start to count the Timer-0 */   
}

volatile uint8_t POWER_ON_OFF = 0;
   
void EINT0Callback(void)
{  
uint32_t key_value;
key_value = DrvGPIO_GetBit(E_GPB, 14);
if(!key_value)
{
  DrvSYS_Delay(5000);
  key_value = DrvGPIO_GetBit(E_GPB, 14);
  if(!key_value)
  {
   do
   {
    key_value = DrvGPIO_GetBit(E_GPB, 14);
   }
   while(!key_value);
   POWER_ON_OFF ++;   //开/关机标志切换

   if(POWER_ON_OFF == 2)POWER_ON_OFF = 0;  //POWER_ON_OFF = 1 表示开机;POWER_ON_OFF = 0表示关机
  }
}   
}

void MCU_System_Initial(void)
{
UNLOCKREG();        //解锁被保护的寄存器

DrvSYS_SetOscCtrl(E_SYS_XTL12M, TRUE);     //使能外部晶振时钟

DrvSYS_Delay(5000);       //延时,等待外部晶振时钟稳定
SYSCLK -> PWRCON.OSC10K_EN = 1;
SYSCLK -> PLLCON.PLL_SRC = 0;
DrvSYS_Open(50000000);                      // 打开50MHz

LOCKREG();         //重新锁上被保护的寄存器

DrvGPIO_Open(E_GPB, 14, E_IO_INPUT);        //PB14(INT0)设置为输入模式

DrvGPIO_EnableDebounce(E_GPB, 14);          //使能输入引脚去抖动功能
DrvGPIO_SetDebounceTime(4, E_DBCLKSRC_10K);//设定去抖动采样时间
DrvGPIO_InitFunction(E_FUNC_EXTINT0);       //使能外部0中断功能

DrvGPIO_EnableEINT0(E_IO_FALLING, E_MODE_EDGE, EINT0Callback);  //设定外部0中断触发类型以及安装中断回调函数
DrvGPIO_Open(E_GPC, 6, E_IO_OUTPUT);  //控制GPS模块电源输出的LDO引脚
DrvGPIO_Open(E_GPC, 7, E_IO_OUTPUT);    //控制LCD模块电源输出的LDO引脚
DrvGPIO_Open(E_GPA, 12, E_IO_OUTPUT);
DrvGPIO_SetBit(E_GPA, 12);                       //关闭LED输出显示
}

void MCU_Enter_Mode(void)
{
     UNLOCKREG();
     SYSCLK->;PWRCON.PWR_DOWN_EN = 1;
     SYSCLK->;PWRCON.PD_WAIT_CPU = 0;         //进入掉电模式
     LOCKREG();   
}

int main(void)
{
     MCU_System_Initial();       //系统时钟及GPIO初始化
     Timer_Initinization();      //定时器0初始化
     MCU_Enter_Mode();           //CPU进入掉电模式,等待GPIO中断唤醒

     while(1)
     {
         if(!POWER_ON_OFF)       //判断开/关机键是否按下
  {
      MCU_Enter_Mode();  //如果是关机,则进入掉电模式
  }
     }
}

相关帖子

沙发
hotpower| | 2011-11-13 22:47 | 只看该作者
既然一次,那么肯定可以唤醒。
第二次不行,说明第二次的设置与首次的初始化不一样。
用软件复位看看?在第二次时。

使用特权

评论回复
板凳
Mcuzone-ARM2|  楼主 | 2011-11-15 21:30 | 只看该作者
好的,谢谢大叔,我再试试看。。。

使用特权

评论回复
地板
hotpower| | 2011-11-15 21:57 | 只看该作者
只要第一次成功,那么肯定第二次的初始化不完整,至少和第一次有差异。

使用特权

评论回复
5
ichuangj| | 2012-1-4 15:29 | 只看该作者
我也在做这个东东

使用特权

评论回复
6
X-Hawk| | 2012-1-4 21:02 | 只看该作者
将 E_IO_FALLING 改为 both,
falling和rising都可以唤醒,就好了。

因为人手的抖动很随机,总有机会掉电之前的状态不对,导致无falling事件。

使用特权

评论回复
7
iam80| | 2012-9-14 11:33 | 只看该作者
好久没有上论坛,一直在搞休眠。想不到有这么多人遇到这个问题,本人现像是能进入中断能正常唤醒。测试十几偏都是正常的,可只要等几小时后再去测试,就无法唤醒了。有时电流还挺大的。

使用特权

评论回复
8
sctwyg| | 2012-12-4 15:07 | 只看该作者
我也搞休眠唤醒,情况差不多,弄到头都大了,还不能解决。我是延时再进入休眠,可以唤醒。不过如果长按几秒再松开按键让它进入休眠,还是没办法再唤醒了,应该是中没产生中断了。不知道为什么会这样。有人知道的说一声。

使用特权

评论回复
9
sctwyg| | 2012-12-4 15:25 | 只看该作者
X-Hawk 发表于 2012-1-4 21:02
将 E_IO_FALLING 改为 both,
falling和rising都可以唤醒,就好了。

刚试了一下,还真有效果,继续再测试一下。掉电之前的状态不对,这指的是什么状态呢?谢谢

使用特权

评论回复
10
缥缈九哥| | 2012-12-7 09:43 | 只看该作者
BSP包里的例子就好用。另外,要把IO初始化好,免得CPU不耗电,给IO的外设耗电了。比如上拉1K电阻,你不把IO配置成高电平就睡的话,1K电阻上电流就有5MA了。睡觉前记得要关灯呀。小夜灯也要关才对呀。

使用特权

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

本版积分规则

0

主题

14

帖子

1

粉丝