da1469x外部中断 - 不调用中断时中断处理程序

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
9个员额/ 0个新员额
最后一篇
Zinal.
离线
最后一次露面:4个月4周前
加入:2020-09-23 08:58
da1469x外部中断 - 不调用中断时中断处理程序

你好对话框,

我在DA1469x上通过LIS2DE12为运动检测生成外部中断。我的问题是中断处理程序没有被调用时,设备已经移动或运动检测。

我跟进了DA1469x教程外部中断教程。

在这里我为此实施了sharinf代码..请帮助我在这些问题中的问题?

void wakeup_interrupt_cb(void)
{
hw_wkup_reset_interrupt();

uint32_t状态;

/ *读取port0 * /
状态= hw_wkup_get_status (HW_GPIO_PORT_0);

/ *检查potr0 * /
if(status&(1 << hw_gpio_pin_12)){
/ *通知主要任务* /
OS_TASK_NOTIFY_FROM_ISR(ACC_MAIN_H,0x1,OS_NOTIFY_SET_BITS);

/*清除锁存状态*/
hw_wkup_clear_status(hw_gpio_port_0,(1 << HW_GPIO_PIN_12));
/ *检查potr0 * /
}
}
静态void lis2_wakeupeventstask(void * pvparameters)
{
int8_t wdog_id;
OS_BASE_TYPE ret;
uint32_t ulNotifiedValue;
lis2de12_int1_src_t src;

hw_wkup_init(空);
hw_wkup_register_gpio_p0_interrupt(wakeup_interrupt_cb,1);
hw_wkup_gpio_configure_pin(hw_gpio_port_0,hw_gpio_pin_12,true,hw_wkup_pin_state_low);

/*开启WKUP控制器的中断*/
hw_wkup_enable_irq();

启用WakeUpdetect(Li2DE12_HDL);

/ *寄存器BLE_MULTI_LINK任务由看门狗监视* /
wdog_id = sys_watchdog_register(false);

为了 (;;) {

printf (" LIS2_WakeupEventsTask任务\r\n");

/ *在每个循环上通知看门狗* /
sys_watchdog_notify(wdog_id);

/ *在OS_TASK_NOTIFY_WAIT()屏蔽时暂停看门狗* /
sys_watchdog_suspend (wdog_id);

/*等待任何一个通知位,然后清除它们*/
RET = OS_TASK_NOTIFY_WAIT(0,OS_TASK_NOTIFY_ALL_BITS,&ulnotifiedValue,OS_TASK_NOTIFY_FOREVER);

/ *这必须永远阻止,直到收到任务通知。所以
返回值必须为OS_TASK_NOTIFY_SUCCESS */
OS_ASSERT (ret = = OS_TASK_NOTIFY_SUCCESS);

/ *读取轮询模式的int引脚1
*或读取SRC状态寄存器
* /
if(ulnotifiedvalue&0x1)
{
lis2de12_int1_gen_source_get(li2de12_hdl,&src);
if(src.xh || src.yh || src.zh)
{
hw_gpio_set_inactive(hw_gpio_port_0,hw_gpio_pin_24);
hw_gpio_pad_latch_enable(hw_gpio_port_0,hw_gpio_pin_24);
hw_gpio_pad_latch_disable (HW_GPIO_PORT_0 HW_GPIO_PIN_24);
启用WakeUpdetect(Li2DE12_HDL);
}
别的
{
hw_gpio_set_active (HW_GPIO_PORT_0 HW_GPIO_PIN_24);
hw_gpio_pad_latch_enable(hw_gpio_port_0,hw_gpio_pin_24);
hw_gpio_pad_latch_disable (HW_GPIO_PORT_0 HW_GPIO_PIN_24);
enableInactivityDetect (li2de12_hdl);

}
}
/ *主要申请* /
sys_watchdog_notify_and_resume(wdog_id);
}

}

