你好,
我将DA14585与SDK 6.0.4一起使用,我还启用了ext睡眠模式。
G型传感器通过I2C连接到DA14585。有一个中断引脚。
传感器的中断如最初高,一旦数据准备就绪,中断引脚将低电平,然后高。
我想检测中断引脚的上升沿,我将其配置如下:
在void set_pad_functions(void)中:
gpio_configurepin(i2c_int1_port,i2c_int1_pin,input_pullup,pid_gpio,true);// G传感器INT1
GPIO_寄存器回调(GPIO0_IRQn、LIS3DH_中断1_处理程序);
GPIO_启用IRQ(I2C_INT1_端口、I2C_INT1_引脚、GPIO0_IRQn、false、true、3);
在静态内联void arch_goto_sleep(sleep_mode_t current_sleep_mode)中:
ext_wakeup_enable(I2C_INT1_端口,I2C_INT1_引脚,0)//0=>有效高
但是,我发现我的回调函数将被称为每个唤醒时间。
原因可能是GPIO_EnableIRQ(在set_pad_功能中)再次设置,并且中断引脚当时处于高位。
据我所知,DA14585的GPIO中断是触发的水平,对吗?
你们有什么想法解决这个问题吗?
谢谢
设备:
嗨斯坦利_yeh,
如果在设备唤醒时中断被高电平触发,并且看到GPIO被设置为高电平,那么中断将被触发。
关于ext_wakeup_enable(),如果您的设计完全托管(意味着应用程序在585上运行 - 我认为它是)那么它不需要。如果从外部传感器发出中断,我假设您想唤醒设备,这意味着如果设备处于睡眠模式,则常规GPIO IRQ不会唤醒设备(除非您不使用睡眠模式,你总是醒着)。因此,为了通过中断从睡眠唤醒设备,您必须使用唤醒定时器,您可以在BLE_APP_SLEEPMODE项目中查找如何在BLE_APP_SLEEPMODE项目中使用此H / W,您也能找到有关唤醒的信息UM-B-079 DA14585 / 6软件平台参考文献中的计时器.PDF。
关于您的GPIO IRQS问题,我假设您正在使用睡眠模式,并且您通过585的内部上拉保持传感器的中断线,因此在每次唤醒时,您都基本上重置了中断以触发和自IT已触发(由于您已将PIN配置为上拉),ISR执行。由于您想检测到高脉冲(我想您的传感器生成高脉冲以便通知您的数据),您可以将PIN配置为INPUT_PULLDOWN,以便检测高脉冲,如果要配置输入,则可检测高脉冲随着拉起,那么总是通过引脚的上拉来生成中断。
谢谢mt_dialog.
嗨mt_dialog,
感谢您的及时答复。
对不起,我忘了提到我修改了ext_wakeup_enable()函数,外部中断在睡眠模式下运行良好。
我有点困惑,中断线是由传感器设置为高电平的,而不是DA14585。
一旦数据准备就绪,中断线始终很高,中断线将设置为低电平,然后高。
什么DA14584可以做的是等待上升沿然后获取数据。
我试过了。如果我将DA14585的PIN修改为INPUT_PULLDOWN和INPUT,它似乎并没有起作用。
你能给我一些建议吗?
非常感谢。
嗨斯坦利_yeh,
如果默认情况下线路很高,并且当设备唤醒并重新启用中断时,如果该行唤醒并重新启用中断,则将中断GPIO_IRQN配置为触发中断GPIO_IRQN。如果该行高,则将执行ISR的ISR。如果您使用的传感器在具有数据后立即丢弃线路,那么您应该配置该行低至不高的中断,因此GPIO_ENABLEQ(PORT_X,PIN_X,GPIO0_IRQN,TRUE,TRUE,3)。如果您不想开始读取线路较低但是当线路再次高时,那么您可以尝试设置当行低时触发的中断,并且一旦该中断点击,重置中断并将其设置为当线路高时,再次触发该行再次高分高,中断将再次触发,然后您可以从传感器开始读取数据,一旦您完成交互,您可以再次设置IRQ触发器返回到低,为了不在下一次醒来。
谢谢mt_dialog.
嗨斯坦利。我想问你,因为我有点混淆中断。您用什么PIN与I2C沟通以及为什么选择GPIO0_IRQN?
以下是我的配置:
#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。只需选择其中一个,那没问题。
在这个问题中,我只想确保中断是级别触发。
欢呼:)