blob: 3f32cfb3ccdb00641ff5f58b8dc73ac52c177142 [file] [log] [blame]
/*
* Copyright (c) 2018, NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
#include <zephyr/device.h>
#include <zephyr/drivers/ipm.h>
int gcounter;
void ping_ipm_callback(const struct device *dev, void *context,
uint32_t id, volatile void *data)
{
gcounter = *(int *)data;
/* Show current ping-pong counter value */
printk("Received: %d\n", gcounter);
/* Increment on our side */
gcounter++;
if (gcounter < 100) {
/* Send back to the other core */
ipm_send(dev, 1, 0, &gcounter, 4);
}
}
void main(void)
{
int first_message = 1; /* do not start from 0,
* zero value can't be sent via mailbox register
*/
const struct device *ipm;
printk("Hello World from MASTER! %s\n", CONFIG_ARCH);
/* Get IPM device handle */
ipm = DEVICE_DT_GET_ANY(nxp_lpc_mailbox);
if (!(ipm && device_is_ready(ipm))) {
printk("Could not get IPM device handle!\n");
while (1) {
}
}
/* Register application callback with no context */
ipm_register_callback(ipm, ping_ipm_callback, NULL);
/* Enable the IPM device */
ipm_set_enabled(ipm, 1);
/* Send initial message with 4 bytes length*/
ipm_send(ipm, 1, 0, &first_message, 4);
while (1) {
}
}