[Atmel] 跑一下SAM4N例程(七):SLEEP

[复制链接]
ddllxxrr 发表于 2015-3-2 20:44 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2015-3-2 20:46 编辑

在Atmle Studio6.2主界面插入开发板。则可直接打开例程:

sleepmgr_example_sam_rtt

这里用了rtt即(Real time timer)实时实钟来定时,深度睡眠5秒然后再在实时时钟中断中再唤醒
活动3秒钟再睡眠。

配置实时时钟在这里:
  1. rtt_init(RTT, 32768);

  2.         /* Enable RTT interrupt */
  3.         NVIC_DisableIRQ(RTT_IRQn);
  4.         NVIC_ClearPendingIRQ(RTT_IRQn);
  5.         NVIC_SetPriority(RTT_IRQn, 0);
  6.         NVIC_EnableIRQ(RTT_IRQn);
  7.         rtt_enable_interrupt(RTT, RTT_MR_ALMIEN);
设置实时时钟唤醒及选择睡眠模式:
  1. /* Set wakeup source to rtt_alarm */
  2.         pmc_set_fast_startup_input(PMC_FSMR_RTTAL);
  3. #if ((!SAMG51) && (!SAMG53) && (!SAMG54))
  4.         supc_set_wakeup_mode(SUPC, SUPC_WUMR_RTTEN_ENABLE);
  5. #endif
  6.         /* Initialize the sleep manager, lock initial mode. */
  7.         sleepmgr_init();
  8.         sleepmgr_lock_mode(current_sleep_mode);
而主循环在这里:

  1. rtt_write_alarm_time(RTT, rtt_read_timer_value(RTT) + SLEEP_TIME);
  2.                 /*
  3.                  * Turn the activity status LED off to inform the user that the
  4.                  * device is in a sleep mode.
  5.                  */
  6.                 ioport_set_pin_level(LED_ACTIVITY_STATUS_PIN, LED_STATUS_OFF);

  7.                 /*
  8.                  * Go to sleep in the deepest allowed sleep mode (i.e. no
  9.                  * deeper than the currently locked sleep mode).
  10.                  */
  11.                 sleepmgr_enter_sleep();

  12.                 /*
  13.                  * Turn the activity status LED on to inform the user that the
  14.                  * device is active.
  15.                  */
  16.                 ioport_set_pin_level(LED_ACTIVITY_STATUS_PIN, LED_STATUS_ON);

  17.                 /* Unlock the current sleep mode. */
  18.                 sleepmgr_unlock_mode(current_sleep_mode);

  19.                 /* Add a 3s delay. */
  20.                 delay_s(ACTIVE_TIME);

  21.                 /* Lock the next sleep mode. */
  22.                 ++current_sleep_mode;
  23.                 if ((current_sleep_mode >= SLEEPMGR_NR_OF_MODES)) {
  24.                         current_sleep_mode = SLEEPMGR_ACTIVE;
  25.                 }

  26.                 sleepmgr_lock_mode(current_sleep_mode);
运行的结果是:

灯灭五秒亮三秒。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部