Hello,
I made a firmware that uses the IPC from the net core to the app core on the nrf700DK board.
I can read the events that generate callback on the receiver core (app core). I want to pass a value from the net to the app core using GPMEM.
I have attached the code:
net core:
int main(void)
{
#if defined(__ZEPHYR__)
IRQ_CONNECT(NRFX_IRQ_NUMBER_GET(NRF_TIMER_INST_GET(TIMER_INST_IDX)), IRQ_PRIO_LOWEST, NRFX_TIMER_INST_HANDLER_GET(TIMER_INST_IDX), 0, 0);
IRQ_CONNECT(NRFX_IRQ_NUMBER_GET(NRF_SPIS_INST_GET(SPIS_INST_IDX)), IRQ_PRIO_LOWEST,NRFX_SPIS_INST_HANDLER_GET(SPIS_INST_IDX), 0, 0);
//IRQ_CONNECT(NRFX_IRQ_NUMBER_GET(NRF_IPC_CHANNEL_0),IRQ_PRIO_LOWEST,ipc_event_handler,0,0);
IRQ_CONNECT(IPC_IRQn, 1, nrfx_ipc_irq_handler, 0, 0);
#endif
nrfx_err_t err;
init_hfclk();
init_gpio();
init_timer();
init_spis();
err = nrfx_ipc_init(1, (nrfx_ipc_handler_t)ipc_event_handler, NULL);
nrfx_ipc_send_task_channel_assign(IPC_EVENT_ID_0, IPC_CHANNEL_ID_0);
while(1)
{
if(flag)
{
nrfx_ipc_gpmem_set(0,mem);
mem_value = NRF_IPC->GPMEM[0];
nrf_gpio_pin_toggle(LED);
flag = false;
}
}
return 0;
}
static void spis_handler(nrfx_spis_evt_t const * p_event, void * p_context)
{
if (p_event->evt_type == NRFX_SPIS_XFER_DONE)
{
switch (cmd_spi_rx_buf_slave[0])
{
case 0xE1:
nrfx_ipc_signal(IPC_EVENT_ID_0);
flag = true;
break;
default:
break;
}
nrfx_spis_buffers_set(&spis_inst, NULL, 0, cmd_spi_rx_buf_slave, sizeof(cmd_spi_rx_buf_slave));
}
}
Using the debug I can see that the mem_value is equal to the value set using nrfx_ipc_gpmem_set()
app core:
int main(void)
{
#if defined(__ZEPHYR__)
IRQ_CONNECT(IPC_IRQn, 1, nrfx_ipc_irq_handler, 0, 0);
#endif
nrfx_err_t err;
init_gpio();
err = nrfx_ipc_init(1, (nrfx_ipc_handler_t)ipc_event_handler, NULL);
nrfx_ipc_receive_event_channel_assign(IPC_EVENT_ID_0, IPC_CHANNEL_ID_0);
nrfx_ipc_receive_event_enable(IPC_EVENT_ID_0);
while(1)
{
if(ipc_rcv)
{
data = nrfx_ipc_gpmem_get(0);
if(data == 0xE1)
{
nrf_gpio_pin_toggle(LED);
}
ipc_rcv = false;
}
}
return 0;
}
void ipc_event_handler(uint32_t event_mask, void * p_context)
{
if(event_mask == IPC_EVENT_ID_0)
{
ipc_rcv = true;
}
}
CONFIG_GPIO=y CONFIG_NRFX_TIMER0=y CONFIG_LOG=n CONFIG_SERIAL=n CONFIG_NRFX_SPIS0=y CONFIG_NRFX_IPC=y CONFIG_MAIN_STACK_SIZE=4096
CONFIG_GPIO=y #CONFIG_IPC_SERVICE=y CONFIG_BOARD_ENABLE_CPUNET=y CONFIG_NRFX_IPC=y