📄 pio.lst
字号:
\ 00000074 0100A0E3 MOV R0,#+1
\ 00000078 D810D4E1 LDRSB R1,[R4, #+8]
\ 0000007C 1001A0E1 LSL R0,R0,R1
\ 00000080 EF10E0E3 MVN R1,#+239
\ 00000084 C01FC1E3 BIC R1,R1,#0x300
\ 00000088 000081E5 STR R0,[R1, #+0]
\ 0000008C 0A00D4E5 LDRB R0,[R4, #+10]
\ 00000090 0110A0E3 MOV R1,#+1
\ 00000094 A03001E0 AND R3,R1,R0, LSR #+1
\ 00000098 012000E2 AND R2,R0,#0x1
\ 0000009C 001094E5 LDR R1,[R4, #+0]
\ 000000A0 040094E5 LDR R0,[R4, #+4]
\ 000000A4 ........ BL PIO_SetInput
\ 000000A8 E5FFFFEA B ??PIO_Configure_5
\ ??PIO_Configure_9:
\ 000000AC 0900D4E5 LDRB R0,[R4, #+9]
\ 000000B0 040050E3 CMP R0,#+4
\ 000000B4 0120A003 MOVEQ R2,#+1
\ 000000B8 0020A013 MOVNE R2,#+0
\ 000000BC 0A00D4E5 LDRB R0,[R4, #+10]
\ 000000C0 010000E2 AND R0,R0,#0x1
\ 000000C4 08002DE5 STR R0,[SP, #-8]!
\ 000000C8 0A00D4E5 LDRB R0,[R4, #+10]
\ 000000CC 0110A0E3 MOV R1,#+1
\ 000000D0 203101E0 AND R3,R1,R0, LSR #+2
\ 000000D4 001094E5 LDR R1,[R4, #+0]
\ 000000D8 040094E5 LDR R0,[R4, #+4]
\ 000000DC ........ BL PIO_SetOutput
\ 000000E0 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning
\ 000000E4 D6FFFFEA B ??PIO_Configure_5
\ ??PIO_Configure_3:
\ 000000E8 0000A0E3 MOV R0,#+0
\ 000000EC D8FFFFEA B ??PIO_Configure_6
261 }
262
263 //------------------------------------------------------------------------------
264 /// Sets a high output level on all the PIOs defined in the given Pin instance.
265 /// This has no immediate effects on PIOs that are not output, but the PIO
266 /// controller will memorize the value they are changed to outputs.
267 /// \param pin Pointer to a Pin instance describing one or more pins.
268 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
269 void PIO_Set(const Pin *pin)
270 {
271 pin->pio->PIO_SODR = pin->mask;
\ PIO_Set:
\ 00000000 041090E5 LDR R1,[R0, #+4]
\ 00000004 000090E5 LDR R0,[R0, #+0]
\ 00000008 300081E5 STR R0,[R1, #+48]
272 }
\ 0000000C 1EFF2FE1 BX LR ;; return
273
274 //------------------------------------------------------------------------------
275 /// Sets a low output level on all the PIOs defined in the given Pin instance.
276 /// This has no immediate effects on PIOs that are not output, but the PIO
277 /// controller will memorize the value they are changed to outputs.
278 /// \param pin Pointer to a Pin instance describing one or more pins.
279 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
280 void PIO_Clear(const Pin *pin)
281 {
282 pin->pio->PIO_CODR = pin->mask;
\ PIO_Clear:
\ 00000000 041090E5 LDR R1,[R0, #+4]
\ 00000004 000090E5 LDR R0,[R0, #+0]
\ 00000008 340081E5 STR R0,[R1, #+52]
283 }
\ 0000000C 1EFF2FE1 BX LR ;; return
284
285 //------------------------------------------------------------------------------
286 /// Returns 1 if one or more PIO of the given Pin instance currently have a high
287 /// level; otherwise returns 0. This method returns the actual value that is
288 /// being read on the pin. To return the supposed output value of a pin, use
289 /// PIO_GetOutputDataStatus() instead.
290 /// \param pin Pointer to a Pin instance describing one or more pins.
291 /// \return 1 if the Pin instance contains at least one PIO that currently has
292 /// a high level; otherwise 0.
293 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
294 unsigned char PIO_Get(const Pin *pin)
295 {
296 unsigned int reg;
297 if ((pin->type == PIO_OUTPUT_0) || (pin->type == PIO_OUTPUT_1)) {
\ PIO_Get:
\ 00000000 0910D0E5 LDRB R1,[R0, #+9]
\ 00000004 030051E3 CMP R1,#+3
\ 00000008 04005113 CMPNE R1,#+4
298
299 reg = pin->pio->PIO_ODSR;
\ 0000000C 04109005 LDREQ R1,[R0, #+4]
\ 00000010 38109105 LDREQ R1,[R1, #+56]
300 }
301 else {
302
303 reg = pin->pio->PIO_PDSR;
\ 00000014 04109015 LDRNE R1,[R0, #+4]
\ 00000018 3C109115 LDRNE R1,[R1, #+60]
304 }
305
306 if ((reg & pin->mask) == 0) {
\ 0000001C ........ B ?Subroutine0
307
308 return 0;
309 }
310 else {
311
312 return 1;
313 }
314 }
\ In section .text, align 4, keep-with-next
\ ?Subroutine0:
\ 00000000 000090E5 LDR R0,[R0, #+0]
\ 00000004 010010E1 TST R0,R1
\ 00000008 0000A003 MOVEQ R0,#+0
\ 0000000C 0100A013 MOVNE R0,#+1
\ 00000010 1EFF2FE1 BX LR ;; return
315
316
317 //------------------------------------------------------------------------------
318 /// Returns 1 if one or more PIO of the given Pin are configured to output a
319 /// high level (even if they are not output).
320 /// To get the actual value of the pin, use PIO_Get() instead.
321 /// \param pin Pointer to a Pin instance describing one or more pins.
322 /// \return 1 if the Pin instance contains at least one PIO that is configured
323 /// to output a high level; otherwise 0.
324 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
325 unsigned char PIO_GetOutputDataStatus(const Pin *pin)
326 {
327 if ((pin->pio->PIO_ODSR & pin->mask) == 0) {
\ PIO_GetOutputDataStatus:
\ 00000000 041090E5 LDR R1,[R0, #+4]
\ 00000004 381091E5 LDR R1,[R1, #+56]
\ 00000008 REQUIRE ?Subroutine0
\ 00000008 ;; // Fall through to label ?Subroutine0
328
329 return 0;
330 }
331 else {
332
333 return 1;
334 }
335 }
336
337 //------------------------------------------------------------------------------
338 /// Returns the value of ISR for the PIO controller of the pin.
339 /// Reading this register acknoledges all the ITs.
340 /// \param pin Pointer to a Pin instance describing one or more pins.
341 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
342 unsigned int PIO_GetISR(const Pin *pin)
343 {
344 return (pin->pio->PIO_ISR);
\ PIO_GetISR:
\ 00000000 040090E5 LDR R0,[R0, #+4]
\ 00000004 4C0090E5 LDR R0,[R0, #+76]
\ 00000008 1EFF2FE1 BX LR ;; return
345 }
346
Maximum stack usage in bytes:
Function .cstack
-------- -------
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 28
PIO_SetPeripheralB 28
PIO_SetInput 40
PIO_SetOutput 56
PIO_Configure 240
PIO_Set 16
PIO_Clear 16
PIO_Get 32
?Subroutine0 20
PIO_GetOutputDataStatus 8
PIO_GetISR 12
496 bytes in section .text
496 bytes of CODE memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -