你好
我试图为LIS2DE12生成用于运动检测的外部中断,但在OS_TASK_NOTIFY_WAIT()启动CPU目标时。。。我无法获取操作系统任务的通知值,请稍候。您能帮我吗??
这是我的中断生成配置..
无效唤醒中断cb(无效)
{
硬件启动复位中断();
来自ISR的操作系统任务通知(acc主位,0x1,操作系统通知设置位);
}
静态void LIS2_WakeupEventsTask(void*pvParameters)
{
int8_t wdog_id;
OS_基本型ret;
uint32_t uld值;
lis2de12_int1_src_t src;
/*加速计中断引脚*/
hw_gpio_configure_pin(HW_GPIO_PORT_0, HW_GPIO_PIN_12, HW_GPIO_MODE_INPUT_PULLUP, HW_GPIO_FUNC_GPIO, true);/ / ACCELEROMETER_INT1
硬件gpio焊盘闩锁启用(硬件gpio端口0,硬件gpio引脚12);
hw_gpio_焊盘_闩锁_禁用(hw_gpio_端口_0,hw_gpio_引脚_12);
hw_wkup_init(空);
hw_wkup_configure_pin (HW_GPIO_PORT_0 HW_GPIO_PIN_12,真的,HW_WKUP_PIN_STATE_LOW);
硬件唤醒寄存器gpio p0中断(唤醒中断cb,1);
/*启用WKUP控制器的中断*/
hw_wkup_enable_irq();
/*加速度计-I2C配置*/
li2de12_hdl=ad_i2c_开路(li2de12);
传感器初始化(li2de12\U hdl);
启用唤醒检测(li2de12_hdl);
/*注册看门狗监视的ble_多链路任务*/
wdog_id=系统看门狗寄存器(假);
对于(;;){
printf(“LIS2_WakeupEventsTask任务\r\n”);
/*在每个循环中通知看门狗*/
系统看门狗通知(wdog\U id);
/*阻止操作系统时挂起看门狗\u任务\u通知\u等待()*/
系统看门狗暂停(wdog\U id);
/*等待任何一个通知位,然后清除它们*/
ret=操作系统任务通知等待(0,操作系统任务通知所有位,&ulNotifiedValue,操作系统任务通知永远);
/*这必须永久阻止,直到收到任务通知。那么
返回值必须为OS\u TASK\u NOTIFY\u SUCCESS*/
OS_断言(ret==OS_任务通知成功);
/*在轮询模式下读取INT引脚1
*或读取src状态寄存器
*/
if(ulNotifiedValue&0x1)
{
lis2de12_int1_gen_source_get(li2de12_hdl和src);
if(src.xh | | src.yh | | src.zh)
{
硬件gpio设置未激活(硬件gpio端口0,硬件gpio引脚24);
硬件gpio焊盘闩锁启用(硬件gpio端口0,硬件gpio引脚24);
hw_gpio_焊盘_闩锁_禁用(hw_gpio_端口_0,hw_gpio_引脚_24);
启用唤醒检测(li2de12_hdl);
}
其他的
{
hw_gpio_set_active (HW_GPIO_PORT_0 HW_GPIO_PIN_24);
硬件gpio焊盘闩锁启用(硬件gpio端口0,硬件gpio引脚24);
hw_gpio_焊盘_闩锁_禁用(hw_gpio_端口_0,hw_gpio_引脚_24);
enableInactivityDetect(li2de12_hdl);
}
}
/*主要应用*/
系统看门狗通知和恢复(wdog id);
}
}
谢谢和问候,
吉纳尔。
嗨,吉娜,
如果我理解正确的话,您想要完成的是通过一个来自LIS2DE12的外部中断唤醒DA1469x。我的假设正确吗?
我建议先检查一下房间DA1469x教程外部中断.
本教程的主要目标是:
谢谢,下午好
你好,PM_Dialog,
是的,你理解正确,我也跟进了此事DA1469x教程外部中断这个任务的教程是一样的。对于我的任务,它是启动CPU…当OS_task_NOTIFY_WAIT()时再次启动。这是我的问题,为什么会发生这样的情况???还有我写的方式是正确的还是错误的??我的案子没有接到电话。有什么问题吗??
这是我修改的中断代码。。这个中断处理器在运动检测时没有被调用。
无效唤醒中断cb(无效)
{
硬件启动复位中断();
uint32_t状态;
/*读取端口0的状态*/
状态= hw_wkup_get_status (HW_GPIO_PORT_0);
/*检查POTR0的状态*/
if(状态和(1<硬件GPIO引脚12)){
/*通知主要任务*/
来自ISR的操作系统任务通知(acc主位,0x1,操作系统通知设置位);
/*清除锁存状态*//*检查POTR0的状态*/
hw_启动_清除_状态(键1_端口,(1<
}
}
静态void LIS2_WakeupEventsTask(void*pvParameters)
{
int8_t wdog_id;
OS_基本型ret;
uint32_t uld值;
lis2de12_int1_src_t src;
hw_wkup_init(空);
硬件唤醒寄存器gpio p0中断(唤醒中断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();
启用唤醒检测(li2de12_hdl);
/*注册看门狗监视的ble_多链路任务*/
//wdog_id=系统看门狗寄存器(假);
对于(;;){
printf(“LIS2_WakeupEventsTask任务\r\n”);
/*在每个循环中通知看门狗*/
系统看门狗通知(wdog\U id);
/*阻止操作系统时挂起看门狗\u任务\u通知\u等待()*/
系统看门狗暂停(wdog\U id);
/*等待任何一个通知位,然后清除它们*/
ret=操作系统任务通知等待(0,操作系统任务通知所有位,&ulNotifiedValue,操作系统任务通知永远);
/*这必须永久阻止,直到收到任务通知。那么
返回值必须为OS\u TASK\u NOTIFY\u SUCCESS*/
OS_断言(ret==OS_任务通知成功);
/*在轮询模式下读取INT引脚1
*或读取src状态寄存器
*/
if(ulNotifiedValue&0x1)
{
lis2de12_int1_gen_source_get(li2de12_hdl和src);
if(src.xh | | src.yh | | src.zh)
{
硬件gpio设置未激活(硬件gpio端口0,硬件gpio引脚24);
硬件gpio焊盘闩锁启用(硬件gpio端口0,硬件gpio引脚24);
hw_gpio_焊盘_闩锁_禁用(hw_gpio_端口_0,hw_gpio_引脚_24);
启用唤醒检测(li2de12_hdl);
}
其他的
{
hw_gpio_set_active (HW_GPIO_PORT_0 HW_GPIO_PIN_24);
硬件gpio焊盘闩锁启用(硬件gpio端口0,硬件gpio引脚24);
hw_gpio_焊盘_闩锁_禁用(hw_gpio_端口_0,hw_gpio_引脚_24);
enableInactivityDetect(li2de12_hdl);
}
}
/*主要应用*/
系统看门狗通知和恢复(wdog id);
}
}
静态无效prvSetupHardware(无效)
{
hw_gpio_pad_latch_disable_all ();/ /……避免任何未使用的浮动引脚。
/*
*添加一个PDC LUT条目,以便在PORT0上发生事件后唤醒M33核心
*这一点很重要,因为当设备进入睡眠状态时,M33将关闭。
*/
uint32\u t pdc\u wkup\u gpio\u id\u 1=硬件pdc\u添加项(硬件pdc\u LUT\u项值(硬件gpio\u端口0,
HW_GPIO_PIN_12 HW_PDC_MASTER_CM33 0));
OS_断言(pdc_wkup_gpio_id_1!=HW_PDC_无效_LUT_索引);
/*做这个魔术!*/
硬件pdc设置挂起(pdc工作gpio id 1);
硬件pdc确认(pdc启动gpio id 1);
/*初始化硬件*/
/*将自动调用“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
硬件gpio焊盘闩锁启用(硬件gpio端口0,硬件gpio引脚12);
hw_gpio_焊盘_闩锁_禁用(hw_gpio_端口_0,hw_gpio_引脚_12);
/*在处理GPIO引脚后禁用COM电源域*/
hw_sys_pd_com_disable ();
}
嗨,吉娜,
谢谢你的评论。
我已经在以下论坛帖子回复了你:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-软件/da1469x外部中断未调用
谢谢,下午好