上升沿上的外部GPIO中断

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

你好,
我使用DA14585使用SDK 6.0.4,我也启用了EXT-Sleep模式。
g传感器通过i2c连接到DA14585。有一个中断引脚。
传感器的中断设计为初始高,一旦数据准备好,中断引脚将先低后高。
我想检测中断引脚的上升沿,我将其配置为以下内容:

在空白set_pad_functions(无效):
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中断是level触发的,对吗?
你们有什么办法解决这个问题吗?
谢谢。

关键词:
设备:
MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
嗨stanley_yeh,

嗨stanley_yeh,

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

关于ext_wakeup_enable(),如果您的设计是完全托管的(这意味着应用程序也运行在585上——我认为它是),那么它就不需要了。我假设你想唤醒设备如果从外部传感器发出一个中断,这意味着如果设备处于睡眠模式正常GPIO IRQ不会醒来设备(除非如果你不使用睡眠模式和你总是醒着)。为了通过中断设备从睡梦中醒来你将不得不使用计时器醒来,你可以看一下如何使用这个h / w ble_app_sleepmode项目中,你也能找到信息关于定时器的嗯醒来- b - 079 DA14585/6 Reference.pdf软件平台。

关于你问题的终端请求,我假设您使用的是睡眠模式和你保持高的中断行传感器通过585年的内部减速停车,所以在每一个醒来你本质上复位中断被触发,以来已经引发了(因为您已经配置了销拉起)ISR执行。既然你想检测高脉冲(我假设你的传感器产生一个高脉冲数据为了通知你)你可以配置销INPUT_PULLDOWN,为了检测高脉冲,如果您正在配置输入打开然后将生成中断总是停下的销。

由于MT_dialog

stanley_yeh
离线
最后看到:2年3个月前
加入:2016-12-23 06:52
嗨mt_dialog,

嗨mt_dialog,
感谢您的及时回复。
抱歉,我忘了提到我修改了ext_wakeup_enable()函数,外部中断在睡眠模式下工作得很好。

我有点困惑,中断线被传感器设置为高,而不是DA14585。
中断线总是高的,一旦数据准备好,中断线将被设置为低,然后是高。
DA14584所能做的就是等待上升边,然后获取数据。
我已经试过了。如果我将DA14585的引脚修改为INPUT_PULLDOWN和INPUT,它似乎不能工作。
你能给我一些建议吗?
非常感谢。

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
嗨stanley_yeh,

嗨stanley_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
嗨,斯坦利。我想问你

嗨,斯坦利。我想问你,因为我对打断有点困惑。你用什么引脚与i2c通信,为什么你选择GPIO0_IRQn?

stanley_yeh
离线
最后看到:2年3个月前
加入:2016-12-23 06:52
以下是我的配置:

以下是我的配置:
#定义I2C_GPIO_SCL_PORT GPIO_PORT_0
#定义I2C_SCL_PIN GPIO_PIN_7
#定义I2C_GPIO_SDA_PORT GPIO_PORT_2
#定义I2C_SDA_PIN GPIO_PIN_1
然而,我认为你可以为i2c配置任何pin。没关系。
也可以使用GPIO0_IRQn, GPIO1_IRQn, GPIO2_IRQn, GPIO3_IRQn或GPIO4_IRQn。选一个就行了,没问题。
在这个问题中,我只想确保中断是水平触发器。
欢呼:)