关于从睡梦中醒来的事

14个帖子/ 0新
最后发表
liuluan002
离线
最后看到:10个月4天前
加入:2015-11-27 14:24
关于从睡梦中醒来的事

嗨,对话框中,

我的应用情况是:
我使用外部SPI传感器作为中断发生器,当它输出高中断后,我开始从传感器获得FIFO数据。14580的大部分时间应处于睡眠模式,以节省电力。

我尝试使外部中断工作如下。奇怪的是,这种干扰只有在不睡觉的时候才会起作用(LED会点亮)。当它处于睡眠模式时,一旦出现中断,系统和14580将从一开始复位。你能帮忙吗?

1.我已经做了两个功能为主要功能时有中断,被称为

空白wkup_callback_function(空白)

GPIO_SetActive (LED_PORT LED_PIN);
#如果DEBUG_LOG
printf_string(“中断BUTTON11 \ r \ n”);
# endif

wkupct_enable_irq(0×001,0×001,1,0);

返回;

空白interrupt_Enable2(空白)

wkupct_register_callback (wkup_callback_function);
wkupct_enable_irq(0×001,0×001,1,0);

2.主要功能的变化

INT main_func(无效)

.......
GPIO_SetInactive (LED_PORT LED_PIN);
interrupt_Enable2 ();

.....

而(1)

....

3.配置文件的安装
# undef CFG_EXTERNAL_WAKEUP
# undef CFG_EXTERNAL_WAKEUP

设备:
liuluan002
离线
最后看到:10个月4天前
加入:2015-11-27 14:24
我们的系统总是被输入

我们的系统始终通过以下配置将其放入扩展休眠模式
#定义CFG_MEM_MAP_EXT_SLEEP
# undef CFG_MEM_MAP_DEEP_SLEEP

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Liuluan002,

嗨Liuluan002,

尝试以你看到LED亮起唤醒时,初始化外设。此外,而不是在主函数中插入代码,你可以使用用户回调函数。例如,您可以初始化中断在user_app_on_init()函数,并重新初始化中断时,在ISR中断命中。

由于MT_dialog

liuluan002
离线
最后看到:10个月4天前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

似乎系统重启时,它是在睡眠模式,并击中中断从P00引脚。你能告诉我为什么以及如何解决这个问题吗?

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Liuluan002,

嗨Liuluan002,

尝试实现中断通过按钮,如我上面指示,并检查是否同样的问题发生。当您说系统在中断发生时重新启动时,您可以看到当中断发生时引导加载程序正在执行?当睡眠中断发生时,你的系统会进入平台重置吗?请检查下面的代码如何在SDK 5上启用中断睡眠。

1)在user_peripher_setup .c文件中保留和配置GPIO:

Reserve_gpio (led, gpio_port_1, gpio_pin_0, pid_gpio);——Gpio_reservations()函数
Reserve_gpio (button, gpio_port_1, gpio_pin_1, pid_gpio);

GPIO_ConfigurePin(GPIO_PORT_1,GPIO_PIN_0,OUTPUT PID_GPIO,FALSE);- 配置引脚相应的LED引脚为亲套件
GPIO_ConfigurePin(GPIO_PORT_1,GPIO_PIN_1,INPUT_PULLUP,PID_GPIO,FALSE);-配置您的引脚相应地按钮引脚

在user_app_init()回调中注册回调函数

wkupct_register_callback (press_button);
Wkupct_enable_irq (0x200, 0x200, 1, 0x14);

中断的回调函数:

空白press_button(空白)

如果(GetBits16(SYS_STAT_REG,PER_IS_DOWN))
periph_init();

wkupct_register_callback (press_button);
wkupct_enable_irq(PIN_P11_SEL,PIN_POL_LOW,PIN_EVT_NUM,PIN_DB_TIME);// P1_1,极性低,1个事件,去抖动时间= 20毫秒
GPIO_SetActive (GPIO_PORT_1 GPIO_PIN_0);

由于MT_dialog

liuluan002
离线
最后看到:10个月4天前
加入:2015-11-27 14:24
谢谢,现在它管用了。一

