Nintendo 1504166 Programming Manual - Page 161

Multiple Interrupts

Page 161 highlights

AGB Programming Manual Interrupt Control 15.2.2 Multiple Interrupts 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). à If multiple interrupts occur, SPSR_irq will be overwritten, so you must save before enabling IRQ. 03007F00 USR Stack 03007FA0 SP_usr 03007F00 IRQ Stack 6 WORDS SPSR_irq SP_irq 03007FE0 03007FA0 SVC Stack SP_svc à The Stack problem is solved* (CPU mode is changed to user mode with system mode = privilege here.) and IRQ is enabled. à With user interrupt processing, user stack is used because the CPU is in system mode. When calling the subroutine, save LSR_usr as well. 03007F00 USR Stack LR_usr User Interrupt Processing SP_usr 03007FA0 03007F00 IRQ Stack 6 WORDS SPSR_irq SP_irq 03007FE0 03007FA0 SVC Stack SP_svc ©1999 - 2001 Nintendo of America Inc. 161 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.
161
D.C.N. AGB-06-0001-002B4
15.2.2 Multiple Interrupts
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).
±
If multiple interrupts occur, SPSR_irq will be overwritten, so you
must save before enabling IRQ.
SP_irq
SP_usr
IRQ Stack
SVC Stack
USR Stack
03007F00
6 WORDS
03007FA0
03007F00
SPSR_irq
SP_svc
03007FE0
03007FA0
±
The Stack problem is solved* (CPU mode is changed to user mode
with system mode = privilege here.) and IRQ is enabled.
±
With user interrupt processing, user stack is used because the
CPU is in system mode.
When calling the subroutine, save
LSR_usr as well.
LR_usr
SP_usr
SP_irq
IRQ Stack
SVC Stack
USR Stack
User Interrupt
Processing
03007F00
6 WORDS
03007FA0
03007F00
SPSR_irq
SP_svc
03007FE0
03007FA0