source: rtems/c/src/lib/libbsp/arm/nds/libnds/include/nds/interrupts.h @ 49a40165

4.104.114.95
Last change on this file since 49a40165 was 49a40165, checked in by Joel Sherrill <joel.sherrill@…>, on 08/19/08 at 15:47:14

2008-08-19 Joel Sherrill <joel.sherrill@…>

  • dswifi/arm7/makefile, dswifi/include/netinet/in.h, libnds/basicARM7/source/defaultARM7.c, libnds/include/gbfs.h, libnds/include/nds/bios.h, libnds/include/nds/card.h, libnds/include/nds/dma.h, libnds/include/nds/interrupts.h, libnds/include/nds/ipc.h, libnds/include/nds/jtypes.h, libnds/include/nds/registers_alt.h, libnds/include/nds/system.h, libnds/include/nds/timers.h, libnds/include/nds/arm7/audio.h, libnds/include/nds/arm7/clock.h, libnds/include/nds/arm7/serial.h, libnds/include/nds/arm7/touch.h, libnds/include/nds/arm9/boxtest.h, libnds/include/nds/arm9/cache.h, libnds/include/nds/arm9/console.h, libnds/include/nds/arm9/ndsmotion.h, libnds/include/nds/arm9/video.h, libnds/include/nds/arm9/videoGL.h, libnds/source/arm7/audio.c, libnds/source/arm7/clock.c, libnds/source/arm7/microphone.c, libnds/source/arm7/touch.c, libnds/source/arm7/userSettings.c, libnds/source/arm9/boxtest.c, libnds/source/arm9/gurumeditation.c, libnds/source/arm9/ndsmotion.c, libnds/source/arm9/videoGL.c, libnds/source/common/card.c, libnds/source/common/interruptDispatcher.S, touchscreen/reco.c: Fix various warnings by fixing prototypes. Remove unused .bin files. Convert all files to UNIX CF/LF.
  • libnds/source/arm9/COS.bin, libnds/source/arm9/SIN.bin, libnds/source/arm9/TAN.bin, libnds/source/arm9/default_font.bin: Removed.
  • Property mode set to 100644
