/* * Returns true if the current core is in ISR context; low prio ISR, med prio ISR or timer tick ISR. High prio ISRs * aren't detected here, but they normally cannot call C code, so that should not be an issue anyway. */ BaseType_t xPortInIsrContext() { unsigned int irqStatus; BaseType_t ret; irqStatus=portENTER_CRITICAL_NESTED(); ret=(port_interruptNesting[xPortGetCoreID()] != 0); portEXIT_CRITICAL_NESTED(irqStatus); return ret; }
/* stall other cpu that this cpu is pending to access dport register start */ void IRAM_ATTR esp_dport_access_stall_other_cpu_start(void) { #ifndef CONFIG_FREERTOS_UNICORE int cpu_id = xPortGetCoreID(); if (dport_core_state[0] == DPORT_CORE_STATE_IDLE || dport_core_state[1] == DPORT_CORE_STATE_IDLE) { return; } #ifdef DPORT_ACCESS_BENCHMARK ccount_start[cpu_id] = XTHAL_GET_CCOUNT(); #endif BaseType_t intLvl=portENTER_CRITICAL_NESTED(); oldInterruptLevel[cpu_id]=intLvl; if (dport_access_ref[cpu_id] == 0) { portENTER_CRITICAL_ISR(&g_dport_mux); dport_access_start[cpu_id] = 0; dport_access_end[cpu_id] = 0; if (cpu_id == 0) { _DPORT_REG_WRITE(DPORT_CPU_INTR_FROM_CPU_3_REG, DPORT_CPU_INTR_FROM_CPU_3); //interrupt on cpu1 } else { _DPORT_REG_WRITE(DPORT_CPU_INTR_FROM_CPU_2_REG, DPORT_CPU_INTR_FROM_CPU_2); //interrupt on cpu0 } while (!dport_access_start[cpu_id]) {}; REG_READ(SPI_DATE_REG(3)); //just read a APB register sure that the APB-bus is idle } dport_access_ref[cpu_id]++; #endif /* CONFIG_FREERTOS_UNICORE */ }
void vPortCPUReleaseMutex(portMUX_TYPE *mux) { unsigned int irqStatus = portENTER_CRITICAL_NESTED(); vPortCPUReleaseMutexIntsDisabled(mux); portEXIT_CRITICAL_NESTED(irqStatus); }
void vPortCPUReleaseMutex(portMUX_TYPE *mux, const char *fnName, int line) { unsigned int irqStatus = portENTER_CRITICAL_NESTED(); vPortCPUReleaseMutexIntsDisabled(mux, fnName, line); portEXIT_CRITICAL_NESTED(irqStatus); }
bool vPortCPUAcquireMutexTimeout(portMUX_TYPE *mux, int timeout_cycles) { unsigned int irqStatus = portENTER_CRITICAL_NESTED(); bool result = vPortCPUAcquireMutexIntsDisabled(mux, timeout_cycles); portEXIT_CRITICAL_NESTED(irqStatus); return result; }
void vPortCPUAcquireMutex(portMUX_TYPE *mux) { unsigned int irqStatus = portENTER_CRITICAL_NESTED(); vPortCPUAcquireMutexIntsDisabled(mux, portMUX_NO_TIMEOUT); portEXIT_CRITICAL_NESTED(irqStatus); }
uint32_t IRAM_ATTR phy_enter_critical(void) { return portENTER_CRITICAL_NESTED(); }