那些年,我们追过的MCU复位

那些年,我们追过的MCU复位0

概述

在嵌入式系统中,复位(Reset)功能的应用非常广泛。复位是MCU工作开始的标志,MCU中所有的初始化工作都是在复位之后开始的。在实际应用中,我们也可以通过对系统复位类型的检测和分析,判断系统的工作状态是否正常,在代码调试的过程中,也可以帮助我们分析异常原因。

这篇文章主要总结一下Freescale的Kv4x系列的复位类型。Kv4x系列基于ARMCortex-M4内核,支持的复位源还真不少。从复位类型上可以分为三个大类: 上电复位,系统复位和调试复位。如下图所示。

0x_fmt=bmp

该寄存器的 LVDIE 位和LVDRE位可以配置当检测到Low Voltage时,究竟是引发中断还是引发系统复位。当LVDIE位置1时,将引发中断。当LVDRE位置1时,将引发系统复位。

该寄存器的LVDV位用来配置Low Voltage检测电压。具体配置如下表

0x_fmt=bmp

MCG包含一个时钟监控器。当MCG的外部参考时钟频率下降到期望值之下时,该时钟监控器会产生一个LOC复位。

LOC复位会导致RCM_SRS0寄存器的LOC位被置位。

软件复位

SW Reset。NVIC控制器的SYSRESETREQ位能够强制系统产生一个软件复位。当SYSRESETREQ位被置位时,会产生一个复位请求。软件复位会重置除去调试模块以外的其他任何模块。

软件复位会导致RCM_SRS1寄存器的SW位置位。

锁定复位

LOCKUP Reset。锁定复位用来指示内核软件的严重错误。当系统内置的硬件保护装置被激活,从而产生了一个不可恢复的异常时,内核将被锁定,并引发锁定复位。

锁定复位会导致RCM_SRS1寄存器的LOCKUP位置位。

MDM-AP系统复位

将MDM-AP控制器的复位请求位(System Reset Request)置位,将导致MDM-AP系统复位。这是通过JTAG接口复位的主要方法。直到在该位被清除之前,系统复位会一直保持。

将 MDM-AP 控制器的复位保持位(Core Hold Reset)会在复位发生时,使内核一直保持在复位状态,直到该位被清除。

MDM-AP系统复位会导致RCM_SRS1寄存器的MDMAP位置位。

调试复位

调试复位不会导致RCM_SRS1寄存器的状态位发生改变。

特定的代码会使 JTAG 模块产生一个系统复位。这个复位功能是在EXTEST,HIGHZ和CLAMP功能下使能的。

使能nTRST引脚会产生一个 JTAG逻辑复位。

复位类型检测

Kv4x系列芯片有一个复位控制模块,可以用来监测系统的复位类型和状态。通过读取RCM_SRS0和RCM_SRS1寄存器的相应位的值,可以判断系统的上一次复位是什么类型。

POR:置1表示系统发生了上电复位。(此时LVD位也会被同时置1)。

PIN:置1表示系统发生了外部引脚复位。

WDOG:置1表示系统发生了看门狗复位。

LOL:置1表示系统发生了MCG PLL失锁复位。

LOC:置1表示系统发生了外部时钟丢失复位。

LVD:置1表示系统发生了低电压复位。

WAKEUP:置1表示系统发生了低漏唤醒复位。

SACKERR:置1表示系统发生了停止模式应答错误复位。

MDM_AP:置1表示系统发生了MDM_AP系统复位。

SW:置1表示系统发生了软件复位。

LOCKUP:置1表示系统发生了锁定复位。

复位检测软件设计

实际系统中,我们经常需要对系统工作中的复位的类型和次数信息进行记录和保存。这时就需要用到存储模块。由于Kv4x系列没有内部的EEPROM,所以需要使用外接EEPROM来完成存储。还有一种方法是将FLASH空间进行配置,划出一片专用区域,实现EEPROM的功能。(具体可查阅参考手册中相关内容)。

复位检测功能的具体实现步骤如下:

STEP 1:初始化EEPROM。将初始化好的复位信息结构体存入EEPROM中指定地址。这部分工作需要提前完成,不在最终的程序中。

STEP 2:复位检测逻辑。这部分就是最终程序中的逻辑。

1. 系统上电后,读取EEPROM中的复位信息结构体。

2. 检测上一次复位类型,更新复位信息结构体。例如更新上次复位类型,该复位类型计数加1等。

3. 将更新后的复位信息结构体再次保存如EEPROM指定地址。

4. 继续运行后续程序。

这样,每当系统发生复位时,程序会检测复位信息,并记录在EEPROM中。

我们还可以在读写EEPROM时加入CRC校验逻辑。具体方法如下,写入EEPROM时同时写入CRC校验值,下次读取时计算并检验CRC校验值是否正确,如果不正确则说明EEPROM中的信息出现错误,则重新初始化EEPROM中储存复位信息的地址空间。使用CRC校验的方法,不仅可以保证存储的正确性。而且还能省去前一种方法中EEPROM的初始化部分,因此更加推荐。

那些年,我们追过的MCU复位0

来源:嵌入式程序猿

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年4月16日
下一篇 2015年4月16日

相关推荐