⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
6个员额/ 0个新员额
最后发表
thomasburton
离线
最后看到:3年9个月前
加入:2016-01-13 14:46
DA14580中断

嗨,对话框中,

我对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

附件:
设备:
MHv_Dialog
离线
最后看到:1个月2个星期前
工作人员
加入:15 2013-12-06
嗨,汤姆,

嗨,汤姆,

您在SDK中没有使用GPIO_EnableIRQ函数有什么原因吗?

下面的代码片段正在工作。中断在app_on_set_dev_config_complete回调(user_cfg_complete)中配置,以在高层GPIO上触发。当IRQ触发时,LED点亮并启动1秒定时器。超时功能关闭LED并使能再次中断。

空白my_timer_timeout ()
GPIO_ResetIRQ (GPIO0_IRQn);
NVIC_ClearPendingIRQ (GPIO0_IRQn);
GPIO_SetInactive (GPIO_ALERT_LED_PORT GPIO_ALERT_LED_PIN);
NVIC_EnableIRQ (GPIO0_IRQn);
空白my_btn_handler ()
NVIC_DisableIRQ (GPIO0_IRQn);
arch_set_pxact_gpio ();
GPIO_SetActive (GPIO_ALERT_LED_PORT GPIO_ALERT_LED_PIN);
my_timer_timeout app_easy_timer (100);
空白user_cfg_complete(空白)
default_app_on_set_dev_config_complete ();
GPIO_RegisterCallback (GPIO0_IRQn my_btn_handler);
GPIO_EnableIRQ(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, GPIO0_IRQn, false, false, 2);
GPIO_SetInactive (GPIO_ALERT_LED_PORT GPIO_ALERT_LED_PIN);
/ MHv
thomasburton
离线
最后看到:3年9个月前
加入:2016-01-13 14:46
你好,

你好,

非常感谢您的快速回复。我已经尝试使用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分配,从睡眠中醒来等等?

最好的祝愿,

汤姆

MHv_Dialog
离线
最后看到:1个月2个星期前
工作人员
加入:15 2013-12-06
嗨,汤姆,

嗨,汤姆,

如果您使用的是睡眠模式,这种类型的中断不会唤醒DA14580。醒来需要使用唤醒定时器块。有关唤醒定时器的详细信息,请参阅UM-B-51。如果时间真的至关重要,我会提醒您唤醒定时器要求GPIO保持在触发水平,以便超过2个睡眠时钟周期,以便唤醒设备(带有高达约61us的外部水晶。从睡眠中唤醒也需要大约1毫秒的芯片侧 - 例如改变时钟源,加电RAM电源轨等)

我在我的PRO开发工具包上运行上述代码,中断确实在逻辑上的高水平触发。我使用P1_1作为上拉输入,因此在PRO套件上释放SW3将触发中断。

/ MHv

thomasburton
离线
最后看到:3年9个月前
加入:2016-01-13 14:46
嗨,对话框中,

嗨,对话框中,

非常感谢你的帮助。我设法使用了叫醒计时器,它现在正在按计划工作。

最好的祝愿,

汤姆

MHv_Dialog
离线
最后看到:1个月2个星期前
工作人员
加入:15 2013-12-06
这真是个好消息!/ MHv

这真是个好消息!

/ MHv