1 /* 2 * Copyright (c) 2025 Silicon Laboratories Inc. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Shim for sl_interrupt_manager API using Zephyr API 7 */ 8 9 #include <zephyr/kernel.h> 10 11 #include "sl_interrupt_manager.h" 12 13 #define LOCK_KEY_DEFAULT 0xFFFFFFFFU 14 15 static unsigned int lock_key = LOCK_KEY_DEFAULT; 16 sl_interrupt_manager_disable_interrupts(void)17void sl_interrupt_manager_disable_interrupts(void) 18 { 19 __ASSERT(lock_key == LOCK_KEY_DEFAULT, "Interrupt manager doesn't support nested disable"); 20 lock_key = irq_lock(); 21 } 22 sl_interrupt_manager_enable_interrupts(void)23void sl_interrupt_manager_enable_interrupts(void) 24 { 25 irq_unlock(lock_key); 26 lock_key = LOCK_KEY_DEFAULT; 27 } 28 sl_interrupt_manager_disable_irq(int32_t irqn)29void sl_interrupt_manager_disable_irq(int32_t irqn) 30 { 31 irq_disable(irqn); 32 } 33 sl_interrupt_manager_enable_irq(int32_t irqn)34void sl_interrupt_manager_enable_irq(int32_t irqn) 35 { 36 irq_enable(irqn); 37 } 38 sl_interrupt_manager_is_irq_disabled(int32_t irqn)39bool sl_interrupt_manager_is_irq_disabled(int32_t irqn) 40 { 41 return !irq_is_enabled(irqn); 42 } 43 sl_interrupt_manager_is_irq_pending(int32_t irqn)44bool sl_interrupt_manager_is_irq_pending(int32_t irqn) 45 { 46 return NVIC_GetPendingIRQ(irqn); 47 } 48 sl_interrupt_manager_set_irq_pending(int32_t irqn)49void sl_interrupt_manager_set_irq_pending(int32_t irqn) 50 { 51 NVIC_SetPendingIRQ(irqn); 52 } 53 sl_interrupt_manager_clear_irq_pending(int32_t irqn)54void sl_interrupt_manager_clear_irq_pending(int32_t irqn) 55 { 56 NVIC_ClearPendingIRQ(irqn); 57 } 58 sl_interrupt_manager_get_irq_priority(int32_t irqn)59uint32_t sl_interrupt_manager_get_irq_priority(int32_t irqn) 60 { 61 return NVIC_GetPriority(irqn); 62 } 63 sl_interrupt_manager_set_irq_priority(int32_t irqn,uint32_t priority)64void sl_interrupt_manager_set_irq_priority(int32_t irqn, uint32_t priority) 65 { 66 NVIC_SetPriority(irqn, priority); 67 } 68 sl_interrupt_manager_get_active_irq(int32_t irqn)69uint32_t sl_interrupt_manager_get_active_irq(int32_t irqn) 70 { 71 return NVIC_GetActive(irqn); 72 } 73