📄 pio_it.lst
字号:
\ 0000009C 901721E0 MLA R1,R0,R7,R1
\ 000000A0 000091E5 LDR R0,[R1, #+0]
\ 000000A4 000090E5 LDR R0,[R0, #+0]
\ 000000A8 0060D6E1 BICS R6,R6,R0
125 }
126 }
127 i++;
\ ??PioInterruptHandler_2:
\ 000000AC 017097E2 ADDS R7,R7,#+1
\ 000000B0 DDFFFFEA B ??PioInterruptHandler_1
128 }
129 }
130 }
\ ??PioInterruptHandler_0:
\ 000000B4 F840BDE8 POP {R3-R7,LR}
\ 000000B8 1EFF2FE1 BX LR ;; return
131
132 //------------------------------------------------------------------------------
133 /// Generic PIO interrupt handler. Single entry point for interrupts coming
134 /// from any PIO controller (PIO A, B, C ...). Dispatches the interrupt to
135 /// the user-configured handlers.
136 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
137 void InterruptHandler()
138 {
\ InterruptHandler:
\ 00000000 01402DE9 PUSH {R0,LR}
139 #if defined(AT91C_ID_PIOA)
140 // Treat PIOA interrupts
141 PioInterruptHandler(AT91C_ID_PIOA, AT91C_BASE_PIOA);
\ 00000004 FF10E0E3 MVN R1,#+255
\ 00000008 B01EC1E3 BIC R1,R1,#0xB00
\ 0000000C 0200A0E3 MOV R0,#+2
\ 00000010 ........ BL PioInterruptHandler
142 #endif
143
144 #if defined(AT91C_ID_PIOB)
145 // Treat PIOB interrupts
146 PioInterruptHandler(AT91C_ID_PIOB, AT91C_BASE_PIOB);
\ 00000014 FF10E0E3 MVN R1,#+255
\ 00000018 901EC1E3 BIC R1,R1,#0x900
\ 0000001C 0300A0E3 MOV R0,#+3
\ 00000020 ........ BL PioInterruptHandler
147 #endif
148
149 #if defined(AT91C_ID_PIOC)
150 // Treat PIOC interrupts
151 PioInterruptHandler(AT91C_ID_PIOC, AT91C_BASE_PIOC);
\ 00000024 FF10E0E3 MVN R1,#+255
\ 00000028 701EC1E3 BIC R1,R1,#0x700
\ 0000002C 0400A0E3 MOV R0,#+4
\ 00000030 ........ BL PioInterruptHandler
152 #endif
153
154 #if defined(AT91C_ID_PIOD)
155 // Treat PIOD interrupts
156 PioInterruptHandler(AT91C_ID_PIOD, AT91C_BASE_PIOD);
157 #endif
158
159 #if defined(AT91C_ID_PIOE)
160 // Treat PIOE interrupts
161 PioInterruptHandler(AT91C_ID_PIOE, AT91C_BASE_PIOE);
162 #endif
163
164 #if defined(AT91C_ID_PIOABCD)
165 // Treat PIOABCD interrupts
166 #if !defined(AT91C_ID_PIOA)
167 PioInterruptHandler(AT91C_ID_PIOABCD, AT91C_BASE_PIOA);
168 #endif
169 #if !defined(AT91C_ID_PIOB)
170 PioInterruptHandler(AT91C_ID_PIOABCD, AT91C_BASE_PIOB);
171 #endif
172 #if !defined(AT91C_ID_PIOC)
173 PioInterruptHandler(AT91C_ID_PIOABCD, AT91C_BASE_PIOC);
174 #endif
175 #if !defined(AT91C_ID_PIOD)
176 PioInterruptHandler(AT91C_ID_PIOABCD, AT91C_BASE_PIOD);
177 #endif
178 #endif
179
180 #if defined(AT91C_ID_PIOABCDE)
181 // Treat PIOABCDE interrupts
182 #if !defined(AT91C_ID_PIOA)
183 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOA);
184 #endif
185 #if !defined(AT91C_ID_PIOB)
186 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOB);
187 #endif
188 #if !defined(AT91C_ID_PIOC)
189 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOC);
190 #endif
191 #if !defined(AT91C_ID_PIOD)
192 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOD);
193 #endif
194 #if !defined(AT91C_ID_PIOE)
195 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOE);
196 #endif
197 #endif
198
199 #if defined(AT91C_ID_PIOCDE)
200 // Treat PIOCDE interrupts
201 #if !defined(AT91C_ID_PIOC)
202 PioInterruptHandler(AT91C_ID_PIOCDE, AT91C_BASE_PIOC);
203 #endif
204 #if !defined(AT91C_ID_PIOD)
205 PioInterruptHandler(AT91C_ID_PIOCDE, AT91C_BASE_PIOD);
206 #endif
207 #if !defined(AT91C_ID_PIOE)
208 PioInterruptHandler(AT91C_ID_PIOCDE, AT91C_BASE_PIOE);
209 #endif
210 #endif
211
212 }
\ 00000034 0050BDE8 POP {R12,LR}
\ 00000038 1EFF2FE1 BX LR ;; return
213
214 //------------------------------------------------------------------------------
215 // Global functions
216 //------------------------------------------------------------------------------
217
218 //------------------------------------------------------------------------------
219 /// Initializes the PIO interrupt management logic.
220 /// \param priority PIO controller interrupts priority.
221 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
222 void PIO_InitializeInterrupts(unsigned int priority)
223 {
\ PIO_InitializeInterrupts:
\ 00000000 F1402DE9 PUSH {R0,R4-R7,LR}
\ 00000004 0040B0E1 MOVS R4,R0
224 trace_LOG(trace_DEBUG, "-D- PIO_Initialize()\n\r");
225
226 SANITY_CHECK((priority & ~AT91C_AIC_PRIOR) == 0);
227
228 #ifdef AT91C_ID_PIOA
229 // Configure PIO interrupt sources
230 trace_LOG(trace_DEBUG, "-D- PIO_Initialize: Configuring PIOA\n\r");
231 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
\ 00000008 EF00E0E3 MVN R0,#+239
\ 0000000C C00FC0E3 BIC R0,R0,#0x300
\ 00000010 0410A0E3 MOV R1,#+4
\ 00000014 001080E5 STR R1,[R0, #+0]
232 AT91C_BASE_PIOA->PIO_ISR;
\ 00000018 B300E0E3 MVN R0,#+179
\ 0000001C B00EC0E3 BIC R0,R0,#0xB00
\ 00000020 005090E5 LDR R5,[R0, #+0]
233 AT91C_BASE_PIOA->PIO_IDR = 0xFFFFFFFF;
\ 00000024 BB00E0E3 MVN R0,#+187
\ 00000028 B00EC0E3 BIC R0,R0,#0xB00
\ 0000002C 0010E0E3 MVN R1,#+0
\ 00000030 001080E5 STR R1,[R0, #+0]
234 AIC_ConfigureIT(AT91C_ID_PIOA, priority, InterruptHandler);
\ 00000034 A0209FE5 LDR R2,??PIO_InitializeInterrupts_0 ;; InterruptHandler
\ 00000038 0410B0E1 MOVS R1,R4
\ 0000003C 0200A0E3 MOV R0,#+2
\ 00000040 ........ BL AIC_ConfigureIT
235 AIC_EnableIT(AT91C_ID_PIOA);
\ 00000044 0200A0E3 MOV R0,#+2
\ 00000048 ........ BL AIC_EnableIT
236 #endif
237
238 #ifdef AT91C_ID_PIOB
239 trace_LOG(trace_DEBUG, "-D- PIO_Initialize: Configuring PIOB\n\r");
240 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOB;
\ 0000004C EF00E0E3 MVN R0,#+239
\ 00000050 C00FC0E3 BIC R0,R0,#0x300
\ 00000054 0810A0E3 MOV R1,#+8
\ 00000058 001080E5 STR R1,[R0, #+0]
241 AT91C_BASE_PIOB->PIO_ISR;
\ 0000005C B300E0E3 MVN R0,#+179
\ 00000060 900EC0E3 BIC R0,R0,#0x900
\ 00000064 006090E5 LDR R6,[R0, #+0]
242 AT91C_BASE_PIOB->PIO_IDR = 0xFFFFFFFF;
\ 00000068 BB00E0E3 MVN R0,#+187
\ 0000006C 900EC0E3 BIC R0,R0,#0x900
\ 00000070 0010E0E3 MVN R1,#+0
\ 00000074 001080E5 STR R1,[R0, #+0]
243 AIC_ConfigureIT(AT91C_ID_PIOB, priority, InterruptHandler);
\ 00000078 5C209FE5 LDR R2,??PIO_InitializeInterrupts_0 ;; InterruptHandler
\ 0000007C 0410B0E1 MOVS R1,R4
\ 00000080 0300A0E3 MOV R0,#+3
\ 00000084 ........ BL AIC_ConfigureIT
244 AIC_EnableIT(AT91C_ID_PIOB);
\ 00000088 0300A0E3 MOV R0,#+3
\ 0000008C ........ BL AIC_EnableIT
245 #endif
246
247 #ifdef AT91C_ID_PIOC
248 trace_LOG(trace_DEBUG, "-D- PIO_Initialize: Configuring PIOC\n\r");
249 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOC;
\ 00000090 EF00E0E3 MVN R0,#+239
\ 00000094 C00FC0E3 BIC R0,R0,#0x300
\ 00000098 1010A0E3 MOV R1,#+16
\ 0000009C 001080E5 STR R1,[R0, #+0]
250 AT91C_BASE_PIOC->PIO_ISR;
\ 000000A0 B300E0E3 MVN R0,#+179
\ 000000A4 700EC0E3 BIC R0,R0,#0x700
\ 000000A8 007090E5 LDR R7,[R0, #+0]
251 AT91C_BASE_PIOC->PIO_IDR = 0xFFFFFFFF;
\ 000000AC BB00E0E3 MVN R0,#+187
\ 000000B0 700EC0E3 BIC R0,R0,#0x700
\ 000000B4 0010E0E3 MVN R1,#+0
\ 000000B8 001080E5 STR R1,[R0, #+0]
252 AIC_ConfigureIT(AT91C_ID_PIOC, priority, InterruptHandler);
\ 000000BC 18209FE5 LDR R2,??PIO_InitializeInterrupts_0 ;; InterruptHandler
\ 000000C0 0410B0E1 MOVS R1,R4
\ 000000C4 0400A0E3 MOV R0,#+4
\ 000000C8 ........ BL AIC_ConfigureIT
253 AIC_EnableIT(AT91C_ID_PIOC);
\ 000000CC 0400A0E3 MOV R0,#+4
\ 000000D0 ........ BL AIC_EnableIT
254 #endif
255
256 #ifdef AT91C_ID_PIOD
257 trace_LOG(trace_DEBUG, "-D- PIO_Initialize: Configuring PIOD\n\r");
258 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOD;
259 AT91C_BASE_PIOC->PIO_ISR;
260 AT91C_BASE_PIOC->PIO_IDR = 0xFFFFFFFF;
261 AIC_ConfigureIT(AT91C_ID_PIOD, priority, InterruptHandler);
262 AIC_EnableIT(AT91C_ID_PIOD);
263 #endif
264
265 #ifdef AT91C_ID_PIOE
266 trace_LOG(trace_DEBUG, "-D- PIO_Initialize: Configuring PIOE\n\r");
267 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOE;
268 AT91C_BASE_PIOC->PIO_ISR;
269 AT91C_BASE_PIOC->PIO_IDR = 0xFFFFFFFF;
270 AIC_ConfigureIT(AT91C_ID_PIOE, priority, InterruptHandler);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -