外部GPIO中断上升沿

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
斯坦利_yeh.
离线
最后一次露面:2年3个月前
加入:2016-12-23 06:52
外部GPIO中断上升沿

你好,
我使用DA14585使用SDK 6.0.4,我也启用了EXT-Sleep模式。
G型传感器通过I2C连接到DA14585。有一个中断引脚。
传感器的中断如最初高,一旦数据准备就绪,中断引脚将低电平,然后高。
我想检测中断引脚的上升沿,我将其配置为以下内容:

在void set_pad_functions(void)中:
gpio_configurepin(i2c_int1_port,i2c_int1_pin,input_pullup,pid_gpio,true);// G传感器INT1
gpio_registercallback(gpio0_irqn,lis3dh_interrupt1_handler);
gpio_enableirq(i2c_int1_port,i2c_int1_pin,gpio0_irqn,false,true,3);

在静态内联void arch_goto_sleep(sleep_mode_t current_sleep_mode)中:
ext_wakeup_enable(i2c_int1_port,i2c_int1_pin,0);// 0 =>活动高

但是,我发现我的回调函数将被称为每个唤醒时间。
原因可能是GPIO_ENABLEIRQ(在SET_PAD_FUNCHTIONS)中再次设置,当时中断引脚很高。
据我所知,DA14585的GPIO中断是触发的水平,对吗?
你们有什么想法解决这个问题吗?
谢谢。

关键词:
设备:
mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
嗨斯坦利_yeh,

嗨斯坦利_yeh,

好吧,如果在设备唤醒时触发中断是高电平的,并且看到GPIO设置为高电平,则将触发中断。

关于ext_wakeup_enable(),如果您的设计完全托管(意味着应用程序在585上运行 - 我认为它是)那么它不需要。我假设你想唤醒设备,如果中断是从外部传感器发出的,这意味着,如果该设备处于睡眠模式下的正常GPIO IRQ不会唤醒设备(除非如果你不使用的睡眠模式,你总是醒着)。因此,为了通过中断从睡眠唤醒设备,您必须使用唤醒定时器,您可以在BLE_APP_SLEEPMODE项目中查找如何在BLE_APP_SLEEPMODE项目中使用此H / W,您也能找到有关唤醒的信息UM-B-079 DA14585 / 6软件平台参考文献中的计时器.PDF。

关于你的GPIO IRQ的问题,我假设你正在使用睡眠模式和你保持通过585的内部上拉电阻传感器高的中断线路,所以在每一个醒来,你基本上是复位中断被触发,因为它的已触发(由于您已将PIN配置为上拉),ISR执行。由于您想检测到高脉冲(我想您的传感器生成高脉冲以便通知您的数据),您可以将PIN配置为INPUT_PULLDOWN,以便检测高脉冲,如果要配置输入,则可检测高脉冲随着拉起,那么总是通过引脚的上拉来生成中断。

谢谢mt_dialog.

斯坦利_yeh.
离线
最后一次露面:2年3个月前
加入:2016-12-23 06:52
嗨mt_dialog,

嗨mt_dialog,
感谢您的及时答复。
对不起,我忘了提到我修改了ext_wakeup_enable()函数,外部中断在睡眠模式下运行良好。

我有点困惑,中断线被传感器设置为高,而不是DA14585。
一旦数据准备就绪,中断线始终很高,中断线将设置为低电平,然后高。
什么DA14584可以做的是等待上升沿然后获取数据。
我试过了。如果我将DA14585的PIN修改为INPUT_PULLDOWN和INPUT,它似乎并没有起作用。
你能给我一些建议吗?
非常感谢。

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
嗨斯坦利_yeh,

嗨斯坦利_yeh,

如果默认情况下线路很高,并且当设备唤醒并重新启用中断时,如果该行唤醒并重新启用中断,则将中断GPIO_IRQN配置为触发中断GPIO_IRQN。如果该行高,则将执行ISR的ISR。如果您使用的传感器在具有数据后立即丢弃线路,那么您应该配置该行低至不高的中断,因此GPIO_ENABLEQ(PORT_X,PIN_X,GPIO0_IRQN,TRUE,TRUE,3)。如果您不想开始读取线路较低但是当线路再次高时,那么您可以尝试设置当行低时触发的中断,并且一旦该中断点击,重置中断并将其设置为当线路高时,再次触发该行再次高分高,中断将再次触发,然后您可以从传感器开始读取数据,一旦您完成交互,您可以再次设置IRQ触发器返回到低,为了不在下一次醒来。

谢谢mt_dialog.

Kevleo94
离线
最后一次露面:3年3周前
加入:2017-09-05 07:18
嗨斯坦利。我要问你

嗨斯坦利。我想问你,因为我有点混淆中断。您用什么PIN与I2C沟通以及为什么选择GPIO0_IRQN?

斯坦利_yeh.
离线
最后一次露面:2年3个月前
加入:2016-12-23 06:52
以下是我的配置:

以下是我的配置:
#define i2c_gpio_scl_port gpio_port_0.
#define i2c_scl_pin gpio_pin_7.
#define i2c_gpio_sda_port gpio_port_2.
#define i2c_sda_pin gpio_pin_1.
但是,我认为您可以为I2C配置任何PIN。没关系。
您还可以使用GPIO0_IRQN,GPIO1_IRQN,GPIO2_IRQN,GPIO3_IRQN或GPIO4_IRQN。只需选择其中一个,那没问题。
在这个问题中,我只想确保中断是级别触发。
欢呼:)