功率控制类似于我们日常生活中的节约用电问题:为了能够达到节约用电的目的,我们经常将一些不使用的电器设备的电源关闭,只有在使用的情况,才打开这些设备的电源。
1.功率控制模式
LPC1700 系列Cortex-M3 微控制器支持四种功率控制的方式:睡眠模式、深度睡眠模式、掉电模式和深度掉电模式。CPU时钟速率可通过改变时钟源、重新配置PLL值和/或改变CPU时钟分频器值来控制,这就允许用户根据应用要求在功率和处理速度之间进行权衡。此外,“外设功率控制器”可以关断每个片上外设,从而对系统功耗进行良好的调整。
通过Cortex-M3 执行WFI(等待中断)或WFE(等待异常)指令可以进入任何低功耗模式。Cortex-M3 内部支持两种低功耗模式:睡眠模式和深度睡眠模式,它们通过Cortex M3 系统控制寄存器中的SLEEPDEEP位来选择。掉电模式和深度掉电模式通过PCON寄存器中的位来选择。
LPC1700 系列Cortex-M3 微控制器还具有一个独立电源域,可为RTC和电池RAM供电,以便在维持RTC和电池RAM正常操作时,关闭其他设备的电源。
1)睡眠模式
注意: LPC1700 系列Cortex-M3 微控制器的睡眠模式对应于LPC2XXX系列ARM器件的空闲模式。
当进入睡眠模式时,内核时钟停止,且PCON的SMFLAG位置位。从睡眠模式中恢复并不需要任何特殊的序列,但要重新使能ARM内核的时钟。
在睡眠模式下,指令的执行被中止,直至复位或中断出现。外设在CPU内核处于睡眠模式期间继续运转,并可产生中断使处理器恢复执行指令。在睡眠模式下,处理器内核自身、存储器系统、有关控制器及内部总线停止工作,因此这些器件的动态功耗会降低。
只要出现任何使能的中断,CPU内核就会从睡眠模式中唤醒。
2)深度睡眠模式
注意: LPC1700 系列 Cortex-M3 微控制器的深度睡眠模式对应于LPC2300 和LPC2400系列ARM器件的睡眠模式。
当芯片进入深度睡眠模式时,主振荡器掉电且所有内部时钟停止,PCON的DSFLAG位置位,IRC保持运行并且可配置为驱动看门狗定时器,允许看门狗唤醒CPU。由于RTC中断也可以用做唤醒源,所以 32kHz的RTC振荡器不停止。同时,Flash进入就绪模式,这样可以实现快速唤醒,PLL自动关闭并断开连接,CCLK和USBCLK时钟分频器自动复位为 0。
在深度睡眠模式期间,保存处理器状态及寄存器、外设寄存器和内部SRAM的值,并且将芯片引脚的逻辑电平保持为静态。可通过复位或某些的特定中断(能够在没有时钟的情况下工作)来终止深度睡眠模式和恢复正常操作。由于芯片的所有动态操作被中止,所以深度睡眠模式使功耗降低为一个极小的值。
在唤醒深度睡眠模式下,如果IRC在进入深度睡眠模式前被使用,则 2 位IRC定时器开始计数,并且在定时器超时(4 周期)后,恢复代码执行和外设活动。如果使用主振荡器,则 12 位主振荡器定时器开始计数,并且在定时器超时(4096 周期)时恢复代码的执行。用户必须记得在唤醒后重新配置所需的PLL和时钟分频器。
只要相关的中断使能,器件就可以从深度睡眠模式中唤醒。这些中断包括NMI、外部中断EINT0~EINT3、GPIO中断、以太网Wake-On-LAN中断、掉电检测、RTC报警中断、看门狗定时器超时、USB输入引脚跳变或CAN输入引脚跳变。
注意: 外设的功率控制特性允许在应用中关闭不需要的外设,从而节省额外的功耗。该功能由PCONP寄存器实现。
3)掉电模式
掉电模式会执行在深度睡眠模式下的所有操作,但关闭了Flash存储器。进入掉电模式会使PCON中的PDFLAG位置位,这样节省了更多功耗。但是芯片被唤醒后,在访问Flash存储器中的代码或数据前,必须等待Flash恢复。
当芯片进入掉电模式时,IRC、主振荡器和所有时钟都停止。如果RTC已使能,则它继续运行。RTC中断也可用来唤醒CPU。同时,Flash被强制进入掉电模式;PLL自动关闭并断开连接;CCLK和USBCLK时钟分频器自动复位为 0。
当芯片处于掉电模式下被唤醒时,如果在进入掉电模式前使用了IRC,则经过IRC的启动时间(60s)后,2 位IRC定时器开始计数并且在 4 个周期内停止计数。如果用户代码在SRAM中,则在IRC计数 4 个周期后,用户代码会立即执行;如果代码在Flash中运行,则在IRC计数 4 个周期后,启动Flash唤醒定时器,100s后完成Flash的启动,开始执行代码。当定时器超时时,可以访问Flash。用户必须记得在唤醒后重新配置PLL和时钟分频器。
4)深度掉电模式
在深度掉电模式下,关断整个芯片的电源(实时时钟、引脚、WIC和RTC备用寄存器除外)。进入深度掉电模式会使PCON中的DPDFLAG位置位。为了优化功率,用户可关闭额外选项,可保留 32kHz振荡器的电源,或使用外部电路关闭片上调节器的电源。
当使用外部复位信号,或使能RTC中断和产生RTC中断时,可将器件从深度掉电模式中唤醒。
2.寄存器描述
功率控制寄存器如表 2-19 所示。
表2-19 功率控制寄存器
注:[1]复位值仅指在使用位中保存的数据,不包括保留位的内容。
1)功率模式控制寄存器(PCON-0x400F C0C0)
低功耗模式通过功率模式控制寄存器来控制,如表 2-20 所示。
表 2-20 功率模式控制寄存器的位描述
续表
PCON中的PM1 和PM0 位在必要时允许进入低功耗模式。表 2-21 给出了LPC1700 系列Cortex-M3 微控制器支持的 3 种低功耗模式的编码。
表 2-21 低功耗模式的编码
任何使能的中断均可将CPU从睡眠模式中唤醒。某些特定的中断可将处理器从深度睡眠模式或掉电模式中唤醒。
若特定的中断使能,则允许中断将CPU从深度睡眠模式或掉电模式中唤醒。唤醒后,将继续执行适当的中断服务程序。这些中断为NMI、外部中断EINT0~EINT3、GPIO中断、以太网Wake-On-LAN中断、掉电检测中断、RTC报警中断。此外,如果看门狗定时器由IRC振荡器驱动,则看门狗定时器也可将器件从深度睡眠模式中唤醒。
可以将CPU从深度睡眠或掉电模式中唤醒的其他功能有CAN活动中断(由CAN总线引脚上的活动产生)和USB活动中断(由USB总线引脚上的活动产生)。相关的功能必须映射到引脚且对应的中断必须使能,才能实现唤醒。
2)外设功率控制寄存器(PCONP-0x400FC0C4)
可通过PCONP寄存器关闭特定外设模块的时钟源来关闭外设,以实现节电的目的。有少数外设功能不能被关闭(看门狗定时器、引脚连接模块和系统控制模块)。
某些外设(特别是那些含有模拟功能的外设)的功耗可能与时钟无关。这些外设有独立的禁能控制,可通过关闭其电路来减少功耗。PCONP中的每个位都控制一个外设,如表 2-22 所示。
如果外设控制位为 1,则外设被使能;如果外设控制位为 0,则外设的时钟被禁能(关闭)以节省功耗。例如,如果位 19 为 1,则I 2 C1 接口使能;如果位 19 为 0,则I 2 C1 接口禁止。
注意: 仅当外设在PCONP寄存器中使能时,才能够从外设寄存器中有效读取和有效写入外设寄存器。
表 2-22 外设功率控制寄存器的位描述
续表
注意: DAC外设在PCONP中没有控制位。要想使能DAC,必须通过配置PINSEL1 寄存器在相关的引脚P0.26 上选择其输出。
LPC17XX在固件库中提供操作PCONP 寄存器的函数:
3.功率控制的注意事项
复位后,PCONP寄存器包含使能所选的接口和外设(由PCONP控制)的值。因此,除了对外设相关的寄存器进行配置外,用户的应用程序可能还需要访问PCONP寄存器,使能对应的外设。
在需要控制功率的系统中,需要在PCONP寄存器中使能必要的外设,而寄存器的其他“保留”位或当前不使用的外设所对应的位都必须清零。