4个帖子/ 0新
最后一篇
Liuluan002.
离线
最后一次露面:6个月2周前
加入:2015-11-27 14:24
关于时钟准确的时钟

嗨对话框,

我们正在尝试使用您的时钟来校准我们的系统计时器。由于我们没有实时准确的时钟。我想知道你的系统时钟有多准确?
我们正在使用您建议的振荡器。我们也在跑步期间去睡眠,我们从不使用深睡眠。
我们将从系统中获取时间的方法如下所示:

#if debug_log9.
current_time1 = lld_evt_time_get();
print_word(current_time1);
printf_string(“\ n”);
UART2_INIT(UART_BAUDRATE_115K2,3);
#万一

设备:
mt_dialog.
离线
最后一次露面:3个月19小时前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

LLD_EVT_TIME_GET()您提及基于625US基础时间计数器的时间测量时间,该计数器没有稳定的时钟输入,而是根据设备是否正在睡觉而变化,或者它是醒目的,并根据基于电源通过电源的时间xtal16和xtal32。因此,测量的时间来自xtal16,并且当睡眠期间经过的时间通过XTAL32测量并在设备唤醒时得到补偿并应用于定时器,因此在测量的时间内引入错误不固定。

谢谢mt_dialog.

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

嗨对话框,

我在void按钮中使用的lld_evt_time_get()中断(void)中断功能,以记录PIN突然从低到高电平的时间。按钮按中断完成。

我在睡觉时发现了,我无法正确地获得时间。是以任何方式可以获得按钮的时间,即使是休眠时间也是如此。在我调用“lld_evt_time_get()”函数之前,我需要醒来并做一些其他初始化。

我有附加的代码:
volatile uint32_t current_time22;//为时间记录
空白_Button(空白)
{
if(getBits16(sys_stat_reg,per_is_down))
periph_init();

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

#if pinup_test.
if((getword16(p1_data_reg)&(1 << 5)))// pinup
{
PINUP = 1;
}
#万一
wkupct_register_callback(按_Button);
wkupct_enable_irq(0x002000,0x000000,1,0x00);

#if pinup_test.
if(pinup == 1)
{
current_time22 = lld_evt_time_get();
}
#万一

}

void user_app_init(void)
{
//初始化制造商特定数据
mnf_data_init();
default_app_on_init();
wkupct_register_callback(按_Button);
WKUPCT_ENABLE_IRQ(0x002000,0x000000,1,0x00); // P15 INT2 PINUP // WKUPCT_ENABLE_IRQ(0x000001,0x000001,1,0x14);
}

感谢您的帮助。

mt_dialog.
离线
最后一次露面:3个月19小时前
职员
加入:2015-06-08 11:34
嗨Liuluan002,

嗨Liuluan002,

正如我在上面提到的那样,你提到了你的函数用作输入不同的时钟(XTAL16在设备处于睡眠模式时唤醒XTAL32的补偿值时),因此您不会读取任何时候寄存器的值。如果您通过外部中断执行此操作,则必须唤醒BLE以及BLE启动(您只有在唤醒时才能读取该值)。所以你可以做的是调用ARCH_BLE_FORCE_WAKEUP()以指示您想要唤醒BLE。但通过调用这一功能并不意味着BLE将唤醒蒙脱土,这只是要求BLE唤醒,因此为了确保BLE唤醒,您需要打印或通常使用LLD_evt_time_get()在。app_on_ble_powered回调,应该有效。

谢谢mt_dialog.