谢谢,现在它管用了。还有一个问题:如何睡上一段固定的时间,然后醒来做一些事情?

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Liuluan002,

嗨Liuluan002,

您可以使用一个内核计时器并将其设置为经过一个固定的时间间隔(要小心,因为与当你强迫BLE醒来并不意味着它会立即唤醒通过中断设置一个计时器,你必须发送一个基本消息给kenrel,当供应的消息,使计时器请检查下面的FAQ)http://support.dialog-semiconductor.com/faq-page#n1508.在sdk 5中,这是由app_easy_timer api处理的。

由于MT_dialog

liuluan002
离线
最后看到:10个月4天前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

如果我想让唤醒在P01和P11可用,以高检测唤醒可用(P01和P11与下拉设置)。同时P00为唤醒按钮。请问如何为它制作代码?当我测试失败时。

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Liuluan002,

嗨Liuluan002,

您应该使用wkupct_quadec司机,我不得到你想要醒来的第三只脚,但如果你想从P01和P11醒来然后检查以下行。

Reserve_gpio (button_1, gpio_port_0, gpio_pin_1, pid_gpio);
Reserve_gpio (button_2, gpio_port_1, gpio_pin_1, pid_gpio);

GPIO_ConfigurePin(GPIO_PORT_0,GPIO_PIN_1,INPUT_PULLDOWN,PID_GPIO,FALSE);
GPIO_ConfigurePin(GPIO_PORT_1, GPIO_PIN_1, INPUT_PULLDOWN, PID_GPIO, false);

wkupct_register_callback (wakeup_callback_cb);
Wkupct_enable_irq (0x202, 0x000, 0x01, 0x1);

在上面的代码中,你可以添加你的按钮的第3针,你想使用作为额外的唤醒。

由于MT_dialog

liuluan002
离线
最后看到:10个月4天前
加入:2015-11-27 14:24
谢谢你!我已经解决了这个问题

谢谢你!我已经解决了这个问题

liuluan002
离线
最后看到:10个月4天前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

我现在想用按钮P00来检测按下按钮。现在,我可以检测下面的代码按下按钮,但是我想使申请长按检测,你可以请提供此部分也代码?

空白press_button(空白)

如果(!(GetWord16(P2_DATA_REG)(1 << 4)))//将Button2

button_flag = 2;

如果(! (GetWord16 (P0_DATA_REG) & (1 < < 0))) / / Button1

button_flag = 3;

如果(GetBits16(SYS_STAT_REG,PER_IS_DOWN))
periph_init();
wkupct_register_callback (press_button);
wkupct_enable_irq(0x100001,0x100001,1,0×00);

空隙user_app_init(无效)

//初始化制造商具体数据
mnf_data_init();
default_app_on_init();
wkupct_register_callback (press_button);
wkupct_enable_irq(0x100001,0x100001,1,0×00);

liuluan002
离线
最后看到:10个月4天前
加入:2015-11-27 14:24
嗨,对话框中,

嗨,对话框中,

如何处理来自P01和P11的中断不同的恢复时间,以及如何使他们处理按钮释放与中断功能,也计算他们按下多长时间。另外,如何确保没有错过任何事件之间的两个引脚?

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Liuluan002,

嗨Liuluan002,

在唤醒控制器中没有硬件可用于不同的恢复值,我认为你应该在sw中实现一些东西,例如,你可以使用systick定时器来采样按钮被按下并确定何时按钮被按下。关于测量按钮按下,不幸的是,内核计时器不返回时间流逝,所以你可以使用硬件计时器或系统,但是,当计时器计数时,您必须保持清醒。您可以使用lld_evt_time_get()来测量按钮被按下的时间,并在按钮被释放时再次轮询计时器。关于两个引脚之间的丢失事件,如果一个引脚处于中断状态,另一个引脚不会发出中断,在这种情况下,你必须轮询唤醒寄存器。

由于MT_dialog

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Liuluan002,

嗨Liuluan002,

您可以查看智能标签参考设计,它有一个实现按钮长按。

由于MT_dialog