关于睡觉的唤醒

14个帖子/ 0新
最后一篇
Liuluan002.
离线
最后一次露面:10个月4天前
加入:2015-11-27 14:24
关于睡觉的唤醒

嗨对话框,

我的申请的情况是:
我正在使用外部SPI传感器作为中断发生器,输出中断高,然后我开始从传感器获取FIFO数据。14580应该处于睡眠模式并节省电力的最多时间。

我尝试使外部中断工作如下。奇怪的事情是中断只是在没有睡觉时工作(LED将被点亮)。当它处于睡眠模式时,存在中断,系统和14580将从开始开始重置。能否请你帮忙?

1.当存在中断时,我已经为主要功能进行了两个功能

void wkup_callback_function(void)
{

gpio_setactive(LED_PORT,LED_PIN);
#if debug_log.
printf_string(“中断按钮11 \ r \ n”);
#万一

wkupct_enable_irq(0x001,0x001,1,0);

返回;
}

void Interrupt_enable2(空白)
{
wkupct_register_callback(wkup_callback_function);
wkupct_enable_irq(0x001,0x001,1,0);
}

2.主要功能的变化

int main_func(void)
{

.......
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
我们的系统总是投入

我们的系统始终通过以下配置将其放入扩展休眠模式
#define cfg_mem_map_ext_sleep.
#undef cfg_mem_map_deep_sleep.

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11: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 11:34
嗨Liuluan002,

嗨Liuluan002,

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

1)保留并在User_periph_setup.c文件中配置GPIO:

保留_GPIO(LED,GPIO_PORT_1,GPIO_PIN_0,PID_GPIO);- gpio_reservations()函数
保留_GPIO(按钮,GPIO_PORT_1,GPIO_PIN_1,PID_GPIO);

gpio_configurepin(gpio_port_1,gpio_pin_0,输出,pid_gpio,false);- 适用于Pro套件的LED引脚配置PIN
gpio_configurepin(gpio_port_1,gpio_pin_1,input_pullup,pid_gpio,false);-相应地配置销钉按钮引脚

注册user_app_init()回调中的呼叫函数

wkupct_register_callback(按_Button);
wkupct_enable_irq(0x200,0x200,1,0x14);

中断的回调函数:

空白_Button(空白)
{
if(getBits16(sys_stat_reg,per_is_down))
periph_init();

wkupct_register_callback(按_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个月4天前
加入:2015-11-27 14:24
谢谢你现在的工作原理。一

谢谢你现在的工作原理。还有一个问题:如何睡觉修复时间,然后唤醒做点什么?

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

您可以使用内核定时器并将其设置为在固定的时间间隔内经过(请注意通过中断设置计时器,因为当您强制唤醒时,从中插入并不意味着它立即醒来,您必须发送一个基本向kenrel消息以及消息何时服务以启用计时器,请检查以下常见问题)http://support.dialog-semicondiondiondum/faq-page#n1508.。在SDK 5中,这由app_easy_timer API处理。

谢谢mt_dialog.

Liuluan002.
离线
最后一次露面:10个月4天前
加入:2015-11-27 14:24
嗨对话框,

嗨对话框,

如果我想在p01和p11上提供vakup,可以是高检测唤醒(p01和p11,带有下拉设置)。同时同时为唤醒按钮。如何制作代码?当我测试它失败时。

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

您应该使用WKUPCT_QUADEC驱动程序,我没有得到你想要唤醒的第三个引脚,但如果你想从P01和P11唤醒,然后检查以下行。

保留_GPIO(Button_1,GPIO_PORT_0,GPIO_PIN_1,PID_GPIO);
保留_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);

在上面的代码中,您可以添加您想要用作Addingal唤醒的按钮的3rd引脚。

谢谢mt_dialog.

Liuluan002.
离线
最后一次露面:10个月4天前
加入:2015-11-27 14:24
谢谢你。我解决了这个

谢谢你。我解决了这个问题

Liuluan002.
离线
最后一次露面:10个月4天前
加入:2015-11-27 14:24
嗨对话框,

嗨对话框,

我现在试图使用按钮P00来检测按钮按下。现在我可以通过以下代码检测按钮按下,但是我想制作长按检测的应用程序,可以提供此部分的代码吗?

空白_Button(空白)
{
if(!(getword16(p2_data_reg)&(1 << 4)))// button2
{
button_flag = 2;
}

if(!(getword16(p0_data_reg)&(1 << 0)))// button1
{
button_flag = 3;
}

if(getBits16(sys_stat_reg,per_is_down))
periph_init();
wkupct_register_callback(按_Button);
wkupct_enable_irq(0x100001,0x100001,1,0x00);
}

void user_app_init(void)
{
//初始化制造商特定数据
mnf_data_init();
default_app_on_init();
wkupct_register_callback(按_Button);
wkupct_enable_irq(0x100001,0x100001,1,0x00);
}

Liuluan002.
离线
最后一次露面:10个月4天前
加入:2015-11-27 14:24
嗨对话框,

嗨对话框,

如何处理来自P01和P11的中断,同时进行不同的替代时间,也如何使它们与中断功能处理按钮释放也可以计算它们被按下的时间。还如何确保在两个引脚之间没有缺少任何事件?

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

在唤醒控制器中没有可用的硬件可用于不同的替代值,我想你应该在SW中实现某些东西,例如,您可以使用Systick Timer来对按下按下按钮并确定按下按钮何时按下按钮。关于测量按钮按下,遗憾的是内核定时器不会返回时间过去,因此您可以使用硬件计时器或Systick,但是在计时器计数时,您必须保持唤醒您可以使用lld_evt_time_get()来测量重新启动按钮时按下按钮并轮询定时器的时间。关于两个引脚之间的缺失事件,如果一个引脚处于中断状态,则另一个引脚不会发出中断,您将必须轮询唤醒寄存器。

谢谢mt_dialog.

mt_dialog.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

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

谢谢mt_dialog.