PAGE1
PAGE1
SAML系列的低功耗特性
1.低功耗模式概述
1.1低功耗模式的种类
SAML系列单片机提供了多种低功耗模式,这些模式允许开发者根据应用需求选择合适的功耗级别。常见的低功耗模式包括:
SleepMode(休眠模式):在休眠模式下,CPU停止运行,但外设可以继续工作。根据是否保留RAM和外设的状态,休眠模式又分为多个子模式。
StandbyMode(待机模式):在待机模式下,系统时钟停止,但某些低功耗外设可以继续运行,如RTC(实时时钟)。
BackupMode(备份模式):在备份模式下,系统时钟完全停止,只有备份寄存器和RTC等关键外设保持运行。
OffMode(关机模式):在关机模式下,系统完全断电,所有状态丢失,但可以通过外部中断或RTC唤醒。
1.2低功耗模式的选择
选择合适的低功耗模式需要考虑以下几个因素:
功耗:不同模式下的功耗差异显著,选择最低功耗的模式可以延长电池寿命。
唤醒时间:不同模式下的唤醒时间不同,选择唤醒时间较短的模式可以减少系统的响应时间。
保留状态:某些模式下可以保留RAM和外设状态,选择合适的模式可以减少唤醒后的初始化时间。
唤醒源:不同的模式支持不同的唤醒源,选择支持所需唤醒源的模式可以提高系统的灵活性。
2.休眠模式详解
2.1休眠模式的工作原理
在休眠模式下,CPU停止运行,但外设可以继续工作。系统时钟可以保留或关闭,具体取决于所选择的子模式。休眠模式通过减少CPU的活动来降低功耗,同时保留必要的外设功能以响应外部事件。
2.2休眠模式的配置
配置休眠模式需要设置相应的寄存器。以下是一个配置休眠模式的示例代码:
#includesam.h
voidenter_sleep_mode(void){
//禁用全局中断
__DMB();//数据内存屏障
__DSB();//指令内存屏障
__disable_irq();//禁用全局中断
//设置休眠模式
SCB-SCR|=SCB_SCR_SLEEPDEEP_Msk;//设置待机模式
//保留RAM和外设状态
PM-SLEEP.reg=PM_SLEEPCFG_SleepMode|PM_SLEEPCFG_CPUOFF_Msk;
//进入休眠模式
__WFI();//等待中断
}
intmain(void){
//初始化系统
SystemInit();
//进入休眠模式
enter_sleep_mode();
//唤醒后继续执行
while(1){
//应用程序代码
}
}
2.3休眠模式的唤醒
休眠模式可以通过外部中断或RTC等唤醒源唤醒。以下是一个通过外部中断唤醒的例子:
#includesam.h
voidconfigure_ext_interrupt(void){
//配置外部中断
EIC-INTENSET.reg=EIC_INTENSET_EXTINT0;//使能外部中断0
EIC-CTRL.reg|=EIC_CTRL_ENABLE;//启用EIC
}
voidenter_sleep_mode(void){
//禁用全局中断
__DMB();//数据内存屏障
__DSB();//指令内存屏障
__disable_irq();//禁用全局中断
//设置休眠模式
PM-SLEEP.reg=PM_SLEEPCFG_SleepMode|PM_SLEEPCFG_CPUOFF_Msk;
//进入休眠模式
__WFI();//等待中断
}
voidext_interrupt_handler(void){
//处理外部中断
if(EIC-INTFLAG.regEIC_INTFLAG_EXTINT0){
EIC-INTFLAG.reg=EIC_INTFLAG_EXTINT0;//清除中断标志
//唤醒处理代码
}
}
intmain(void){
//初始化系统
SystemInit();
//配置外部中断
configure_ext_interrupt();