关于多中断引脚的配置

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
4个帖子/ 0新
最后一篇
aron.
离线
最后一次露面:3年1个月前
加入:2017-08-28 07:01
关于多中断引脚的配置

亲爱的对话框,

我正在使用da14680,我需要处理如下的多个中断。
(1)P3_4:密钥中断
(2)P3_5:SW复位中断按键
(3)P4_7:传感器中断

我在main.c中添加了它们的代码。

静态void key_interrupt_cb(void)
{
int端口,引脚,count = 0;
Interrupt_port = 0,Interrupt_pin = 0;
for(port = 0; port UINT8_T状态,触发器;
state = hw_wkup_get_port_state(端口);
trigger = hw_wkup_get_port_trigger(端口);

for(PIN = 0; PIN / *端口中的第n个引脚状态是位掩码中的第n个位的值* /
if(!(state&(1 << PIN))){
继续;
}

PRINTF(换行符“P%d。%d触发%s状态”,端口,引脚,
(触发器和(1 << PIN))?“前高后低”);
Interrupt_port =端口;
Interrupt_pin = PIN;
count ++;
}
}
if(count == 0){
printf(newline“(无)”);
}

if((Interrupt_port == 3)&&(Interrupt_pin == 4))
{
Printf(换行合“SOS密钥中断发生了。\ r \ n”);
}
if((Interrupt_port == 3)&&(Interrupt_pin == 5))
{
Printf(换行符“SW重置密钥中断发生了。\ r \ n”);
}
if((Interrupt_port == 4)&&(Interrupt_pin == 7))
{
Printf(换行符“传感器中断发生了。\ r \ n”);
}

hw_wkup_reset_interrupt();
}
void key_interrupt_init(void)
{
hw_wkup_init(null);

hw_wkup_configure_pin(hw_gpio_port_3,hw_gpio_pin_4,1,1,hw_wkup_pin_state_low);
hw_wkup_configure_pin(hw_gpio_port_3,hw_gpio_pin_5,1,hw_wkup_pin_state_low);
hw_wkup_configure_pin(hw_gpio_port_4,hw_gpio_pin_7,1,hw_wkup_pin_state_low);

hw_wkup_set_counter_threshold(1);
hw_wkup_set_debounce_time(10);

hw_wkup_register_interrupt(key_interrupt_cb,1);
}

静态void prvsetuphardware(void)
{
......
//中断init.
key_interrupt_init();
......
}

但是,当我使用此代码测试时,操作尚未运行。
我认为问题来自WKUP引脚配置,但现在我没有任何想法来解决问题。

您能否向我提供建议问题?

谢谢,
aron.

设备:
mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
嗨aron,

嗨aron,

对不起,我不确定我理解这个问题,你想使用三个不同的引脚而不是一个唤醒定时器吗?

在那种情况下,key_interrupt_init()中的配置是正确的,我不明白的是sos_key_interrupt_cb,就我可以了解回调的函数是key_interrupt_cb(),但是您已经注册了唤醒中断的另一个回调定时器模块。

谢谢mt_dialog.

aron.
离线
最后一次露面:3年1个月前
加入:2017-08-28 07:01
嗨diagolog,

嗨diagolog,

在我之前的评论中,我很抱歉我的错字。
我在评论中修改了代码以删除混乱,但我想我有一个错误。

实际上,我使用key_interrupt_cb,我可以看到我只设置一个gpio中断引脚时的操作没问题。
====================.
hw_wkup_configure_pin(hw_gpio_port_3,hw_gpio_pin_4,1,1,hw_wkup_pin_state_low);
====================.

但是,当我在key_interrupt_init函数中设置三个引脚后,它在检查P3_4时不起作用
====================.
hw_wkup_configure_pin(hw_gpio_port_3,hw_gpio_pin_4,1,1,hw_wkup_pin_state_low);
hw_wkup_configure_pin(hw_gpio_port_3,hw_gpio_pin_5,1,hw_wkup_pin_state_low);
hw_wkup_configure_pin(hw_gpio_port_4,hw_gpio_pin_7,1,hw_wkup_pin_state_low);
====================.

所以,我认为我的三个引脚配置有一些问题,我需要你的建议。

谢谢,
aron.

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

嗨aron,

我没有看到任何问题,我使用HRP_Sensor测试了从三个不同的引脚醒来,并在说明时配置设备,如果您没有看到唤醒设备和回调函数来执行,则有两种可能的选项:

  • 其中一个引脚的默认状态为低电平,在这种情况下,设备“看到”该另一个引脚中的一个处于触发器的中断所以任何尝试触发中断的状态,在附加引脚上都会失败。
  • 您使用的是端口3和4,所以我想你有一个aqfn包,而不是wlcsp。

谢谢mt_dialog.