按键/按钮中断停止功能几秒钟后

5个职位/ 0个新
最后发表
肯庄
离线
最后看到:2年10个月前
加入:2016-10-15 05:40
按键/按钮中断停止功能几秒钟后

亲爱的先生,
我有DA14681 DEV KIT PRO,我试着在它上运行演示。它的工作很好,然而,在我注册了K1引脚(端口1,引脚6)上的中断,以打开D2(橙色LED,端口1,引脚5)时,触发以下代码在演示ble_multi_link / pxp_reporter。正常工作约10~20秒,之后D12(蓝色LED)开始闪烁,最后停止闪烁,D2关闭,K1中断不再工作。请建议我应该做什么来保持中断工作。谢谢。

system_init(void *pvParameters)
{…
hw_gpio_reserve_and_configure_pin (HW_GPIO_PORT_1 HW_GPIO_PIN_5 HW_GPIO_MODE_OUTPUT,
HW_GPIO_FUNC_GPIO HW_WKUP_PIN_STATE_LOW);
hw_gpio_reserve_and_configure_pin (HW_GPIO_PORT_1 HW_GPIO_PIN_6 HW_GPIO_MODE_INPUT,
HW_GPIO_FUNC_GPIO HW_WKUP_PIN_STATE_LOW);

/ /添加中断
hw_wkup_init(空);
hw_wkup_set_counter_threshold (1);
hw_wkup_register_interrupt (wkup_intr_cb, 1);
hw_wkup_configure_pin(HW_GPIO_PORT_1, HW_GPIO_PIN_6, true, HW_WKUP_PIN_STATE_LOW);
hw_wkup_set_debounce_time (50);
...

静态int counter = 0;
静态孔隙wkup_intr_cb(空白)

/*
中断处理程序应该总是重置中断状态,否则它将被再次调用。
* /
hw_wkup_reset_interrupt ();
printf("唤醒中断触发%d\r\n",计数器++);
hw_gpio_set_active (HW_GPIO_PORT_1 HW_GPIO_PIN_5);

关键词:
设备:
MT_dialog
离线
最后看到:4个月,1个星期前
工作人员
加入:2015-06-08 34
嗨,肯庄,

嗨,肯庄,

你在system_init()函数中配置你的设备的引脚,这意味着当设备进入睡眠和唤醒时,你的引脚将被取消配置,所以你不能将它们设置为活动。将您的两个引脚的这条语句放在peri_init()函数hw_gpio_configure_pin(HW_GPIO_PORT_1, HW_GPIO_PIN_5, HW_GPIO_MODE_OUTPUT,
HW_GPIO_FUNC_GPIO、假);并将其从System_init()函数中删除。

据我从您的代码调用告诉中断仍然是活动的,并发生时,您按下按钮(只是粘贴您的代码在multilink演示),您应该能够看到与字符串,您在终端上输出。领导不积极的原因,当你按下按钮(如果这就是你的意思)是由于设备落在睡眠(蓝灯开始闪烁时),所以你没有机会看到领导活动超过下一个睡眠病症(假设您已经实现了上图),你必须使用一个变量,保持LED的状态,并根据这个变量重新配置外围init()中的引脚。

由于MT_dialog

肯庄
离线
最后看到:2年10个月前
加入:2016-10-15 05:40
亲爱的MT_dialog,

亲爱的MT_dialog,
谢谢,它是工作的,顺便说一下,我发现我只能触发中断后的ble广告结束。否则它将挂起后触发约20次。

MT_dialog
离线
最后看到:4个月,1个星期前
工作人员
加入:2015-06-08 34
嗨,肯庄,

嗨,肯庄,

这是因为你在ISR上下文中通过UART打印,它需要时间,所以BLE模块不能保持设置的广告间隔,因为它丢失了唤醒中断(它以延迟唤醒),因此,它停留在ble_lp_isr()中断中(那里有一个条件,指示sw断言一个警告,以防发生这种情况,以便通知用户)。如果你想打印,你不应该从ISR上下文中做,但你可以有一个不同的任务,当中断发生时通知或者一个标志,从主任务打印。

由于MT_dialog

肯庄
离线
最后看到:2年10个月前
加入:2016-10-15 05:40
指出,谢谢。

指出,谢谢。