用gpio interrupt从睡眠中唤醒

了解更多常见问题教程

4个职位/ 0个新职位
最后发表
jagath52
离线
最后看到:3天1小时前
加入:2020-07-06晚
用gpio interrupt从睡眠中唤醒

你好

我正在使用da14695控制器,带有扩展和休眠睡眠模式。
我想用2 gpios唤醒设备,用于延长和休眠

hw_gpio_set_pin_function (ACCEL_INT_PORT ACCEL_INT_PIN、HW_GPIO_MODE_INPUT_PULLDOWN HW_GPIO_FUNC_GPIO);
空白wkup_init(空白)

hw_wkup_init(空);

/*
*设置跳弹时间,单位为ms,最大允许值为63 ms。
*值设置为0禁用退弹功能。
*/
hw_wkup_set_debounce_time (10);

/*
*启用由唤醒控制器的KEY块产生的中断
*电路),并注册一个回调函数,以按下一个KEY事件。
*/
hw_wkup_register_key_interrupt (acceleroIntrrupt_cb, 1);

/*
*设置触发WKUP控制器的极性(上升/下降边缘)。

控制器的KEY和GPIO块都有极性

*/

hw_wkup_configure_pin(ACCEL_INT_PORT, ACCEL_INT_PIN, 1, HW_WKUP_PIN_STATE_HIGH);// 0->上升边:1下降边1 ->板;0 - >维生素

/*
*添加一个PDC LUT条目,以便在PORT0上发生事件后唤醒M33核心
*这是重要的,因为M33是关闭时,设备进入睡眠。
*/

hw_wkup_enable_irq ();

这个关键唤醒是按照预期工作,设备正在从延长和休眠中醒来。

hw_gpio_set_pin_function (ACCEL_INT_PORT ACCEL_INT_PIN、HW_GPIO_MODE_INPUT_PULLDOWN HW_GPIO_FUNC_GPIO);
空白wkup_init(空白)

hw_wkup_init(空);
/*
*添加一个PDC LUT条目,以便在PORT0上发生事件后唤醒M33核心
*这是重要的,因为M33是关闭时,设备进入睡眠。
*/
hw_wkup_gpio_configure_pin (ACCEL_INT_PORT ACCEL_INT_PIN 1, HW_WKUP_PIN_STATE_HIGH);
pdc_wkup_gpio_id = hw_pdc_add_entry(HW_PDC_LUT_ENTRY_VAL(ACCEL_INT_PORT, ACCEL_INT_PIN, hw_pdc_master_cm33,0));
OS_ASSERT (pdc_wkup_gpio_id ! = HW_PDC_INVALID_LUT_INDEX);

/*
*通过SW触发PDC LUT入口。这个动作保证PD_SYS . sys
*电源域保持打开,以防应用程序无效所有其他
*激活PDC入口,保持M33活着。
*/
hw_pdc_set_pending (pdc_wkup_gpio_id);

/*
*建议确认新创建(并激活)的PDC入口
*虽然不是严格需要,因为M33将自动确认
*所有M33挂起的PDC条目在它下次尝试进入sleep之前。
*/
hw_pdc_acknowledge (pdc_wkup_gpio_id);
hw_wkup_register_gpio_p1_interrupt (acceleroIntrrupt_cb 2);

hw_wkup_enable_irq ();

空白acceleroIntrrupt_cb(空白)

状态= hw_wkup_get_status (HW_GPIO_PORT_1);
hw_wkup_clear_status (HW_GPIO_PORT_1、状态);

wakeUpExtendedSleep = true;
hw_wkup_reset_interrupt ();
pm_sleep_mode_set (pm_mode_active);

hw_gpio_set_pin_function(REDLEDPORT, REDLEDPIN, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO);
hw_gpio_pad_latch_enable (REDLEDPORT REDLEDPIN);
hw_gpio_pad_latch_disable (REDLEDPORT REDLEDPIN);

hw_gpio_set_inactive (REDLEDPORT REDLEDPIN);
delay_ms (1000);
delay_ms (1000);
hw_gpio_set_active (REDLEDPORT REDLEDPIN);

但是gpio唤醒不会从休眠和扩展睡眠模式中唤醒设备。
进一步,我在gpio中断回调中放置led切换,回调正在执行,led打开,但设备正在从睡眠中醒来
被打断后,设备挂起
我想使用两个gpio从睡眠唤醒,如何配置和使用两个gpio唤醒使用hw_wkup_gpio_configure_pin

谢谢你!

Jagath

设备:
PM_Dialog
离线
最后看到:22分钟28秒前
工作人员
加入:2018-02-08 11:03
嗨jagath52,

嗨jagath52,

谢谢你的问题。在最初的文章中,您放置了2个wkup_init()函数。所以在我的理解中,第一个正在按预期运行,另一个正在运行。我的假设正确吗?

为了唤醒,使用了ACCEL_INT_PORT / _PIN,所以您需要配置唤醒控制器,使用第二个GPIO来唤醒。是正确的吗?

谢谢,PM_Dialog

jagath52
离线
最后看到:3天1小时前
加入:2020-07-06晚
你好PM_Dialog

你好PM_Dialog

是的,我想用gpio唤醒控制器用第二个gpio唤醒设备。按键唤醒控制器正常工作。

谢谢你!
Jagath

PM_Dialog
离线
最后看到:22分钟28秒前
工作人员
加入:2018-02-08 11:03
嗨jagath52m

嗨jagath52m

您能检查一下吗DA1469x唤醒控制器来自DA1469x门户的示例?要启用GPIO P0子块,WKUP_GPIO_P0_BLOCK_ENABLE宏需要设置为1。

请试一试,让我知道。

谢谢,PM_Dialog