📄 pio_it.lst
字号:
\ 0000006C 0050C5E1 BIC R5,R5,R0
124 }
125 }
126 i++;
\ ??PioInterruptHandler_4:
\ 00000070 016086E2 ADD R6,R6,#+1
\ 00000074 087087E2 ADD R7,R7,#+8
127 }
\ 00000078 000055E3 CMP R5,#+0
\ 0000007C E7FFFF1A BNE ??PioInterruptHandler_1
128 }
129 }
\ ??PioInterruptHandler_0:
\ 00000080 F140BDE8 POP {R0,R4-R7,LR}
\ 00000084 1EFF2FE1 BX LR ;; return
130
131 //------------------------------------------------------------------------------
132 /// Generic PIO interrupt handler. Single entry point for interrupts coming
133 /// from any PIO controller (PIO A, B, C ...). Dispatches the interrupt to
134 /// the user-configured handlers.
135 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
136 static void InterruptHandler(void)
137 {
\ InterruptHandler:
\ 00000000 00502DE9 PUSH {R12,LR}
138 #if defined(AT91C_ID_PIOA)
139 // Treat PIOA interrupts
140 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
141 #endif
142
143 #if defined(AT91C_ID_PIOB)
144 // Treat PIOB interrupts
145 PioInterruptHandler(AT91C_ID_PIOB, AT91C_BASE_PIOB);
\ 00000014 FF10E0E3 MVN R1,#+255
\ 00000018 901EC1E3 BIC R1,R1,#0x900
\ 0000001C 0300A0E3 MOV R0,#+3
\ 00000020 0440BDE8 POP {R2,LR}
\ 00000024 ........ B PioInterruptHandler ;; tailcall
146 #endif
147
148 #if defined(AT91C_ID_PIOC)
149 // Treat PIOC interrupts
150 PioInterruptHandler(AT91C_ID_PIOC, AT91C_BASE_PIOC);
151 #endif
152
153 #if defined(AT91C_ID_PIOD)
154 // Treat PIOD interrupts
155 PioInterruptHandler(AT91C_ID_PIOD, AT91C_BASE_PIOD);
156 #endif
157
158 #if defined(AT91C_ID_PIOE)
159 // Treat PIOE interrupts
160 PioInterruptHandler(AT91C_ID_PIOE, AT91C_BASE_PIOE);
161 #endif
162
163 #if defined(AT91C_ID_PIOABCD)
164 // Treat PIOABCD interrupts
165 #if !defined(AT91C_ID_PIOA)
166 PioInterruptHandler(AT91C_ID_PIOABCD, AT91C_BASE_PIOA);
167 #endif
168 #if !defined(AT91C_ID_PIOB)
169 PioInterruptHandler(AT91C_ID_PIOABCD, AT91C_BASE_PIOB);
170 #endif
171 #if !defined(AT91C_ID_PIOC)
172 PioInterruptHandler(AT91C_ID_PIOABCD, AT91C_BASE_PIOC);
173 #endif
174 #if !defined(AT91C_ID_PIOD)
175 PioInterruptHandler(AT91C_ID_PIOABCD, AT91C_BASE_PIOD);
176 #endif
177 #endif
178
179 #if defined(AT91C_ID_PIOABCDE)
180 // Treat PIOABCDE interrupts
181 #if !defined(AT91C_ID_PIOA)
182 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOA);
183 #endif
184 #if !defined(AT91C_ID_PIOB)
185 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOB);
186 #endif
187 #if !defined(AT91C_ID_PIOC)
188 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOC);
189 #endif
190 #if !defined(AT91C_ID_PIOD)
191 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOD);
192 #endif
193 #if !defined(AT91C_ID_PIOE)
194 PioInterruptHandler(AT91C_ID_PIOABCDE, AT91C_BASE_PIOE);
195 #endif
196 #endif
197
198 #if defined(AT91C_ID_PIOCDE)
199 // Treat PIOCDE interrupts
200 #if !defined(AT91C_ID_PIOC)
201 PioInterruptHandler(AT91C_ID_PIOCDE, AT91C_BASE_PIOC);
202 #endif
203 #if !defined(AT91C_ID_PIOD)
204 PioInterruptHandler(AT91C_ID_PIOCDE, AT91C_BASE_PIOD);
205 #endif
206 #if !defined(AT91C_ID_PIOE)
207 PioInterruptHandler(AT91C_ID_PIOCDE, AT91C_BASE_PIOE);
208 #endif
209 #endif
210 }
211
212 //------------------------------------------------------------------------------
213 // Global functions
214 //------------------------------------------------------------------------------
215
216 //------------------------------------------------------------------------------
217 /// Initializes the PIO interrupt management logic. The desired priority of PIO
218 /// interrupts must be provided. Calling this function multiple times result in
219 /// the reset of currently configured interrupts.
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 10402DE9 PUSH {R4,LR}
\ 00000004 0040A0E1 MOV R4,R0
224 TRACE_DEBUG("PIO_Initialize()\n\r");
225
226 SANITY_CHECK((priority & ~AT91C_AIC_PRIOR) == 0);
\ 00000008 0700D4E3 BICS R0,R4,#0x7
\ 0000000C 0000000A BEQ ??PIO_InitializeInterrupts_0
\ ??PIO_InitializeInterrupts_1:
\ 00000010 FEFFFFEA B ??PIO_InitializeInterrupts_1
227
228 // Reset sources
229 numSources = 0;
\ ??PIO_InitializeInterrupts_0:
\ 00000014 ........ LDR R0,??DataTable10 ;; numSources
\ 00000018 0010A0E3 MOV R1,#+0
\ 0000001C 001080E5 STR R1,[R0, #+0]
230
231 #ifdef AT91C_ID_PIOA
232 // Configure PIO interrupt sources
233 TRACE_DEBUG("PIO_Initialize: Configuring PIOA\n\r");
234 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
\ 00000020 EF00E0E3 MVN R0,#+239
\ 00000024 C00FC0E3 BIC R0,R0,#0x300
\ 00000028 0410A0E3 MOV R1,#+4
\ 0000002C 001080E5 STR R1,[R0, #+0]
235 AT91C_BASE_PIOA->PIO_ISR;
\ 00000030 B300E0E3 MVN R0,#+179
\ 00000034 B00EC0E3 BIC R0,R0,#0xB00
\ 00000038 000090E5 LDR R0,[R0, #+0]
236 AT91C_BASE_PIOA->PIO_IDR = 0xFFFFFFFF;
\ 0000003C BB00E0E3 MVN R0,#+187
\ 00000040 B00EC0E3 BIC R0,R0,#0xB00
\ 00000044 0010E0E3 MVN R1,#+0
\ 00000048 001080E5 STR R1,[R0, #+0]
237 AIC_ConfigureIT(AT91C_ID_PIOA, priority, InterruptHandler);
\ 0000004C 58209FE5 LDR R2,??PIO_InitializeInterrupts_2 ;; InterruptHandler
\ 00000050 0410A0E1 MOV R1,R4
\ 00000054 0200A0E3 MOV R0,#+2
\ 00000058 ........ BL AIC_ConfigureIT
238 AIC_EnableIT(AT91C_ID_PIOA);
\ 0000005C 0200A0E3 MOV R0,#+2
\ 00000060 ........ BL AIC_EnableIT
239 #endif
240
241 #ifdef AT91C_ID_PIOB
242 TRACE_DEBUG("PIO_Initialize: Configuring PIOB\n\r");
243 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOB;
\ 00000064 EF00E0E3 MVN R0,#+239
\ 00000068 C00FC0E3 BIC R0,R0,#0x300
\ 0000006C 0810A0E3 MOV R1,#+8
\ 00000070 001080E5 STR R1,[R0, #+0]
244 AT91C_BASE_PIOB->PIO_ISR;
\ 00000074 B300E0E3 MVN R0,#+179
\ 00000078 900EC0E3 BIC R0,R0,#0x900
\ 0000007C 000090E5 LDR R0,[R0, #+0]
245 AT91C_BASE_PIOB->PIO_IDR = 0xFFFFFFFF;
\ 00000080 BB00E0E3 MVN R0,#+187
\ 00000084 900EC0E3 BIC R0,R0,#0x900
\ 00000088 0010E0E3 MVN R1,#+0
\ 0000008C 001080E5 STR R1,[R0, #+0]
246 AIC_ConfigureIT(AT91C_ID_PIOB, priority, InterruptHandler);
\ 00000090 14209FE5 LDR R2,??PIO_InitializeInterrupts_2 ;; InterruptHandler
\ 00000094 0410A0E1 MOV R1,R4
\ 00000098 0300A0E3 MOV R0,#+3
\ 0000009C ........ BL AIC_ConfigureIT
247 AIC_EnableIT(AT91C_ID_PIOB);
\ 000000A0 0300A0E3 MOV R0,#+3
\ 000000A4 1040BDE8 POP {R4,LR}
\ 000000A8 ........ B AIC_EnableIT ;; tailcall
\ ??PIO_InitializeInterrupts_2:
\ 000000AC ........ DC32 InterruptHandler
248 #endif
249
250 #ifdef AT91C_ID_PIOC
251 TRACE_DEBUG("PIO_Initialize: Configuring PIOC\n\r");
252 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOC;
253 AT91C_BASE_PIOC->PIO_ISR;
254 AT91C_BASE_PIOC->PIO_IDR = 0xFFFFFFFF;
255 AIC_ConfigureIT(AT91C_ID_PIOC, priority, InterruptHandler);
256 AIC_EnableIT(AT91C_ID_PIOC);
257 #endif
258
259 #ifdef AT91C_ID_PIOD
260 TRACE_DEBUG("PIO_Initialize: Configuring PIOD\n\r");
261 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOD;
262 AT91C_BASE_PIOC->PIO_ISR;
263 AT91C_BASE_PIOC->PIO_IDR = 0xFFFFFFFF;
264 AIC_ConfigureIT(AT91C_ID_PIOD, priority, InterruptHandler);
265 AIC_EnableIT(AT91C_ID_PIOD);
266 #endif
267
268 #ifdef AT91C_ID_PIOE
269 TRACE_DEBUG("PIO_Initialize: Configuring PIOE\n\r");
270 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOE;
271 AT91C_BASE_PIOC->PIO_ISR;
272 AT91C_BASE_PIOC->PIO_IDR = 0xFFFFFFFF;
273 AIC_ConfigureIT(AT91C_ID_PIOE, priority, InterruptHandler);
274 AIC_EnableIT(AT91C_ID_PIOE);
275 #endif
276
277 #if defined(AT91C_ID_PIOABCD)
278 // Treat PIOABCD interrupts
279 #if !defined(AT91C_ID_PIOA) \
280 && !defined(AT91C_ID_PIOB) \
281 && !defined(AT91C_ID_PIOC) \
282 && !defined(AT91C_ID_PIOD)
283
284 TRACE_DEBUG("PIO_Initialize: Configuring PIOABCD\n\r");
285 AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOABCD;
286 AT91C_BASE_PIOA->PIO_ISR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -