唤醒源获取及唤醒IO设置
📎 原始文档:https://www.kdocs.cn/l/cmT21IudBsze 唤醒源获取及唤醒IO设置
- 唤醒源获取 要获取唤醒的IO口,唤醒口都要选ROM后的IO!!!!!!
ROM后IO口信息看对应芯片用户手册IO口表。
AC695X为例:
*type1:此类 GPIO 在初始过程中状态不可控,不能维持上电之前的状态。
- AC695 IO口唤醒源获取
u8 get_wakeup_source(void); //返回值 为对应唤醒源的index
u8 get_wakeup_pnd(void); //返回值 为对应唤醒口
- AC700X IO口唤醒源获取
- 698方法同700n类似,寄存器为P3_WAUP_PND,需在setup里面读取,越早读取越好否则可能会被清掉。 通过获取寄存器P3_WKUP_PND0 值,得到唤醒源。值的对应关系和调用如下:
获取P3_WKUP_PND0 值:
P3_WKUP_PND0 值对应的唤醒源(例子):

- BR25(AC696,AC6082)接口添加
u8 wkup_pnd = 0;
u8 get_wakeup_pnd(void)
{
return wkup_pnd;
}
//返回值: 0x00 | BIT(x)//x唤醒的IO口编号
在此处添加图片两行代码:
- AD697N复位源获取
//要在reset_source_dump()之后调用
_WEAK_ u8 is_reset_source(u32 src)
{
u32 rst = get_reset_source_value();
printf("get_reset_source_value %x\n", rst);
if(rst & BIT(src)){
return 1;
}
return 0;
}


- AC700N/AC701N 唤醒源获取
- 复位源 可以通过u8 is_reset_source(enum RST_REASON index); 判断复位源进行判断,调试可以通过打印 wakeup_source_value_dump(); 打印出唤醒源的值。
u8 is_reset_source(enum RST_REASON index); //判断复位源
reset_source_dump(); //打印复位源源
//demo
//更多唤醒源查看 include_lib\driver\cpu\br28\asm\power\power_reset.h 定义
is_reset_source(MSYS_POWER_RETURN); //返回1 则代表是 上电复位
- powerdown 唤醒IO
AC701N_soundbox_release 音箱SDK 唤醒IO会有一个回调函数:可以根据回调函数对IO口进行判断
static void port_wakeup_callback(u8 index, u8 gpio)
{
log_info("%s:%d,%d",__FUNCTION__,index,gpio);
switch (index) {
#if (TCFG_TEST_BOX_ENABLE || TCFG_CHARGESTORE_ENABLE || TCFG_ANC_BOX_ENABLE)
case 2:
extern void chargestore_ldo5v_fall_deal(void);
chargestore_ldo5v_fall_deal();
break;
#endif
}
}
- 软关机唤醒IO可以通过u8 is_wakeup_source(enum WAKEUP_REASON index); 对唤醒源进行判断,调试可以通过打印 wakeup_source_value_dump(); 打印出唤醒源的值
u8 is_wakeup_source(enum WAKEUP_REASON index); //判断唤醒源
wakeup_source_value_dump(); //打印唤醒源
//demo
//更多唤醒源查看 include_lib\driver\cpu\br28\asm\power\power_wakeup.h 定义
is_wakeup_source(PWR_WK_REASON_EDGE_INDEX1); //返回1 则代表是 wk_param.port[1] 口唤醒
is_wakeup_source(PWR_WK_REASON_EDGE_INDEX2); //返回1 则代表是 wk_param.port[2] 口唤醒
- SDK打印的复位源含义
AC695X 为例:
u8 power_reset_source_dump(void);
VDDIO POR:vddio(vbat)上电
VDDIO LVD:vddio LVD复位,vddio电压低于LVD设定电压触发芯片复位
WDT:看门狗
VCM:VCOM复位
PPINR:长按reset IO(按键)复位
SYS RESET:主系统复位了p33
SOFT RESET:软件复位
打印测试:


备注:适用于AC696X\AC695X\AC697X\AC698X\AC700X 等
- 唤醒IO设置
- 注册多个IO口唤醒
- AC700X /AC701X 注册多IO口做唤醒功能(BR23,BR25同样适用): demo:

- AC700X /AC701X 注册多IO口做唤醒功能(BR23,BR25同样适用): demo:

在关机设置IO口状态的函数中,要做好对应保护,不能改其状态:
AC700N及以后SDK 参考代码:
- 中断回调函数 IO配置为唤醒口后,开机状态下,IO的电平变化会触发中断回调

- 700N/701N/708N TWS 一拖二 V300 参考按键唤醒功能
