nds interrupt support. [詳細]
#include <nds/ndstypes.h>
構成 | |
struct | IntTable |
マクロ定義 | |
#define | IRQ_TIMER(n) (1 << ((n) + 3)) |
#define | MAX_INTERRUPTS 25 |
#define | REG_IE (*(vuint32*)0x04000210) |
Interrupt Enable Register. | |
#define | REG_AUXIE (*(vuint32*)0x04000218) |
#define | REG_IF (*(vuint32*)0x04000214) |
Interrupt Flag Register. | |
#define | REG_AUXIF (*(vuint32*)0x0400021C) |
#define | REG_IME (*(vuint32*)0x04000208) |
Interrupt Master Enable Register. | |
#define | INTR_WAIT_FLAGS *(__irq_flags) |
#define | INTR_WAIT_FLAGSAUX *(__irq_flagsaux) |
#define | IRQ_HANDLER *(__irq_vector) |
型定義 | |
typedef enum IRQ_MASKS | IRQ_MASK |
列挙型 | |
enum | IRQ_MASKS { IRQ_VBLANK = BIT(0), IRQ_HBLANK = BIT(1), IRQ_VCOUNT = BIT(2), IRQ_TIMER0 = BIT(3), IRQ_TIMER1 = BIT(4), IRQ_TIMER2 = BIT(5), IRQ_TIMER3 = BIT(6), IRQ_NETWORK = BIT(7), IRQ_DMA0 = BIT(8), IRQ_DMA1 = BIT(9), IRQ_DMA2 = BIT(10), IRQ_DMA3 = BIT(11), IRQ_KEYS = BIT(12), IRQ_CART = BIT(13), IRQ_IPC_SYNC = BIT(16), IRQ_FIFO_EMPTY = BIT(17), IRQ_FIFO_NOT_EMPTY = BIT(18), IRQ_CARD = BIT(19), IRQ_CARD_LINE = BIT(20), IRQ_GEOMETRY_FIFO = BIT(21), IRQ_LID = BIT(22), IRQ_SPI = BIT(23), IRQ_WIFI = BIT(24), IRQ_ALL = (~0) } |
values allowed for REG_IE and REG_IF [詳細] | |
enum | IRQ_MASKSAUX { IRQ_POWER = BIT(6) } |
values allowed for REG_AUXIE and REG_AUXIF [詳細] | |
enum | IME_VALUE { IME_DISABLE = 0, IME_ENABLE = 1 } |
values allowed for REG_IME [詳細] | |
関数 | |
void | irqInit () |
Initialise the libnds interrupt system. | |
void | irqSet (u32 irq, VoidFn handler) |
Add a handler for the given interrupt mask. | |
void | irqSetAUX (u32 irq, VoidFn handler) |
void | irqClear (u32 irq) |
remove the handler associated with the interrupt mask irq. | |
void | irqClearAUX (u32 irq) |
void | irqInitHandler (VoidFn handler) |
Install a user interrupt dispatcher. | |
void | irqEnable (u32 irq) |
Allow the given interrupt to occur. | |
void | irqEnableAUX (u32 irq) |
void | irqDisable (u32 irq) |
Prevent the given interrupt from occuring. | |
void | irqDisableAUX (u32 irq) |
void | swiIntrWait (u32 waitForSet, uint32 flags) |
wait for interrupt(s) to occur | |
void | swiWaitForVBlank (void) |
Wait for vblank interrupt. | |
変数 | |
VoidFn | __irq_vector [] |
vuint32 | __irq_flags [] |
vuint32 | __irq_flagsaux [] |
nds interrupt support.
#define REG_IE (*(vuint32*)0x04000210) |
Interrupt Enable Register.
This is the activation mask for the internal interrupts. Unless the corresponding bit is set, the IRQ will be masked out.
#define REG_IF (*(vuint32*)0x04000214) |
Interrupt Flag Register.
Since there is only one hardware interrupt vector, the IF register contains flags to indicate when a particular of interrupt has occured. To acknowledge processing interrupts, set IF to the value of the interrupt handled.
#define REG_IME (*(vuint32*)0x04000208) |
Interrupt Master Enable Register.
When bit 0 is clear, all interrupts are masked. When it is 1, interrupts will occur if not masked out in REG_IE.
enum IME_VALUE |
enum IRQ_MASKS |
values allowed for REG_IE and REG_IF
enum IRQ_MASKSAUX |
irqClear | ( | u32 | irq | ) |
remove the handler associated with the interrupt mask irq.
irq | Mask associated with the interrupt. |
irqDisable | ( | u32 | irq | ) |
Prevent the given interrupt from occuring.
irq | The set of interrupt masks to disable. |
irqEnable | ( | u32 | irq | ) |
Allow the given interrupt to occur.
irq | The set of interrupt masks to enable. |
irqInit | ( | ) |
Initialise the libnds interrupt system.
This function is called internally (prior to main()) to set up irqs on the ARM9. It must be called on the ARM7 prior to installing irq handlers.
irqInitHandler | ( | VoidFn | handler | ) |
Install a user interrupt dispatcher.
This function installs the main interrupt function, all interrupts are serviced through this routine. For most purposes the libnds interrupt dispacther should be used in preference to user code unless you know *exactly* what you're doing.
handler | Address of the function to use as an interrupt dispatcher |
irqSet | ( | u32 | irq, | |
VoidFn | handler | |||
) |
Add a handler for the given interrupt mask.
Specify the handler to use for the given interrupt. This only works with the default interrupt handler, do not mix the use of this routine with a user-installed IRQ handler.
irq | Mask associated with the interrupt. | |
handler | Address of the function to use as an interrupt service routine |
swiIntrWait | ( | u32 | waitForSet, | |
uint32 | flags | |||
) |
wait for interrupt(s) to occur
waitForSet | 0: Return if the interrupt has already occured 1: Wait until the interrupt has been set since the call | |
flags | interrupt mask to wait for |
swiWaitForVBlank | ( | void | ) |
Wait for vblank interrupt.
Waits for a vertical blank interrupt