mirror of
https://github.com/espressif/esp-idf
synced 2025-03-10 09:39:10 -04:00
esp_hw_support: Fix formatting of intr_alloc.h and test_panic.c
This commit is contained in:
parent
7c6a39ed2e
commit
50a58b4a83
@ -129,7 +129,9 @@ static vector_desc_t *find_desc_for_int(int intno, int cpu)
|
|||||||
{
|
{
|
||||||
vector_desc_t *vd = vector_desc_head;
|
vector_desc_t *vd = vector_desc_head;
|
||||||
while(vd != NULL) {
|
while(vd != NULL) {
|
||||||
if (vd->cpu==cpu && vd->intno==intno) break;
|
if (vd->cpu == cpu && vd->intno == intno) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
vd = vd->next;
|
vd = vd->next;
|
||||||
}
|
}
|
||||||
return vd;
|
return vd;
|
||||||
@ -143,7 +145,9 @@ static vector_desc_t *get_desc_for_int(int intno, int cpu)
|
|||||||
vector_desc_t *vd = find_desc_for_int(intno, cpu);
|
vector_desc_t *vd = find_desc_for_int(intno, cpu);
|
||||||
if (vd == NULL) {
|
if (vd == NULL) {
|
||||||
vector_desc_t *newvd = heap_caps_malloc(sizeof(vector_desc_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
|
vector_desc_t *newvd = heap_caps_malloc(sizeof(vector_desc_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
|
||||||
if (newvd==NULL) return NULL;
|
if (newvd == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
memset(newvd, 0, sizeof(vector_desc_t));
|
memset(newvd, 0, sizeof(vector_desc_t));
|
||||||
newvd->intno = intno;
|
newvd->intno = intno;
|
||||||
newvd->cpu = cpu;
|
newvd->cpu = cpu;
|
||||||
@ -160,7 +164,9 @@ static vector_desc_t * find_desc_for_source(int source, int cpu)
|
|||||||
vector_desc_t *vd = vector_desc_head;
|
vector_desc_t *vd = vector_desc_head;
|
||||||
while(vd != NULL) {
|
while(vd != NULL) {
|
||||||
if (!(vd->flags & VECDESC_FL_SHARED)) {
|
if (!(vd->flags & VECDESC_FL_SHARED)) {
|
||||||
if ( vd->source == source && cpu == vd->cpu ) break;
|
if (vd->source == source && cpu == vd->cpu) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else if (vd->cpu == cpu) {
|
} else if (vd->cpu == cpu) {
|
||||||
// check only shared vds for the correct cpu, otherwise skip
|
// check only shared vds for the correct cpu, otherwise skip
|
||||||
bool found = false;
|
bool found = false;
|
||||||
@ -173,7 +179,9 @@ static vector_desc_t * find_desc_for_source(int source, int cpu)
|
|||||||
}
|
}
|
||||||
svd = svd->next;
|
svd = svd->next;
|
||||||
}
|
}
|
||||||
if ( found ) break;
|
if (found) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
vd = vd->next;
|
vd = vd->next;
|
||||||
}
|
}
|
||||||
@ -182,8 +190,12 @@ static vector_desc_t * find_desc_for_source(int source, int cpu)
|
|||||||
|
|
||||||
esp_err_t esp_intr_mark_shared(int intno, int cpu, bool is_int_ram)
|
esp_err_t esp_intr_mark_shared(int intno, int cpu, bool is_int_ram)
|
||||||
{
|
{
|
||||||
if (intno>31) return ESP_ERR_INVALID_ARG;
|
if (intno>31) {
|
||||||
if (cpu>=SOC_CPU_CORES_NUM) return ESP_ERR_INVALID_ARG;
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
|
if (cpu >= SOC_CPU_CORES_NUM) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
portENTER_CRITICAL(&spinlock);
|
portENTER_CRITICAL(&spinlock);
|
||||||
vector_desc_t *vd = get_desc_for_int(intno, cpu);
|
vector_desc_t *vd = get_desc_for_int(intno, cpu);
|
||||||
@ -192,7 +204,9 @@ esp_err_t esp_intr_mark_shared(int intno, int cpu, bool is_int_ram)
|
|||||||
return ESP_ERR_NO_MEM;
|
return ESP_ERR_NO_MEM;
|
||||||
}
|
}
|
||||||
vd->flags = VECDESC_FL_SHARED;
|
vd->flags = VECDESC_FL_SHARED;
|
||||||
if (is_int_ram) vd->flags|=VECDESC_FL_INIRAM;
|
if (is_int_ram) {
|
||||||
|
vd->flags |= VECDESC_FL_INIRAM;
|
||||||
|
}
|
||||||
portEXIT_CRITICAL(&spinlock);
|
portEXIT_CRITICAL(&spinlock);
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
@ -200,8 +214,12 @@ esp_err_t esp_intr_mark_shared(int intno, int cpu, bool is_int_ram)
|
|||||||
|
|
||||||
esp_err_t esp_intr_reserve(int intno, int cpu)
|
esp_err_t esp_intr_reserve(int intno, int cpu)
|
||||||
{
|
{
|
||||||
if (intno>31) return ESP_ERR_INVALID_ARG;
|
if (intno > 31) {
|
||||||
if (cpu>=SOC_CPU_CORES_NUM) return ESP_ERR_INVALID_ARG;
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
|
if (cpu >= SOC_CPU_CORES_NUM) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
portENTER_CRITICAL(&spinlock);
|
portENTER_CRITICAL(&spinlock);
|
||||||
vector_desc_t *vd = get_desc_for_int(intno, cpu);
|
vector_desc_t *vd = get_desc_for_int(intno, cpu);
|
||||||
@ -232,9 +250,9 @@ static bool is_vect_desc_usable(vector_desc_t *vd, int flags, int cpu, int force
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SOC_CPU_HAS_FLEXIBLE_INTC
|
#ifndef SOC_CPU_HAS_FLEXIBLE_INTC
|
||||||
//Check if the interrupt level is acceptable
|
//Check if the interrupt priority is acceptable
|
||||||
if (!(flags & (1 << intr_desc.priority))) {
|
if (!(flags & (1 << intr_desc.priority))) {
|
||||||
ALCHLOG("....Unusable: incompatible level");
|
ALCHLOG("....Unusable: incompatible priority");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//check if edge/level type matches what we want
|
//check if edge/level type matches what we want
|
||||||
@ -289,7 +307,7 @@ static int get_available_int(int flags, int cpu, int force, int source)
|
|||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
int best=-1;
|
int best=-1;
|
||||||
int bestLevel=9;
|
int bestPriority=9;
|
||||||
int bestSharedCt=INT_MAX;
|
int bestSharedCt=INT_MAX;
|
||||||
|
|
||||||
//Default vector desc, for vectors not in the linked list
|
//Default vector desc, for vectors not in the linked list
|
||||||
@ -297,7 +315,9 @@ static int get_available_int(int flags, int cpu, int force, int source)
|
|||||||
memset(&empty_vect_desc, 0, sizeof(vector_desc_t));
|
memset(&empty_vect_desc, 0, sizeof(vector_desc_t));
|
||||||
|
|
||||||
//Level defaults to any low/med interrupt
|
//Level defaults to any low/med interrupt
|
||||||
if (!(flags&ESP_INTR_FLAG_LEVELMASK)) flags|=ESP_INTR_FLAG_LOWMED;
|
if (!(flags & ESP_INTR_FLAG_LEVELMASK)) {
|
||||||
|
flags |= ESP_INTR_FLAG_LOWMED;
|
||||||
|
}
|
||||||
|
|
||||||
ALCHLOG("get_available_int: try to find existing. Cpu: %d, Source: %d", cpu, source);
|
ALCHLOG("get_available_int: try to find existing. Cpu: %d, Source: %d", cpu, source);
|
||||||
vector_desc_t *vd = find_desc_for_source(source, cpu);
|
vector_desc_t *vd = find_desc_for_source(source, cpu);
|
||||||
@ -343,11 +363,13 @@ static int get_available_int(int flags, int cpu, int force, int source)
|
|||||||
esp_cpu_intr_desc_t intr_desc;
|
esp_cpu_intr_desc_t intr_desc;
|
||||||
esp_cpu_intr_get_desc(cpu, x, &intr_desc);
|
esp_cpu_intr_get_desc(cpu, x, &intr_desc);
|
||||||
|
|
||||||
ALCHLOG("Int %d reserved %d level %d %s hasIsr %d",
|
ALCHLOG("Int %d reserved %d priority %d %s hasIsr %d",
|
||||||
x, intr_desc.flags & ESP_CPU_INTR_DESC_FLAG_RESVD, intr_desc.priority,
|
x, intr_desc.flags & ESP_CPU_INTR_DESC_FLAG_RESVD, intr_desc.priority,
|
||||||
intr_desc.type == ESP_CPU_INTR_TYPE_LEVEL? "LEVEL" : "EDGE", esp_cpu_intr_has_handler(x));
|
intr_desc.type == ESP_CPU_INTR_TYPE_LEVEL? "LEVEL" : "EDGE", esp_cpu_intr_has_handler(x));
|
||||||
|
|
||||||
if ( !is_vect_desc_usable(vd, flags, cpu, force) ) continue;
|
if (!is_vect_desc_usable(vd, flags, cpu, force)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & ESP_INTR_FLAG_SHARED) {
|
if (flags & ESP_INTR_FLAG_SHARED) {
|
||||||
//We're allocating a shared int.
|
//We're allocating a shared int.
|
||||||
@ -362,11 +384,11 @@ static int get_available_int(int flags, int cpu, int force, int source)
|
|||||||
no++;
|
no++;
|
||||||
svdesc = svdesc->next;
|
svdesc = svdesc->next;
|
||||||
}
|
}
|
||||||
if (no<bestSharedCt || bestLevel>intr_desc.priority) {
|
if (no<bestSharedCt || bestPriority > intr_desc.priority) {
|
||||||
//Seems like this shared vector is both okay and has the least amount of ISRs already attached to it.
|
//Seems like this shared vector is both okay and has the least amount of ISRs already attached to it.
|
||||||
best = x;
|
best = x;
|
||||||
bestSharedCt = no;
|
bestSharedCt = no;
|
||||||
bestLevel=intr_desc.priority;
|
bestPriority = intr_desc.priority;
|
||||||
ALCHLOG("...int %d more usable as a shared int: has %d existing vectors", x, no);
|
ALCHLOG("...int %d more usable as a shared int: has %d existing vectors", x, no);
|
||||||
} else {
|
} else {
|
||||||
ALCHLOG("...worse than int %d", best);
|
ALCHLOG("...worse than int %d", best);
|
||||||
@ -376,9 +398,9 @@ static int get_available_int(int flags, int cpu, int force, int source)
|
|||||||
//We haven't found a feasible shared interrupt yet. This one is still free and usable, even if
|
//We haven't found a feasible shared interrupt yet. This one is still free and usable, even if
|
||||||
//not marked as shared.
|
//not marked as shared.
|
||||||
//Remember it in case we don't find any other shared interrupt that qualifies.
|
//Remember it in case we don't find any other shared interrupt that qualifies.
|
||||||
if (bestLevel>intr_desc.priority) {
|
if (bestPriority > intr_desc.priority) {
|
||||||
best = x;
|
best = x;
|
||||||
bestLevel=intr_desc.priority;
|
bestPriority = intr_desc.priority;
|
||||||
ALCHLOG("...int %d usable as a new shared int", x);
|
ALCHLOG("...int %d usable as a new shared int", x);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -387,9 +409,9 @@ static int get_available_int(int flags, int cpu, int force, int source)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//Seems this interrupt is feasible. Select it and break out of the loop; no need to search further.
|
//Seems this interrupt is feasible. Select it and break out of the loop; no need to search further.
|
||||||
if (bestLevel>intr_desc.priority) {
|
if (bestPriority > intr_desc.priority) {
|
||||||
best = x;
|
best = x;
|
||||||
bestLevel=intr_desc.priority;
|
bestPriority = intr_desc.priority;
|
||||||
} else {
|
} else {
|
||||||
ALCHLOG("...worse than int %d", best);
|
ALCHLOG("...worse than int %d", best);
|
||||||
}
|
}
|
||||||
@ -449,13 +471,21 @@ esp_err_t esp_intr_alloc_intrstatus(int source, int flags, uint32_t intrstatusre
|
|||||||
int force = -1;
|
int force = -1;
|
||||||
ESP_EARLY_LOGV(TAG, "esp_intr_alloc_intrstatus (cpu %u): checking args", esp_cpu_get_core_id());
|
ESP_EARLY_LOGV(TAG, "esp_intr_alloc_intrstatus (cpu %u): checking args", esp_cpu_get_core_id());
|
||||||
//Shared interrupts should be level-triggered.
|
//Shared interrupts should be level-triggered.
|
||||||
if ((flags&ESP_INTR_FLAG_SHARED) && (flags&ESP_INTR_FLAG_EDGE)) return ESP_ERR_INVALID_ARG;
|
if ((flags & ESP_INTR_FLAG_SHARED) && (flags & ESP_INTR_FLAG_EDGE)) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
//You can't set an handler / arg for a non-C-callable interrupt.
|
//You can't set an handler / arg for a non-C-callable interrupt.
|
||||||
if ((flags&ESP_INTR_FLAG_HIGH) && (handler)) return ESP_ERR_INVALID_ARG;
|
if ((flags & ESP_INTR_FLAG_HIGH) && (handler)) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
//Shared ints should have handler and non-processor-local source
|
//Shared ints should have handler and non-processor-local source
|
||||||
if ((flags&ESP_INTR_FLAG_SHARED) && (!handler || source<0)) return ESP_ERR_INVALID_ARG;
|
if ((flags & ESP_INTR_FLAG_SHARED) && (!handler || source<0)) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
//Statusreg should have a mask
|
//Statusreg should have a mask
|
||||||
if (intrstatusreg && !intrstatusmask) return ESP_ERR_INVALID_ARG;
|
if (intrstatusreg && !intrstatusmask) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
//If the ISR is marked to be IRAM-resident, the handler must not be in the cached region
|
//If the ISR is marked to be IRAM-resident, the handler must not be in the cached region
|
||||||
//ToDo: if we are to allow placing interrupt handlers into the 0x400c0000—0x400c2000 region,
|
//ToDo: if we are to allow placing interrupt handlers into the 0x400c0000—0x400c2000 region,
|
||||||
//we need to make sure the interrupt is connected to the CPU0.
|
//we need to make sure the interrupt is connected to the CPU0.
|
||||||
@ -483,16 +513,30 @@ esp_err_t esp_intr_alloc_intrstatus(int source, int flags, uint32_t intrstatusre
|
|||||||
|
|
||||||
//Check 'special' interrupt sources. These are tied to one specific interrupt, so we
|
//Check 'special' interrupt sources. These are tied to one specific interrupt, so we
|
||||||
//have to force get_free_int to only look at that.
|
//have to force get_free_int to only look at that.
|
||||||
if (source==ETS_INTERNAL_TIMER0_INTR_SOURCE) force=ETS_INTERNAL_TIMER0_INTR_NO;
|
if (source == ETS_INTERNAL_TIMER0_INTR_SOURCE) {
|
||||||
if (source==ETS_INTERNAL_TIMER1_INTR_SOURCE) force=ETS_INTERNAL_TIMER1_INTR_NO;
|
force = ETS_INTERNAL_TIMER0_INTR_NO;
|
||||||
if (source==ETS_INTERNAL_TIMER2_INTR_SOURCE) force=ETS_INTERNAL_TIMER2_INTR_NO;
|
}
|
||||||
if (source==ETS_INTERNAL_SW0_INTR_SOURCE) force=ETS_INTERNAL_SW0_INTR_NO;
|
if (source == ETS_INTERNAL_TIMER1_INTR_SOURCE) {
|
||||||
if (source==ETS_INTERNAL_SW1_INTR_SOURCE) force=ETS_INTERNAL_SW1_INTR_NO;
|
force = ETS_INTERNAL_TIMER1_INTR_NO;
|
||||||
if (source==ETS_INTERNAL_PROFILING_INTR_SOURCE) force=ETS_INTERNAL_PROFILING_INTR_NO;
|
}
|
||||||
|
if (source == ETS_INTERNAL_TIMER2_INTR_SOURCE) {
|
||||||
|
force = ETS_INTERNAL_TIMER2_INTR_NO;
|
||||||
|
}
|
||||||
|
if (source == ETS_INTERNAL_SW0_INTR_SOURCE) {
|
||||||
|
force = ETS_INTERNAL_SW0_INTR_NO;
|
||||||
|
}
|
||||||
|
if (source == ETS_INTERNAL_SW1_INTR_SOURCE) {
|
||||||
|
force = ETS_INTERNAL_SW1_INTR_NO;
|
||||||
|
}
|
||||||
|
if (source == ETS_INTERNAL_PROFILING_INTR_SOURCE) {
|
||||||
|
force = ETS_INTERNAL_PROFILING_INTR_NO;
|
||||||
|
}
|
||||||
|
|
||||||
//Allocate a return handle. If we end up not needing it, we'll free it later on.
|
//Allocate a return handle. If we end up not needing it, we'll free it later on.
|
||||||
ret = heap_caps_malloc(sizeof(intr_handle_data_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
|
ret = heap_caps_malloc(sizeof(intr_handle_data_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
|
||||||
if (ret==NULL) return ESP_ERR_NO_MEM;
|
if (ret == NULL) {
|
||||||
|
return ESP_ERR_NO_MEM;
|
||||||
|
}
|
||||||
|
|
||||||
portENTER_CRITICAL(&spinlock);
|
portENTER_CRITICAL(&spinlock);
|
||||||
uint32_t cpu = esp_cpu_get_core_id();
|
uint32_t cpu = esp_cpu_get_core_id();
|
||||||
@ -620,7 +664,9 @@ esp_err_t esp_intr_alloc(int source, int flags, intr_handler_t handler, void *ar
|
|||||||
|
|
||||||
esp_err_t IRAM_ATTR esp_intr_set_in_iram(intr_handle_t handle, bool is_in_iram)
|
esp_err_t IRAM_ATTR esp_intr_set_in_iram(intr_handle_t handle, bool is_in_iram)
|
||||||
{
|
{
|
||||||
if (!handle) return ESP_ERR_INVALID_ARG;
|
if (!handle) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
vector_desc_t *vd = handle->vector_desc;
|
vector_desc_t *vd = handle->vector_desc;
|
||||||
if (vd->flags & VECDESC_FL_SHARED) {
|
if (vd->flags & VECDESC_FL_SHARED) {
|
||||||
return ESP_ERR_INVALID_ARG;
|
return ESP_ERR_INVALID_ARG;
|
||||||
@ -648,7 +694,9 @@ static void esp_intr_free_cb(void *arg)
|
|||||||
esp_err_t esp_intr_free(intr_handle_t handle)
|
esp_err_t esp_intr_free(intr_handle_t handle)
|
||||||
{
|
{
|
||||||
bool free_shared_vector=false;
|
bool free_shared_vector=false;
|
||||||
if (!handle) return ESP_ERR_INVALID_ARG;
|
if (!handle) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
#if !CONFIG_FREERTOS_UNICORE
|
#if !CONFIG_FREERTOS_UNICORE
|
||||||
//Assign this routine to the core where this interrupt is allocated on.
|
//Assign this routine to the core where this interrupt is allocated on.
|
||||||
@ -680,8 +728,13 @@ esp_err_t esp_intr_free(intr_handle_t handle)
|
|||||||
svd = svd->next;
|
svd = svd->next;
|
||||||
}
|
}
|
||||||
//If nothing left, disable interrupt.
|
//If nothing left, disable interrupt.
|
||||||
if (handle->vector_desc->shared_vec_info==NULL) free_shared_vector=true;
|
if (handle->vector_desc->shared_vec_info == NULL) {
|
||||||
ESP_EARLY_LOGV(TAG, "esp_intr_free: Deleting shared int: %s. Shared int is %s", svd?"not found or last one":"deleted", free_shared_vector?"empty now.":"still in use");
|
free_shared_vector = true;
|
||||||
|
}
|
||||||
|
ESP_EARLY_LOGV(TAG,
|
||||||
|
"esp_intr_free: Deleting shared int: %s. Shared int is %s",
|
||||||
|
svd ? "not found or last one" : "deleted",
|
||||||
|
free_shared_vector ? "empty now." : "still in use");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((handle->vector_desc->flags & VECDESC_FL_NONSHARED) || free_shared_vector) {
|
if ((handle->vector_desc->flags & VECDESC_FL_NONSHARED) || free_shared_vector) {
|
||||||
@ -731,7 +784,9 @@ int esp_intr_get_cpu(intr_handle_t handle)
|
|||||||
|
|
||||||
esp_err_t IRAM_ATTR esp_intr_enable(intr_handle_t handle)
|
esp_err_t IRAM_ATTR esp_intr_enable(intr_handle_t handle)
|
||||||
{
|
{
|
||||||
if (!handle) return ESP_ERR_INVALID_ARG;
|
if (!handle) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
portENTER_CRITICAL_SAFE(&spinlock);
|
portENTER_CRITICAL_SAFE(&spinlock);
|
||||||
int source;
|
int source;
|
||||||
if (handle->shared_vector_desc) {
|
if (handle->shared_vector_desc) {
|
||||||
@ -745,7 +800,9 @@ esp_err_t IRAM_ATTR esp_intr_enable(intr_handle_t handle)
|
|||||||
esp_rom_route_intr_matrix(handle->vector_desc->cpu, source, handle->vector_desc->intno);
|
esp_rom_route_intr_matrix(handle->vector_desc->cpu, source, handle->vector_desc->intno);
|
||||||
} else {
|
} else {
|
||||||
//Re-enable using cpu int ena reg
|
//Re-enable using cpu int ena reg
|
||||||
if (handle->vector_desc->cpu!=esp_cpu_get_core_id()) return ESP_ERR_INVALID_ARG; //Can only enable these ints on this cpu
|
if (handle->vector_desc->cpu != esp_cpu_get_core_id()) {
|
||||||
|
return ESP_ERR_INVALID_ARG; //Can only enable these ints on this cpu
|
||||||
|
}
|
||||||
ESP_INTR_ENABLE(handle->vector_desc->intno);
|
ESP_INTR_ENABLE(handle->vector_desc->intno);
|
||||||
}
|
}
|
||||||
portEXIT_CRITICAL_SAFE(&spinlock);
|
portEXIT_CRITICAL_SAFE(&spinlock);
|
||||||
@ -754,7 +811,9 @@ esp_err_t IRAM_ATTR esp_intr_enable(intr_handle_t handle)
|
|||||||
|
|
||||||
esp_err_t IRAM_ATTR esp_intr_disable(intr_handle_t handle)
|
esp_err_t IRAM_ATTR esp_intr_disable(intr_handle_t handle)
|
||||||
{
|
{
|
||||||
if (!handle) return ESP_ERR_INVALID_ARG;
|
if (!handle) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
portENTER_CRITICAL_SAFE(&spinlock);
|
portENTER_CRITICAL_SAFE(&spinlock);
|
||||||
int source;
|
int source;
|
||||||
bool disabled = 1;
|
bool disabled = 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user