STC32G12K128单片机的复位分为硬件复位和软件复位两种。与STC32G12K128单片机复位相关的SFR和XFR如表3.15和表3.16所示。
表3.15 与STC32G12K128单片机复位相关的SFR
表3.16 与STC32G12K128单片机复位相关的XFR
STC32G12K128单片机进行硬件复位时,所有的寄存器的值会复位到初始值,系统会重新读取所有的硬件选项,同时根据硬件选项所设置的上电等待时间进行上电等待。硬件复位包括上电复位、低压复位、外部RST引脚复位(低电平有效)与看门狗复位。
1.上电复位
当电源电压低于掉电/上电复位门槛电压时,所有的逻辑电路都会复位。当内部工作电压上升到门槛电压以上后,根据硬件选项所设置的上电等待时间进行上电等待,掉电复位/上电复位结束。
PCON.4(POF)为上电标志位,当上电复位时,硬件自动将此位置位。
2.低压复位
低压复位的设置有2种方式,允许复位时,当电源电压低于内部低压检测(LVD)门槛电压时,自动复位。
1)STC-ISP硬件选项设置
如图3.5所示,勾选“允许低压复位(禁止低压中断)”选项,这就设置了允许低压复位功能。同时,在低压检测电压的下拉框中选择低压检测的门槛电压。此外,要注意的是,允许低压复位时,必须禁止低压中断。
图3.5 允许低压复位的设置
2)应用复位配置寄存器(RSTCFG)设置
RSTCFG.6(ENLVR)为低压复位设置控制位。当ENLVR=0时,禁止低压复位,当低压中断允许时,系统检测到低压事件时,会产生低压中断;当ENLVR=1时,允许低压复位。
RSTFLAG.4(LVDRST)是低压复位标志位,当LVDRST=1时,说明当前复位方式为低压复位,写“1”清零。
3.外部RST引脚复位
外部RST引脚是P5.4,默认状态下,该引脚用作一般的I/O引脚。
RSTCFG.4(P54RST)是RST引脚的功能选择控制位。当P54RST=0时,RST引脚用作普通I/O端口(P54)的一部分;当P54RST=1时,RST引脚用作复位引脚,复位电平是低电平。外部RST引脚的复位电路如图3.6所示。
图3.6 外部RST引脚的复位电路
RSTFLAG.0(EXRST)是低压复位标志位。当EXRST=1时,说明当前复位方式为外部RST引脚复位,写“1”清零。
4.看门狗复位
看门狗的基本作用是监视CPU的工作。如果CPU在规定的时间内没有按要求访问看门狗,就认为CPU处于异常状态,看门狗就会强迫CPU复位,使系统重新运行用户程序,这是一种提高系统可靠性的措施。
看门狗复位电路实际上就是定时器,因此看门狗也称为看门狗定时器,由看门狗控制寄存器(WDT_CONTR)进行管理。
(1)看门狗控制寄存器:WDT_CONTR。
WDT_CONTR.7(WDT_FLAG):看门狗溢出标志位。当溢出时,该位由硬件置位,可用软件将其清零。
WDT_CONTR.5(EN_WDT):看门狗允许位。当EN_WDT=1时,看门狗启动;当EN_WDT=0时,看门狗不起作用。
WDT_CONTR.4(CLR_WDT):看门狗清零位。当CLR_WDT=1时,看门狗将重新计数,硬件将自动清零此位。
WDT_CONTR.3(IDL_WDT):看门狗“IDLE”模式(空闲模式)控制位。当IDL_WDT=1时,看门狗在“空闲模式”时计数;当IDL_WDT=0时,看门狗在“空闲模式”时不计数。
WDT_CONTR.2~WDT_CONTR.0(WDT_PS[2:0]):看门狗预分频系数控制位。
(2)看门狗溢出时间计算方法:
常用预分频系数的设置和看门狗溢出时间如表3.17所示。
表3.17 常用预分频系数的设置和看门狗溢出时间
(3)看门狗的硬件启动。
STC32G12K128单片机的看门狗可采用软件启动,也可以采用硬件启动。硬件启动是在STC-ISP下载程序前设置完成的,如图3.7所示,勾选“上电复位时由硬件自动启动看门狗”即可。STC32G12K128单片机的看门狗一旦经硬件启动后,软件无法将其关闭,必须对单片机进行重新上电才可关闭看门狗。
图3.7 看门狗硬件启动的设置
(4)看门狗定时器的使用。
当启用看门狗后,用户程序必须周期性地复位看门狗,以表示用户程序还在正常运行,并且复位周期必须小于看门狗的溢出时间。如果用户程序在运行一段时间之后(超出看门狗的溢出时间)不能复位看门狗,看门狗就会溢出,将强制使CPU自动复位,从而确保用户程序不会进入死循环,或者执行到无程序代码区。复位看门狗的方法是重写看门狗控制寄存器的内容,让看门狗计数器重新计数。
软件复位时,除与时钟相关的寄存器保持不变外,其余寄存器的值会复位到初始值。软件复位不会重新读取所有的硬件选项,用户数据区的数据保持不变。软件复位是通过写IAP_CONTR触发的复位。
IAP_CONTR.6(SWBS):软件复位启动区选择位。当SWBS=0时,软件复位后从用户程序区开始执行代码;当SWBS=1时,软件复位后从系统ISP区开始执行代码。
IAP_CONTR.5(SWRST):软件复位触发位。当SWRST=0时,对单片机无影响;当SWRST=1时,触发软件复位。
执行“IAP_CONTR=0x60”语句,触发软件复位,并从系统ISP区开始执行代码;执行“IAP_CONTR=0x20”语句,触发软件复位,并从用户程序区开始执行代码。