📄 pio.lst
字号:
\ 000000C0 0100000A BEQ ??PIO_Configure_11
\ 000000C4 0130A0E3 MOV R3,#+1
\ 000000C8 000000EA B ??PIO_Configure_12
\ ??PIO_Configure_11:
\ 000000CC 0030A0E3 MOV R3,#+0
\ ??PIO_Configure_12:
\ 000000D0 0910D4E5 LDRB R1,[R4, #+9]
\ 000000D4 040051E3 CMP R1,#+4
\ 000000D8 0100001A BNE ??PIO_Configure_13
\ 000000DC 0120A0E3 MOV R2,#+1
\ 000000E0 000000EA B ??PIO_Configure_14
\ ??PIO_Configure_13:
\ 000000E4 0020A0E3 MOV R2,#+0
\ ??PIO_Configure_14:
\ 000000E8 08D04DE2 SUB SP,SP,#+8
\ 000000EC FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 000000F0 00008DE5 STR R0,[SP, #+0]
\ 000000F4 FF3013E2 ANDS R3,R3,#0xFF ;; Zero extend
\ 000000F8 FF2012E2 ANDS R2,R2,#0xFF ;; Zero extend
\ 000000FC 001094E5 LDR R1,[R4, #+0]
\ 00000100 040094E5 LDR R0,[R4, #+4]
\ 00000104 ........ BL PIO_SetOutput
\ 00000108 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning
\ 0000010C 010000EA B ??PIO_Configure_5
256 break;
257
258 default: return 0;
\ ??PIO_Configure_3:
\ 00000110 0000A0E3 MOV R0,#+0
\ 00000114 030000EA B ??PIO_Configure_15
259 }
260
261 list++;
\ ??PIO_Configure_5:
\ 00000118 0C4094E2 ADDS R4,R4,#+12
262 size--;
\ 0000011C 015055E2 SUBS R5,R5,#+1
\ 00000120 B9FFFFEA B ??PIO_Configure_1
263 }
264
265 return 1;
\ ??PIO_Configure_2:
\ 00000124 0100A0E3 MOV R0,#+1
\ ??PIO_Configure_15:
\ 00000128 3840BDE8 POP {R3-R5,LR}
\ 0000012C 1EFF2FE1 BX LR ;; return
266 }
267
268 //------------------------------------------------------------------------------
269 /// Sets a high output level on one or more pin(s) (if configured as output(s)).
270 /// \param pin Pointer to a Pin instance describing one or more pins.
271 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
272 void PIO_Set(const Pin *pin)
273 {
274 WRITE(pin->pio, PIO_SODR, pin->mask);
\ PIO_Set:
\ 00000000 041090E5 LDR R1,[R0, #+4]
\ 00000004 002090E5 LDR R2,[R0, #+0]
\ 00000008 302081E5 STR R2,[R1, #+48]
275 }
\ 0000000C 1EFF2FE1 BX LR ;; return
276
277 //------------------------------------------------------------------------------
278 /// Sets a low output level on one or more pin(s) (if configured as output(s)).
279 /// \param pin Pointer to a Pin instance describing one or more pins.
280 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
281 void PIO_Clear(const Pin *pin)
282 {
283 WRITE(pin->pio, PIO_CODR, pin->mask);
\ PIO_Clear:
\ 00000000 041090E5 LDR R1,[R0, #+4]
\ 00000004 002090E5 LDR R2,[R0, #+0]
\ 00000008 342081E5 STR R2,[R1, #+52]
284 }
\ 0000000C 1EFF2FE1 BX LR ;; return
285
286 //------------------------------------------------------------------------------
287 /// Returns 1 if one or more PIO of the given Pin instance currently have a high
288 /// level; otherwise returns 0.
289 /// \param pin Pointer to a Pin instance describing one or more pins.
290 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
291 unsigned char PIO_Get(const Pin *pin)
292 {
\ PIO_Get:
\ 00000000 0010B0E1 MOVS R1,R0
293 unsigned int reg;
294 if ((pin->type == PIO_OUTPUT_0) || (pin->type == PIO_OUTPUT_1)) {
\ 00000004 0900D1E5 LDRB R0,[R1, #+9]
\ 00000008 030050E3 CMP R0,#+3
\ 0000000C 0200000A BEQ ??PIO_Get_0
\ 00000010 0900D1E5 LDRB R0,[R1, #+9]
\ 00000014 040050E3 CMP R0,#+4
\ 00000018 0300001A BNE ??PIO_Get_1
295
296 reg = READ(pin->pio, PIO_ODSR);
\ ??PIO_Get_0:
\ 0000001C 040091E5 LDR R0,[R1, #+4]
\ 00000020 380090E5 LDR R0,[R0, #+56]
\ 00000024 0020B0E1 MOVS R2,R0
\ 00000028 020000EA B ??PIO_Get_2
297 }
298 else {
299
300 reg = READ(pin->pio, PIO_PDSR);
\ ??PIO_Get_1:
\ 0000002C 040091E5 LDR R0,[R1, #+4]
\ 00000030 3C0090E5 LDR R0,[R0, #+60]
\ 00000034 0020B0E1 MOVS R2,R0
301 }
302
303 if ((reg & pin->mask) == 0) {
\ ??PIO_Get_2:
\ 00000038 000091E5 LDR R0,[R1, #+0]
\ 0000003C 020010E1 TST R0,R2
\ 00000040 0100001A BNE ??PIO_Get_3
304
305 return 0;
\ 00000044 0000A0E3 MOV R0,#+0
\ 00000048 000000EA B ??PIO_Get_4
306 }
307 else {
308
309 return 1;
\ ??PIO_Get_3:
\ 0000004C 0100A0E3 MOV R0,#+1
\ ??PIO_Get_4:
\ 00000050 1EFF2FE1 BX LR ;; return
310 }
311 }
312
313
314 //------------------------------------------------------------------------------
315 /// Returns 1 if one or more PIO of the given Pin data to be driven on the I/O line
316 /// level; otherwise returns 0.
317 /// \param pin Pointer to a Pin instance describing one or more pins.
318 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
319 unsigned char PIO_GetOutputDataStatus(const Pin *pin)
320 {
\ PIO_GetOutputDataStatus:
\ 00000000 0010B0E1 MOVS R1,R0
321 if ((READ(pin->pio, PIO_ODSR) & pin->mask) == 0) {
\ 00000004 040091E5 LDR R0,[R1, #+4]
\ 00000008 380090E5 LDR R0,[R0, #+56]
\ 0000000C 002091E5 LDR R2,[R1, #+0]
\ 00000010 000012E1 TST R2,R0
\ 00000014 0100001A BNE ??PIO_GetOutputDataStatus_0
322
323 return 0;
\ 00000018 0000A0E3 MOV R0,#+0
\ 0000001C 000000EA B ??PIO_GetOutputDataStatus_1
324 }
325 else {
326
327 return 1;
\ ??PIO_GetOutputDataStatus_0:
\ 00000020 0100A0E3 MOV R0,#+1
\ ??PIO_GetOutputDataStatus_1:
\ 00000024 1EFF2FE1 BX LR ;; return
328 }
329 }
330
331 //------------------------------------------------------------------------------
332 /// Returns the value of ISR for the PIO controller of the pin.
333 /// Reading this register acknoledges all the ITs.
334 /// \param pin Pointer to a Pin instance describing one or more pins.
335 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
336 unsigned int PIO_GetISR(const Pin *pin)
337 {
338 return (READ(pin->pio, PIO_ISR));
\ PIO_GetISR:
\ 00000000 040090E5 LDR R0,[R0, #+4]
\ 00000004 4C0090E5 LDR R0,[R0, #+76]
\ 00000008 1EFF2FE1 BX LR ;; return
339 }
340
Maximum stack usage in bytes:
Function .cstack
-------- -------
PIO_Clear 0
PIO_Configure 24
PIO_Get 0
PIO_GetISR 0
PIO_GetOutputDataStatus 0
PIO_Set 0
PIO_SetInput 0
PIO_SetOutput 0
PIO_SetPeripheralA 0
PIO_SetPeripheralB 0
Section sizes:
Function/Label Bytes
-------------- -----
PIO_SetPeripheralA 40
PIO_SetPeripheralB 40
PIO_SetInput 64
PIO_SetOutput 92
PIO_Configure 304
PIO_Set 16
PIO_Clear 16
PIO_Get 84
PIO_GetOutputDataStatus 40
PIO_GetISR 12
708 bytes in section .text
708 bytes of CODE memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -