multicore.h
1/*
2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef _PICO_MULTICORE_H
8#define _PICO_MULTICORE_H
9
10#include "pico/types.h"
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16void multicore_reset_core1(void);
17void multicore_launch_core1(void (*entry)(void));
18void multicore_launch_core1_with_stack(void (*entry)(void), uint32_t *stack_bottom, size_t stack_size_bytes);
19void multicore_launch_core1_raw(void (*entry)(void), uint32_t *sp, uint32_t vector_table);
20
21bool multicore_fifo_rvalid(void);
22bool multicore_fifo_wready(void);
23void multicore_fifo_push_blocking(uint32_t data);
24bool multicore_fifo_push_timeout_us(uint32_t data, uint64_t timeout_us);
26bool multicore_fifo_pop_timeout_us(uint64_t timeout_us, uint32_t *out);
27void multicore_fifo_drain(void);
29uint32_t multicore_fifo_get_status(void);
30
31// call this from the lockout victim thread
33
34// start locking out the other core (it will be
35bool multicore_lockout_start_timeout_us(uint64_t timeout_us);
37
38bool multicore_lockout_end_timeout_us(uint64_t timeout_us);
40
41#ifdef __cplusplus
42}
43#endif
44
45#endif
bool multicore_fifo_push_timeout_us(uint32_t data, uint64_t timeout_us)
Push data on to the write FIFO (data to the other core) with timeout.
Definition: multicore.c:33
void multicore_fifo_push_blocking(uint32_t data)
Push data on to the write FIFO (data to the other core).
Definition: multicore.c:29
bool multicore_fifo_pop_timeout_us(uint64_t timeout_us, uint32_t *out)
Pop data from the read FIFO (data from the other core) with timeout.
Definition: multicore.c:61
static void multicore_fifo_drain(void)
Discard any data in the read FIFO.
Definition: multicore.h:186
static bool multicore_fifo_wready(void)
Check the write FIFO to see if it has space for more data.
Definition: multicore.h:126
static uint32_t multicore_fifo_get_status(void)
Get FIFO statuses.
Definition: multicore.h:221
uint32_t multicore_fifo_pop_blocking(void)
Pop data from the read FIFO (data from the other core).
Definition: multicore.c:57
static void multicore_fifo_clear_irq(void)
Clear FIFO interrupt.
Definition: multicore.h:201
static bool multicore_fifo_rvalid(void)
Check the read FIFO to see if there is data available (sent by the other core)
Definition: multicore.h:115
void multicore_lockout_victim_init(void)
Initialize the current core such that it can be a "victim" of lockout (i.e. forced to pause in a know...
Definition: multicore.c:195
void multicore_lockout_start_blocking(void)
Request the other core to pause in a known state and wait for it to do so.
Definition: multicore.c:245
bool multicore_lockout_start_timeout_us(uint64_t timeout_us)
Request the other core to pause in a known state and wait up to a time limit for it to do so.
Definition: multicore.c:241
void multicore_lockout_end_blocking(void)
Release the other core from a locked out state amd wait for it to acknowledge.
Definition: multicore.c:267
bool multicore_lockout_end_timeout_us(uint64_t timeout_us)
Release the other core from a locked out state amd wait up to a time limit for it to acknowledge.
Definition: multicore.c:263
void multicore_launch_core1(void(*entry)(void))
Run code on core 1.
Definition: multicore.c:120
void multicore_launch_core1_with_stack(void(*entry)(void), uint32_t *stack_bottom, size_t stack_size_bytes)
Launch code on core 1 with stack.
Definition: multicore.c:109
void multicore_launch_core1_raw(void(*entry)(void), uint32_t *sp, uint32_t vector_table)
Launch code on core 1 with no stack protection.
Definition: multicore.c:128
void multicore_reset_core1(void)
Reset core 1.
Definition: multicore.c:92