LIS2DE12的DA1469x外部中断

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
4个员额/0个新员额
最后一篇文章
琪纳尔
离线
最后一次见到:6个月14小时前
加入:2020-09-23 08:58
LIS2DE12的DA1469x外部中断

你好

我试图为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);
}

}

谢谢和问候,

吉纳尔。

设备:
PM_对话框
离线
最后一次见到:2天16小时前
工作人员
加入:2018-02-08 11:03
嗨,吉娜,

嗨,吉娜,

如果我理解正确的话,您想要完成的是通过一个来自LIS2DE12的外部中断唤醒DA1469x。我的假设正确吗?

我建议先检查一下房间DA1469x教程外部中断.

本教程的主要目标是:

  • 提供对外部中断机制的基本理解
  • 设置处理外部中断和采取措施的工作演示
  • 根据收集的外部中断触发操作系统任务执行

谢谢,下午好

琪纳尔
离线
最后一次见到:6个月14小时前
加入:2020-09-23 08:58

你好,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,操作系统通知设置位);

/*清除锁存状态*/
hw_启动_清除_状态(键1_端口,(1</*检查POTR0的状态*/
}
}
静态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 ();
}

PM_对话框
离线
最后一次见到:2天16小时前
工作人员
加入:2018-02-08 11:03
嗨,吉娜,

嗨,吉娜,

谢谢你的评论。

我已经在以下论坛帖子回复了你:

https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-软件/da1469x外部中断未调用

谢谢,下午好