Select one of the symbols to view example projects that use it.
 
Outline
#include "sdkconfig.h"
esp_ipc_isr_call(esp_ipc_isr_func_t, void *);
#define esp_ipc_isr_asm_call
esp_ipc_isr_call_blocking(esp_ipc_isr_func_t, void *);
#define esp_ipc_isr_asm_call_blocking
esp_ipc_isr_stall_other_cpu();
esp_ipc_isr_release_other_cpu();
esp_ipc_isr_stall_pause();
esp_ipc_isr_stall_abort();
esp_ipc_isr_stall_resume();
#define esp_ipc_isr_stall_other_cpu
#define esp_ipc_isr_release_other_cpu
#define esp_ipc_isr_stall_pause
#define esp_ipc_isr_stall_abort
#define esp_ipc_isr_stall_resume
Files
ESP-IDF
components
app_trace
app_update
bootloader_support
bt
cmock
console
cxx
driver
efuse
esp_adc
esp_app_format
esp_bootloader_format
esp_coex
esp_common
esp_driver_ana_cmpr
esp_driver_cam
esp_driver_dac
esp_driver_gpio
esp_driver_gptimer
esp_driver_i2c
esp_driver_i2s
esp_driver_jpeg
esp_driver_ledc
esp_driver_mcpwm
esp_driver_parlio
esp_driver_pcnt
esp_driver_rmt
esp_driver_sdio
esp_driver_sdm
esp_driver_sdmmc
esp_driver_sdspi
esp_driver_spi
esp_driver_tsens
esp_driver_uart
esp_driver_usb_serial_jtag
esp_eth
esp_event
esp_gdbstub
esp_hid
esp_http_client
esp_http_server
esp_https_ota
esp_https_server
esp_hw_support
esp_lcd
esp_local_ctrl
esp_mm
esp_netif
esp_partition
esp_phy
esp_pm
esp_psram
esp_ringbuf
esp_rom
esp_security
esp_system
include
esp_private
port
task_wdt
esp_timer
esp_vfs_console
esp_wifi
esp-tls
espcoredump
hal
heap
http_parser
ieee802154
log
mqtt
newlib
nvs_flash
nvs_sec_provider
openthread
perfmon
protobuf-c
protocomm
pthread
rt
sdmmc
soc
spi_flash
spiffs
tcp_transport
ulp
unity
vfs
wear_levelling
wifi_provisioning
wpa_supplicant
xtensa
examples
lwIP
FreeRTOS
cJSON
mbedTLS
SourceVuESP-IDF Framework and ExamplesESP-IDFcomponents/esp_system/include/esp_ipc_isr.h
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 *//* ... */ #pragma once #include "sdkconfig.h" #ifdef __cplusplus extern "C" { #endif #ifdef CONFIG_ESP_IPC_ISR_ENABLE /** * @brief IPC ISR Callback * * The callback must be written: * - in assembly for XTENSA chips (such as ESP32, ESP32S3). * - in C or assembly for RISCV chips (such as ESP32P4). * * A callback of this type should be provided as an argument when calling esp_ipc_isr_call() or * esp_ipc_isr_call_blocking(). *//* ... */ typedef void (*esp_ipc_isr_func_t)(void* arg); /** * @brief Execute an ISR callback on the other CPU * * Execute a given callback on the other CPU in the context of a High Priority Interrupt. * * - This function will busy-wait in a critical section until the other CPU has started execution of the callback * - The callback must be written: * - in assembly for XTENSA chips (such as ESP32, ESP32S3). * The function is invoked using a CALLX0 instruction and can use only a2, a3, a4 registers. * See :doc:`IPC in Interrupt Context </api-reference/system/ipc>` doc for more details. * - in C or assembly for RISCV chips (such as ESP32P4). * * @note This function is not available in single-core mode. * * @param[in] func Pointer to a function of type void func(void* arg) to be executed * @param[in] arg Arbitrary argument of type void* to be passed into the function *//* ... */ void esp_ipc_isr_call(esp_ipc_isr_func_t func, void* arg) ; /** * @brief Execute an ISR callback on the other CPU * See esp_ipc_isr_call(). *//* ... */ #define esp_ipc_isr_asm_call(func, arg) esp_ipc_isr_call(func, arg) /** * @brief Execute an ISR callback on the other CPU and busy-wait until it completes * * This function is identical to esp_ipc_isr_call() except that this function will busy-wait until the execution of * the callback completes. * * @note This function is not available in single-core mode. * * @param[in] func Pointer to a function of type void func(void* arg) to be executed * @param[in] arg Arbitrary argument of type void* to be passed into the function *//* ... */ void esp_ipc_isr_call_blocking(esp_ipc_isr_func_t func, void* arg); /** * @brief Execute an ISR callback on the other CPU and busy-wait until it completes * See esp_ipc_isr_call_blocking(). *//* ... */ #define esp_ipc_isr_asm_call_blocking(func, arg) esp_ipc_isr_call_blocking(func, arg) /** * @brief Stall the other CPU * * This function will stall the other CPU. The other CPU is stalled by busy-waiting in the context of a High Priority * Interrupt. The other CPU will not be resumed until esp_ipc_isr_release_other_cpu() is called. * * - This function is internally implemented using IPC ISR * - This function is used for DPORT workaround. * - If the stall feature is paused using esp_ipc_isr_stall_pause(), this function will have no effect * * @note This function is not available in single-core mode. * @note It is the caller's responsibility to avoid deadlocking on spinlocks *//* ... */ void esp_ipc_isr_stall_other_cpu(void); /** * @brief Release the other CPU * * This function will release the other CPU that was previously stalled from calling esp_ipc_isr_stall_other_cpu() * * - This function is used for DPORT workaround. * - If the stall feature is paused using esp_ipc_isr_stall_pause(), this function will have no effect * * @note This function is not available in single-core mode. *//* ... */ void esp_ipc_isr_release_other_cpu(void); /** * @brief Puase the CPU stall feature * * This function will pause the CPU stall feature. Once paused, calls to esp_ipc_isr_stall_other_cpu() and * esp_ipc_isr_release_other_cpu() will have no effect. If a IPC ISR call is already in progress, this function will * busy-wait until the call completes before pausing the CPU stall feature. *//* ... */ void esp_ipc_isr_stall_pause(void); /** * @brief Abort a CPU stall * * This function will abort any stalling routine of the other CPU due to a pervious call to * esp_ipc_isr_stall_other_cpu(). This function aborts the stall in a non-recoverable manner, thus should only be called * in case of a panic(). * * - This function is used in panic handling code *//* ... */ void esp_ipc_isr_stall_abort(void); /** * @brief Resume the CPU stall feature * * This function will resume the CPU stall feature that was previously paused by calling esp_ipc_isr_stall_pause(). Once * resumed, calls to esp_ipc_isr_stall_other_cpu() and esp_ipc_isr_release_other_cpu() will have effect again. *//* ... */ void esp_ipc_isr_stall_resume(void); /* ... */ #else // CONFIG_ESP_IPC_ISR_ENABLE #define esp_ipc_isr_stall_other_cpu() #define esp_ipc_isr_release_other_cpu() #define esp_ipc_isr_stall_pause() #define esp_ipc_isr_stall_abort() #define esp_ipc_isr_stall_resume()5 defines /* ... */ #endif // CONFIG_ESP_IPC_ISR_ENABLE #ifdef __cplusplus }{...} #endif
Details