1,前言
最近负责BLE的低功耗功能开发,发现NXP为低功耗需求的实现提供了一套官方架构。本文将记录整个开发过程。由于是边开发边记录,逻辑上可能没有那么通顺,等开发完成后会优化文章的逻辑结构。
2,添加引脚唤醒源,并唤醒设备。
1,唤醒源的类型
分为外部引脚唤醒和低功耗外设唤醒,比如低功耗定时器等。
2,不同类型唤醒源触发唤醒,后续的执行流程是不同的
从数据手册中我们发现,如果是外部引脚唤醒就会触发WUU模块的中断服务函数。
在WUU的中断服务函数中我们再去调用唤醒后的执行函数。
PM_InitWakeupSource(&ptc6WakeUpSource, PM_WSID_PTC6_FALLING_EDGE, APP_ButtonWakeupService, true);
3,外部唤醒引脚的配置
通过WUU中的唤醒源列表,其实有部分引脚唤醒,比如PTC6等。其实这里似乎就提示了就是普通的gpio,并不是复用为唤醒源的模式,因为压根就没有。
原文是:When an external pin is enabled as a wakeup source,
the pin must be configured as an input pin.
as an input pin.最后我就是将PTC6,这个引脚在port驱动下配置为了gpio,并且为输入模式。
4,唤醒模块中断配置
#define WUU_PIN_FLAG_CLEAR_MASK (WUU_PF_WUF0_MASK | WUU_PF_WUF1_MASK | \
WUU_PF_WUF2_MASK | WUU_PF_WUF3_MASK | \
WUU_PF_WUF4_MASK | WUU_PF_WUF5_MASK | \
WUU_PF_WUF6_MASK | WUU_PF_WUF7_MASK | \
WUU_PF_WUF8_MASK | WUU_PF_WUF9_MASK | \
WUU_PF_WUF10_MASK | WUU_PF_WUF11_MASK | \
WUU_PF_WUF12_MASK | WUU_PF_WUF13_MASK | \
WUU_PF_WUF14_MASK | WUU_PF_WUF15_MASK | \
WUU_PF_WUF27_MASK | WUU_PF_WUF28_MASK)
void WUU0_IRQHandler()
{
/* The Power Manager will parse all the registered and enabled wake up sources
* and determine if they triggered the WUU IRQ. If so, it will call each
* wake up source's callback */
status = PM_HandleWakeUpEvent();
assert(status == kStatus_PMSuccess);
(void)status;
/* Clear WUU pin status flag */
WUU_ClearExternalWakeUpPinsFlag(WUU0, WUU_PIN_FLAG_CLEAR_MASK);
}
5,实现的现象
因为PTC6与按键相连,每次触发后都会唤醒设备,然后再次进入。