1.2.4 ATmega128单片机的电源管理
通过对控制寄存器MCUCR的设置可以控制ATmega128单片机进入不同的电源管理模式,MCUCR寄存器的内部结构如表1.16所示。其中只有4位和ATmega128单片机的电源管理相关。
表1.16 ATmega1 28单片机的控制寄存器MCUCR
● SE:睡眠使能控制位。当SE被置位时,ATmega128单片机进入睡眠模式。
● SM2~SM0:电源模式选择位。用于控制ATmega128单片机的具体电源模式,如表1.17所示。
表1.17 ATmega1 28单片机电源模式控制选择
说明
只有在使用外部晶体或谐振器时,StandBy模式与扩展StandBy模式才可用。
●空闲模式:当SM2~SM0=“000”时,SLEEP指令使ATmega128单片机进入空闲模式。在此模式下,CPU停止运行,而SPI、USART、模拟比较器、ADC、两线串行接口、定时/计数器、看门狗和中断系统继续工作。此模式只停止CPU时钟和Flash时钟,其他时钟继续工作。类似定时器溢出与USART传输完成等内外部中断都可以唤醒ATmega128单片机,如果不需要从模拟比较器中断唤醒,为了减少功耗,可以切断比较器的电源,方法是置位模拟比较器控制和状态寄存器ACSR的ACD位,如果ADC通道被使能,进入此模式后将自动启动一次转换。
● ADC噪声抑制模式:当SM2~SM0=“001”时,SLEEP指令使ATmega128单片机进入噪声抑制模式。在此模式下,CPU停止运行,而ADC、外部中断、两线串行接口、定时/计数器2和看门狗继续工作。此模式只停止了I/O时钟、CPU时钟和Flash时钟,其他时钟继续工作。此模式改善了ADC的噪声环境,使得转换精度更高,当ADC被使能时,进入此模式将自动启动一次A/D转换。此后,每次ADC的转换结束中断、外部复位、看门狗复位、BOD复位、两线串行接口地址匹配中断、定时/计数器0中断、SPM/E2 PROM准备就绪中断、外部电平中断INT7~INT4或外部中断INT3~INT0可以将单片机从ADC噪声抑制模式唤醒。
● 掉电模式:当SM2~SM0=“010”时,SLEEP指令使ATmega128单片机进入掉电模式。在此模式下,外部晶体停振,而外部中断、两线串行接口、看门狗(如果使能的话)继续工作。只有外部复位、看门狗复位、BOD复位、两线串行接口地址匹配中断、外部电平中断INT7~INT4或外部中断INT3~INT0可以使ATmega128单片机脱离掉电模式。此模式下ATmega128单片机停止了所有的时钟,只有异步模块可以继续工作。
注意
当使用外部电平中断方式将ATmega128单片机从掉电模式唤醒时,必须保持外部电平一定的时间,并且从施加掉电唤醒条件到真正唤醒有一个延迟时间,此时间用于时钟重新启动并稳定下来,唤醒周期与由熔丝位CKSEL定义的复位周期是一样的。
●省电模式:当SM2~SM0=“011”时,SLEEP指令将使ATmega128单片机进入省电模式。该模式与掉电模式只有一点不同:如果定时计数器2为异步驱动,则定时计数器2在睡眠时将继续运行。除了掉电模式的唤醒模式,定时计数器2的溢出中断和比较匹配中断也可以将ATmega128单片机从睡眠模式唤醒。只要TIMSK使能了这些中断,并且SREG的全局中断使能位I被置位,此模式停止了除ASY时钟以外所有的时钟,只有异步模块可以继续工作。
说明
如果异步定时器不是异步驱动的,建议使用掉电模式,而不是省电模式。
● StandBy模式:当SM2~SM0=“110”时,SLEEP指令使ATmega128进入StandBy模式,该模式与掉电模式唯一的不同之处在于振荡器继续工作。其唤醒时间只需要6个时钟周期。
● 扩展StandBy模式:当SM2~SM0 =“11 1”时,SLEEP指令将使ATmega128单片机进入扩展的StandBy模式。
为了减少ATmega128单片机应用系统的功耗,一般要尽可能利用睡眠模式且使尽可能少的模块继续工作,不需要的功能必须禁止。下面的模块需要特殊考虑以达到尽可能低的功耗。
● 模/数转换器:被使能时,ADC在睡眠模式下继续工作,为了降低功耗,在进入睡眠模式之前需要禁止ADC通道。
● 模拟比较器:在空闲模式时,如果没有使用模拟比较器,可以将其关闭,在ADC噪声抑制模式下也是如此。在其他模式下,模拟比较器是自动关闭的。如果模拟比较器使用了内部电压基准源,则不论在什么模式下都需要关闭它;否则,内部电压基准源将一直被使能。
● 掉电检测BOD:如果系统没有使用掉电检测器BOD,那么这个模块也可以关闭;如果熔丝位BODEN被编程,从而使能了BOD功能,则其将在各种模式下继续工作,这个电流将占总电流的很大比重。
● 片内基准电压:当使用BOD、模拟比较器和ADC时,可能需要内部电压基准源。若这些模块都被禁止了,则基准源也可以被禁止。但是,重新使能后,用户必须等待基准源稳定之后才可以使用它。如果基准源在休眠过程中是使能的,其输出则立即可以使用。
● 看门狗定时器:如果系统无须使用看门狗,这个模块也可以关闭;若使能,则在任何模式下都将持续工作从而消耗电流。
● I/O端口引脚:进入睡眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。最重要的是避免驱动电阻性负载。在睡眠模式下,I/O时钟和ADC时钟都被停止,输入缓冲器也被禁止,从而保证输入电路不会消耗电流。而在某些情况下,输入逻辑是使能的,用来检测唤醒条件。如果输入缓冲器是使能的,此时输入不能悬空,信号电平也不应该接近VCC/2;否则,输入缓冲器会消耗额外的电流。
● JTAG接口与片上调试系统:如果通过熔丝位OCDEN使能了片上调试系统,当AT-mega128单片机进入掉电或省电模式时,主时钟将保持运行,可以使用不编程OCDEN、不编程JTAGEN、置位MCUCSR寄存器的JTD位的方法来减少功耗。当JTAG接口被使能而JTAGTAP控制器没有进行数据交换时,引脚TDO将悬空。如果与TDO引脚连接的硬件电路没有上拉电阻,系统功耗将增加,而ATmega128单片机的引脚TDI包含一个上拉电阻,因此在扫描链中无须为下一个芯片的TDO引脚设置上拉电阻。通过置位MCUCSR寄存器的JTD或不对JTAG熔丝位编程,可以禁止JTAG接口。