File size: 6.0 KB
RevLine 
[49a40165]1/*---------------------------------------------------------------------------------
2        $Id$
3
4        Interrupt registers and vector pointers
5
6        Copyright (C) 2005
7                Jason Rogers (dovoto)
8                Dave Murphy (WinterMute)
9
10        This software is provided 'as-is', without any express or implied
11        warranty.  In no event will the authors be held liable for any
12        damages arising from the use of this software.
13
14        Permission is granted to anyone to use this software for any
15        purpose, including commercial applications, and to alter it and
16        redistribute it freely, subject to the following restrictions:
17
18        1.      The origin of this software must not be misrepresented; you
19                must not claim that you wrote the original software. If you use
20                this software in a product, an acknowledgment in the product
21                documentation would be appreciated but is not required.
22
23        2.      Altered source versions must be plainly marked as such, and
24                must not be misrepresented as being the original software.
25
26        3.      This notice may not be removed or altered from any source
27                distribution.
28
29
30---------------------------------------------------------------------------------*/
31
32/*! \file interrupts.h
33
34    \brief nds interrupt support.
35
36*/
37
38#ifndef NDS_INTERRUPTS_INCLUDE
39#define NDS_INTERRUPTS_INCLUDE
40
41#include <nds/jtypes.h>
42
43/*! \enum IRQ_MASKS
44        \brief values allowed for REG_IE and REG_IF
45
46*/
47enum IRQ_MASKS {
48        IRQ_VBLANK                      =       BIT(0),         /*!< vertical blank interrupt mask */
49        IRQ_HBLANK                      =       BIT(1),         /*!< horizontal blank interrupt mask */
50        IRQ_VCOUNT                      =       BIT(2),         /*!< vcount match interrupt mask */
51        IRQ_TIMER0                      =       BIT(3),         /*!< timer 0 interrupt mask */
52        IRQ_TIMER1                      =       BIT(4),         /*!< timer 1 interrupt mask */
53        IRQ_TIMER2                      =       BIT(5),         /*!< timer 2 interrupt mask */
54        IRQ_TIMER3                      =       BIT(6),         /*!< timer 3 interrupt mask */
55        IRQ_NETWORK                     =       BIT(7),         /*!< serial interrupt mask */
56        IRQ_DMA0                        =       BIT(8),         /*!< DMA 0 interrupt mask */
57        IRQ_DMA1                        =       BIT(9),         /*!< DMA 1 interrupt mask */
58        IRQ_DMA2                        =       BIT(10),        /*!< DMA 2 interrupt mask */
59        IRQ_DMA3                        =       BIT(11),        /*!< DMA 3 interrupt mask */
60        IRQ_KEYS                        =       BIT(12),        /*!< Keypad interrupt mask */
61        IRQ_CART                        =       BIT(13),        /*!< GBA cartridge interrupt mask */
62        IRQ_IPC_SYNC            =       BIT(16),        /*!< IPC sync interrupt mask */
63        IRQ_FIFO_EMPTY          =       BIT(17),        /*!< Send FIFO empty interrupt mask */
64        IRQ_FIFO_NOT_EMPTY      =       BIT(18),        /*!< Receive FIFO empty interrupt mask */
65        IRQ_CARD                        =       BIT(19),        /*!< interrupt mask */
66        IRQ_CARD_LINE           =       BIT(20),        /*!< interrupt mask */
67        IRQ_GEOMETRY_FIFO       =       BIT(21),        /*!< geometry FIFO interrupt mask */
68        IRQ_LID                         =       BIT(22),        /*!< interrupt mask */
69        IRQ_SPI                         =       BIT(23),        /*!< SPI interrupt mask */
70        IRQ_WIFI                        =       BIT(24),        /*!< WIFI interrupt mask (ARM7)*/
71        IRQ_ALL                         =       (~0)
72};
73
74#define MAX_INTERRUPTS  25
75
76typedef enum IRQ_MASKS IRQ_MASK;
77
78/*! \def REG_IE
79
80    \brief Interrupt Enable Register.
81
82        This is the activation mask for the internal interrupts.  Unless
83        the corresponding bit is set, the IRQ will be masked out.
84*/
85#define REG_IE  (*(vuint32*)0x04000210)
86
87/*! \def REG_IF
88
89    \brief Interrupt Flag Register.
90
91        Since there is only one hardware interrupt vector, the IF register
92        contains flags to indicate when a particular of interrupt has occured.
93        To acknowledge processing interrupts, set IF to the value of the
94        interrupt handled.
95
96*/
97#define REG_IF  (*(vuint32*)0x04000214)
98
99/*! \def REG_IME
100
101    \brief Interrupt Master Enable Register.
102
103        When bit 0 is clear, all interrupts are masked.  When it is 1,
104        interrupts will occur if not masked out in REG_IE.
105
106*/
107#define REG_IME (*(vuint16*)0x04000208)
108
109/*! \enum IME_VALUE
110        \brief values allowed for REG_IME
111*/
112enum IME_VALUE {
113        IME_DISABLE = 0,        /*!< Disable all interrupts. */
114        IME_ENABLE = 1, /*!< Enable all interrupts not masked out in REG_IE */
115};
116
117
118#ifdef __cplusplus
119extern "C" {
120#endif
121
122
123extern VoidFunctionPointer      __irq_vector[];
124extern  vuint32 __irq_flags[];
125#define VBLANK_INTR_WAIT_FLAGS  *(__irq_flags)
126#define IRQ_HANDLER             *(__irq_vector)
127
128struct IntTable{IntFn handler; u32 mask;};
129
130/*! \fn irqInit(void)
131        \brief Initialise the libnds interrupt system.
132
133        Call this function at the start of any application which requires interrupt support.
134        This function should be used in preference to irqInitHandler.
135         
136*/
137void irqInit(void);
138/*! \fn irqSet(IRQ_MASK irq, VoidFunctionPointer handler)
139        \brief Add a handler for the given interrupt mask.
140
141        Specify the handler to use for the given interrupt. This only works with
142        the default interrupt handler, do not mix the use of this routine with a
143        user-installed IRQ handler.
144        \param irq Mask associated with the interrupt.
145        \param handler Address of the function to use as an interrupt service routine
146        \note
147        When any handler specifies using IRQ_VBLANK or IRQ_HBLANK, DISP_SR
148        is automatically updated to include the corresponding DISP_VBLANK_IRQ or DISP_HBLANK_IRQ.
149
150        \warning Only one IRQ_MASK can be specified with this function.
151*/
152void irqSet(IRQ_MASK irq, VoidFunctionPointer handler);
153/*! \fn irqClear(IRQ_MASK irq)
154        \brief remove the handler associated with the interrupt mask irq.
155        \param irq Mask associated with the interrupt.
156*/
157void irqClear(IRQ_MASK irq);
158/*! \fn irqInitHandler(VoidFunctionPointer handler)
159        \brief Install a user interrupt dispatcher.
160
161        This function installs the main interrupt function, all interrupts are serviced through this routine. For most
162        purposes the libnds interrupt dispacther should be used in preference to user code unless you know *exactly* what you're doing.
163       
164        \param handler Address of the function to use as an interrupt dispatcher
165        \note the function *must* be ARM code
166*/
167void irqInitHandler(VoidFunctionPointer handler);
168/*! \fn irqEnable(uint32 irq)
169        \brief Allow the given interrupt to occur.
170        \param irq The set of interrupt masks to enable.
171        \note Specify multiple interrupts to enable by ORing several IRQ_MASKS.
172*/
173void irqEnable(uint32 irq);
174/*! \fn irqDisable(uint32 irq)
175        \brief Prevent the given interrupt from occuring.
176        \param irq The set of interrupt masks to disable.
177        \note Specify multiple interrupts to disable by ORing several IRQ_MASKS.
178*/
179void irqDisable(uint32 irq);
180
181
182#ifdef __cplusplus
183}
184#endif
185
186#endif //NDS_INTERRUPTS_INCLUDE
187
Note: See TracBrowser for help on using the repository browser.