我想在sdk5的外设示例中添加实时时钟功能。我的计划是使用16MHz定时器划分为1Hz中断,每秒钟唤醒DA14580,并更新一些内存与实际时间小时、分、秒和日期等。定时器大部分时间会休眠,只有在广告和上述功能时才会唤醒。有一个例子,我可以使用设置定时器中断功能的16Mhz定时器和实现“去睡眠”在中断结束?
重点. .1 .我想让它每秒钟都醒来,做一些事情。2 .我想让它在那之后休眠。
嗨大卫•泰勒
当设备进入睡眠状态时,外围域也被关闭,这意味着计时器和XTAL16也被关闭。设备不能通过硬件定时器中断从休眠中唤醒,只有BLE事件(包括内核定时器)和唤醒定时器(外部唤醒模块)能够从休眠模式中唤醒处理器。
如果你想每秒钟唤醒一次,你可以使用内核计时器,但是要注意,用这个方案你无法精确地测量时间,每次唤醒都会有轻微的漂移。
如果设备没有立即挂起的操作(挂起的BLE事件、定时器等),只要启用了休眠模式,设备就会进入休眠状态。
由于MT_dialog
谢谢你的回答。我可以使用大于1秒的时间来最小化误差。
是否有可能生成每个标准BLE唤醒的计数(在广告模式中),并使用那段时间的知识生成我的计数?
另外,您能给我一个内核计时器接口示例,以便我也可以研究它吗?
让设备计数每个广告事件,通过知道广告的周期,你会得到比用ble计时器测量更不可靠的值,因为在广告唤醒中,根据规格,还添加了一个随机延迟,从+-0到10ms不等。您可以检查内核计时器,看看它们是否适合您的实现。尽管如此,在支持论坛上有很多讨论,如何测量时间,最有效的方法是通过lld_evt_time_get()函数读取BLE计时器时钟,但对于RTC来说,它仍然不是那么准确。
嗨大卫•泰勒
当设备进入睡眠状态时,外围域也被关闭,这意味着计时器和XTAL16也被关闭。设备不能通过硬件定时器中断从休眠中唤醒,只有BLE事件(包括内核定时器)和唤醒定时器(外部唤醒模块)能够从休眠模式中唤醒处理器。
如果你想每秒钟唤醒一次,你可以使用内核计时器,但是要注意,用这个方案你无法精确地测量时间,每次唤醒都会有轻微的漂移。
如果设备没有立即挂起的操作(挂起的BLE事件、定时器等),只要启用了休眠模式,设备就会进入休眠状态。
由于MT_dialog
谢谢你的回答。
我可以使用大于1秒的时间来最小化误差。
是否有可能生成每个标准BLE唤醒的计数(在广告模式中),并使用那段时间的知识生成我的计数?
另外,您能给我一个内核计时器接口示例,以便我也可以研究它吗?
嗨大卫•泰勒
让设备计数每个广告事件,通过知道广告的周期,你会得到比用ble计时器测量更不可靠的值,因为在广告唤醒中,根据规格,还添加了一个随机延迟,从+-0到10ms不等。您可以检查内核计时器,看看它们是否适合您的实现。尽管如此,在支持论坛上有很多讨论,如何测量时间,最有效的方法是通过lld_evt_time_get()函数读取BLE计时器时钟,但对于RTC来说,它仍然不是那么准确。
由于MT_dialog