7. 电源管理、睡眠及复位
7.1 外部电源输入
CH559芯片内部工作电压为3.3V,I/O引脚的输入输出电压为3.3V,除了P1.0~P1.7、XI、XO、 RST之外的I/O引脚都可以承受5V电压输入。CH559芯片内置5V到3.3V的低压差电压调整器,支持外部3.3V或者5V电源电压输入,两种电源电压输入模式参考下表。
| 外部电源电压 | VIN5引脚电压:外部电压3.3V~5V | VDD33引脚电压:内部电压3.3V |
|---|---|---|
| 3.3V包括小于3.6V | 输入外部3.3V电压到电压调整器,必须对地接不小于0.1uF退耦电容 | 输入外部3.3V作为内部工作电源,必须对地接不小于0.1uF退耦电容 |
| 5V包括大于3.6V | 输入外部5V电压到电压调整器,必须对地接不小于0.1uF退耦电容 | 内部电压调整器3.3V输出及3.3V内部工作电源输入,必须对地接不小于3.3uF退耦电容 |
在电源上电或者系统复位后,CH559默认处于运行状态。当某些功能模块不需要使用时,可以关闭这些模块的时钟,以降低功耗。当CH559完全不需要运行时,可以设置PCON中的PD进入睡眠状态,睡眠状态下可以选择通过USB、UART0、UART1、SPI0以及部分GPIO进行外部唤醒。
7.2 电源和睡眠控制寄存器
表7.2.1 电源和睡眠控制寄存器列表
| 名称 | 地址 | 描述 | 复位值 |
|---|---|---|---|
| WDOG_COUNT | FFh | 看门狗计数寄存器 | 00h |
| RESET_KEEP | FEh | 复位保持寄存器 | 00h |
| WAKE_CTRL | EBh | 睡眠唤醒控制寄存器 | 00h |
| SLEEP_CTRL | EAh | 睡眠控制寄存器 | 00h |
| PCON | 87h | 电源控制寄存器 | 10h |
看门狗计数寄存器(WDOG_COUNT):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | WDOG_COUNT | RW | 看门狗当前计数,计满0FFh转向00h时溢出,溢出时自动设置中断标志bWDOG_IF_TO为1 | 00h |
复位保持寄存器(RESET_KEEP):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:0] | RESET_KEEP | RW | 复位保持寄存器,数值可以被人为修改,除了上电复位可将其清零之外,其它任何复位都不影响该数值 | 00h |
睡眠唤醒控制寄存器(WAKE_CTRL),仅在安全模式下可写:
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bWAK_BY_USB | RW | USB事件唤醒使能,该位为0禁止唤醒 | 0 |
| 6 | bWAK_RXD1_LO | RW | UART1接收输入低电平唤醒使能,该位为0禁止唤醒。iRS485模式下选择XA/XB差分输入,非iRS485模式下根据bIER_PIN_MOD1=1/0选择RXD1或RXD1_引脚 | 0 |
| 5 | bWAK_P1_5_LO | RW | P1.5低电平唤醒使能,为0禁止唤醒 | 0 |
| 4 | bWAK_P1_4_LO | RW | P1.4低电平唤醒使能,为0禁止唤醒 | 0 |
| 3 | bWAK_P0_3_LO | RW | P0.3低电平唤醒使能,为0禁止唤醒 | 0 |
| 2 | bWAK_CAP3_LO | RW | Timer3捕捉输入低电平唤醒使能,为0禁止唤醒。根据bTMR3_PIN_X=0/1选择CAP3或CAP3_引脚 | 0 |
| 1 | bWAK_P3_2E_3L | RW | P3.2边沿变化和P3.3低电平唤醒使能,为0禁止唤醒 | 0 |
| 0 | bWAK_RXD0_LO | RW | UART0接收输入低电平唤醒使能,为0禁止唤醒。根据bUART0_PIN_X=0/1选择RXD0或RXD0_引脚 | 0 |
睡眠控制寄存器(SLEEP_CTRL),仅在安全模式下可写:
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bSLP_OFF_USB | RW | USB时钟关闭控制,该位为1关闭时钟 | 0 |
| 6 | bSLP_OFF_ADC | RW | ADC时钟关闭控制,该位为1关闭时钟 | 0 |
| 5 | bSLP_OFF_UART1 | RW | UAR1时钟关闭控制,该位为1关闭时钟 | 0 |
| 4 | bSLP_OFF_P1S1 | RW | PWM1和SPI1时钟关闭控制,该位为1关闭时钟 | 0 |
| 3 | bSLP_OFF_SPI0 | RW | SPI0时钟关闭控制,该位为1关闭时钟 | 0 |
| 2 | bSLP_OFF_TMR3 | RW | Timer3时钟关闭控制,该位为1关闭时钟 | 0 |
| 1 | bSLP_OFF_LED | RW | LED-CTRL时钟关闭控制,该位为1关闭时钟 | 0 |
| 0 | bSLP_OFF_XRAM | RW | xRAM时钟关闭控制,该位为1关闭时钟 | 0 |
电源控制寄存器(PCON):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | SMOD | RW | 当用定时器1产生UART0波特率时,选择UART0模式1、2、3的通讯波特率:0-慢速模式;1-快速模式 | 0 |
| 6 | 保留 | RO | 保留 | 0 |
| 5 | bRST_FLAG1 | R0 | 芯片最近一次复位标志高位 | 0 |
| 4 | bRST_FLAG0 | R0 | 芯片最近一次复位标志低位 | 1 |
| 3 | GF1 | RW | 通用标志位1:使用者可自己定义,可软件清零或置位 | 0 |
| 2 | GF0 | RW | 通用标志位0:使用者可自己定义,可软件清零或置位 | 0 |
| 1 | PD | RW | 睡眠模式使能,置1后睡眠,唤醒后硬件自动清零 | 0 |
| 0 | 保留 | R0 | 保留 | 0 |
表7.2.2 芯片最近一次复位标志描述
| bRST_FLAG1 | bRST_FLAG0 | 复位标志描述 |
|---|---|---|
| 0 | 0 | 软件复位,来源:bSW_RESET=1并且(bBOOT_LOAD=0或bWDOG_EN=1) |
| 0 | 1 | 电源上电复位,来源:VDD33引脚电压低于检测电平 |
| 1 | 0 | 看门狗复位,来源:bWDOG_EN=1并且看门狗超时溢出 |
| 1 | 1 | 外部引脚手工复位,来源:En_P5.7_RESET=1并且P5.7输入高电平 |
7.3 复位控制
CH559有4个复位源:上电复位、外部复位、软件复位、看门狗复位,后三者属于热复位。
7.3.1 上电复位
上电复位POR由片内电压检测电路产生。POR电路持续监控VDD33引脚的电源电压,低于检测电平Vpot时产生上电复位,并由硬件自动延时Tpor以保持复位状态,延时结束后CH559运行。
只有上电复位才使CH559重新加载配置信息以及清零RESET_KEEP,其它热复位不影响。
7.3.2 外部复位
外部复位由外加于RST引脚的高电平产生。当配置信息En_P5.7_RESET为1,并且RST引脚上的高电平持续时间大于Trst时触发复位过程。当外加高电平信号撤消后,硬件自动延时Trdl以保持复位状态,延时结束后CH559从0地址开始执行。
7.3.3 软件复位
CH559支持内部软件复位,以便不需要外部干预即可主动复位CPU状态并重新运行。设置全局配置寄存器GLOBAL_CFG中的bSW_RESET为1,即可软件复位,并且自动延时Trdl以保持复位状态,延时结束后CH559从0地址开始执行,bSW_RESET位由硬件自动清零。
当bSW_RESET置1时,如果bBOOT_LOAD=0或者bWDOG_EN=1,那么复位后bRST_FLAG1/0将指示为软件复位;当bSW_RESET置1时,如果bBOOT_LOAD=1并且bWDOG_EN=0,那么bRST_FLAG1/0将不产生新的复位标志,而是保持前一次的复位标志不变。
对于有ISP引导程序的芯片,电源上电复位后,先运行引导程序,该程序根据需要软件复位芯片以切换到应用程序状态,此次软件复位只导致bBOOT_LOAD清零,不影响bRST_FLAG1/0的状态(由于复位前bBOOT_LOAD=1),所以当切换到应用程序状态时,bRST_FLAG1/0仍指示为上电复位状态。
7.3.4 看门狗复位
看门狗复位由看门狗定时器超时溢出时产生。看门狗定时器是8位计数器,其计数的时钟频率为系统主频Fsys/262144,当计满0FFh转向00h时产生溢出信号。
看门狗定时器溢出信号将触发中断标志bWDOG_IF_TO为1,该中断标志在重新加载WDOG_COUNT时或者进入相应的中断服务程序时被自动清零。
通过向WDOG_COUNT写入不同的计数初始值,从而实现不同的定时周期Twdc。在12MHz主频下,写入00h时的看门狗定时周期Twdc约为5.9秒,写入80h时约为2.8秒。
如果看门狗定时器溢出时bWDOG_EN=1,那么产生看门狗复位,并且自动延时Trdl以保持复位状态,延时结束后CH559从0地址开始执行。
当bWDOG_EN=1时为了避免被看门狗复位,必须及时重置WDOG_COUNT,避免其溢出。