你好,对话框,
我为运动产生外部中断检测通过LIS2DE12 DA1469x。我的问题是中断处理程序不被当设备移动或运动检测。
我已经跟进DA1469x教程外部中断教程。
这里我sharinf代码我已经实现。请帮我在这这是什么问题? ?
空白wakeup_interrupt_cb(空白)
{
hw_wkup_reset_interrupt ();
uint32_t状态;
/ *读取PORT0 * /的状态
状态= hw_wkup_get_status (HW_GPIO_PORT_0);
/ *检查POTR0的状态* /
如果(状态& (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的状态* /
}
}
静态孔隙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 ");
每个循环* / / *通知监督
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状态寄存器
* /
如果(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);
}
}
/ *主应用程序* /
sys_watchdog_notify_and_resume (wdog_id);
}
}
静态孔隙prvSetupHardware(空白)
{
hw_gpio_pad_latch_disable_all ();/ /……为了避免任何未使用的浮针。
/ *
*添加PDC附近地区条目,以便醒来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);
/ *初始化硬件* /
/ *“periph_init()将自动被称为
*现在的每一个唤醒设备* /
pm_system_init (periph_init);
/ *使COM权力域处理任何GPIO之前销* /
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);
/ *禁用COM域处理的针后* /
hw_sys_pd_com_disable ();
}
感谢和问候,
Zinal。
嗨Zinal,
谢谢你的问题。似乎唤醒控制器正确配置。你能尝试使用hw_wkup_configure_pin()而不是hw_wkup_gpio_configure_pin LIS2_WakeupEventsTask()的()?也请设置消除抖动时间一样wkup_init()的教程。
此外,如果探针P0_12 (pin)醒来,你能发现一个下降沿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验证销的状态()和同时销状况得到改变设备运动检测运动因为我已经配置了中断检测但interrupt_handler之后没有被调用。
谢谢,
Zinal。
你好PM_Dialog,
你能回答我这个问题吗? ?它会是有帮助的。
我能获得销状态和状态变化而运动检测设备的GPIO P0_12但不执行interrupt_handler还等待一个中断。
我调试这个GPIO P0_12 hw_get_pin_status()之前等待中断时的高设备移动。
我不能够得到可以中断配置的问题。
我使用USB套装将因此无法通过逻辑分析仪调试。
谢谢,
Zinal。
嗨Zinal,
你能在调试模式下运行它吗?
是什么状态的生成中断时销?是高还是低?
谢谢,PM_Dialog
你好PM_Dialog,
谢谢你的回应。
现在我能得到下面的inetrrupt我改变路线
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,真的,HW_WKUP_PIN_STATE_HIGH);现在的工作。
我有一个问题
我怎么能把设备睡在设备不动和wakup移动与睡眠模式是可能的吗? ?
谢谢,
Zinal。
嗨Zinal,
高兴你能叫醒它!问题是唤醒销极性。
> >我怎么能把设备睡在设备不动和wakup移动与睡眠模式是可能的吗? ?
请阐明你的新的需求吗?
谢谢,PM_Dialog