嗨,对话框中,
我对DA14580上使用SDK 5.0.3和ble外设示例作为基础的中断有一个问题。我试图让DA14580从外部设备的引脚上升边缘中断。
然而,无论我尝试了什么,中断只发生在下降边缘,一旦设备释放引脚。这是一个时间关键的应用程序,所以我需要中断尽快启动。
您有任何建议将非常感激,代码和逻辑分析仪图像附呈。
最好的祝愿,
汤姆
SetWord16 (P29_MODE_REG 0 x20);//设置为下拉
SetWord16 (GPIO_IRQ2_IN_SEL_REG, 24);// P2.9被选中,第二个参数是pin - check数据表
SetWord16 (GPIO_RESET_IRQ_REG 4);/ /重置IRQ_2reg
SetBits16 (GPIO_INT_LEVEL_CTRL_REG EDGE_LEVELn2 0);// 0:不等待GPIO IRQ2中断复位后释放键
SetBits16 (GPIO_INT_LEVEL_CTRL_REG INPUT_LEVEL2 0);//选择上升边
SetBits16 (GPIO_DEBOUNCE_REG DEB_ENABLE2 0);/ /防反跳启用
SetBits16 (GPIO_DEBOUNCE_REG DEB_VALUE 0);//恢复时间n * 0.63 ms
NVIC_SetPriority (GPIO2_IRQn 0);
NVIC_EnableIRQ (GPIO2_IRQn);
SetWord16 (GPIO_RESET_IRQ_REG 4);/ /重置IRQ_2reg
关键词:
设备:
嗨,汤姆,
您在SDK中没有使用GPIO_EnableIRQ函数有什么原因吗?
下面的代码片段正在工作。中断在app_on_set_dev_config_complete回调(user_cfg_complete)中配置,以在高层GPIO上触发。当IRQ触发时,LED点亮并启动1秒定时器。超时功能关闭LED并使能再次中断。
你好,
非常感谢您的快速回复。我已经尝试使用GPIO_EnableIRQ(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, GPIO0_IRQn, false, false, 0);但这也没有任何效果——触发点仍在下降边缘。然而,我没有在user_cfg_complete(void)或使用default_app_on_set_dev_config_complete()调用它;但是在peripher_init (void)中设置中断。
我已经添加了您建议的代码,并将app_on_set_dev_config_complete设置为user_cfg_complete,但除非我也将它添加到外围init(void),否则它不会触发,即使在编写时使用它,它仍然会在下降沿触发。还有什么我可能错过的吗?Pin分配,从睡眠中醒来等等?
最好的祝愿,
汤姆
嗨,汤姆,
如果您使用的是睡眠模式,这种类型的中断将不会唤醒DA14580。唤醒需要使用唤醒计时器块。有关唤醒计时器的详细信息,请参阅UM-B-51。如果时机真的很关键,我想提醒您,唤醒计时器要求GPIO在触发级别保持2个以上的睡眠时钟周期,以便唤醒设备(使用一个加起来约为61us的外部晶体,从睡眠中醒来也需要芯片端约1ms的内务管理,例如更改时钟源,为RAM电源轨等通电)
我在我的PRO开发工具包上运行上述代码,中断确实在逻辑上的高水平触发。我使用P1_1作为上拉输入,因此在PRO套件上释放SW3将触发中断。
/ MHv
嗨,对话框中,
非常感谢你的帮助。我设法使用了叫醒计时器,它现在正在按计划工作。
最好的祝愿,
汤姆
这真是个好消息!
/ MHv