blob: 9c150fd1d46d46d91e1b07ea924cfc1db2d8efab [file] [log] [blame]
/*
* Copyright (c) 2021 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <hal/nrf_ipc.h>
#include <zephyr/sys/printk.h>
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(main);
#if (CONFIG_SOC_SERIES_BSIM_NRFXX)
#include "nsi_cpu_if.h"
/* For simulation, we can define shared memory variables linkable from
* other MCUs just by using NATIVE_SIMULATOR_IF
*/
NATIVE_SIMULATOR_IF uint32_t shared_cell_buffer;
static uint32_t shared_cell = (uintptr_t)&shared_cell_buffer;
#else
static uint32_t shared_cell = 0x20070000;
#endif
static void timeout_handler(struct k_timer *timer)
{
nrf_ipc_task_t task = offsetof(NRF_IPC_Type, TASKS_SEND[2]);
uint32_t now = sys_clock_tick_get_32();
*(volatile uint32_t *)shared_cell = now;
nrf_ipc_task_trigger(NRF_IPC, task);
LOG_INF("IPC send at %d ticks", now);
/* Do it only for the first second. */
if (now > sys_clock_hw_cycles_per_sec()) {
k_timer_stop(timer);
}
}
K_TIMER_DEFINE(timer, timeout_handler, NULL);
int main(void)
{
LOG_INF("Synchronization using %s driver", IS_ENABLED(CONFIG_MBOX) ? "mbox" : "ipm");
k_timer_start(&timer, K_MSEC(50), K_MSEC(50));
return 0;
}