使用gpio intrrupt从睡眠中醒来

了解更多常见问题教程

4个职位/0个新职位
最后一篇文章
贾加特52
离线
最后一次见到:3个月3周前
已加入:2020-07-06 10:40
使用gpio intrrupt从睡眠中醒来

你好

我使用da14695控制器与延长和休眠睡眠模式。
我想用2个GPIO唤醒设备,用于延长和休眠

hw\u gpio\u set\u pin\u function(ACCEL\u INT\u PORT,ACCEL\u INT\u pin,hw\u gpio\u MODE\u INPUT\u PULLDOWN,hw\u gpio\u FUNC\u gpio);
无效工作初始化(void)
{
hw\u wkup\u init(空);

/*
*设置以ms表示的去抖动时间。最大允许值为63 ms。
*设置为0的值将禁用去抖动功能。
*/
硬件启动/设置/去抖动时间(10);

/*
*启用唤醒控制器的键块产生的中断(去抖动
*并注册一个回调函数,以便在一个键事件之后命中。
*/
hw\u wkup\u register\u key\u中断(acceleroIntrrupt\u cb,1);

/*
*设置触发WKUP控制器的极性(上升/下降沿)。
*
*\注意,极性应用于控制器的键和GPIO块
*
*/

hw_wkup_configure_pin(ACCEL_INT_PORT,ACCEL_INT_pin,1,hw_wkup_pin STATE_HIGH);//0->上升沿:1下降沿1->板;0->EVM

/*
*添加一个PDC LUT条目,以便在端口0上发生事件后唤醒M33核心
*这一点很重要,因为当设备进入睡眠状态时,M33会关闭。
*/

hw_wkup_enable_irq();
}

此键唤醒按预期工作,设备正在从延长和休眠状态中唤醒。

但是

hw\u gpio\u set\u pin\u function(ACCEL\u INT\u PORT,ACCEL\u INT\u pin,hw\u gpio\u MODE\u INPUT\u PULLDOWN,hw\u gpio\u FUNC\u gpio);
无效工作初始化(void)
{
hw\u wkup\u init(空);
/*
*添加一个PDC LUT条目,以便在端口0上发生事件后唤醒M33核心
*这一点很重要,因为当设备进入睡眠状态时,M33会关闭。
*/
hw\u wkup\u gpio\u configure\u pin(加速输入端口,加速输入引脚,1,hw\u wkup\u pin状态高);
pdc\ u wkup\ u gpio\ u id=hw\ u pdc\ u add\ u entry(hw\ u pdc\ u LUT\ u entry\ u VAL(ACCEL\ u INT\ u PORT,ACCEL\ u INT\ u PIN,hw\ u pdc\ u MASTER\ u CM33,0));
OS\U断言(pdc\U wkup\U gpio\U id!=HW\u PDC\u无效\u LUT\u索引);

/*
*通过SW触发PDC LUT条目。此操作保证PD\U系统
*power domain将保持打开状态,以防应用程序使其他所有应用程序失效
*激活的PDC条目使M33保持活动状态。
*/
hw\u pdc\u set\u pending(pdc\u wkup\u gpio\u id);

/*
*建议确认新创建(和激活)的PDC条目
*虽然不是严格需要,因为M33将自动确认
*在下一次尝试进入休眠之前,所有M33挂起的PDC条目。
*/
hw\ U pdc\ U确认(pdc\ U wkup\ U gpio\ U id);
hw\u wkup\u register\u gpio\u p1\u中断(acceleroIntrrupt\u cb,2);

hw_wkup_enable_irq();
}

void accelerointrupt\ u cb(无效)
{
status=hw\u wkup\u get\u status(hw\u GPIO\u PORT\u 1);
硬件工作\清除\状态(硬件GPIO \端口\ 1,状态);

wakeUpExtendedSleep=真;
hw_wkup_reset_interrupt();
pm\ U睡眠\模式\设置(pm\模式\激活);

hw\u gpio\u set\u pin\u函数(REDLEDPORT,REDLEDPIN,hw\u gpio\u MODE\u OUTPUT,hw\u gpio\u FUNC\u gpio);
hw\ gpio\ pad\ latch\ enable(红色端口,红色引脚);
hw\u gpio\u pad\u latch\u disable(REDLEDPORT、REDLEDPIN);

hw\u gpio\u set\u不活动(REDLEDPORT,REDLEDPIN);
延时μms(1000);
延时μms(1000);
hw\u gpio\u set\u active(REDLEDPORT,REDLEDPIN);

}

但是gpio唤醒并不能同时从休眠和延长睡眠模式中唤醒设备。
此外,我在gpio intrrupt回调中放置了led开关,回调正在执行,led打开,但设备正在从睡眠中醒来
在得到授权后,设备被挂起
我想使用两个gpio从睡眠中唤醒,如何配置和使用两个gpio唤醒使用hw\u wkup\u gpio\u configure\u pin

谢谢你

贾加特

设备:
PM\U对话框
离线
最后一次见到:1小时11分钟前
工作人员
已加入:2018-02-08 11:03
你好,jagath52,

你好,jagath52,

谢谢你的问题。在最初的帖子中,您已经放置了2个wkup\u init()函数。因此,在我的理解中,第一个按预期工作,另一个现在。我的假设正确吗?

对于唤醒,使用ACCEL\u INT\u PORT/\u引脚,因此需要为唤醒控制器配置第二个GPIO来唤醒。正确吗?

谢谢,下午好

贾加特52
离线
最后一次见到:3个月3周前
已加入:2020-07-06 10:40
你好PM\U对话框

你好PM\U对话框

是的,我想用第二个gpio唤醒设备使用gpio唤醒控制器。密钥唤醒控制器按预期工作。

谢谢你
贾加特

PM\U对话框
离线
最后一次见到:1小时11分钟前
工作人员
已加入:2018-02-08 11:03
你好jagath52m

你好jagath52m

你能检查一下房间吗DA1469x唤醒控制器DA1469x门户的软件示例?要启用GPIO P0子块,WKUP\ GPIO\ U P0\ U block\ U enable宏应设置为1。

请试一试,让我知道。

谢谢,下午好