《efm32外设模块—rmu v1.00》由会员分享,可在线阅读,更多相关《efm32外设模块—rmu v1.00(5页珍藏版)》请在金锄头文库上搜索。
1、 广州周立功单片机科技有限公司广州周立功单片机科技有限公司 EFM32 系列微控制器 产品应用笔记产品应用笔记 2012 Guangzhou ZLG MCU Technology Co., Ltd. 1 RMU目 录 1. 概述 . 1 2. FAQ . 2 3. 实验指导 . 3 3.1 实验目的 . 3 3.2 实验设备 . 3 3.3 实验内容 . 3 3.4 试验步骤 . 3 3.5 实验参考程序 . 3 3.6 实验结果 . 4 4. 免责声明 . 5 广州周立功单片机科技有限公司广州周立功单片机科技有限公司 EFM32 系列微控制器 产品应用笔记产品应用笔记 2012 Guangz
2、hou ZLG MCU Technology Co., Ltd. 1 RMU1. 概述概述 复位管理单元(Reset Management Unit,简称 RMU)是 EFM32 片上用于管理所有复位源 及其复位事件的专用模块。RMU 监控 EFM32 片上所有的复位源,当有一个或多个复位源 的复位信号有效时 RMU 将 MCU 置于复位状态。 当复位源对应的复位信号有效,则 RMU_RSTCAUSE 寄存器中该复位源对应的标志位 将被置位,因此在 MCU 复位重新运行时可以通过查询该寄存器获知引发 MCU 复位的复位 源。 注:不同系列 EFM32 微控制器所拥有的复位源不相同,详细情况可参
3、考对应的参考手册(可从Simplicity Studio 获得) 。 广州周立功单片机科技有限公司广州周立功单片机科技有限公司 EFM32 系列微控制器 产品应用笔记产品应用笔记 2012 Guangzhou ZLG MCU Technology Co., Ltd. 2 RMU2. FAQ 1. 怎样使用与 RMU 相关的 emlib 库函数? A:首先将 em_rmu.c 文件加入工程中,然后在需要调用与 RMU 相关的 emlib 库函数的 源文件中添加如所示的预编译代码。 程序清单 2.1 预编译代码 #include “em_rmu.h“ 2. 怎样清除 RMU_RSTCAUSE 寄存
4、器值? A:清除 RMU_RSTCAUSE 寄存器的步骤如下: 1) 向 RMU_CMD 寄存器中的 RCCLR 位写 1; 2) 向 EMU_AUXCTRL 寄存器中的 bit0 写 1; 3) 向 EMU_AUXCTRL 寄存器中的 bit0 写 0。 通过调用 emlib 库函数可更方便的实现清除操作,该函数如程序清单 2.2 所示。 程序清单 2.2 RMU_RSTCAUSE 寄存器值清除函数 void RMU_ResetCauseClear(void); 3. 为什么直接访问RMU_RSTCAUSE 寄存器得到的值和调用 emlib库函数得到的值 差别会很大? A:某些复位源引起的复
5、位会导致 RMU_RSTCAUSE 寄存器错误地将其它复位源标志 位置位。为了屏蔽这些被错误置位的标志位,我们需要对从 RMU_RSTCAUSE 寄存器读出 的值进行一定的处理,这样才能得到正确的读取值。这项工作库函数内部已经完成,所以直 接读取 RMU_RSTCAUSE 寄存器值与利用库函数得到的值不同。在实际应用中推荐通过调 用库函数的方式实现该寄存器值的读取。 4. 各个系列 EFM32 微控制器在 RMU 部分的不同点体现在哪里? A:不同系列 EFM32 微控制器在复位管理单元上的差别主要体现在 RMU_RSTCAUSE 寄存器中的标志位和 MCU 拥有的复位源。 广州周立功单片机科
6、技有限公司广州周立功单片机科技有限公司 EFM32 系列微控制器 产品应用笔记产品应用笔记 2012 Guangzhou ZLG MCU Technology Co., Ltd. 3 RMU3. 实验指导实验指导 3.1 实验目的实验目的 掌握 Energy Micro EFM32 系列微控制器 RMU 模块的使用方法。 3.2 实验设备实验设备 ? 硬件:PC 机一台和 EFM32TG-STK3300 开发板一套; ? 软件:IAR(或 Keil)集成开发环境。 3.3 实验内容实验内容 本实验主要演示如何利用 EFM32 片上 RMU 查询引起复位的复位源。 实验例程中通过读取 RMU_R
7、STCAUSE 寄存器值判断引发 MCU 复位的复位源,若是 从 EM4 关断模式唤醒引发的 MCU 复位则熄灭 LED。 3.4 试验步骤试验步骤 1) 连接开发板 USB 端口到电脑的 USB 端口,打开 MCU 电源; 2) 打开 Keil(或 IAR)工程,重新编译并下载程序到开发板; 3) 复位 MCU,观察 LED 灯状态; 4) 按下按键 PB0; 5) 将 PF1 引脚与 GND 短接; 6) 观察 LED 灯状态。 3.5 实验参考程序实验参考程序 在实验例程主函数中首先开启 GPIO 模块时钟,配置 PB0 按键对应的引脚 PD8 为上拉 输入,配置 LED 对应的引脚 P
8、D7 为推挽输出并点亮 LED。然后读取 RMU_RSTCAUSE 寄 存器值并判断, 若是从 EM4 关断模式唤醒引发的 MCU 复位则熄灭 LED 灯。 最后进入 while 循环,查询 PB0 是否按下,若按下则使能 PF1 引脚低电平唤醒 EM4 关断模式并进入 EM4 关断模式。主函数实现代码如程序清单 3.1 所示。 程序清单 3.1 主函数 int main (void) INT32U ulResetCause; CHIP_Init(); CMU_ClockEnable(cmuClock_GPIO, true); /* 开启 GPIO 时钟 */ GPIO_PinModeSet(
9、gpioPortD, 8, gpioModeInputPull, 1); /* 配置 PD8 为上拉输入(按键 PB0) */ GPIO_PinModeSet(gpioPortD, 7, gpioModePushPull, 0); /* 配置 PD7 为推挽输出初始低电平 */ GPIO_PinOutSet(gpioPortD, 7); /* 点亮 LED 灯 */ 广州周立功单片机科技有限公司广州周立功单片机科技有限公司 EFM32 系列微控制器 产品应用笔记产品应用笔记 2012 Guangzhou ZLG MCU Technology Co., Ltd. 4 RMUulResetCaus
10、e = RMU_ResetCauseGet(); /* 获取 RMU_RSTCAUSE 寄存器的值 */ RMU_ResetCauseClear(); /* 清除复位事件标志 */ /* * 判断是否是 EM4 唤醒引起的复位,若是从 EM4 唤醒则熄灭 LED 灯 */ if (ulResetCause = (RMU_RSTCAUSE_EM4RST | RMU_RSTCAUSE_EM4WURST) GPIO_PinOutClear(gpioPortD, 7); while(1) if (!GPIO_PinInGet(gpioPortD,8) /* 判断按键是否按下 */ timeDelay(
11、50); /* 按键消抖 */ if (!GPIO_PinInGet(gpioPortD, 8) /* 确认按键按下 */ GPIO_PinModeSet(gpioPortF, 1, gpioModeInput, 1); /* 配置 PF1 支持唤醒 EM4 */ /* * 使能 PF1 引脚低电平唤醒 EM4,在该函数中会使能引脚保持功能 */ GPIO_EM4EnablePinWakeup(0x08, 0); EMU_EnterEM4(); /* 进入 EM4 模式 */ 3.6 实验结果实验结果 下载程序到开发板并复位 MCU,此时 LED 为点亮状态。按下 PB0,MCU 进入 EM4 模式,然后将 PF1 引脚与 GND 短接,唤醒 MCU,此时可以观察到 LED 熄灭,表示通过查 询 RMU_RSTCAUSE 判断是 EM4 唤醒引发的 MCU 复位,从而将 LED 熄灭。