mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 18:57:19 +02:00
Merge branch 'bugfix/phy_critical_v4.0' into 'release/v4.0'
fix bug that phy_enter_critical cannot effect on dual-core See merge request espressif/esp-idf!6941
This commit is contained in:
@ -67,14 +67,28 @@ static _lock_t s_modem_sleep_lock;
|
|||||||
/* time stamp updated when the PHY/RF is turned on */
|
/* time stamp updated when the PHY/RF is turned on */
|
||||||
static int64_t s_phy_rf_en_ts = 0;
|
static int64_t s_phy_rf_en_ts = 0;
|
||||||
|
|
||||||
|
static DRAM_ATTR portMUX_TYPE s_phy_int_mux = portMUX_INITIALIZER_UNLOCKED;
|
||||||
|
|
||||||
uint32_t IRAM_ATTR phy_enter_critical(void)
|
uint32_t IRAM_ATTR phy_enter_critical(void)
|
||||||
{
|
{
|
||||||
return portENTER_CRITICAL_NESTED();
|
if (xPortInIsrContext()) {
|
||||||
|
portENTER_CRITICAL_ISR(&s_phy_int_mux);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
portENTER_CRITICAL(&s_phy_int_mux);
|
||||||
|
}
|
||||||
|
// Interrupt level will be stored in current tcb, so always return zero.
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IRAM_ATTR phy_exit_critical(uint32_t level)
|
void IRAM_ATTR phy_exit_critical(uint32_t level)
|
||||||
{
|
{
|
||||||
portEXIT_CRITICAL_NESTED(level);
|
// Param level don't need any more, ignore it.
|
||||||
|
if (xPortInIsrContext()) {
|
||||||
|
portEXIT_CRITICAL_ISR(&s_phy_int_mux);
|
||||||
|
} else {
|
||||||
|
portEXIT_CRITICAL(&s_phy_int_mux);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t esp_phy_rf_get_on_ts(void)
|
int64_t esp_phy_rf_get_on_ts(void)
|
||||||
|
Reference in New Issue
Block a user