关于同一项目中GPIO的多次中断

5个职位/ 0个新
最后发表
liuluan002
离线
最后看到:七个月两个星期前
加入:2015-11-27 14:24
关于同一项目中GPIO的多次中断

嗨,对话框中,

我正在使用从引脚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)

设备:
liuluan002
离线
最后看到:七个月两个星期前
加入:2015-11-27 14:24
我已经找到函数了

我发现函数“arch_ble_force_wakeup();”将破坏按钮释放中断和按钮按下中断。有没有更好的方法来解决这个问题?因为我需要在广告函数获得系统时间之前调用“arch_ble_force_wakeup();”。

MT_dialog
离线
最后看到:4个月2天前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

你说代码不稳定是什么意思,会发生什么?你是否错过了被打断?唤醒处理程序中断发生,但当你读取P1_DATA_REG(在从传感器中断的情况下)时,你没有看到引脚被设置为'1' ?此外,在user_app_init()中,您调用了两次wkupct_enable_irq(),第二次调用将删除第一次调用的设置,所以从那一点来看,我认为您将无法从按钮中唤醒,因为只有P15被设置。我不认为arch_ble_force_wakeup()会影响唤醒控制器的设置,当你离开user_app_init()时,只有P15是可用的中断引脚。

由于MT_dialog

liuluan002
离线
最后看到:七个月两个星期前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

如何设置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);

MT_dialog
离线
最后看到:4个月2天前
工作人员
加入:2015-06-08 34
嗨liuluan002,

嗨liuluan002,

只有软件的揭穿,你不能为唤醒控制器设置不同的揭穿时间。

由于MT_dialog