76 lines
3.6 KiB
ReStructuredText
76 lines
3.6 KiB
ReStructuredText
.. _nrf53_sync_rtc_sample:
|
|
|
|
Synchronized RTC
|
|
################
|
|
|
|
Overview
|
|
********
|
|
|
|
Sample is showing how RTC clocks used for system clock on application and network
|
|
core are synchronized. The result of synchronization is an offset value on network
|
|
core which can be applied to the system tick for logging timestamping.
|
|
|
|
Sample is using IPM driver and IPC HAL to produce events which occur at same time on
|
|
both cores. Application core periodically reads current system tick and stores it in
|
|
the shared memory and triggers IPC task which results in the interrupt on the network
|
|
core. In the context of the IPC interrupt handler, network core is logging timestamp
|
|
from shared memory and local system tick updated by the offset. User can observe
|
|
that before synchronization procedure is completed, timestamps differ significantly
|
|
and once procedure is completed timestamps are synchronized. Network core timestamp
|
|
may be slightly behind (usually 1 tick) due to latency introduced by the
|
|
interrupt handling.
|
|
|
|
For simplicity and low latency sample is not using more sophisticated IPM protocols.
|
|
|
|
Building the application for nrf5340dk_nrf5340_cpuapp
|
|
*****************************************************
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/boards/nrf/nrf53_sync_rtc
|
|
:board: nrf5340dk_nrf5340_cpuapp
|
|
:goals: flash "flash --hex-file build/sync_rtc_net-prefix/src/sync_rtc_net-build/zephyr/zephyr.hex"
|
|
|
|
Open a serial terminals (for example Minicom or PuTTY) and connect the board with the
|
|
following settings:
|
|
|
|
- Speed: 115200
|
|
- Data: 8 bits
|
|
- Parity: None
|
|
- Stop bits: 1
|
|
|
|
When you reset the development kit, the following messages (one for master and one for remote) will appear on the corresponding serial ports:
|
|
|
|
.. code-block:: console
|
|
|
|
*** Booting Zephyr OS build v2.7.0-rc1-89-ge755863d66c9 ***
|
|
[00:00:00.306,915] <inf> main: IPC send at 10056 ticks
|
|
[00:00:00.356,903] <inf> main: IPC send at 11695 ticks
|
|
[00:00:00.406,921] <inf> main: IPC send at 13334 ticks
|
|
[00:00:00.456,939] <inf> main: IPC send at 14973 ticks
|
|
[00:00:00.506,958] <inf> main: IPC send at 16612 ticks
|
|
[00:00:00.556,976] <inf> main: IPC send at 18251 ticks
|
|
[00:00:00.606,994] <inf> main: IPC send at 19890 ticks
|
|
[00:00:00.657,012] <inf> main: IPC send at 21529 ticks
|
|
[00:00:00.707,031] <inf> main: IPC send at 23168 ticks
|
|
[00:00:00.757,049] <inf> main: IPC send at 24807 ticks
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
*** Booting Zephyr OS build v2.7.0-rc1-89-ge755863d66c9 ***
|
|
[00:00:00.054,534] <inf> main: Local timestamp: 1787, application core timestamp: 10056
|
|
[00:00:00.104,553] <inf> main: Local timestamp: 3426, application core timestamp: 11695
|
|
[00:00:00.154,571] <inf> main: Local timestamp: 5065, application core timestamp: 13334
|
|
[00:00:00.204,589] <inf> main: Local timestamp: 6704, application core timestamp: 14973
|
|
[00:00:00.254,608] <inf> main: Local timestamp: 8343, application core timestamp: 16612
|
|
[00:00:00.514,892] <inf> sync_rtc: Updated timestamp to synchronized RTC by 8270 ticks (252380us)
|
|
[00:00:00.557,006] <inf> main: Local timestamp: 18252, application core timestamp: 18251
|
|
[00:00:00.607,025] <inf> main: Local timestamp: 19891, application core timestamp: 19890
|
|
[00:00:00.657,043] <inf> main: Local timestamp: 21530, application core timestamp: 21529
|
|
[00:00:00.707,061] <inf> main: Local timestamp: 23169, application core timestamp: 23168
|
|
[00:00:00.757,080] <inf> main: Local timestamp: 24807, application core timestamp: 24807
|
|
|
|
Observe that initially logging timestamps for the corresponding events on both cores
|
|
do not match. Same with local and remote timestamps reported on network core. After
|
|
RTC synchronization is completed they start to match.
|