关于从睡梦中醒来的事

14个帖子/ 0新
最后发表
liuluan002
离线
最后看到:10个月1天前
加入: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(void)

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

.....

而(1)

....

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

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

我们的系统始终通过以下配置将其放入扩展休眠模式
#define 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个月1天前
加入: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,输出,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 (press_button);
Wkupct_enable_irq (0x200, 0x200, 1, 0x14);

中断的回调函数:

空白press_button(空白)

if(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个月1天前
加入:2015-11-27 14:24
谢谢,现在它管用了。一

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

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

嗨Liuluan002,

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

由于MT_dialog

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

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

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

嗨,对话框中,

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

空白press_button(空白)

if(!(getword16(p2_data_reg)&(1 << 4)))// button2

button_flag = 2;

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

button_flag = 3;

if(getBits16(sys_stat_reg,per_is_down))
periph_init();
wkupct_register_callback (press_button);
wkupct_enable_irq(0x100001,0x100001,1,0x00);

void user_app_init(void)

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

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