喜欢2次
系统环境
软件平台
硬件需求
RV-STAR开发板
PMU的主要特征如下:
本次的实验目标是通过指令让微控制器主动进入深度睡眠模式,然后再通过外部中断唤醒。进入深度睡眠模式时,1.2V域中的时钟全部关闭,IRC8M、HXTAL及PLLs全部被禁用,SRAM和寄存器中的内容被保留,程序会中止在当前状态不再继续运行。
我们的实验内容设计如下:
上电后将唤醒按键配置为中断模式并点亮红色LED,然后立即进入深度睡眠模式,程序中止,红色LED处于点亮状态,当按下唤醒按键,程序恢复运行,红色LED熄灭,绿色LED开始闪烁。
对应的主要代码如下:
#include "nuclei_sdk_hal.h"
void gd_rvstar_led_blink(int led);
int main()
{
gd_rvstar_led_init(LED1);
gd_rvstar_led_init(LED3);
gd_rvstar_key_init(KEY_WAKEUP, KEY_MODE_EXTI);
/* 使能PMU时钟 */
rcu_periph_clock_enable(RCU_PMU);
gd_rvstar_led_on(LED3);
/* 进入深度睡眠模式 */
pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD);
gd_rvstar_led_off(LED3);
while (1) {
gd_rvstar_led_blink(LED1);
}
}
void EXTI0_IRQHandler(void)
{
if (RESET != exti_interrupt_flag_get(WAKEUP_KEY_EXTI_LINE)) {
exti_interrupt_flag_clear(WAKEUP_KEY_EXTI_LINE);
}
}
完整代码请参考Github上nuclei_board_labs仓库中RVSTAR的PMU例程。
完整代码:https://github.com/Nuclei-Software/nuclei-board-labs/tree/master/rvstar/pmu/deepsleep_wakeup_exti
代码编写完毕后,编译并上传到开发板上,可以观察实验现象和我们的设计预期相符。