你好,对话框,
我在DA1469x上通过LIS2DE12为运动检测生成外部中断。我的问题是中断处理程序没有被调用时,设备已经移动或运动检测。
我已经跟进了DA1469x教程外部中断教程。
这是sharinf代码,我已经实现了,请帮助我在这是什么问题?
空白wakeup_interrupt_cb(空白)
{
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 0 x1, OS_NOTIFY_SET_BITS);
/*清除锁存状态*/
hw_wkup_clear_status(HW_GPIO_PORT_0, (1 << HW_GPIO_PIN_12));
/*检查POTR0的状态*/
}
}
static 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,真的,HW_WKUP_PIN_STATE_LOW);
/*开启WKUP控制器的中断*/
hw_wkup_enable_irq ();
enableWakeUpDetect (li2de12_hdl);
/*将ble_multi_link任务注册为看门狗监控*/
wdog_id = sys_watchdog_register(假);
(,) {
printf (" LIS2_WakeupEventsTask任务\r\n");
/*在每个循环中通知watchdog */
sys_watchdog_notify (wdog_id);
/*暂停watchdog while blocking on OS_TASK_NOTIFY_WAIT() */
sys_watchdog_suspend (wdog_id);
/*等待任何一个通知位,然后清除它们*/
ret = OS_TASK_NOTIFY_WAIT(0, OS_TASK_NOTIFY_ALL_BITS, & ulnotiffiedvalue, OS_TASK_NOTIFY_FOREVER);
/* This必须永远阻塞,直到收到任务通知。所以,
返回值必须为OS_TASK_NOTIFY_SUCCESS */
OS_ASSERT (ret = = OS_TASK_NOTIFY_SUCCESS);
/*在轮询模式下读取INT pin1
*或读取SRC状态寄存器
*/
如果(ulNotifiedValue & 0 x1)
{
lis2de12_int1_gen_source_get (li2de12_hdl src);
如果(src)。xh | | src。本产品| | 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);
enableWakeUpDetect (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);
}
}
/* Main Application */
sys_watchdog_notify_and_resume (wdog_id);
}
}
prvsetuhardware (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), 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);
/*初始化硬件*/
/* ' peripher_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。
嗨Zinal,
谢谢你的问题。唤醒控制器似乎配置正确。请尝试在LIS2_WakeupEventsTask()中使用hw_wkup_configure_pin()代替hw_wkup_gpio_configure_pin()。还请将恢复时间设置为与教程中的wkup_init()相同。
另外,如果探测P0_12(唤醒引脚),当LIS2DE12生成中断时,是否能够检测下降沿?LIS2DE12是否产生上升沿或下降沿中断?
谢谢,PM_Dialog
你好PM_Dialog
是的,我尝试过与hw_wkup_configure_pin也()和消除抖动时间KEY_WAKUP中断和我使用GPIO_WAKEUP打断这可能不是给定防反跳时间在BSP教程中唤醒DA1469x提到的控制器,然后我也添加了防反跳时间但是没有影响我的设备也。
我想从你那里知道,我们如何从软件探测P0_12,因为我是第一次做,所以我不知道怎么做?你能帮我吗?
感谢和问候,
Zinal。
嗨Zinal,
在我之前的评论中,我的意思是使用逻辑分析仪工具或万用表来探测P0_12引脚。你能检测到中断吗?引脚的状态是什么?
谢谢,PM_Dialog
你好PM_Dialog,
我可以通过hw_get_pin_status()来验证pin的状态,也可以在设备运动检测时pin的状态被改变,因为我已经为运动检测配置了interrupt,但在那之后interrupt_handler没有被调用。
谢谢,
Zinal。
你好PM_Dialog,
你能回答我这个问题吗?它会是有帮助的。
我能够得到引脚状态和引脚状态正在改变,而运动检测设备上的GPIO P0_12,但不执行interrupt_handler,它仍然在等待中断。
在等待中断之前,我用hw_get_pin_status()调试这个GPIO P0_12,当设备被移动时,它会变高。
我不能得到什么可能是中断配置的问题。
我使用USB Pro工具包,所以不能调试通过逻辑分析仪。
谢谢,
Zinal。
嗨Zinal,
你能在调试模式下运行吗?
中断产生时引脚的状态是什么?是高还是低?
谢谢,PM_Dialog
你好PM_Dialog,
谢谢你的回复。
现在我可以得到下面一行我更改的中断
hw_wkup_gpio_configure_pin (HW_GPIO_PORT_0 HW_GPIO_PIN_12,真的,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。
嗨Zinal,
很高兴你能唤醒它!问题是唤醒针的极性。
>>我如何让设备在不移动的设备上睡眠,并在它移动时唤醒与睡眠模式是可能的??
你能说明一下你的新要求吗?
谢谢,PM_Dialog