Nintendo 1504166 Programming Manual - Page 160

Interrupt Operation, 15.2.1 Normal Interrupt, In Monitor ROM, save each register R0~R3, R12

Page 160 highlights

AGB Programming Manual Interrupt Control 15.2 Interrupt Operation The user can arbitrarily define the Interrupt Processing Routine, but as a general rule, the Monitor ROM handles this processing. For further details on each register, please refer to "ARM7TDMI Data Sheet". 15.2.1 Normal Interrupt 1) If an interrupt occurs, the CPU enters IRQ mode and control shifts to the Monitor ROM. In Monitor ROM, save each register (R0~R3, R12, LR_irq (former PC)) to the Interrupt Stack. The total is 6 words. Next, call the user interrupt processing set up in 03007FFCh. Commands called from the monitor directly must be in 32bit code format. 03007F00 USR Stack 03007FA0 SP_usr IRQ Stack 6 WORDS SP_irq 03007FE0 SVC Stack SP_svc 03007F00 03007FA0 2) User interrupt processing is done (you can reference the cause of the interrupt with the IF Register). Also solve* problems with a stack, if necessary. 3) Restore the registers (total of 6 words) saved to the Interrupt Stack and return to user main processing. 03007F00 USR Stack 03007FA0 SP_usr IRQ Stack SP_irq 03007FE0 SVC Stack SP_svc 03007F00 03007FA0 *Note Only the interrupt stack is used for normal interrupt processing. Therefore, there is a possibility of stack overflow in some cases. To solve this problem, you can either allocate a larger interrupt stack by moving SP_usr in advance or use user stack for both, by switching the CPU mode to the user mode in user interrupt processing. For the latter method, see the explanation of multiple interrupts that is discussed on the following page. ©1999 - 2001 Nintendo of America Inc. 160 D.C.N. AGB-06-0001-002B4

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171

AGB Programming Manual
Interrupt Control
©1999 - 2001 Nintendo of America Inc.
160
D.C.N. AGB-06-0001-002B4
15.2 Interrupt Operation
The user can arbitrarily define the Interrupt Processing Routine, but as a general rule,
the Monitor ROM handles this processing.
For further details on each register, please
refer to “ARM7TDMI Data Sheet”.
15.2.1 Normal Interrupt
1)
If an interrupt occurs, the CPU enters IRQ mode and control shifts to
the Monitor ROM.
In Monitor ROM, save each register (R0~R3, R12,
LR_irq (former PC)) to the Interrupt Stack.
The total is 6 words.
Next,
call the user interrupt processing set up in 03007FFCh. Commands
called from the monitor directly must be in 32bit code format.
SP_usr
SP_irq
03007F00
IRQ Stack
SVC Stack
USR Stack
6 WORDS
03007FA0
03007F00
SP_svc
03007FE0
03007FA0
2)
User interrupt processing is done (you can reference the cause of the
interrupt with the IF Register).
Also solve* problems with a stack, if
necessary.
3)
Restore the registers (total of 6 words) saved to the Interrupt Stack
and return to user main processing.
SP_usr
SP_irq
03007F00
IRQ Stack
SVC Stack
USR Stack
03007FA0
03007F00
SP_svc
03007FE0
03007FA0
*Note
Only the interrupt stack is used for normal interrupt processing.
Therefore,
there is a possibility of stack overflow in some cases.
To solve this
problem, you can either allocate a larger interrupt stack by moving SP_usr
in advance or use user stack for both, by switching the CPU mode to the
user mode in user interrupt processing.
For the latter method, see the
explanation of multiple interrupts that is discussed on the following page.