关于从睡梦中醒来的事

14个职位/ 0个新职位
最后发表
liuluan002
离线
最后看到:10个月3天前
加入: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 (0x001, 0x001, 1,0);

返回;

空白interrupt_Enable2(空白)

wkupct_register_callback (wkup_callback_function);
Wkupct_enable_irq (0x001, 0x001, 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个月3天前
加入: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个月3天前
加入: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事件,去噪时间= 20ms
GPIO_SetActive (GPIO_PORT_1 GPIO_PIN_0);

由于MT_dialog

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

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

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

嗨liuluan002,

您可以使用一个内核计时器,消逝在一个固定的时间间隔(小心通过中断设置一个计时器,因为当你强迫BLE醒来并不意味着它立即醒来,你必须发送消息到一个基本kenrel当消息服务启用定时器请检查以下常见问题)http://support.dialog-semiconductor.com/faq-page#n1508.在sdk 5中,这是由app_easy_timer api处理的。

由于MT_dialog

liuluan002
离线
最后看到:10个月3天前
加入: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个月3天前
加入:2015-11-27 14:24
谢谢你!我已经解决了这个问题

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

liuluan002
离线
最后看到:10个月3天前
加入: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, 0x00);

空白user_app_init(空白)

//初始化制造商特定数据
mnf_data_init ();
default_app_on_init ();
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x100001, 0x100001, 1, 0x00);

liuluan002
离线
最后看到:10个月3天前
加入: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