静态void prvsetuphardware(void)
{

hw_gpio_pad_latch_disable_all ();/ /……避免任何未使用的浮动引脚。

/*
*添加一个PDC LUT条目,以便在PORT0上发生事件后唤醒M33核心
*这是重要的,因为M33是关闭时,设备进入睡眠。
* /
uint32_t pdc_wkup_gpio_id_1 = hw_pdc_add_entry(hw_pdc_lut_entry_val(hw_gpio_port_0,
HW_GPIO_PIN_12 HW_PDC_MASTER_CM33 0));
os_assert(pdc_wkup_gpio_id_1!= hw_pdc_invalid_lut_index);

/*做这个魔术!* /
hw_pdc_set_pending (pdc_wkup_gpio_id_1);
hw_pdc_acknowledge (pdc_wkup_gpio_id_1);
/ * init硬件* /
/ *将自动调用'periph_init()'
*现在和设备的每一个唤醒* /
pm_system_init (periph_init);

/ *在处理任何GPIO引脚之前启用COM电源域* /
hw_sys_pd_com_enable();

/ *加速度计中断引脚* /
hw_gpio_configure_pin(HW_GPIO_PORT_0, HW_GPIO_PIN_12, HW_GPIO_MODE_INPUT_PULLUP, HW_GPIO_FUNC_GPIO, true);/ / ACCELEROMETER_INT1
hw_gpio_pad_latch_enable(hw_gpio_port_0,hw_gpio_pin_12);
hw_gpio_pad_latch_disable (HW_GPIO_PORT_0 HW_GPIO_PIN_12);

/ *处理GPIO引脚后禁用COM电源域* /
hw_sys_pd_com_disable ();
}

感谢和问候,

zinal。

设备:
PM_DIALOG.
离线
最后一次露面:2天22小时前
职员
加入:2018-02-08 11:03
嗨zinal,

嗨zinal,

谢谢你的问题。似乎唤醒控制器配置正确。请尝试使用lis2_wakeupeventstask()中的hw_wkup_configure_pin()而不是hw_wkup_gpio_configure_pin()?还请从教程中设置与WKUP_INIT()相同的替代时间。

另外,如果探测P0_12(唤醒引脚),当LIS2DE12生成中断时,是否能够检测下降沿?LIS2DE12是否产生上升沿或下降沿中断?

谢谢,PM_DIALOG.

Zinal.
离线
最后一次露面:4个月4周前
加入:2020-09-23 08:58
你好PM_Dialog

你好PM_Dialog

是的,我尝试过hw_wkup_configure_pin(),并且还有key_wakup中断,我正在使用gpio_wakeup中断,这可能不会在为唤醒控制器提到的da1469x的BSP教程中给出去抖动时间,然后我加入了淘汰时间对我的设备没有影响。

而且我想从你那里知道,我们如何从软件中探测P0_12 Beacuse我第一次这样做,所以我不知道如何?你能帮助吗?

感谢和问候,

zinal。

PM_DIALOG.
离线
最后一次露面:2天22小时前
职员
加入:2018-02-08 11:03
嗨zinal,

嗨zinal,

在我之前的评论中,我的意思是使用逻辑分析仪工具或万用表来探测P0_12引脚。你能检测到中断吗?引脚的状态是什么?

谢谢,PM_DIALOG.

Zinal.
离线
最后一次露面:4个月4周前
加入:2020-09-23 08:58
你好PM_Dialog,

你好PM_Dialog,

我能够通过HW_GET_PIN_STATUS()验证PIN的状态,并且在设备运动检测到BEACUSE上的PIN状态时,我已经为运动检测配置了中断,但是在此之后interrupt_handler不会被调用。

谢谢,

zinal。

Zinal.
离线
最后一次露面:4个月4周前
加入:2020-09-23 08:58

你好PM_Dialog,

你能回复我这个问题吗?它会有所帮助。

我能够得到引脚状态和引脚状态正在改变,而运动检测设备上的GPIO P0_12,但不执行interrupt_handler,它仍然在等待中断。

我使用hw_get_pin_status()调试此GPIO P0_12()等待中断,每当移动设备时它会很高。

我不能得到什么可能是中断配置的问题。

我正在使用USB Pro套件,以便无法通过逻辑分析仪调试。

谢谢,

zinal。

PM_DIALOG.
离线
最后一次露面:2天22小时前
职员
加入:2018-02-08 11:03
嗨zinal,

嗨zinal,

你能在调试模式下运行它吗?

生成中断时引脚的状态是多少?它高或低吗?

谢谢,PM_DIALOG.

Zinal.
离线
最后一次露面:4个月4周前
加入:2020-09-23 08:58
你好PM_Dialog,

你好PM_Dialog,

谢谢你的回复。

现在我能够得到不变的逆行

hw_wkup_gpio_configure_pin(hw_gpio_port_0,hw_gpio_pin_12,true,hw_wkup_pin_state_low);

使用hw_wkup_gpio_configure_pin(hw_gpio_port_0,hw_gpio_pin_12,true,hw_wkup_pin_state_high);现在它正在工作。

我有一个问题

我怎么能把设备放在睡眠设备不移动和唤醒时,它移动与睡眠模式是可能的??

谢谢,

zinal。

PM_DIALOG.
离线
最后一次露面:2天22小时前
职员
加入:2018-02-08 11:03
嗨zinal,

嗨zinal,

很高兴你能唤醒它!问题是唤醒针的极性。

>>如何将设备放在设备上未移动和壁带有睡眠模式时的设备睡觉,这是可能的吗??

你能说明一下你的新要求吗?

谢谢,PM_DIALOG.