libdragon
Data Structures | Defines | Typedefs | Functions | Variables
interrupt.c File Reference

Interrupt Controller. More...

#include <malloc.h>
#include "libdragon.h"
#include "regsinternal.h"

Data Structures

struct  callback_link
 Structure of an interrupt callback. More...

Defines

#define MI_INTR_SP   0x01
 SP interrupt bit.
#define MI_INTR_SI   0x02
 SI interrupt bit.
#define MI_INTR_AI   0x04
 AI interrupt bit.
#define MI_INTR_VI   0x08
 VI interrupt bit.
#define MI_INTR_PI   0x10
 PI interrupt bit.
#define MI_INTR_DP   0x20
 DP interrupt bit.
#define MI_MASK_SP   0x01
 SP mask bit.
#define MI_MASK_SI   0x02
 SI mask bit.
#define MI_MASK_AI   0x04
 AI mask bit.
#define MI_MASK_VI   0x08
 VI mask bit.
#define MI_MASK_PI   0x10
 PI mask bit.
#define MI_MASK_DP   0x20
 DP mask bit.
#define MI_MASK_CLR_SP   0x0001
 Clear SP mask.
#define MI_MASK_SET_SP   0x0002
 Set SP mask.
#define MI_MASK_CLR_SI   0x0004
 Clear SI mask.
#define MI_MASK_SET_SI   0x0008
 Set SI mask.
#define MI_MASK_CLR_AI   0x0010
 Clear AI mask.
#define MI_MASK_SET_AI   0x0020
 Set AI mask.
#define MI_MASK_CLR_VI   0x0040
 Clear VI mask.
#define MI_MASK_SET_VI   0x0080
 Set VI mask.
#define MI_MASK_CLR_PI   0x0100
 Clear PI mask.
#define MI_MASK_SET_PI   0x0200
 Set PI mask.
#define MI_MASK_CLR_DP   0x0400
 Clear DP mask.
#define MI_MASK_SET_DP   0x0800
 Set DP mask.
#define PI_CLEAR_INTERRUPT   0x02
 Bit to set to clear the PI interrupt.
#define SI_CLEAR_INTERRUPT   0
 Bit to set to clear the SI interrupt.
#define SP_CLEAR_INTERRUPT   0x08
 Bit to set to clear the SP interrupt.
#define DP_CLEAR_INTERRUPT   0x0800
 Bit to set to clear the DP interrupt.
#define AI_CLEAR_INTERRUPT   0
 Bit to set to clear the AI interrupt.

Typedefs

typedef struct callback_link _callback_link
 Structure of an interrupt callback.

Functions

static void __call_callback (struct callback_link *head)
 Call each callback in a linked list of callbacks.
static void __register_callback (struct callback_link **head, void(*callback)())
 Add a callback to a linked list of callbacks.
static void __unregister_callback (struct callback_link **head, void(*callback)())
 Remove a callback from a linked list of callbacks.
void __MI_handler (void)
 Handle an MI interrupt.
void __TI_handler (void)
 Handle a timer interrupt.
void register_AI_handler (void(*callback)())
 Register an AI callback.
void unregister_AI_handler (void(*callback)())
 Unregister an AI callback.
void register_VI_handler (void(*callback)())
 Register a VI callback.
void unregister_VI_handler (void(*callback)())
 Unregister a VI callback.
void register_PI_handler (void(*callback)())
 Register a PI callback.
void unregister_PI_handler (void(*callback)())
 Unegister a PI callback.
void register_DP_handler (void(*callback)())
 Register a DP callback.
void unregister_DP_handler (void(*callback)())
 Unregister a DP callback.
void register_TI_handler (void(*callback)())
 Register a TI callback.
void unregister_TI_handler (void(*callback)())
 Unegister a TI callback.
void register_SI_handler (void(*callback)())
 Register a SI callback.
void unregister_SI_handler (void(*callback)())
 Unegister a SI callback.
void register_SP_handler (void(*callback)())
 Register a SP callback.
void unregister_SP_handler (void(*callback)())
 Unegister a SP callback.
void set_AI_interrupt (int active)
 Enable or disable the AI interrupt.
void set_VI_interrupt (int active, unsigned long line)
 Enable or disable the VI interrupt.
void set_PI_interrupt (int active)
 Enable or disable the PI interrupt.
void set_DP_interrupt (int active)
 Enable or disable the DP interrupt.
void set_SI_interrupt (int active)
 Enable or disable the SI interrupt.
void set_SP_interrupt (int active)
 Enable or disable the SP interrupt.
void init_interrupts ()
 Initialize the interrupt controller.
void disable_interrupts ()
 Disable interrupts systemwide.
void enable_interrupts ()
 Enable interrupts systemwide.
interrupt_state_t get_interrupts_state ()
 Return the current state of interrupts.

Variables

static int __interrupt_depth = -1
 Number of nested disable interrupt calls.
static struct AI_regs_s *const AI_regs = (struct AI_regs_s *)0xa4500000
 Static structure to address AI registers.
static struct MI_regs_s *const MI_regs = (struct MI_regs_s *)0xa4300000
 Static structure to address MI registers.
static struct VI_regs_s *const VI_regs = (struct VI_regs_s *)0xa4400000
 Static structure to address VI registers.
static struct PI_regs_s *const PI_regs = (struct PI_regs_s *)0xa4600000
 Static structure to address PI registers.
static struct SI_regs_s *const SI_regs = (struct SI_regs_s *)0xa4800000
 Static structure to address SI registers.
static struct SP_regs_s *const SP_regs = (struct SP_regs_s *)0xa4040000
 Static structure to address SP registers.
struct callback_linkAI_callback = 0
 Linked list of AI callbacks.
struct callback_linkVI_callback = 0
 Linked list of VI callbacks.
struct callback_linkPI_callback = 0
 Linked list of PI callbacks.
struct callback_linkDP_callback = 0
 Linked list of DP callbacks.
struct callback_linkTI_callback = 0
 Linked list of TI callbacks.
struct callback_linkSI_callback = 0
 Linked list of SI callbacks.
struct callback_linkSP_callback = 0
 Linked list of SP callbacks.

Detailed Description

Interrupt Controller.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines