SatCat5
hal_samv71/interrupts.cc
1 // Copyright 2024-2025 The Aerospace Corporation.
3 // This file is a part of SatCat5, licensed under CERN-OHL-W v2 or later.
5 
6 // SAMV71 Drivers
7 extern "C" {
8  #include <samv71.h>
9  #include <interrupt.h>
10 };
11 
12 // SatCat HAL
13 #include <hal_samv71/interrupts.h>
14 #include <hal_samv71/interrupt_handler.h>
15 
20 
22 
23 ControllerSAMV71::ControllerSAMV71() {
24  // Nothing
25 }
26 
28  // Initialize SatCat5 interrupt system.
29  init(timer);
30 
31  // Enable interrupts globally
32  cpu_irq_enable();
33 }
34 
37 }
38 
40  // Disable Interrupts
41  cpu_irq_disable();
42 }
43 
45  // Enable Interrupts
46  cpu_irq_enable();
47 }
48 
50  // Disable Interrupt
51  NVIC_DisableIRQ((IRQn_Type)(obj->m_irq_idx - NVIC_USER_IRQ_OFFSET));
52 
53  // Clear Pending Interrupt
54  NVIC_ClearPendingIRQ((IRQn_Type)(obj->m_irq_idx - NVIC_USER_IRQ_OFFSET));
55 
56  // Enable Interrupt
57  NVIC_EnableIRQ((IRQn_Type)(obj->m_irq_idx - NVIC_USER_IRQ_OFFSET));
58 }
59 
61  // Disable Interrupt
62  NVIC_DisableIRQ((IRQn_Type)(obj->m_irq_idx - NVIC_USER_IRQ_OFFSET));
63 
64  // Clear Pending Interrupt
65  NVIC_ClearPendingIRQ((IRQn_Type)(obj->m_irq_idx - NVIC_USER_IRQ_OFFSET));
66 }
67 
69  // Clear Pending Interrupt
70  NVIC_ClearPendingIRQ((IRQn_Type)(obj->m_irq_idx - NVIC_USER_IRQ_OFFSET));
71 }
72 
void init(satcat5::util::TimeRef *timer=0)
Start the interrupt controller.
static void interrupt_static(satcat5::irq::Handler *obj)
Static interrupt service routine.
Parent object for receiving interrupt-handler callbacks.
const int m_irq_idx
IRQ index for this interrupt handler.
Microchip SAM V71 implementation of the "InterruptController" API.
void irq_pause() override
Prevent preemption from "pause" until "resume".
void irq_unregister(satcat5::irq::Handler *obj) override
Un-register the callback for an interrupt handler.
void irq_start(satcat5::util::TimeRef *timer=0)
Initialize SAMV71 controller and start SatCat5 interrupts.
void irq_resume() override
Disable hardware interrupts.
void irq_acknowledge(satcat5::irq::Handler *obj) override
Post-handler acknowledgement, notification, and cleanup.
void irq_register(satcat5::irq::Handler *obj) override
Re-enable hardware interrupts.
void irq_handler(satcat5::irq::Handler *obj)
IRQ Handler.
Interrupt handler interface for the Microchip SAM V71.
The TimeRef API provides access to a monotonic time-counter.
Definition: timeref.h:142