你好,
我们正在使用SDK5的“旧”物联网传感器,并将其移植到Murata ZY(DA14580)。
SDK使用BMI160在操作期间(传感器读出的FIFO水印)和睡眠期间(运动唤醒)进行中断,例如:。
#(void){wrbl-env.wrbl.wrbl.wrbl.wrbl(blblbl)文文文文文文文文中(blbl)文文中(blblbl)文文中(1)电路电路断路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路电路wkupct_引脚_选择(INT1_端口,INT1_引脚),1,0);//低电平有效#endif}
我们希望使用另一个GPIO作为中断来执行特定的命令,它应该在操作期间工作,但也在睡眠模式期间工作(因此我们不能使用GPIO_EnabeIRQ)。
我的理解是:
1) 可以将多个GPIO配置为唤醒源。
2) 对于wkupct_enable_irq,不可能为不同的中断源注册不同的回调函数。
3) 如果在整个代码中多次调用wkupct_register_callback(),则将使用上次注册的回调。
对的?
问题:
4) 是否有一个寄存器,我可以在醒来后读取,告诉我哪个pin是中断源?从https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl...我明白这是不可能的?
5) 但是使用NVIC_GetPendingIRQ呢?不同的中断是否分配了不同的IRQn?
-->我发现他们都使用相同的IRQn:
//数据表.h WKUP_QUADEC_IRQn=9,/*组合了唤醒捕获计时器中断、GPIO中断和四位解码器中断*/
约翰内斯酒店
设备:
嗨,格梅·约翰内斯,
关于第一个问题,是的,您可以将多个GPIO配置为唤醒源。请检查下面的代码段:
关于你的第二个问题,你能澄清一下吗?您是正确的,在wkupct_register_callback()中,您只能注册一个回调函数。所以,如果我能够正确理解的话,您想要完成的是从不同的唤醒中断触发不同的回调函数?例如,如果从GPIO_1获得中断,则应执行回调_1;如果从GPIO_2获得中断,则应执行回调_2。
谢谢,下午好
是的,没错。
从https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl...我知道我可以在中断触发后检查GPIO状态。
这在任何情况下都足够快吗?如果我在回调函数中做的第一件事是检查它的状态,GPIO状态是否总是保持足够长的时间?
嗨,格梅·约翰内斯,
在您之前提到的论坛线程中,MT_Dialog正确地提到没有寄存器会指示中断发生的端口/引脚,因此您必须在设备被唤醒后立即读取引脚的状态,并根据引脚状态决定触发哪个回调函数他被激怒了。
谢谢,下午好
谢谢你,我将尝试用这种方式解决我的问题。
嗨,格梅·约翰内斯,
谢谢你接受我的回答。如果您有任何其他问题,请告诉我。
谢谢,下午好