88LOG_MODULE_REGISTER (idle_pwm_loop , LOG_LEVEL_INF );
99
1010#include <zephyr/kernel.h>
11+ #include <zephyr/cache.h>
1112#include <zephyr/drivers/pwm.h>
1213#include <zephyr/drivers/gpio.h>
1314#include <zephyr/pm/device_runtime.h>
@@ -21,6 +22,11 @@ LOG_MODULE_REGISTER(idle_pwm_loop, LOG_LEVEL_INF);
2122#error "Unsupported board: pwm_to_gpio_loopback node is not defined"
2223#endif
2324
25+ #define SHM_START_ADDR (DT_REG_ADDR(DT_NODELABEL(cpuapp_cpurad_ipc_shm)))
26+ volatile static uint32_t * shared_var = (volatile uint32_t * ) SHM_START_ADDR ;
27+ #define HOST_IS_READY (1)
28+ #define REMOTE_IS_READY (2)
29+
2430static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET (DT_ALIAS (led ), gpios );
2531
2632static const struct gpio_dt_spec pin_in = GPIO_DT_SPEC_GET_BY_IDX (
@@ -126,6 +132,7 @@ int main(void)
126132 LOG_INF ("GPIO loopback at %s, pin %d" , pin_in .port -> name , pin_in .pin );
127133 LOG_INF ("Pulse/period: %u/%u usec" , pulse / 1000 , pwm_out .period / 1000 );
128134 LOG_INF ("Expected number of edges in 1 second: %u (+/- %u)" , edges , tolerance );
135+ LOG_INF ("Shared memory at %p" , (void * ) shared_var );
129136 LOG_INF ("===================================================================" );
130137
131138 ret = pwm_is_ready_dt (& pwm_out );
@@ -155,6 +162,32 @@ int main(void)
155162
156163 k_timer_init (& my_timer , my_timer_handler , NULL );
157164
165+ /* Synchronize Remote core with Host core */
166+ #if !defined(CONFIG_TEST_ROLE_REMOTE )
167+ LOG_DBG ("HOST starts" );
168+ * shared_var = HOST_IS_READY ;
169+ sys_cache_data_flush_range ((void * ) shared_var , sizeof (* shared_var ));
170+ LOG_DBG ("HOST wrote HOST_IS_READY: %u" , * shared_var );
171+ while (* shared_var != REMOTE_IS_READY ) {
172+ k_msleep (1 );
173+ sys_cache_data_invd_range ((void * ) shared_var , sizeof (* shared_var ));
174+ LOG_DBG ("shared_var is: %u" , * shared_var );
175+ }
176+ LOG_DBG ("HOST continues" );
177+ #else
178+ LOG_DBG ("REMOTE starts" );
179+ while (* shared_var != HOST_IS_READY ) {
180+ k_msleep (1 );
181+ sys_cache_data_invd_range ((void * ) shared_var , sizeof (* shared_var ));
182+ LOG_DBG ("shared_var is: %u" , * shared_var );
183+ }
184+ LOG_DBG ("REMOTE found that HOST_IS_READY" );
185+ * shared_var = REMOTE_IS_READY ;
186+ sys_cache_data_flush_range ((void * ) shared_var , sizeof (* shared_var ));
187+ LOG_DBG ("REMOTE wrote REMOTE_IS_READY: %u" , * shared_var );
188+ LOG_DBG ("REMOTE continues" );
189+ #endif
190+
158191#if defined(CONFIG_COVERAGE )
159192 printk ("Coverage analysis enabled\n" );
160193 while (test_repetitions -- )
0 commit comments