键/按钮中断停止函数几秒钟后

5个帖子/ 0新
最后一篇
肯崇角
离线
最后一次露面:2年10个月前
加入:2016-10-15 05:40
键/按钮中断停止函数几秒钟后

尊敬的先生,
我有da14681 dev kit pro,我试着在它上运行演示。它很好,但是在通过Demo Ble_Multi_Link / PXP_Reporter上的低于代码时触发时,在K1引脚(端口1,引脚6)上注册了D2(橙色LED,端口1,引脚5),它就好了。它正常工作大约10〜20秒,但是之后D12(蓝色LED)开始闪烁并最终停止闪烁,D2关闭,K1的中断不再工作。请建议我应该做些什么来保持中断工作。谢谢。

静态void 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(null);
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计数器= 0;
静态void wkup_intr_cb(void)
{
/ *
*中断处理程序应始终重置中断状态,否则将再次调用。
* /
hw_wkup_reset_interrupt();
printf(“唤醒中断触发%d \ r \ n”,计数器++);
hw_gpio_set_active(hw_gpio_port_1,hw_gpio_pin_5);
}

关键词:
设备:
mt_dialog.
离线
最后一次露面:3个月2周前
职员
加入:2015-06-08 11:34
嗨肯冲,

嗨肯冲,

您正在配置DEMY_INIT()函数中的设备的引脚,这意味着当设备跌至睡眠并唤醒时,您的引脚将是未配置的,因此您不会将它们设置为活动状态。将此语句放在Periph_init()函数hw_gpio_configure_pin(hw_gpio_port_1,hw_gpio_pin_5,hw_gpio_mode_output,
hw_gpio_func_gpio,false);并从system_init()函数中删除它。

据我所说,从你的代码中告诉来自你的代码时,中断仍然是活动的,并且在按下按钮时发生(只是在Multilink演示中粘贴代码),您应该能够使用终端上输出的字符串。当按下按钮时,LED不活跃的原因(如果这是您的意思)是因为设备跌到睡眠状态(当蓝光开始闪烁时),所以您不必有机会看到LED活动的速度超过下一次睡眠发生(假设您实现了上面的),您必须使用变量并保持LED的状态,并将PeripH_Init()中的PIN重新配置为此变量。

谢谢mt_dialog.

肯崇角
离线
最后一次露面:2年10个月前
加入:2016-10-15 05:40
亲爱的mt_dialog,

亲爱的mt_dialog,
谢谢,顺便说一句,我发现我发现我只能在BLE广告完成后触发中断。否则它会在触发大约20次后挂起。

mt_dialog.
离线
最后一次露面:3个月2周前
职员
加入:2015-06-08 11:34
嗨肯冲,

嗨肯冲,

那是因为你在ISR上下文中通过UART打印,它需要时间,因此BLE模块无法保留所设置的广告间隔,因为它丢失了唤醒中断(它唤醒延迟),所以它粘滞在BLE_LP_ISR()中断(有一个条件指示SW以便在发生通知用户的情况下断言警告)。如果您想打印您不应该从ISR上下文执行此操作,但您可以在中断发生或从主任务中打印时通知不同的任务。

谢谢mt_dialog.

肯崇角
离线
最后一次露面:2年10个月前
加入:2016-10-15 05:40
谢谢。

谢谢。