嗨,对话框中,
我正在使用从引脚P00中断按钮按和释放。还有加速器的P15引脚。
1.我还想用按钮按下和按钮释放来检测系统的按钮按下时间。
2.我发现我的代码不稳定,你能给我一些解决方案的建议吗?
空白press_button(空白)
{
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();
//P00按键中断
如果(release_flag = = 0)
{
if((!(GetWord16(P0_DATA_REG)) & (1 << 0))))
{
button_flag = 3;
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x000001, 0x000000, 1, 0x14);
start_timer1 ();//开始计算按下时间
release_flag = 1;
}
}
//P00按钮释放中断
如果(release_flag = = 1)
{
if(GetWord16(P0_DATA_REG) & (1 << 0))
{
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x000001, 0x000001, 1, 0x14);
Stop_timer1 ();// stop计算按下时间,尝试得到按下按钮的时间
release_flag = = 0;
}
}
/ / P15加速器中断
if((GetWord16(P1_DATA_REG) & (1 << 5)))
{
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x002000, 0x000000, 1, 0x00);/ / P15
arch_ble_force_wakeup ();
acc3 ();//处理加速器数据
}
}
空白user_app_init(空白)
{
mnf_data_init ();
default_app_on_init ();
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x000001, 0x000001, 1, 0x14);//按钮P00等待按钮按下
//P15 INT1水印wkupct_enable_irq(0x002000, 0x000000, 1,0x00)
}

我发现函数“arch_ble_force_wakeup();”将破坏按钮释放中断和按钮按下中断。有没有更好的方法来解决这个问题?因为我需要在广告函数获得系统时间之前调用“arch_ble_force_wakeup();”。
嗨liuluan002,
你说代码不稳定是什么意思,会发生什么?你是否错过了被打断?唤醒处理程序中断发生,但当你读取P1_DATA_REG(在从传感器中断的情况下)时,你没有看到引脚被设置为'1' ?此外,在user_app_init()中,您调用了两次wkupct_enable_irq(),第二次调用将删除第一次调用的设置,所以从那一点来看,我认为您将无法从按钮中唤醒,因为只有P15被设置。我不认为arch_ble_force_wakeup()会影响唤醒控制器的设置,当你离开user_app_init()时,只有P15是可用的中断引脚。
由于MT_dialog
嗨,对话框中,
如何设置P15与1ms出线时间,也P00与20ms出线时间?
我对下面的代码做了修改,看起来两个中断都可以工作,但是我想把P00的出线时间设为20ms,但是P15的出线时间是1ms。你知道怎么做吗?
/ / niklas 20161207
空白user_app_init(空白)
{
mnf_data_init ();
default_app_on_init ();
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x002001, 0x000001, 1, 0x04);
}
嗨liuluan002,
只有软件的揭穿,你不能为唤醒控制器设置不同的揭穿时间。
由于MT_dialog