嗨,Dialog,
我有一个问题,关于如何在DA1458x\u SDK示例中的ble\u app\u all\u one项目中的main\u func()while循环中允许外设中断。
作为示例代码,在正常情况下if(BLE\u APP\u PRESENT),always GLOBAL\u INT\u STOP()被调用。
我猜如果IRQ在无限循环中总是被禁用,那么任何正常的外设中断都不会被检测到,对吗?
因此,如果您使用一些外设中断,我认为您应该删除GLOBAL\u INT\u STOP()。
我觉得奇怪的是,在if(BLE\u APP\u PRESENT)子句中调用了WFI(),所以为什么必须禁用IRQ。
在主循环中允许外设中断是正确的还是有其他方法?
我期待着有人的好答案。
最好的,
设备:
嗨,提奥奇尼斯,
当系统想要禁用它可以处理的所有中断时,使用GLOBAL\u INT\u STOP()宏。此宏在设备进入睡眠模式之前调用,而不是在设备处于睡眠模式时调用。这意味着在此宏之后,系统将继续接收中断,但只有中断的处理程序不会被触发。在中断被禁用时调用WFI(),以执行决定进入睡眠模式所需的检查。如果在睡眠前有任何挂起的中断,将触发全局\u INT \u START(),系统可以再次开始处理这些中断。因此,您的结论是,如果IRQ在无限循环中始终被禁用,则永远不会检测到任何正常的外围中断,这是不正确的,强烈建议不要删除GLOBAL\u INT\u STOP()。另外,请注意,如果设备处于睡眠模式,则只能从唤醒控制器唤醒设备,也可以通过任何其他中断唤醒设备,因为所有外围模块都已关闭。
谢谢,下午好