📄 pio.lst
字号:
\ 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 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 000000EC 08002DE5 STR R0,[SP, #-8]!
\ 000000F0 FF3013E2 ANDS R3,R3,#0xFF ;; Zero extend
\ 000000F4 FF2012E2 ANDS R2,R2,#0xFF ;; Zero extend
\ 000000F8 001094E5 LDR R1,[R4, #+0]
\ 000000FC 040094E5 LDR R0,[R4, #+4]
\ 00000100 ........ BL PIO_SetOutput
\ 00000104 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning
\ 00000108 010000EA B ??PIO_Configure_5
252 break;
253
254 default: return 0;
\ ??PIO_Configure_3:
\ 0000010C 0000A0E3 MOV R0,#+0
\ 00000110 030000EA B ??PIO_Configure_15
255 }
256
257 list++;
\ ??PIO_Configure_5:
\ 00000114 0C4094E2 ADDS R4,R4,#+12
258 size--;
\ 00000118 015055E2 SUBS R5,R5,#+1
\ 0000011C BAFFFFEA B ??PIO_Configure_1
259 }
260
261 return 1;
\ ??PIO_Configure_2:
\ 00000120 0100A0E3 MOV R0,#+1
\ ??PIO_Configure_15:
\ 00000124 3280BDE8 POP {R1,R4,R5,PC} ;; return
262 }
263
264 //------------------------------------------------------------------------------
265 /// Sets a high output level on one or more pin(s) (if configured as output(s)).
266 /// \param pin Pointer to a Pin instance describing one or more pins.
267 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
268 void PIO_Set(const Pin *pin)
269 {
270 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]
271 }
\ 0000000C 1EFF2FE1 BX LR ;; return
272
273 //------------------------------------------------------------------------------
274 /// Sets a low output level on one or more pin(s) (if configured as output(s)).
275 /// \param pin Pointer to a Pin instance describing one or more pins.
276 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
277 void PIO_Clear(const Pin *pin)
278 {
279 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]
280 }
\ 0000000C 1EFF2FE1 BX LR ;; return
281
282 //------------------------------------------------------------------------------
283 /// Returns 1 if one or more PIO of the given Pin instance currently have a high
284 /// level; otherwise returns 0.
285 /// \param pin Pointer to a Pin instance describing one or more pins.
286 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
287 unsigned char PIO_Get(const Pin *pin)
288 {
\ PIO_Get:
\ 00000000 0010B0E1 MOVS R1,R0
289 unsigned int reg;
290 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
291
292 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
293 }
294 else {
295
296 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
297 }
298
299 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
300
301 return 0;
\ 00000044 0000A0E3 MOV R0,#+0
\ 00000048 000000EA B ??PIO_Get_4
302 }
303 else {
304
305 return 1;
\ ??PIO_Get_3:
\ 0000004C 0100A0E3 MOV R0,#+1
\ ??PIO_Get_4:
\ 00000050 1EFF2FE1 BX LR ;; return
306 }
307 }
308
309
310 //------------------------------------------------------------------------------
311 /// Returns 1 if one or more PIO of the given Pin data to be driven on the I/O line
312 /// level; otherwise returns 0.
313 /// \param pin Pointer to a Pin instance describing one or more pins.
314 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
315 unsigned char PIO_GetOutputDataStatus(const Pin *pin)
316 {
\ PIO_GetOutputDataStatus:
\ 00000000 0010B0E1 MOVS R1,R0
317 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
318
319 return 0;
\ 00000018 0000A0E3 MOV R0,#+0
\ 0000001C 000000EA B ??PIO_GetOutputDataStatus_1
320 }
321 else {
322
323 return 1;
\ ??PIO_GetOutputDataStatus_0:
\ 00000020 0100A0E3 MOV R0,#+1
\ ??PIO_GetOutputDataStatus_1:
\ 00000024 1EFF2FE1 BX LR ;; return
324 }
325 }
326
327 //------------------------------------------------------------------------------
328 /// Returns the value of ISR for the PIO controller of the pin.
329 /// Reading this register acknoledges all the ITs.
330 /// \param pin Pointer to a Pin instance describing one or more pins.
331 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
332 unsigned int PIO_GetISR(const Pin *pin)
333 {
334 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
335 }
336
Maximum stack usage in bytes:
Function .cstack
-------- -------
PIO_CfgOpendrain 0
PIO_CfgPeriph 0
PIO_Clear 0
PIO_Configure 8
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_CfgPeriph 20
PIO_CfgOpendrain 16
PIO_SetInput 64
PIO_SetOutput 92
PIO_Configure 296
PIO_Set 16
PIO_Clear 16
PIO_Get 84
PIO_GetOutputDataStatus 40
PIO_GetISR 12
736 bytes in section .text
736 bytes of CODE memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -