【AT32】低功耗设计

睡眠模式

概念

在睡眠模式下,CPU 时钟关闭,其他时钟均正常工作,电压调节器正常工作,所有的 I/O 管脚都保持它 们在运行模式时的状态,调节器 LDO 以正常功耗模式提供 1.2V 电源(CPU 内核、内存和内嵌外设)。

  1. 当 SLEEPDEEP=0,SLEEPONEXIT=0 时,执行 WFI 或 WFE 指令,此时可立即进入睡眠模式。 SLEEP-ON-EXIT 模式
  2. 当 SLEEPDEEP=0,SLEEPONEXIT=1 时,执行 WFI 指令,此时当系统从最低优先级的中断处理程序中 退出时,可立即进入睡眠模式。

有如下两种方式进入睡眠模式

  1. __WFI(); 中断唤醒,只要产生外设中断,都能使系统退出睡眠模式。
  2. __WFE(); 事件唤醒,存在两种方式的唤醒事件,使系统退出睡眠模式:
  • 使能任一外设中断(未在 NVIC 中使能)且使能 SEVONPEND 位可以产生唤醒事件。 系统唤醒后,需清除外设中断挂起位和 NVIC 通道挂起位。
  • 配置内部 EXINT 线为事件模式来产生唤醒事件。 从执行 WFE 指令进入睡眠模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。

WFI使用

直接在主循环调用__WFI(); SLEEPDEEP和SLEEPONEXIT两个寄存器保持默认0;循环每次执行到这就会进入立刻睡眠模式,每次按键按下才会进入下一次循环。

深度睡眠模式

概念

比普通睡眠模式更加省电,在深度睡眠模式下,所有 1.2V 时钟关闭,HICK 和 HEXT 振荡器都被关闭,电压调节器以正常工作或低 功耗工作状态给 1.2V 域供电,所有 I/O 管脚都保持它们在运行模式时的状态,SRAM 和寄存器内容保持。

使用

使能PWC外设时钟crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK,TRUE);

调用函数进入深度睡眠pwc_deep_sleep_mode_enter(PWC_DEEP_SLEEP_ENTER_WFI);

【注意】进入睡眠模式之后再次烧录代码需要按一下复位键之后立即烧录

实验中会发现printf打印的全都是0或者乱码,这是因为深度睡眠模式为了省电关闭了HICK 和 HEXT 晶振所以我们在中断退出睡眠模式之后需要重新调用system_clock_config();打开晶振

待机模式

概念

待机模式可最大限度的降低系统功耗,在该模式下,电压调节器关闭,只有 VDD/VDDA 域维持供电,其 他的 1.2V 供电区域,PLL、HICK 和 HEXT 振荡器都被断电。寄存器和 SRAM 中的内容也会丢失。 通过设置 Cortex-M4 系统控制寄存器中的 SLEEPDEEP 位,设置电源控制寄存器(PWC_CTRL)中 LPSEL 位,并清除电源控制及状态寄存器(PWC_CTRLSTS)中的 SWEF 位的情况下,执行 WFI 或 WFE 指令即可进入待机模式。

唤醒方式:

  1. 发生 WKUPx 引脚的上升沿
  2. ERTC 闹钟事件的上升沿
  3. ERTC 入侵事件
  4. ERTC 时间戳
  5. NRST 引脚上外部复位
  6. WDT 复位
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值