garfield

【原创】飞思卡尔hcs08单片机低功耗模式介绍

0
阅读(9640)

前些天在论坛里看到有朋友问飞思卡尔的低功耗模式怎么进,突然想到了单片机的低功耗模式,其实这个问题很简单,对飞思卡尔的单片机来说(我对飞思卡尔单片机了解一些)很简单,一条汇编指令即可解决。

先说说单片机的运行模式吧,然后重点介绍一下低功耗模式。

1、正常模式

2、主动后台模式:用于代码开发,我的理解就是调试模式
3、等待模式: CPU 关闭以省电;系统时钟正常运行,内部稳压器正常工作,我一般叫他暂停模式
4、停止模式:系统时钟被关闭,内部稳压器处于待机状态
— Stop3 — 所有内部电路都接通电源以实现快速恢复
— Stop2 — 内部电路的部分电源被关闭; RAM 内容被保留

正常模式:

MC9S08DZ60 系列产品的正常操作模式,当BKGD/MS 管脚位于复位的上升边最高位置时选择该模式。在这种模式下, CPU 执行内部存储器中的代码。代码在复位完成后运行,并且从内存0xFFFE – 0xFFFF 上获取其起始地址。

调试模式:

主动后台模式功能通过HCS08 内核中的后台调试控制器(BDC)进行管理。在软件开发过程中, BDC 与片上调试模块(DBG)一起用于分析MCU 的运行情况。
进入主动后台模式的方式有以下五种:
• 当处于复位的上升沿时, BKGD/MS 脚置于低电平;
• 通过BKGD/MS 脚收到BACKGROUND 命令时;
• 执行BGND 指令时;
• 遇到BDC 断点时;
• 遇到DBG 断点时。
进入主动后台模式后, CPU 保持挂起状态,等待串行后台命令而不执行来自用户应用程序的指令。

后台命令有两种类型:
• 非中断型命令,被定义为可在用户程序运行时发出。非中断型命令可在 MCU 处于运行模式时通过BKGD/MS 管脚发出;非中断型命令也可以在MCU 处于主动后台模式时执行。非中断型命令包括:
— 内存访问命令
— 带状态内存访问命令
— BDC 寄存器访问命令
— 后台命令
• 主动后台命令只能在MCU 处于主动后台模式时执行。主动后台命令主要用于执行以下操作:
— 读或写CPU 寄存器
— 在特定时间跟踪一个用户程序指令
— 退出主动后台模式,返回到用户应用程序(GO)
主动后台模式用于在MCU 第一次以运行模式运行前将Bootloader 或用户应用程序写入到Flash程序存储器中。MC9S08DZ60 系列产品从飞思卡尔工厂运出时,除非特别说明, Flash 程序存储器在缺省被擦除,以确保在Flash 首次被编程前不会有程序在运行模式下被执行。主动后台模式可用于擦除或重新编程先前已编程的Flash。

等待模式:
进入方法:等待模式通过执行WAIT 指令进入。在执行WAIT 指令后, CPU 进入无时钟的低功耗状态。CPU 进入等待模式后,CCR 中的I 位被清除,进而使能中断操作。发生中断请求后,CPU 退出等待模式并执行恢复处理,先开始执行堆栈中的中断业务程序。
MCU 处于等待模式时,后台调试命令的使用受限。MCU 处于等待模式时,只有后台命令和带状态内存访问命令可用。带状态内存访问命令虽然不允许内存访问,但它们会上报错误,指出MCU 处于停止或等待模式。可以使用后台命令将MCU 从等待模式中唤醒并进入主动后台模式。

停止模式
进入方法:在SOPT1 寄存器中设置了STOPE 位时,执行STOP 指令后会进入停止模式。在停止模式下,所有内部时钟都被暂停。我们可对MCG 模块进行适当设置,使参考时钟保持运行。

下表列出了影响停止模式选择的所有控制位及各种条件下选择的模式。被选择的模式在执行一个STOP 指令后进入。

image

Stop3 模式

Stop3 模式通过上表所述条件下执行STOP 指令进入。所有此时的内部寄存器和逻辑、RAM内容和I/O 管脚状态都被维持。从Stop3 模式中退出的操作通过RESET 管脚或异步中断脚实现。这些异步中断脚包括IRQ、PIA0 ~ PIA7、PIB0 ~ PIB7 和PID0 ~ PID7。从Stop3 模式中退出的操作也可以通过低压检测(LVD)复位、低压警告(LVW)中断、ADC 转换完成中断、实时时钟(RTC)中断、MSCAN 唤醒中断或SCI 接收器中断完成。如果通过RESET 脚的方式退出Stop3 模式, MCU 将复位,操作将在获取复位向量后恢复。如果通过中断的方式退出, MCU 将获取相应的中断向量。

在Stop3 模式中启用LVD:在电源电压下降到LVD 电压以下时, LVD 系统可以生成一个中断或复位。在CPU 执行STOP指令时,如果LVD 在停止模式下被启用(SPMSC1 中的LVDE 和LVDSE 位均被设置),那么
内部稳压器在停止模式下将继续保持活动状态。要使 ADC 正常运行, LVD 必须在进入Stop3 时处于启用状态。

在Stop3 模式中启用活动BDM:如果BDCSCR 中设置了ENBDM,将启用从运行模式进入主动后台模式的操作。如果CPU 执行STOP 指令时设置了ENBDM,连接到后台调试逻辑的系统时钟将在MCU 进入停止模式时继续保持活动状态。因此,这种情况下后台调试通信仍可进行。此外,内部稳压器不会进入低功耗待机状态,而保持正常工作。大多数后台命令在停止模式不能使用。带状态内存访问命令不允许内存访问,但它们会上报错误,指出MCU 处于停止或等待模式。可以使用后台命令将MCU 从停止模式中唤醒并进入主动后台模式(如果ENBDM 位已设置)。进入后台调试模式后,所有后台命令都可以使用。

Stop2 模式
Stop2 模式通过上表所示的情况下执行STOP 指令进入。除RAM 外, MCU 的大部分内部电路在Stop2 模式下处于断电状态。在进入Stop2 模式后,所有I/O 管脚控制信号被锁定,以确保管脚可以在Stop2 模式下保持原来的状态。从Stop2 模式中退出的操作通过输入有效RESET 信号完成。只有在3M05C 或更老的掩码集中,您可以通过输入PTA7/ADP7/IRQ 中断信号来退出Stop2。
attention:只有在3M05C 或更老的掩码集中, PTA7/ADP7/IRQ 是低电平唤醒,因此在执行STOP 指令前必须配置为输入,以避免从Stop2 中立即退出。如果PTA7/ADP7/IRQ 被配置为高驱动输出,那么它可以禁止唤醒功能。为了在Stop2 模式下最大限度地降低功耗,该管脚在被配置为输入时不应保持开路(启用内部上拉器件;或连接外部上拉/ 下拉器件;或将管脚设置为输出)。此外,实时时钟计数器(RTC)也可以从Stop2 模式下唤醒MCU (如果已启用)。MCU 从Stop2 模式中唤醒后,启动过程和加电复位(POR)相同:
• 所有模块控制寄存器和状态寄存器被复位
• LVD 复位功能启用;如果VDD 低于LVD 跳变点(由于POR 选择的低跳变点), MCU 仍处于复位状态
• CPU 读取复位向量
并且,在从Stop2 模式中唤醒后, SPMSC2 中的PPDF 也会被设置用于将用户代码引导到Stop2 恢复程序中。PPDF 仍保持有效且I/O 管脚状态被锁定,直到1 被写入到SPMSC2 中的PPDACK 中。为了在进入 Stop2 之前保持被设置为通用I/O 管脚的I/O 状态,用户必须将I/O 端口寄存器(保存在RAM 中)的内容恢复到端口寄存器中,然后再写入到PPDACK 位中。如果端口寄存器在写入到PPDACK 中之前没有从RAM 中恢复,那么在写入PPDACK 时该管脚将切换到复位状态。对于配置为外围 I/O 的管脚,用户在写入PPDACK 位之前必须重新配置连接到该管脚的外围模块。如果外围模块在写入PPDACK 之前没有启用,那么在I/O锁定被打开时,该管脚将由相关的端口控制寄存器控制。

停止模式中的片上外围模块

当MCU 进入任何停止模式时,连接到内部外围模块的系统时钟被停止。即使在异常情况下(ENBDM = 1)(连接到后台调试逻辑的时钟继续运行),到外围系统的时钟也将被停止以降低功耗。

image

Baidu
map