temps_reel/software/robot/Release/Dumber-Robot-Firmware.list
Sébastien DI MERCURIO 6ff5a468f6 RC1 pour TP 2019
2019-02-11 14:09:42 +01:00

9419 lines
354 KiB
Text

Dumber-Robot-Firmware.elf: file format elf32-littlearm
Sections:
Idx Name Size VMA LMA File off Algn
0 .isr_vector 0000010c 08000000 08000000 00010000 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .text 00003f44 08000110 08000110 00010110 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .rodata 000001ec 08004054 08004054 00014054 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .init_array 00000004 08004240 08004240 00014240 2**2
CONTENTS, ALLOC, LOAD, DATA
4 .fini_array 00000004 08004244 08004244 00014244 2**2
CONTENTS, ALLOC, LOAD, DATA
5 .data 000001ec 20000000 08004248 00020000 2**2
CONTENTS, ALLOC, LOAD, DATA
6 .bss 000001a8 200001ec 08004434 000201ec 2**2
ALLOC
7 ._user_heap_stack 00000100 20000394 08004434 00020394 2**0
ALLOC
8 .ARM.attributes 00000029 00000000 00000000 000201ec 2**0
CONTENTS, READONLY
9 .debug_info 0000e654 00000000 00000000 00020215 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 000025ac 00000000 00000000 0002e869 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 00004ed6 00000000 00000000 00030e15 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_aranges 00000bf8 00000000 00000000 00035cf0 2**3
CONTENTS, READONLY, DEBUGGING
13 .debug_ranges 00000b20 00000000 00000000 000368e8 2**3
CONTENTS, READONLY, DEBUGGING
14 .debug_macro 00011ffb 00000000 00000000 00037408 2**0
CONTENTS, READONLY, DEBUGGING
15 .debug_line 00007e72 00000000 00000000 00049403 2**0
CONTENTS, READONLY, DEBUGGING
16 .debug_str 00056f77 00000000 00000000 00051275 2**0
CONTENTS, READONLY, DEBUGGING
17 .comment 0000007c 00000000 00000000 000a81ec 2**0
CONTENTS, READONLY
18 .debug_frame 000024c8 00000000 00000000 000a8268 2**2
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
08000110 <__do_global_dtors_aux>:
8000110: b510 push {r4, lr}
8000112: 4c05 ldr r4, [pc, #20] ; (8000128 <__do_global_dtors_aux+0x18>)
8000114: 7823 ldrb r3, [r4, #0]
8000116: b933 cbnz r3, 8000126 <__do_global_dtors_aux+0x16>
8000118: 4b04 ldr r3, [pc, #16] ; (800012c <__do_global_dtors_aux+0x1c>)
800011a: b113 cbz r3, 8000122 <__do_global_dtors_aux+0x12>
800011c: 4804 ldr r0, [pc, #16] ; (8000130 <__do_global_dtors_aux+0x20>)
800011e: f3af 8000 nop.w
8000122: 2301 movs r3, #1
8000124: 7023 strb r3, [r4, #0]
8000126: bd10 pop {r4, pc}
8000128: 200001ec .word 0x200001ec
800012c: 00000000 .word 0x00000000
8000130: 0800403c .word 0x0800403c
08000134 <frame_dummy>:
8000134: b508 push {r3, lr}
8000136: 4b03 ldr r3, [pc, #12] ; (8000144 <frame_dummy+0x10>)
8000138: b11b cbz r3, 8000142 <frame_dummy+0xe>
800013a: 4903 ldr r1, [pc, #12] ; (8000148 <frame_dummy+0x14>)
800013c: 4803 ldr r0, [pc, #12] ; (800014c <frame_dummy+0x18>)
800013e: f3af 8000 nop.w
8000142: bd08 pop {r3, pc}
8000144: 00000000 .word 0x00000000
8000148: 200001f0 .word 0x200001f0
800014c: 0800403c .word 0x0800403c
08000150 <strlen>:
8000150: 4603 mov r3, r0
8000152: f813 2b01 ldrb.w r2, [r3], #1
8000156: 2a00 cmp r2, #0
8000158: d1fb bne.n 8000152 <strlen+0x2>
800015a: 1a18 subs r0, r3, r0
800015c: 3801 subs r0, #1
800015e: 4770 bx lr
08000160 <__aeabi_drsub>:
8000160: f081 4100 eor.w r1, r1, #2147483648 ; 0x80000000
8000164: e002 b.n 800016c <__adddf3>
8000166: bf00 nop
08000168 <__aeabi_dsub>:
8000168: f083 4300 eor.w r3, r3, #2147483648 ; 0x80000000
0800016c <__adddf3>:
800016c: b530 push {r4, r5, lr}
800016e: ea4f 0441 mov.w r4, r1, lsl #1
8000172: ea4f 0543 mov.w r5, r3, lsl #1
8000176: ea94 0f05 teq r4, r5
800017a: bf08 it eq
800017c: ea90 0f02 teqeq r0, r2
8000180: bf1f itttt ne
8000182: ea54 0c00 orrsne.w ip, r4, r0
8000186: ea55 0c02 orrsne.w ip, r5, r2
800018a: ea7f 5c64 mvnsne.w ip, r4, asr #21
800018e: ea7f 5c65 mvnsne.w ip, r5, asr #21
8000192: f000 80e2 beq.w 800035a <__adddf3+0x1ee>
8000196: ea4f 5454 mov.w r4, r4, lsr #21
800019a: ebd4 5555 rsbs r5, r4, r5, lsr #21
800019e: bfb8 it lt
80001a0: 426d neglt r5, r5
80001a2: dd0c ble.n 80001be <__adddf3+0x52>
80001a4: 442c add r4, r5
80001a6: ea80 0202 eor.w r2, r0, r2
80001aa: ea81 0303 eor.w r3, r1, r3
80001ae: ea82 0000 eor.w r0, r2, r0
80001b2: ea83 0101 eor.w r1, r3, r1
80001b6: ea80 0202 eor.w r2, r0, r2
80001ba: ea81 0303 eor.w r3, r1, r3
80001be: 2d36 cmp r5, #54 ; 0x36
80001c0: bf88 it hi
80001c2: bd30 pophi {r4, r5, pc}
80001c4: f011 4f00 tst.w r1, #2147483648 ; 0x80000000
80001c8: ea4f 3101 mov.w r1, r1, lsl #12
80001cc: f44f 1c80 mov.w ip, #1048576 ; 0x100000
80001d0: ea4c 3111 orr.w r1, ip, r1, lsr #12
80001d4: d002 beq.n 80001dc <__adddf3+0x70>
80001d6: 4240 negs r0, r0
80001d8: eb61 0141 sbc.w r1, r1, r1, lsl #1
80001dc: f013 4f00 tst.w r3, #2147483648 ; 0x80000000
80001e0: ea4f 3303 mov.w r3, r3, lsl #12
80001e4: ea4c 3313 orr.w r3, ip, r3, lsr #12
80001e8: d002 beq.n 80001f0 <__adddf3+0x84>
80001ea: 4252 negs r2, r2
80001ec: eb63 0343 sbc.w r3, r3, r3, lsl #1
80001f0: ea94 0f05 teq r4, r5
80001f4: f000 80a7 beq.w 8000346 <__adddf3+0x1da>
80001f8: f1a4 0401 sub.w r4, r4, #1
80001fc: f1d5 0e20 rsbs lr, r5, #32
8000200: db0d blt.n 800021e <__adddf3+0xb2>
8000202: fa02 fc0e lsl.w ip, r2, lr
8000206: fa22 f205 lsr.w r2, r2, r5
800020a: 1880 adds r0, r0, r2
800020c: f141 0100 adc.w r1, r1, #0
8000210: fa03 f20e lsl.w r2, r3, lr
8000214: 1880 adds r0, r0, r2
8000216: fa43 f305 asr.w r3, r3, r5
800021a: 4159 adcs r1, r3
800021c: e00e b.n 800023c <__adddf3+0xd0>
800021e: f1a5 0520 sub.w r5, r5, #32
8000222: f10e 0e20 add.w lr, lr, #32
8000226: 2a01 cmp r2, #1
8000228: fa03 fc0e lsl.w ip, r3, lr
800022c: bf28 it cs
800022e: f04c 0c02 orrcs.w ip, ip, #2
8000232: fa43 f305 asr.w r3, r3, r5
8000236: 18c0 adds r0, r0, r3
8000238: eb51 71e3 adcs.w r1, r1, r3, asr #31
800023c: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000
8000240: d507 bpl.n 8000252 <__adddf3+0xe6>
8000242: f04f 0e00 mov.w lr, #0
8000246: f1dc 0c00 rsbs ip, ip, #0
800024a: eb7e 0000 sbcs.w r0, lr, r0
800024e: eb6e 0101 sbc.w r1, lr, r1
8000252: f5b1 1f80 cmp.w r1, #1048576 ; 0x100000
8000256: d31b bcc.n 8000290 <__adddf3+0x124>
8000258: f5b1 1f00 cmp.w r1, #2097152 ; 0x200000
800025c: d30c bcc.n 8000278 <__adddf3+0x10c>
800025e: 0849 lsrs r1, r1, #1
8000260: ea5f 0030 movs.w r0, r0, rrx
8000264: ea4f 0c3c mov.w ip, ip, rrx
8000268: f104 0401 add.w r4, r4, #1
800026c: ea4f 5244 mov.w r2, r4, lsl #21
8000270: f512 0f80 cmn.w r2, #4194304 ; 0x400000
8000274: f080 809a bcs.w 80003ac <__adddf3+0x240>
8000278: f1bc 4f00 cmp.w ip, #2147483648 ; 0x80000000
800027c: bf08 it eq
800027e: ea5f 0c50 movseq.w ip, r0, lsr #1
8000282: f150 0000 adcs.w r0, r0, #0
8000286: eb41 5104 adc.w r1, r1, r4, lsl #20
800028a: ea41 0105 orr.w r1, r1, r5
800028e: bd30 pop {r4, r5, pc}
8000290: ea5f 0c4c movs.w ip, ip, lsl #1
8000294: 4140 adcs r0, r0
8000296: eb41 0101 adc.w r1, r1, r1
800029a: f411 1f80 tst.w r1, #1048576 ; 0x100000
800029e: f1a4 0401 sub.w r4, r4, #1
80002a2: d1e9 bne.n 8000278 <__adddf3+0x10c>
80002a4: f091 0f00 teq r1, #0
80002a8: bf04 itt eq
80002aa: 4601 moveq r1, r0
80002ac: 2000 moveq r0, #0
80002ae: fab1 f381 clz r3, r1
80002b2: bf08 it eq
80002b4: 3320 addeq r3, #32
80002b6: f1a3 030b sub.w r3, r3, #11
80002ba: f1b3 0220 subs.w r2, r3, #32
80002be: da0c bge.n 80002da <__adddf3+0x16e>
80002c0: 320c adds r2, #12
80002c2: dd08 ble.n 80002d6 <__adddf3+0x16a>
80002c4: f102 0c14 add.w ip, r2, #20
80002c8: f1c2 020c rsb r2, r2, #12
80002cc: fa01 f00c lsl.w r0, r1, ip
80002d0: fa21 f102 lsr.w r1, r1, r2
80002d4: e00c b.n 80002f0 <__adddf3+0x184>
80002d6: f102 0214 add.w r2, r2, #20
80002da: bfd8 it le
80002dc: f1c2 0c20 rsble ip, r2, #32
80002e0: fa01 f102 lsl.w r1, r1, r2
80002e4: fa20 fc0c lsr.w ip, r0, ip
80002e8: bfdc itt le
80002ea: ea41 010c orrle.w r1, r1, ip
80002ee: 4090 lslle r0, r2
80002f0: 1ae4 subs r4, r4, r3
80002f2: bfa2 ittt ge
80002f4: eb01 5104 addge.w r1, r1, r4, lsl #20
80002f8: 4329 orrge r1, r5
80002fa: bd30 popge {r4, r5, pc}
80002fc: ea6f 0404 mvn.w r4, r4
8000300: 3c1f subs r4, #31
8000302: da1c bge.n 800033e <__adddf3+0x1d2>
8000304: 340c adds r4, #12
8000306: dc0e bgt.n 8000326 <__adddf3+0x1ba>
8000308: f104 0414 add.w r4, r4, #20
800030c: f1c4 0220 rsb r2, r4, #32
8000310: fa20 f004 lsr.w r0, r0, r4
8000314: fa01 f302 lsl.w r3, r1, r2
8000318: ea40 0003 orr.w r0, r0, r3
800031c: fa21 f304 lsr.w r3, r1, r4
8000320: ea45 0103 orr.w r1, r5, r3
8000324: bd30 pop {r4, r5, pc}
8000326: f1c4 040c rsb r4, r4, #12
800032a: f1c4 0220 rsb r2, r4, #32
800032e: fa20 f002 lsr.w r0, r0, r2
8000332: fa01 f304 lsl.w r3, r1, r4
8000336: ea40 0003 orr.w r0, r0, r3
800033a: 4629 mov r1, r5
800033c: bd30 pop {r4, r5, pc}
800033e: fa21 f004 lsr.w r0, r1, r4
8000342: 4629 mov r1, r5
8000344: bd30 pop {r4, r5, pc}
8000346: f094 0f00 teq r4, #0
800034a: f483 1380 eor.w r3, r3, #1048576 ; 0x100000
800034e: bf06 itte eq
8000350: f481 1180 eoreq.w r1, r1, #1048576 ; 0x100000
8000354: 3401 addeq r4, #1
8000356: 3d01 subne r5, #1
8000358: e74e b.n 80001f8 <__adddf3+0x8c>
800035a: ea7f 5c64 mvns.w ip, r4, asr #21
800035e: bf18 it ne
8000360: ea7f 5c65 mvnsne.w ip, r5, asr #21
8000364: d029 beq.n 80003ba <__adddf3+0x24e>
8000366: ea94 0f05 teq r4, r5
800036a: bf08 it eq
800036c: ea90 0f02 teqeq r0, r2
8000370: d005 beq.n 800037e <__adddf3+0x212>
8000372: ea54 0c00 orrs.w ip, r4, r0
8000376: bf04 itt eq
8000378: 4619 moveq r1, r3
800037a: 4610 moveq r0, r2
800037c: bd30 pop {r4, r5, pc}
800037e: ea91 0f03 teq r1, r3
8000382: bf1e ittt ne
8000384: 2100 movne r1, #0
8000386: 2000 movne r0, #0
8000388: bd30 popne {r4, r5, pc}
800038a: ea5f 5c54 movs.w ip, r4, lsr #21
800038e: d105 bne.n 800039c <__adddf3+0x230>
8000390: 0040 lsls r0, r0, #1
8000392: 4149 adcs r1, r1
8000394: bf28 it cs
8000396: f041 4100 orrcs.w r1, r1, #2147483648 ; 0x80000000
800039a: bd30 pop {r4, r5, pc}
800039c: f514 0480 adds.w r4, r4, #4194304 ; 0x400000
80003a0: bf3c itt cc
80003a2: f501 1180 addcc.w r1, r1, #1048576 ; 0x100000
80003a6: bd30 popcc {r4, r5, pc}
80003a8: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000
80003ac: f045 41fe orr.w r1, r5, #2130706432 ; 0x7f000000
80003b0: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000
80003b4: f04f 0000 mov.w r0, #0
80003b8: bd30 pop {r4, r5, pc}
80003ba: ea7f 5c64 mvns.w ip, r4, asr #21
80003be: bf1a itte ne
80003c0: 4619 movne r1, r3
80003c2: 4610 movne r0, r2
80003c4: ea7f 5c65 mvnseq.w ip, r5, asr #21
80003c8: bf1c itt ne
80003ca: 460b movne r3, r1
80003cc: 4602 movne r2, r0
80003ce: ea50 3401 orrs.w r4, r0, r1, lsl #12
80003d2: bf06 itte eq
80003d4: ea52 3503 orrseq.w r5, r2, r3, lsl #12
80003d8: ea91 0f03 teqeq r1, r3
80003dc: f441 2100 orrne.w r1, r1, #524288 ; 0x80000
80003e0: bd30 pop {r4, r5, pc}
80003e2: bf00 nop
080003e4 <__aeabi_ui2d>:
80003e4: f090 0f00 teq r0, #0
80003e8: bf04 itt eq
80003ea: 2100 moveq r1, #0
80003ec: 4770 bxeq lr
80003ee: b530 push {r4, r5, lr}
80003f0: f44f 6480 mov.w r4, #1024 ; 0x400
80003f4: f104 0432 add.w r4, r4, #50 ; 0x32
80003f8: f04f 0500 mov.w r5, #0
80003fc: f04f 0100 mov.w r1, #0
8000400: e750 b.n 80002a4 <__adddf3+0x138>
8000402: bf00 nop
08000404 <__aeabi_i2d>:
8000404: f090 0f00 teq r0, #0
8000408: bf04 itt eq
800040a: 2100 moveq r1, #0
800040c: 4770 bxeq lr
800040e: b530 push {r4, r5, lr}
8000410: f44f 6480 mov.w r4, #1024 ; 0x400
8000414: f104 0432 add.w r4, r4, #50 ; 0x32
8000418: f010 4500 ands.w r5, r0, #2147483648 ; 0x80000000
800041c: bf48 it mi
800041e: 4240 negmi r0, r0
8000420: f04f 0100 mov.w r1, #0
8000424: e73e b.n 80002a4 <__adddf3+0x138>
8000426: bf00 nop
08000428 <__aeabi_f2d>:
8000428: 0042 lsls r2, r0, #1
800042a: ea4f 01e2 mov.w r1, r2, asr #3
800042e: ea4f 0131 mov.w r1, r1, rrx
8000432: ea4f 7002 mov.w r0, r2, lsl #28
8000436: bf1f itttt ne
8000438: f012 437f andsne.w r3, r2, #4278190080 ; 0xff000000
800043c: f093 4f7f teqne r3, #4278190080 ; 0xff000000
8000440: f081 5160 eorne.w r1, r1, #939524096 ; 0x38000000
8000444: 4770 bxne lr
8000446: f092 0f00 teq r2, #0
800044a: bf14 ite ne
800044c: f093 4f7f teqne r3, #4278190080 ; 0xff000000
8000450: 4770 bxeq lr
8000452: b530 push {r4, r5, lr}
8000454: f44f 7460 mov.w r4, #896 ; 0x380
8000458: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000
800045c: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000
8000460: e720 b.n 80002a4 <__adddf3+0x138>
8000462: bf00 nop
08000464 <__aeabi_ul2d>:
8000464: ea50 0201 orrs.w r2, r0, r1
8000468: bf08 it eq
800046a: 4770 bxeq lr
800046c: b530 push {r4, r5, lr}
800046e: f04f 0500 mov.w r5, #0
8000472: e00a b.n 800048a <__aeabi_l2d+0x16>
08000474 <__aeabi_l2d>:
8000474: ea50 0201 orrs.w r2, r0, r1
8000478: bf08 it eq
800047a: 4770 bxeq lr
800047c: b530 push {r4, r5, lr}
800047e: f011 4500 ands.w r5, r1, #2147483648 ; 0x80000000
8000482: d502 bpl.n 800048a <__aeabi_l2d+0x16>
8000484: 4240 negs r0, r0
8000486: eb61 0141 sbc.w r1, r1, r1, lsl #1
800048a: f44f 6480 mov.w r4, #1024 ; 0x400
800048e: f104 0432 add.w r4, r4, #50 ; 0x32
8000492: ea5f 5c91 movs.w ip, r1, lsr #22
8000496: f43f aedc beq.w 8000252 <__adddf3+0xe6>
800049a: f04f 0203 mov.w r2, #3
800049e: ea5f 0cdc movs.w ip, ip, lsr #3
80004a2: bf18 it ne
80004a4: 3203 addne r2, #3
80004a6: ea5f 0cdc movs.w ip, ip, lsr #3
80004aa: bf18 it ne
80004ac: 3203 addne r2, #3
80004ae: eb02 02dc add.w r2, r2, ip, lsr #3
80004b2: f1c2 0320 rsb r3, r2, #32
80004b6: fa00 fc03 lsl.w ip, r0, r3
80004ba: fa20 f002 lsr.w r0, r0, r2
80004be: fa01 fe03 lsl.w lr, r1, r3
80004c2: ea40 000e orr.w r0, r0, lr
80004c6: fa21 f102 lsr.w r1, r1, r2
80004ca: 4414 add r4, r2
80004cc: e6c1 b.n 8000252 <__adddf3+0xe6>
80004ce: bf00 nop
080004d0 <__aeabi_dmul>:
80004d0: b570 push {r4, r5, r6, lr}
80004d2: f04f 0cff mov.w ip, #255 ; 0xff
80004d6: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700
80004da: ea1c 5411 ands.w r4, ip, r1, lsr #20
80004de: bf1d ittte ne
80004e0: ea1c 5513 andsne.w r5, ip, r3, lsr #20
80004e4: ea94 0f0c teqne r4, ip
80004e8: ea95 0f0c teqne r5, ip
80004ec: f000 f8de bleq 80006ac <__aeabi_dmul+0x1dc>
80004f0: 442c add r4, r5
80004f2: ea81 0603 eor.w r6, r1, r3
80004f6: ea21 514c bic.w r1, r1, ip, lsl #21
80004fa: ea23 534c bic.w r3, r3, ip, lsl #21
80004fe: ea50 3501 orrs.w r5, r0, r1, lsl #12
8000502: bf18 it ne
8000504: ea52 3503 orrsne.w r5, r2, r3, lsl #12
8000508: f441 1180 orr.w r1, r1, #1048576 ; 0x100000
800050c: f443 1380 orr.w r3, r3, #1048576 ; 0x100000
8000510: d038 beq.n 8000584 <__aeabi_dmul+0xb4>
8000512: fba0 ce02 umull ip, lr, r0, r2
8000516: f04f 0500 mov.w r5, #0
800051a: fbe1 e502 umlal lr, r5, r1, r2
800051e: f006 4200 and.w r2, r6, #2147483648 ; 0x80000000
8000522: fbe0 e503 umlal lr, r5, r0, r3
8000526: f04f 0600 mov.w r6, #0
800052a: fbe1 5603 umlal r5, r6, r1, r3
800052e: f09c 0f00 teq ip, #0
8000532: bf18 it ne
8000534: f04e 0e01 orrne.w lr, lr, #1
8000538: f1a4 04ff sub.w r4, r4, #255 ; 0xff
800053c: f5b6 7f00 cmp.w r6, #512 ; 0x200
8000540: f564 7440 sbc.w r4, r4, #768 ; 0x300
8000544: d204 bcs.n 8000550 <__aeabi_dmul+0x80>
8000546: ea5f 0e4e movs.w lr, lr, lsl #1
800054a: 416d adcs r5, r5
800054c: eb46 0606 adc.w r6, r6, r6
8000550: ea42 21c6 orr.w r1, r2, r6, lsl #11
8000554: ea41 5155 orr.w r1, r1, r5, lsr #21
8000558: ea4f 20c5 mov.w r0, r5, lsl #11
800055c: ea40 505e orr.w r0, r0, lr, lsr #21
8000560: ea4f 2ece mov.w lr, lr, lsl #11
8000564: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd
8000568: bf88 it hi
800056a: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700
800056e: d81e bhi.n 80005ae <__aeabi_dmul+0xde>
8000570: f1be 4f00 cmp.w lr, #2147483648 ; 0x80000000
8000574: bf08 it eq
8000576: ea5f 0e50 movseq.w lr, r0, lsr #1
800057a: f150 0000 adcs.w r0, r0, #0
800057e: eb41 5104 adc.w r1, r1, r4, lsl #20
8000582: bd70 pop {r4, r5, r6, pc}
8000584: f006 4600 and.w r6, r6, #2147483648 ; 0x80000000
8000588: ea46 0101 orr.w r1, r6, r1
800058c: ea40 0002 orr.w r0, r0, r2
8000590: ea81 0103 eor.w r1, r1, r3
8000594: ebb4 045c subs.w r4, r4, ip, lsr #1
8000598: bfc2 ittt gt
800059a: ebd4 050c rsbsgt r5, r4, ip
800059e: ea41 5104 orrgt.w r1, r1, r4, lsl #20
80005a2: bd70 popgt {r4, r5, r6, pc}
80005a4: f441 1180 orr.w r1, r1, #1048576 ; 0x100000
80005a8: f04f 0e00 mov.w lr, #0
80005ac: 3c01 subs r4, #1
80005ae: f300 80ab bgt.w 8000708 <__aeabi_dmul+0x238>
80005b2: f114 0f36 cmn.w r4, #54 ; 0x36
80005b6: bfde ittt le
80005b8: 2000 movle r0, #0
80005ba: f001 4100 andle.w r1, r1, #2147483648 ; 0x80000000
80005be: bd70 pople {r4, r5, r6, pc}
80005c0: f1c4 0400 rsb r4, r4, #0
80005c4: 3c20 subs r4, #32
80005c6: da35 bge.n 8000634 <__aeabi_dmul+0x164>
80005c8: 340c adds r4, #12
80005ca: dc1b bgt.n 8000604 <__aeabi_dmul+0x134>
80005cc: f104 0414 add.w r4, r4, #20
80005d0: f1c4 0520 rsb r5, r4, #32
80005d4: fa00 f305 lsl.w r3, r0, r5
80005d8: fa20 f004 lsr.w r0, r0, r4
80005dc: fa01 f205 lsl.w r2, r1, r5
80005e0: ea40 0002 orr.w r0, r0, r2
80005e4: f001 4200 and.w r2, r1, #2147483648 ; 0x80000000
80005e8: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000
80005ec: eb10 70d3 adds.w r0, r0, r3, lsr #31
80005f0: fa21 f604 lsr.w r6, r1, r4
80005f4: eb42 0106 adc.w r1, r2, r6
80005f8: ea5e 0e43 orrs.w lr, lr, r3, lsl #1
80005fc: bf08 it eq
80005fe: ea20 70d3 biceq.w r0, r0, r3, lsr #31
8000602: bd70 pop {r4, r5, r6, pc}
8000604: f1c4 040c rsb r4, r4, #12
8000608: f1c4 0520 rsb r5, r4, #32
800060c: fa00 f304 lsl.w r3, r0, r4
8000610: fa20 f005 lsr.w r0, r0, r5
8000614: fa01 f204 lsl.w r2, r1, r4
8000618: ea40 0002 orr.w r0, r0, r2
800061c: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000
8000620: eb10 70d3 adds.w r0, r0, r3, lsr #31
8000624: f141 0100 adc.w r1, r1, #0
8000628: ea5e 0e43 orrs.w lr, lr, r3, lsl #1
800062c: bf08 it eq
800062e: ea20 70d3 biceq.w r0, r0, r3, lsr #31
8000632: bd70 pop {r4, r5, r6, pc}
8000634: f1c4 0520 rsb r5, r4, #32
8000638: fa00 f205 lsl.w r2, r0, r5
800063c: ea4e 0e02 orr.w lr, lr, r2
8000640: fa20 f304 lsr.w r3, r0, r4
8000644: fa01 f205 lsl.w r2, r1, r5
8000648: ea43 0302 orr.w r3, r3, r2
800064c: fa21 f004 lsr.w r0, r1, r4
8000650: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000
8000654: fa21 f204 lsr.w r2, r1, r4
8000658: ea20 0002 bic.w r0, r0, r2
800065c: eb00 70d3 add.w r0, r0, r3, lsr #31
8000660: ea5e 0e43 orrs.w lr, lr, r3, lsl #1
8000664: bf08 it eq
8000666: ea20 70d3 biceq.w r0, r0, r3, lsr #31
800066a: bd70 pop {r4, r5, r6, pc}
800066c: f094 0f00 teq r4, #0
8000670: d10f bne.n 8000692 <__aeabi_dmul+0x1c2>
8000672: f001 4600 and.w r6, r1, #2147483648 ; 0x80000000
8000676: 0040 lsls r0, r0, #1
8000678: eb41 0101 adc.w r1, r1, r1
800067c: f411 1f80 tst.w r1, #1048576 ; 0x100000
8000680: bf08 it eq
8000682: 3c01 subeq r4, #1
8000684: d0f7 beq.n 8000676 <__aeabi_dmul+0x1a6>
8000686: ea41 0106 orr.w r1, r1, r6
800068a: f095 0f00 teq r5, #0
800068e: bf18 it ne
8000690: 4770 bxne lr
8000692: f003 4600 and.w r6, r3, #2147483648 ; 0x80000000
8000696: 0052 lsls r2, r2, #1
8000698: eb43 0303 adc.w r3, r3, r3
800069c: f413 1f80 tst.w r3, #1048576 ; 0x100000
80006a0: bf08 it eq
80006a2: 3d01 subeq r5, #1
80006a4: d0f7 beq.n 8000696 <__aeabi_dmul+0x1c6>
80006a6: ea43 0306 orr.w r3, r3, r6
80006aa: 4770 bx lr
80006ac: ea94 0f0c teq r4, ip
80006b0: ea0c 5513 and.w r5, ip, r3, lsr #20
80006b4: bf18 it ne
80006b6: ea95 0f0c teqne r5, ip
80006ba: d00c beq.n 80006d6 <__aeabi_dmul+0x206>
80006bc: ea50 0641 orrs.w r6, r0, r1, lsl #1
80006c0: bf18 it ne
80006c2: ea52 0643 orrsne.w r6, r2, r3, lsl #1
80006c6: d1d1 bne.n 800066c <__aeabi_dmul+0x19c>
80006c8: ea81 0103 eor.w r1, r1, r3
80006cc: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000
80006d0: f04f 0000 mov.w r0, #0
80006d4: bd70 pop {r4, r5, r6, pc}
80006d6: ea50 0641 orrs.w r6, r0, r1, lsl #1
80006da: bf06 itte eq
80006dc: 4610 moveq r0, r2
80006de: 4619 moveq r1, r3
80006e0: ea52 0643 orrsne.w r6, r2, r3, lsl #1
80006e4: d019 beq.n 800071a <__aeabi_dmul+0x24a>
80006e6: ea94 0f0c teq r4, ip
80006ea: d102 bne.n 80006f2 <__aeabi_dmul+0x222>
80006ec: ea50 3601 orrs.w r6, r0, r1, lsl #12
80006f0: d113 bne.n 800071a <__aeabi_dmul+0x24a>
80006f2: ea95 0f0c teq r5, ip
80006f6: d105 bne.n 8000704 <__aeabi_dmul+0x234>
80006f8: ea52 3603 orrs.w r6, r2, r3, lsl #12
80006fc: bf1c itt ne
80006fe: 4610 movne r0, r2
8000700: 4619 movne r1, r3
8000702: d10a bne.n 800071a <__aeabi_dmul+0x24a>
8000704: ea81 0103 eor.w r1, r1, r3
8000708: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000
800070c: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000
8000710: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000
8000714: f04f 0000 mov.w r0, #0
8000718: bd70 pop {r4, r5, r6, pc}
800071a: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000
800071e: f441 0178 orr.w r1, r1, #16252928 ; 0xf80000
8000722: bd70 pop {r4, r5, r6, pc}
08000724 <__aeabi_ddiv>:
8000724: b570 push {r4, r5, r6, lr}
8000726: f04f 0cff mov.w ip, #255 ; 0xff
800072a: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700
800072e: ea1c 5411 ands.w r4, ip, r1, lsr #20
8000732: bf1d ittte ne
8000734: ea1c 5513 andsne.w r5, ip, r3, lsr #20
8000738: ea94 0f0c teqne r4, ip
800073c: ea95 0f0c teqne r5, ip
8000740: f000 f8a7 bleq 8000892 <__aeabi_ddiv+0x16e>
8000744: eba4 0405 sub.w r4, r4, r5
8000748: ea81 0e03 eor.w lr, r1, r3
800074c: ea52 3503 orrs.w r5, r2, r3, lsl #12
8000750: ea4f 3101 mov.w r1, r1, lsl #12
8000754: f000 8088 beq.w 8000868 <__aeabi_ddiv+0x144>
8000758: ea4f 3303 mov.w r3, r3, lsl #12
800075c: f04f 5580 mov.w r5, #268435456 ; 0x10000000
8000760: ea45 1313 orr.w r3, r5, r3, lsr #4
8000764: ea43 6312 orr.w r3, r3, r2, lsr #24
8000768: ea4f 2202 mov.w r2, r2, lsl #8
800076c: ea45 1511 orr.w r5, r5, r1, lsr #4
8000770: ea45 6510 orr.w r5, r5, r0, lsr #24
8000774: ea4f 2600 mov.w r6, r0, lsl #8
8000778: f00e 4100 and.w r1, lr, #2147483648 ; 0x80000000
800077c: 429d cmp r5, r3
800077e: bf08 it eq
8000780: 4296 cmpeq r6, r2
8000782: f144 04fd adc.w r4, r4, #253 ; 0xfd
8000786: f504 7440 add.w r4, r4, #768 ; 0x300
800078a: d202 bcs.n 8000792 <__aeabi_ddiv+0x6e>
800078c: 085b lsrs r3, r3, #1
800078e: ea4f 0232 mov.w r2, r2, rrx
8000792: 1ab6 subs r6, r6, r2
8000794: eb65 0503 sbc.w r5, r5, r3
8000798: 085b lsrs r3, r3, #1
800079a: ea4f 0232 mov.w r2, r2, rrx
800079e: f44f 1080 mov.w r0, #1048576 ; 0x100000
80007a2: f44f 2c00 mov.w ip, #524288 ; 0x80000
80007a6: ebb6 0e02 subs.w lr, r6, r2
80007aa: eb75 0e03 sbcs.w lr, r5, r3
80007ae: bf22 ittt cs
80007b0: 1ab6 subcs r6, r6, r2
80007b2: 4675 movcs r5, lr
80007b4: ea40 000c orrcs.w r0, r0, ip
80007b8: 085b lsrs r3, r3, #1
80007ba: ea4f 0232 mov.w r2, r2, rrx
80007be: ebb6 0e02 subs.w lr, r6, r2
80007c2: eb75 0e03 sbcs.w lr, r5, r3
80007c6: bf22 ittt cs
80007c8: 1ab6 subcs r6, r6, r2
80007ca: 4675 movcs r5, lr
80007cc: ea40 005c orrcs.w r0, r0, ip, lsr #1
80007d0: 085b lsrs r3, r3, #1
80007d2: ea4f 0232 mov.w r2, r2, rrx
80007d6: ebb6 0e02 subs.w lr, r6, r2
80007da: eb75 0e03 sbcs.w lr, r5, r3
80007de: bf22 ittt cs
80007e0: 1ab6 subcs r6, r6, r2
80007e2: 4675 movcs r5, lr
80007e4: ea40 009c orrcs.w r0, r0, ip, lsr #2
80007e8: 085b lsrs r3, r3, #1
80007ea: ea4f 0232 mov.w r2, r2, rrx
80007ee: ebb6 0e02 subs.w lr, r6, r2
80007f2: eb75 0e03 sbcs.w lr, r5, r3
80007f6: bf22 ittt cs
80007f8: 1ab6 subcs r6, r6, r2
80007fa: 4675 movcs r5, lr
80007fc: ea40 00dc orrcs.w r0, r0, ip, lsr #3
8000800: ea55 0e06 orrs.w lr, r5, r6
8000804: d018 beq.n 8000838 <__aeabi_ddiv+0x114>
8000806: ea4f 1505 mov.w r5, r5, lsl #4
800080a: ea45 7516 orr.w r5, r5, r6, lsr #28
800080e: ea4f 1606 mov.w r6, r6, lsl #4
8000812: ea4f 03c3 mov.w r3, r3, lsl #3
8000816: ea43 7352 orr.w r3, r3, r2, lsr #29
800081a: ea4f 02c2 mov.w r2, r2, lsl #3
800081e: ea5f 1c1c movs.w ip, ip, lsr #4
8000822: d1c0 bne.n 80007a6 <__aeabi_ddiv+0x82>
8000824: f411 1f80 tst.w r1, #1048576 ; 0x100000
8000828: d10b bne.n 8000842 <__aeabi_ddiv+0x11e>
800082a: ea41 0100 orr.w r1, r1, r0
800082e: f04f 0000 mov.w r0, #0
8000832: f04f 4c00 mov.w ip, #2147483648 ; 0x80000000
8000836: e7b6 b.n 80007a6 <__aeabi_ddiv+0x82>
8000838: f411 1f80 tst.w r1, #1048576 ; 0x100000
800083c: bf04 itt eq
800083e: 4301 orreq r1, r0
8000840: 2000 moveq r0, #0
8000842: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd
8000846: bf88 it hi
8000848: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700
800084c: f63f aeaf bhi.w 80005ae <__aeabi_dmul+0xde>
8000850: ebb5 0c03 subs.w ip, r5, r3
8000854: bf04 itt eq
8000856: ebb6 0c02 subseq.w ip, r6, r2
800085a: ea5f 0c50 movseq.w ip, r0, lsr #1
800085e: f150 0000 adcs.w r0, r0, #0
8000862: eb41 5104 adc.w r1, r1, r4, lsl #20
8000866: bd70 pop {r4, r5, r6, pc}
8000868: f00e 4e00 and.w lr, lr, #2147483648 ; 0x80000000
800086c: ea4e 3111 orr.w r1, lr, r1, lsr #12
8000870: eb14 045c adds.w r4, r4, ip, lsr #1
8000874: bfc2 ittt gt
8000876: ebd4 050c rsbsgt r5, r4, ip
800087a: ea41 5104 orrgt.w r1, r1, r4, lsl #20
800087e: bd70 popgt {r4, r5, r6, pc}
8000880: f441 1180 orr.w r1, r1, #1048576 ; 0x100000
8000884: f04f 0e00 mov.w lr, #0
8000888: 3c01 subs r4, #1
800088a: e690 b.n 80005ae <__aeabi_dmul+0xde>
800088c: ea45 0e06 orr.w lr, r5, r6
8000890: e68d b.n 80005ae <__aeabi_dmul+0xde>
8000892: ea0c 5513 and.w r5, ip, r3, lsr #20
8000896: ea94 0f0c teq r4, ip
800089a: bf08 it eq
800089c: ea95 0f0c teqeq r5, ip
80008a0: f43f af3b beq.w 800071a <__aeabi_dmul+0x24a>
80008a4: ea94 0f0c teq r4, ip
80008a8: d10a bne.n 80008c0 <__aeabi_ddiv+0x19c>
80008aa: ea50 3401 orrs.w r4, r0, r1, lsl #12
80008ae: f47f af34 bne.w 800071a <__aeabi_dmul+0x24a>
80008b2: ea95 0f0c teq r5, ip
80008b6: f47f af25 bne.w 8000704 <__aeabi_dmul+0x234>
80008ba: 4610 mov r0, r2
80008bc: 4619 mov r1, r3
80008be: e72c b.n 800071a <__aeabi_dmul+0x24a>
80008c0: ea95 0f0c teq r5, ip
80008c4: d106 bne.n 80008d4 <__aeabi_ddiv+0x1b0>
80008c6: ea52 3503 orrs.w r5, r2, r3, lsl #12
80008ca: f43f aefd beq.w 80006c8 <__aeabi_dmul+0x1f8>
80008ce: 4610 mov r0, r2
80008d0: 4619 mov r1, r3
80008d2: e722 b.n 800071a <__aeabi_dmul+0x24a>
80008d4: ea50 0641 orrs.w r6, r0, r1, lsl #1
80008d8: bf18 it ne
80008da: ea52 0643 orrsne.w r6, r2, r3, lsl #1
80008de: f47f aec5 bne.w 800066c <__aeabi_dmul+0x19c>
80008e2: ea50 0441 orrs.w r4, r0, r1, lsl #1
80008e6: f47f af0d bne.w 8000704 <__aeabi_dmul+0x234>
80008ea: ea52 0543 orrs.w r5, r2, r3, lsl #1
80008ee: f47f aeeb bne.w 80006c8 <__aeabi_dmul+0x1f8>
80008f2: e712 b.n 800071a <__aeabi_dmul+0x24a>
080008f4 <__aeabi_d2iz>:
80008f4: ea4f 0241 mov.w r2, r1, lsl #1
80008f8: f512 1200 adds.w r2, r2, #2097152 ; 0x200000
80008fc: d215 bcs.n 800092a <__aeabi_d2iz+0x36>
80008fe: d511 bpl.n 8000924 <__aeabi_d2iz+0x30>
8000900: f46f 7378 mvn.w r3, #992 ; 0x3e0
8000904: ebb3 5262 subs.w r2, r3, r2, asr #21
8000908: d912 bls.n 8000930 <__aeabi_d2iz+0x3c>
800090a: ea4f 23c1 mov.w r3, r1, lsl #11
800090e: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000
8000912: ea43 5350 orr.w r3, r3, r0, lsr #21
8000916: f011 4f00 tst.w r1, #2147483648 ; 0x80000000
800091a: fa23 f002 lsr.w r0, r3, r2
800091e: bf18 it ne
8000920: 4240 negne r0, r0
8000922: 4770 bx lr
8000924: f04f 0000 mov.w r0, #0
8000928: 4770 bx lr
800092a: ea50 3001 orrs.w r0, r0, r1, lsl #12
800092e: d105 bne.n 800093c <__aeabi_d2iz+0x48>
8000930: f011 4000 ands.w r0, r1, #2147483648 ; 0x80000000
8000934: bf08 it eq
8000936: f06f 4000 mvneq.w r0, #2147483648 ; 0x80000000
800093a: 4770 bx lr
800093c: f04f 0000 mov.w r0, #0
8000940: 4770 bx lr
8000942: bf00 nop
08000944 <__aeabi_frsub>:
8000944: f080 4000 eor.w r0, r0, #2147483648 ; 0x80000000
8000948: e002 b.n 8000950 <__addsf3>
800094a: bf00 nop
0800094c <__aeabi_fsub>:
800094c: f081 4100 eor.w r1, r1, #2147483648 ; 0x80000000
08000950 <__addsf3>:
8000950: 0042 lsls r2, r0, #1
8000952: bf1f itttt ne
8000954: ea5f 0341 movsne.w r3, r1, lsl #1
8000958: ea92 0f03 teqne r2, r3
800095c: ea7f 6c22 mvnsne.w ip, r2, asr #24
8000960: ea7f 6c23 mvnsne.w ip, r3, asr #24
8000964: d06a beq.n 8000a3c <__addsf3+0xec>
8000966: ea4f 6212 mov.w r2, r2, lsr #24
800096a: ebd2 6313 rsbs r3, r2, r3, lsr #24
800096e: bfc1 itttt gt
8000970: 18d2 addgt r2, r2, r3
8000972: 4041 eorgt r1, r0
8000974: 4048 eorgt r0, r1
8000976: 4041 eorgt r1, r0
8000978: bfb8 it lt
800097a: 425b neglt r3, r3
800097c: 2b19 cmp r3, #25
800097e: bf88 it hi
8000980: 4770 bxhi lr
8000982: f010 4f00 tst.w r0, #2147483648 ; 0x80000000
8000986: f440 0000 orr.w r0, r0, #8388608 ; 0x800000
800098a: f020 407f bic.w r0, r0, #4278190080 ; 0xff000000
800098e: bf18 it ne
8000990: 4240 negne r0, r0
8000992: f011 4f00 tst.w r1, #2147483648 ; 0x80000000
8000996: f441 0100 orr.w r1, r1, #8388608 ; 0x800000
800099a: f021 417f bic.w r1, r1, #4278190080 ; 0xff000000
800099e: bf18 it ne
80009a0: 4249 negne r1, r1
80009a2: ea92 0f03 teq r2, r3
80009a6: d03f beq.n 8000a28 <__addsf3+0xd8>
80009a8: f1a2 0201 sub.w r2, r2, #1
80009ac: fa41 fc03 asr.w ip, r1, r3
80009b0: eb10 000c adds.w r0, r0, ip
80009b4: f1c3 0320 rsb r3, r3, #32
80009b8: fa01 f103 lsl.w r1, r1, r3
80009bc: f000 4300 and.w r3, r0, #2147483648 ; 0x80000000
80009c0: d502 bpl.n 80009c8 <__addsf3+0x78>
80009c2: 4249 negs r1, r1
80009c4: eb60 0040 sbc.w r0, r0, r0, lsl #1
80009c8: f5b0 0f00 cmp.w r0, #8388608 ; 0x800000
80009cc: d313 bcc.n 80009f6 <__addsf3+0xa6>
80009ce: f1b0 7f80 cmp.w r0, #16777216 ; 0x1000000
80009d2: d306 bcc.n 80009e2 <__addsf3+0x92>
80009d4: 0840 lsrs r0, r0, #1
80009d6: ea4f 0131 mov.w r1, r1, rrx
80009da: f102 0201 add.w r2, r2, #1
80009de: 2afe cmp r2, #254 ; 0xfe
80009e0: d251 bcs.n 8000a86 <__addsf3+0x136>
80009e2: f1b1 4f00 cmp.w r1, #2147483648 ; 0x80000000
80009e6: eb40 50c2 adc.w r0, r0, r2, lsl #23
80009ea: bf08 it eq
80009ec: f020 0001 biceq.w r0, r0, #1
80009f0: ea40 0003 orr.w r0, r0, r3
80009f4: 4770 bx lr
80009f6: 0049 lsls r1, r1, #1
80009f8: eb40 0000 adc.w r0, r0, r0
80009fc: f410 0f00 tst.w r0, #8388608 ; 0x800000
8000a00: f1a2 0201 sub.w r2, r2, #1
8000a04: d1ed bne.n 80009e2 <__addsf3+0x92>
8000a06: fab0 fc80 clz ip, r0
8000a0a: f1ac 0c08 sub.w ip, ip, #8
8000a0e: ebb2 020c subs.w r2, r2, ip
8000a12: fa00 f00c lsl.w r0, r0, ip
8000a16: bfaa itet ge
8000a18: eb00 50c2 addge.w r0, r0, r2, lsl #23
8000a1c: 4252 neglt r2, r2
8000a1e: 4318 orrge r0, r3
8000a20: bfbc itt lt
8000a22: 40d0 lsrlt r0, r2
8000a24: 4318 orrlt r0, r3
8000a26: 4770 bx lr
8000a28: f092 0f00 teq r2, #0
8000a2c: f481 0100 eor.w r1, r1, #8388608 ; 0x800000
8000a30: bf06 itte eq
8000a32: f480 0000 eoreq.w r0, r0, #8388608 ; 0x800000
8000a36: 3201 addeq r2, #1
8000a38: 3b01 subne r3, #1
8000a3a: e7b5 b.n 80009a8 <__addsf3+0x58>
8000a3c: ea4f 0341 mov.w r3, r1, lsl #1
8000a40: ea7f 6c22 mvns.w ip, r2, asr #24
8000a44: bf18 it ne
8000a46: ea7f 6c23 mvnsne.w ip, r3, asr #24
8000a4a: d021 beq.n 8000a90 <__addsf3+0x140>
8000a4c: ea92 0f03 teq r2, r3
8000a50: d004 beq.n 8000a5c <__addsf3+0x10c>
8000a52: f092 0f00 teq r2, #0
8000a56: bf08 it eq
8000a58: 4608 moveq r0, r1
8000a5a: 4770 bx lr
8000a5c: ea90 0f01 teq r0, r1
8000a60: bf1c itt ne
8000a62: 2000 movne r0, #0
8000a64: 4770 bxne lr
8000a66: f012 4f7f tst.w r2, #4278190080 ; 0xff000000
8000a6a: d104 bne.n 8000a76 <__addsf3+0x126>
8000a6c: 0040 lsls r0, r0, #1
8000a6e: bf28 it cs
8000a70: f040 4000 orrcs.w r0, r0, #2147483648 ; 0x80000000
8000a74: 4770 bx lr
8000a76: f112 7200 adds.w r2, r2, #33554432 ; 0x2000000
8000a7a: bf3c itt cc
8000a7c: f500 0000 addcc.w r0, r0, #8388608 ; 0x800000
8000a80: 4770 bxcc lr
8000a82: f000 4300 and.w r3, r0, #2147483648 ; 0x80000000
8000a86: f043 40fe orr.w r0, r3, #2130706432 ; 0x7f000000
8000a8a: f440 0000 orr.w r0, r0, #8388608 ; 0x800000
8000a8e: 4770 bx lr
8000a90: ea7f 6222 mvns.w r2, r2, asr #24
8000a94: bf16 itet ne
8000a96: 4608 movne r0, r1
8000a98: ea7f 6323 mvnseq.w r3, r3, asr #24
8000a9c: 4601 movne r1, r0
8000a9e: 0242 lsls r2, r0, #9
8000aa0: bf06 itte eq
8000aa2: ea5f 2341 movseq.w r3, r1, lsl #9
8000aa6: ea90 0f01 teqeq r0, r1
8000aaa: f440 0080 orrne.w r0, r0, #4194304 ; 0x400000
8000aae: 4770 bx lr
08000ab0 <__aeabi_ui2f>:
8000ab0: f04f 0300 mov.w r3, #0
8000ab4: e004 b.n 8000ac0 <__aeabi_i2f+0x8>
8000ab6: bf00 nop
08000ab8 <__aeabi_i2f>:
8000ab8: f010 4300 ands.w r3, r0, #2147483648 ; 0x80000000
8000abc: bf48 it mi
8000abe: 4240 negmi r0, r0
8000ac0: ea5f 0c00 movs.w ip, r0
8000ac4: bf08 it eq
8000ac6: 4770 bxeq lr
8000ac8: f043 4396 orr.w r3, r3, #1258291200 ; 0x4b000000
8000acc: 4601 mov r1, r0
8000ace: f04f 0000 mov.w r0, #0
8000ad2: e01c b.n 8000b0e <__aeabi_l2f+0x2a>
08000ad4 <__aeabi_ul2f>:
8000ad4: ea50 0201 orrs.w r2, r0, r1
8000ad8: bf08 it eq
8000ada: 4770 bxeq lr
8000adc: f04f 0300 mov.w r3, #0
8000ae0: e00a b.n 8000af8 <__aeabi_l2f+0x14>
8000ae2: bf00 nop
08000ae4 <__aeabi_l2f>:
8000ae4: ea50 0201 orrs.w r2, r0, r1
8000ae8: bf08 it eq
8000aea: 4770 bxeq lr
8000aec: f011 4300 ands.w r3, r1, #2147483648 ; 0x80000000
8000af0: d502 bpl.n 8000af8 <__aeabi_l2f+0x14>
8000af2: 4240 negs r0, r0
8000af4: eb61 0141 sbc.w r1, r1, r1, lsl #1
8000af8: ea5f 0c01 movs.w ip, r1
8000afc: bf02 ittt eq
8000afe: 4684 moveq ip, r0
8000b00: 4601 moveq r1, r0
8000b02: 2000 moveq r0, #0
8000b04: f043 43b6 orr.w r3, r3, #1526726656 ; 0x5b000000
8000b08: bf08 it eq
8000b0a: f1a3 5380 subeq.w r3, r3, #268435456 ; 0x10000000
8000b0e: f5a3 0300 sub.w r3, r3, #8388608 ; 0x800000
8000b12: fabc f28c clz r2, ip
8000b16: 3a08 subs r2, #8
8000b18: eba3 53c2 sub.w r3, r3, r2, lsl #23
8000b1c: db10 blt.n 8000b40 <__aeabi_l2f+0x5c>
8000b1e: fa01 fc02 lsl.w ip, r1, r2
8000b22: 4463 add r3, ip
8000b24: fa00 fc02 lsl.w ip, r0, r2
8000b28: f1c2 0220 rsb r2, r2, #32
8000b2c: f1bc 4f00 cmp.w ip, #2147483648 ; 0x80000000
8000b30: fa20 f202 lsr.w r2, r0, r2
8000b34: eb43 0002 adc.w r0, r3, r2
8000b38: bf08 it eq
8000b3a: f020 0001 biceq.w r0, r0, #1
8000b3e: 4770 bx lr
8000b40: f102 0220 add.w r2, r2, #32
8000b44: fa01 fc02 lsl.w ip, r1, r2
8000b48: f1c2 0220 rsb r2, r2, #32
8000b4c: ea50 004c orrs.w r0, r0, ip, lsl #1
8000b50: fa21 f202 lsr.w r2, r1, r2
8000b54: eb43 0002 adc.w r0, r3, r2
8000b58: bf08 it eq
8000b5a: ea20 70dc biceq.w r0, r0, ip, lsr #31
8000b5e: 4770 bx lr
08000b60 <__aeabi_fmul>:
8000b60: f04f 0cff mov.w ip, #255 ; 0xff
8000b64: ea1c 52d0 ands.w r2, ip, r0, lsr #23
8000b68: bf1e ittt ne
8000b6a: ea1c 53d1 andsne.w r3, ip, r1, lsr #23
8000b6e: ea92 0f0c teqne r2, ip
8000b72: ea93 0f0c teqne r3, ip
8000b76: d06f beq.n 8000c58 <__aeabi_fmul+0xf8>
8000b78: 441a add r2, r3
8000b7a: ea80 0c01 eor.w ip, r0, r1
8000b7e: 0240 lsls r0, r0, #9
8000b80: bf18 it ne
8000b82: ea5f 2141 movsne.w r1, r1, lsl #9
8000b86: d01e beq.n 8000bc6 <__aeabi_fmul+0x66>
8000b88: f04f 6300 mov.w r3, #134217728 ; 0x8000000
8000b8c: ea43 1050 orr.w r0, r3, r0, lsr #5
8000b90: ea43 1151 orr.w r1, r3, r1, lsr #5
8000b94: fba0 3101 umull r3, r1, r0, r1
8000b98: f00c 4000 and.w r0, ip, #2147483648 ; 0x80000000
8000b9c: f5b1 0f00 cmp.w r1, #8388608 ; 0x800000
8000ba0: bf3e ittt cc
8000ba2: 0049 lslcc r1, r1, #1
8000ba4: ea41 71d3 orrcc.w r1, r1, r3, lsr #31
8000ba8: 005b lslcc r3, r3, #1
8000baa: ea40 0001 orr.w r0, r0, r1
8000bae: f162 027f sbc.w r2, r2, #127 ; 0x7f
8000bb2: 2afd cmp r2, #253 ; 0xfd
8000bb4: d81d bhi.n 8000bf2 <__aeabi_fmul+0x92>
8000bb6: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000
8000bba: eb40 50c2 adc.w r0, r0, r2, lsl #23
8000bbe: bf08 it eq
8000bc0: f020 0001 biceq.w r0, r0, #1
8000bc4: 4770 bx lr
8000bc6: f090 0f00 teq r0, #0
8000bca: f00c 4c00 and.w ip, ip, #2147483648 ; 0x80000000
8000bce: bf08 it eq
8000bd0: 0249 lsleq r1, r1, #9
8000bd2: ea4c 2050 orr.w r0, ip, r0, lsr #9
8000bd6: ea40 2051 orr.w r0, r0, r1, lsr #9
8000bda: 3a7f subs r2, #127 ; 0x7f
8000bdc: bfc2 ittt gt
8000bde: f1d2 03ff rsbsgt r3, r2, #255 ; 0xff
8000be2: ea40 50c2 orrgt.w r0, r0, r2, lsl #23
8000be6: 4770 bxgt lr
8000be8: f440 0000 orr.w r0, r0, #8388608 ; 0x800000
8000bec: f04f 0300 mov.w r3, #0
8000bf0: 3a01 subs r2, #1
8000bf2: dc5d bgt.n 8000cb0 <__aeabi_fmul+0x150>
8000bf4: f112 0f19 cmn.w r2, #25
8000bf8: bfdc itt le
8000bfa: f000 4000 andle.w r0, r0, #2147483648 ; 0x80000000
8000bfe: 4770 bxle lr
8000c00: f1c2 0200 rsb r2, r2, #0
8000c04: 0041 lsls r1, r0, #1
8000c06: fa21 f102 lsr.w r1, r1, r2
8000c0a: f1c2 0220 rsb r2, r2, #32
8000c0e: fa00 fc02 lsl.w ip, r0, r2
8000c12: ea5f 0031 movs.w r0, r1, rrx
8000c16: f140 0000 adc.w r0, r0, #0
8000c1a: ea53 034c orrs.w r3, r3, ip, lsl #1
8000c1e: bf08 it eq
8000c20: ea20 70dc biceq.w r0, r0, ip, lsr #31
8000c24: 4770 bx lr
8000c26: f092 0f00 teq r2, #0
8000c2a: f000 4c00 and.w ip, r0, #2147483648 ; 0x80000000
8000c2e: bf02 ittt eq
8000c30: 0040 lsleq r0, r0, #1
8000c32: f410 0f00 tsteq.w r0, #8388608 ; 0x800000
8000c36: 3a01 subeq r2, #1
8000c38: d0f9 beq.n 8000c2e <__aeabi_fmul+0xce>
8000c3a: ea40 000c orr.w r0, r0, ip
8000c3e: f093 0f00 teq r3, #0
8000c42: f001 4c00 and.w ip, r1, #2147483648 ; 0x80000000
8000c46: bf02 ittt eq
8000c48: 0049 lsleq r1, r1, #1
8000c4a: f411 0f00 tsteq.w r1, #8388608 ; 0x800000
8000c4e: 3b01 subeq r3, #1
8000c50: d0f9 beq.n 8000c46 <__aeabi_fmul+0xe6>
8000c52: ea41 010c orr.w r1, r1, ip
8000c56: e78f b.n 8000b78 <__aeabi_fmul+0x18>
8000c58: ea0c 53d1 and.w r3, ip, r1, lsr #23
8000c5c: ea92 0f0c teq r2, ip
8000c60: bf18 it ne
8000c62: ea93 0f0c teqne r3, ip
8000c66: d00a beq.n 8000c7e <__aeabi_fmul+0x11e>
8000c68: f030 4c00 bics.w ip, r0, #2147483648 ; 0x80000000
8000c6c: bf18 it ne
8000c6e: f031 4c00 bicsne.w ip, r1, #2147483648 ; 0x80000000
8000c72: d1d8 bne.n 8000c26 <__aeabi_fmul+0xc6>
8000c74: ea80 0001 eor.w r0, r0, r1
8000c78: f000 4000 and.w r0, r0, #2147483648 ; 0x80000000
8000c7c: 4770 bx lr
8000c7e: f090 0f00 teq r0, #0
8000c82: bf17 itett ne
8000c84: f090 4f00 teqne r0, #2147483648 ; 0x80000000
8000c88: 4608 moveq r0, r1
8000c8a: f091 0f00 teqne r1, #0
8000c8e: f091 4f00 teqne r1, #2147483648 ; 0x80000000
8000c92: d014 beq.n 8000cbe <__aeabi_fmul+0x15e>
8000c94: ea92 0f0c teq r2, ip
8000c98: d101 bne.n 8000c9e <__aeabi_fmul+0x13e>
8000c9a: 0242 lsls r2, r0, #9
8000c9c: d10f bne.n 8000cbe <__aeabi_fmul+0x15e>
8000c9e: ea93 0f0c teq r3, ip
8000ca2: d103 bne.n 8000cac <__aeabi_fmul+0x14c>
8000ca4: 024b lsls r3, r1, #9
8000ca6: bf18 it ne
8000ca8: 4608 movne r0, r1
8000caa: d108 bne.n 8000cbe <__aeabi_fmul+0x15e>
8000cac: ea80 0001 eor.w r0, r0, r1
8000cb0: f000 4000 and.w r0, r0, #2147483648 ; 0x80000000
8000cb4: f040 40fe orr.w r0, r0, #2130706432 ; 0x7f000000
8000cb8: f440 0000 orr.w r0, r0, #8388608 ; 0x800000
8000cbc: 4770 bx lr
8000cbe: f040 40fe orr.w r0, r0, #2130706432 ; 0x7f000000
8000cc2: f440 0040 orr.w r0, r0, #12582912 ; 0xc00000
8000cc6: 4770 bx lr
08000cc8 <__aeabi_fdiv>:
8000cc8: f04f 0cff mov.w ip, #255 ; 0xff
8000ccc: ea1c 52d0 ands.w r2, ip, r0, lsr #23
8000cd0: bf1e ittt ne
8000cd2: ea1c 53d1 andsne.w r3, ip, r1, lsr #23
8000cd6: ea92 0f0c teqne r2, ip
8000cda: ea93 0f0c teqne r3, ip
8000cde: d069 beq.n 8000db4 <__aeabi_fdiv+0xec>
8000ce0: eba2 0203 sub.w r2, r2, r3
8000ce4: ea80 0c01 eor.w ip, r0, r1
8000ce8: 0249 lsls r1, r1, #9
8000cea: ea4f 2040 mov.w r0, r0, lsl #9
8000cee: d037 beq.n 8000d60 <__aeabi_fdiv+0x98>
8000cf0: f04f 5380 mov.w r3, #268435456 ; 0x10000000
8000cf4: ea43 1111 orr.w r1, r3, r1, lsr #4
8000cf8: ea43 1310 orr.w r3, r3, r0, lsr #4
8000cfc: f00c 4000 and.w r0, ip, #2147483648 ; 0x80000000
8000d00: 428b cmp r3, r1
8000d02: bf38 it cc
8000d04: 005b lslcc r3, r3, #1
8000d06: f142 027d adc.w r2, r2, #125 ; 0x7d
8000d0a: f44f 0c00 mov.w ip, #8388608 ; 0x800000
8000d0e: 428b cmp r3, r1
8000d10: bf24 itt cs
8000d12: 1a5b subcs r3, r3, r1
8000d14: ea40 000c orrcs.w r0, r0, ip
8000d18: ebb3 0f51 cmp.w r3, r1, lsr #1
8000d1c: bf24 itt cs
8000d1e: eba3 0351 subcs.w r3, r3, r1, lsr #1
8000d22: ea40 005c orrcs.w r0, r0, ip, lsr #1
8000d26: ebb3 0f91 cmp.w r3, r1, lsr #2
8000d2a: bf24 itt cs
8000d2c: eba3 0391 subcs.w r3, r3, r1, lsr #2
8000d30: ea40 009c orrcs.w r0, r0, ip, lsr #2
8000d34: ebb3 0fd1 cmp.w r3, r1, lsr #3
8000d38: bf24 itt cs
8000d3a: eba3 03d1 subcs.w r3, r3, r1, lsr #3
8000d3e: ea40 00dc orrcs.w r0, r0, ip, lsr #3
8000d42: 011b lsls r3, r3, #4
8000d44: bf18 it ne
8000d46: ea5f 1c1c movsne.w ip, ip, lsr #4
8000d4a: d1e0 bne.n 8000d0e <__aeabi_fdiv+0x46>
8000d4c: 2afd cmp r2, #253 ; 0xfd
8000d4e: f63f af50 bhi.w 8000bf2 <__aeabi_fmul+0x92>
8000d52: 428b cmp r3, r1
8000d54: eb40 50c2 adc.w r0, r0, r2, lsl #23
8000d58: bf08 it eq
8000d5a: f020 0001 biceq.w r0, r0, #1
8000d5e: 4770 bx lr
8000d60: f00c 4c00 and.w ip, ip, #2147483648 ; 0x80000000
8000d64: ea4c 2050 orr.w r0, ip, r0, lsr #9
8000d68: 327f adds r2, #127 ; 0x7f
8000d6a: bfc2 ittt gt
8000d6c: f1d2 03ff rsbsgt r3, r2, #255 ; 0xff
8000d70: ea40 50c2 orrgt.w r0, r0, r2, lsl #23
8000d74: 4770 bxgt lr
8000d76: f440 0000 orr.w r0, r0, #8388608 ; 0x800000
8000d7a: f04f 0300 mov.w r3, #0
8000d7e: 3a01 subs r2, #1
8000d80: e737 b.n 8000bf2 <__aeabi_fmul+0x92>
8000d82: f092 0f00 teq r2, #0
8000d86: f000 4c00 and.w ip, r0, #2147483648 ; 0x80000000
8000d8a: bf02 ittt eq
8000d8c: 0040 lsleq r0, r0, #1
8000d8e: f410 0f00 tsteq.w r0, #8388608 ; 0x800000
8000d92: 3a01 subeq r2, #1
8000d94: d0f9 beq.n 8000d8a <__aeabi_fdiv+0xc2>
8000d96: ea40 000c orr.w r0, r0, ip
8000d9a: f093 0f00 teq r3, #0
8000d9e: f001 4c00 and.w ip, r1, #2147483648 ; 0x80000000
8000da2: bf02 ittt eq
8000da4: 0049 lsleq r1, r1, #1
8000da6: f411 0f00 tsteq.w r1, #8388608 ; 0x800000
8000daa: 3b01 subeq r3, #1
8000dac: d0f9 beq.n 8000da2 <__aeabi_fdiv+0xda>
8000dae: ea41 010c orr.w r1, r1, ip
8000db2: e795 b.n 8000ce0 <__aeabi_fdiv+0x18>
8000db4: ea0c 53d1 and.w r3, ip, r1, lsr #23
8000db8: ea92 0f0c teq r2, ip
8000dbc: d108 bne.n 8000dd0 <__aeabi_fdiv+0x108>
8000dbe: 0242 lsls r2, r0, #9
8000dc0: f47f af7d bne.w 8000cbe <__aeabi_fmul+0x15e>
8000dc4: ea93 0f0c teq r3, ip
8000dc8: f47f af70 bne.w 8000cac <__aeabi_fmul+0x14c>
8000dcc: 4608 mov r0, r1
8000dce: e776 b.n 8000cbe <__aeabi_fmul+0x15e>
8000dd0: ea93 0f0c teq r3, ip
8000dd4: d104 bne.n 8000de0 <__aeabi_fdiv+0x118>
8000dd6: 024b lsls r3, r1, #9
8000dd8: f43f af4c beq.w 8000c74 <__aeabi_fmul+0x114>
8000ddc: 4608 mov r0, r1
8000dde: e76e b.n 8000cbe <__aeabi_fmul+0x15e>
8000de0: f030 4c00 bics.w ip, r0, #2147483648 ; 0x80000000
8000de4: bf18 it ne
8000de6: f031 4c00 bicsne.w ip, r1, #2147483648 ; 0x80000000
8000dea: d1ca bne.n 8000d82 <__aeabi_fdiv+0xba>
8000dec: f030 4200 bics.w r2, r0, #2147483648 ; 0x80000000
8000df0: f47f af5c bne.w 8000cac <__aeabi_fmul+0x14c>
8000df4: f031 4300 bics.w r3, r1, #2147483648 ; 0x80000000
8000df8: f47f af3c bne.w 8000c74 <__aeabi_fmul+0x114>
8000dfc: e75f b.n 8000cbe <__aeabi_fmul+0x15e>
8000dfe: bf00 nop
08000e00 <__gesf2>:
8000e00: f04f 3cff mov.w ip, #4294967295 ; 0xffffffff
8000e04: e006 b.n 8000e14 <__cmpsf2+0x4>
8000e06: bf00 nop
08000e08 <__lesf2>:
8000e08: f04f 0c01 mov.w ip, #1
8000e0c: e002 b.n 8000e14 <__cmpsf2+0x4>
8000e0e: bf00 nop
08000e10 <__cmpsf2>:
8000e10: f04f 0c01 mov.w ip, #1
8000e14: f84d cd04 str.w ip, [sp, #-4]!
8000e18: ea4f 0240 mov.w r2, r0, lsl #1
8000e1c: ea4f 0341 mov.w r3, r1, lsl #1
8000e20: ea7f 6c22 mvns.w ip, r2, asr #24
8000e24: bf18 it ne
8000e26: ea7f 6c23 mvnsne.w ip, r3, asr #24
8000e2a: d011 beq.n 8000e50 <__cmpsf2+0x40>
8000e2c: b001 add sp, #4
8000e2e: ea52 0c53 orrs.w ip, r2, r3, lsr #1
8000e32: bf18 it ne
8000e34: ea90 0f01 teqne r0, r1
8000e38: bf58 it pl
8000e3a: ebb2 0003 subspl.w r0, r2, r3
8000e3e: bf88 it hi
8000e40: 17c8 asrhi r0, r1, #31
8000e42: bf38 it cc
8000e44: ea6f 70e1 mvncc.w r0, r1, asr #31
8000e48: bf18 it ne
8000e4a: f040 0001 orrne.w r0, r0, #1
8000e4e: 4770 bx lr
8000e50: ea7f 6c22 mvns.w ip, r2, asr #24
8000e54: d102 bne.n 8000e5c <__cmpsf2+0x4c>
8000e56: ea5f 2c40 movs.w ip, r0, lsl #9
8000e5a: d105 bne.n 8000e68 <__cmpsf2+0x58>
8000e5c: ea7f 6c23 mvns.w ip, r3, asr #24
8000e60: d1e4 bne.n 8000e2c <__cmpsf2+0x1c>
8000e62: ea5f 2c41 movs.w ip, r1, lsl #9
8000e66: d0e1 beq.n 8000e2c <__cmpsf2+0x1c>
8000e68: f85d 0b04 ldr.w r0, [sp], #4
8000e6c: 4770 bx lr
8000e6e: bf00 nop
08000e70 <__aeabi_cfrcmple>:
8000e70: 4684 mov ip, r0
8000e72: 4608 mov r0, r1
8000e74: 4661 mov r1, ip
8000e76: e7ff b.n 8000e78 <__aeabi_cfcmpeq>
08000e78 <__aeabi_cfcmpeq>:
8000e78: b50f push {r0, r1, r2, r3, lr}
8000e7a: f7ff ffc9 bl 8000e10 <__cmpsf2>
8000e7e: 2800 cmp r0, #0
8000e80: bf48 it mi
8000e82: f110 0f00 cmnmi.w r0, #0
8000e86: bd0f pop {r0, r1, r2, r3, pc}
08000e88 <__aeabi_fcmpeq>:
8000e88: f84d ed08 str.w lr, [sp, #-8]!
8000e8c: f7ff fff4 bl 8000e78 <__aeabi_cfcmpeq>
8000e90: bf0c ite eq
8000e92: 2001 moveq r0, #1
8000e94: 2000 movne r0, #0
8000e96: f85d fb08 ldr.w pc, [sp], #8
8000e9a: bf00 nop
08000e9c <__aeabi_fcmplt>:
8000e9c: f84d ed08 str.w lr, [sp, #-8]!
8000ea0: f7ff ffea bl 8000e78 <__aeabi_cfcmpeq>
8000ea4: bf34 ite cc
8000ea6: 2001 movcc r0, #1
8000ea8: 2000 movcs r0, #0
8000eaa: f85d fb08 ldr.w pc, [sp], #8
8000eae: bf00 nop
08000eb0 <__aeabi_fcmple>:
8000eb0: f84d ed08 str.w lr, [sp, #-8]!
8000eb4: f7ff ffe0 bl 8000e78 <__aeabi_cfcmpeq>
8000eb8: bf94 ite ls
8000eba: 2001 movls r0, #1
8000ebc: 2000 movhi r0, #0
8000ebe: f85d fb08 ldr.w pc, [sp], #8
8000ec2: bf00 nop
08000ec4 <__aeabi_fcmpge>:
8000ec4: f84d ed08 str.w lr, [sp, #-8]!
8000ec8: f7ff ffd2 bl 8000e70 <__aeabi_cfrcmple>
8000ecc: bf94 ite ls
8000ece: 2001 movls r0, #1
8000ed0: 2000 movhi r0, #0
8000ed2: f85d fb08 ldr.w pc, [sp], #8
8000ed6: bf00 nop
08000ed8 <__aeabi_fcmpgt>:
8000ed8: f84d ed08 str.w lr, [sp, #-8]!
8000edc: f7ff ffc8 bl 8000e70 <__aeabi_cfrcmple>
8000ee0: bf34 ite cc
8000ee2: 2001 movcc r0, #1
8000ee4: 2000 movcs r0, #0
8000ee6: f85d fb08 ldr.w pc, [sp], #8
8000eea: bf00 nop
08000eec <__aeabi_f2uiz>:
8000eec: 0042 lsls r2, r0, #1
8000eee: d20e bcs.n 8000f0e <__aeabi_f2uiz+0x22>
8000ef0: f1b2 4ffe cmp.w r2, #2130706432 ; 0x7f000000
8000ef4: d30b bcc.n 8000f0e <__aeabi_f2uiz+0x22>
8000ef6: f04f 039e mov.w r3, #158 ; 0x9e
8000efa: ebb3 6212 subs.w r2, r3, r2, lsr #24
8000efe: d409 bmi.n 8000f14 <__aeabi_f2uiz+0x28>
8000f00: ea4f 2300 mov.w r3, r0, lsl #8
8000f04: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000
8000f08: fa23 f002 lsr.w r0, r3, r2
8000f0c: 4770 bx lr
8000f0e: f04f 0000 mov.w r0, #0
8000f12: 4770 bx lr
8000f14: f112 0f61 cmn.w r2, #97 ; 0x61
8000f18: d101 bne.n 8000f1e <__aeabi_f2uiz+0x32>
8000f1a: 0242 lsls r2, r0, #9
8000f1c: d102 bne.n 8000f24 <__aeabi_f2uiz+0x38>
8000f1e: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
8000f22: 4770 bx lr
8000f24: f04f 0000 mov.w r0, #0
8000f28: 4770 bx lr
8000f2a: bf00 nop
08000f2c <NVIC_Init>:
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
8000f2c: 78c3 ldrb r3, [r0, #3]
8000f2e: b95b cbnz r3, 8000f48 <NVIC_Init+0x1c>
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
}
else
{
/* Disable the Selected IRQ Channels -------------------------------------*/
NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
8000f30: 7803 ldrb r3, [r0, #0]
8000f32: 095a lsrs r2, r3, #5
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
8000f34: f003 031f and.w r3, r3, #31
8000f38: 2101 movs r1, #1
8000f3a: fa01 f303 lsl.w r3, r1, r3
NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
8000f3e: 3220 adds r2, #32
8000f40: 4912 ldr r1, [pc, #72] ; (8000f8c <NVIC_Init+0x60>)
8000f42: f841 3022 str.w r3, [r1, r2, lsl #2]
}
}
8000f46: 4770 bx lr
{
8000f48: b410 push {r4}
tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
8000f4a: 4b11 ldr r3, [pc, #68] ; (8000f90 <NVIC_Init+0x64>)
8000f4c: 68da ldr r2, [r3, #12]
8000f4e: 43d2 mvns r2, r2
8000f50: f3c2 2202 ubfx r2, r2, #8, #3
tmppre = (0x4 - tmppriority);
8000f54: f1c2 0404 rsb r4, r2, #4
tmpsub = tmpsub >> tmppriority;
8000f58: 210f movs r1, #15
8000f5a: fa21 f202 lsr.w r2, r1, r2
tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
8000f5e: 7843 ldrb r3, [r0, #1]
8000f60: 40a3 lsls r3, r4
tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
8000f62: 7881 ldrb r1, [r0, #2]
8000f64: 400a ands r2, r1
8000f66: 4313 orrs r3, r2
tmppriority = tmppriority << 0x04;
8000f68: 011b lsls r3, r3, #4
NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
8000f6a: 7802 ldrb r2, [r0, #0]
8000f6c: b2db uxtb r3, r3
8000f6e: 4907 ldr r1, [pc, #28] ; (8000f8c <NVIC_Init+0x60>)
8000f70: 440a add r2, r1
8000f72: f882 3300 strb.w r3, [r2, #768] ; 0x300
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
8000f76: 7803 ldrb r3, [r0, #0]
8000f78: 0958 lsrs r0, r3, #5
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
8000f7a: f003 031f and.w r3, r3, #31
8000f7e: 2201 movs r2, #1
8000f80: fa02 f303 lsl.w r3, r2, r3
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
8000f84: f841 3020 str.w r3, [r1, r0, lsl #2]
}
8000f88: bc10 pop {r4}
8000f8a: 4770 bx lr
8000f8c: e000e100 .word 0xe000e100
8000f90: e000ed00 .word 0xe000ed00
08000f94 <ADC_Init>:
* @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure that contains
* the configuration information for the specified ADC peripheral.
* @retval None
*/
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)
{
8000f94: b410 push {r4}
assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign));
assert_param(IS_ADC_REGULAR_LENGTH(ADC_InitStruct->ADC_NbrOfChannel));
/*---------------------------- ADCx CR1 Configuration -----------------*/
/* Get the ADCx CR1 value */
tmpreg1 = ADCx->CR1;
8000f96: 6843 ldr r3, [r0, #4]
/* Clear DUALMOD and SCAN bits */
tmpreg1 &= CR1_CLEAR_Mask;
8000f98: f423 2370 bic.w r3, r3, #983040 ; 0xf0000
8000f9c: f423 7380 bic.w r3, r3, #256 ; 0x100
/* Configure ADCx: Dual mode and scan conversion mode */
/* Set DUALMOD bits according to ADC_Mode value */
/* Set SCAN bit according to ADC_ScanConvMode value */
tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8));
8000fa0: 680a ldr r2, [r1, #0]
8000fa2: 790c ldrb r4, [r1, #4]
8000fa4: ea42 2204 orr.w r2, r2, r4, lsl #8
8000fa8: 4313 orrs r3, r2
/* Write to ADCx CR1 */
ADCx->CR1 = tmpreg1;
8000faa: 6043 str r3, [r0, #4]
/*---------------------------- ADCx CR2 Configuration -----------------*/
/* Get the ADCx CR2 value */
tmpreg1 = ADCx->CR2;
8000fac: 6882 ldr r2, [r0, #8]
/* Clear CONT, ALIGN and EXTSEL bits */
tmpreg1 &= CR2_CLEAR_Mask;
8000fae: 4b0a ldr r3, [pc, #40] ; (8000fd8 <ADC_Init+0x44>)
8000fb0: 4013 ands r3, r2
/* Configure ADCx: external trigger event and continuous conversion mode */
/* Set ALIGN bit according to ADC_DataAlign value */
/* Set EXTSEL bits according to ADC_ExternalTrigConv value */
/* Set CONT bit according to ADC_ContinuousConvMode value */
tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |
8000fb2: 68ca ldr r2, [r1, #12]
8000fb4: 688c ldr r4, [r1, #8]
8000fb6: 4322 orrs r2, r4
((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1));
8000fb8: 794c ldrb r4, [r1, #5]
tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |
8000fba: ea42 0244 orr.w r2, r2, r4, lsl #1
8000fbe: 4313 orrs r3, r2
/* Write to ADCx CR2 */
ADCx->CR2 = tmpreg1;
8000fc0: 6083 str r3, [r0, #8]
/*---------------------------- ADCx SQR1 Configuration -----------------*/
/* Get the ADCx SQR1 value */
tmpreg1 = ADCx->SQR1;
8000fc2: 6ac3 ldr r3, [r0, #44] ; 0x2c
/* Clear L bits */
tmpreg1 &= SQR1_CLEAR_Mask;
8000fc4: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000
/* Configure ADCx: regular channel sequence length */
/* Set L bits according to ADC_NbrOfChannel value */
tmpreg2 |= (uint8_t) (ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1);
8000fc8: 7c0a ldrb r2, [r1, #16]
8000fca: 3a01 subs r2, #1
8000fcc: b2d2 uxtb r2, r2
tmpreg1 |= (uint32_t)tmpreg2 << 20;
8000fce: ea43 5302 orr.w r3, r3, r2, lsl #20
/* Write to ADCx SQR1 */
ADCx->SQR1 = tmpreg1;
8000fd2: 62c3 str r3, [r0, #44] ; 0x2c
}
8000fd4: bc10 pop {r4}
8000fd6: 4770 bx lr
8000fd8: fff1f7fd .word 0xfff1f7fd
08000fdc <ADC_Cmd>:
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
8000fdc: b921 cbnz r1, 8000fe8 <ADC_Cmd+0xc>
ADCx->CR2 |= CR2_ADON_Set;
}
else
{
/* Disable the selected ADC peripheral */
ADCx->CR2 &= CR2_ADON_Reset;
8000fde: 6883 ldr r3, [r0, #8]
8000fe0: f023 0301 bic.w r3, r3, #1
8000fe4: 6083 str r3, [r0, #8]
8000fe6: 4770 bx lr
ADCx->CR2 |= CR2_ADON_Set;
8000fe8: 6883 ldr r3, [r0, #8]
8000fea: f043 0301 orr.w r3, r3, #1
8000fee: 6083 str r3, [r0, #8]
8000ff0: 4770 bx lr
08000ff2 <ADC_DMACmd>:
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_ADC_DMA_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
8000ff2: b921 cbnz r1, 8000ffe <ADC_DMACmd+0xc>
ADCx->CR2 |= CR2_DMA_Set;
}
else
{
/* Disable the selected ADC DMA request */
ADCx->CR2 &= CR2_DMA_Reset;
8000ff4: 6883 ldr r3, [r0, #8]
8000ff6: f423 7380 bic.w r3, r3, #256 ; 0x100
8000ffa: 6083 str r3, [r0, #8]
8000ffc: 4770 bx lr
ADCx->CR2 |= CR2_DMA_Set;
8000ffe: 6883 ldr r3, [r0, #8]
8001000: f443 7380 orr.w r3, r3, #256 ; 0x100
8001004: 6083 str r3, [r0, #8]
8001006: 4770 bx lr
08001008 <ADC_StartCalibration>:
void ADC_StartCalibration(ADC_TypeDef* ADCx)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Enable the selected ADC calibration process */
ADCx->CR2 |= CR2_CAL_Set;
8001008: 6883 ldr r3, [r0, #8]
800100a: f043 0304 orr.w r3, r3, #4
800100e: 6083 str r3, [r0, #8]
8001010: 4770 bx lr
08001012 <ADC_GetCalibrationStatus>:
{
FlagStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Check the status of CAL bit */
if ((ADCx->CR2 & CR2_CAL_Set) != (uint32_t)RESET)
8001012: 6883 ldr r3, [r0, #8]
8001014: f013 0f04 tst.w r3, #4
8001018: d101 bne.n 800101e <ADC_GetCalibrationStatus+0xc>
bitstatus = SET;
}
else
{
/* CAL bit is reset: end of calibration */
bitstatus = RESET;
800101a: 2000 movs r0, #0
}
/* Return the CAL bit status */
return bitstatus;
}
800101c: 4770 bx lr
bitstatus = SET;
800101e: 2001 movs r0, #1
8001020: 4770 bx lr
08001022 <ADC_SoftwareStartConvCmd>:
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
8001022: b921 cbnz r1, 800102e <ADC_SoftwareStartConvCmd+0xc>
}
else
{
/* Disable the selected ADC conversion on external event and stop the selected
ADC conversion */
ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset;
8001024: 6883 ldr r3, [r0, #8]
8001026: f423 03a0 bic.w r3, r3, #5242880 ; 0x500000
800102a: 6083 str r3, [r0, #8]
800102c: 4770 bx lr
ADCx->CR2 |= CR2_EXTTRIG_SWSTART_Set;
800102e: 6883 ldr r3, [r0, #8]
8001030: f443 03a0 orr.w r3, r3, #5242880 ; 0x500000
8001034: 6083 str r3, [r0, #8]
8001036: 4770 bx lr
08001038 <ADC_RegularChannelConfig>:
* @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles
* @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles
* @retval None
*/
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
{
8001038: b470 push {r4, r5, r6}
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CHANNEL(ADC_Channel));
assert_param(IS_ADC_REGULAR_RANK(Rank));
assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
/* if ADC_Channel_10 ... ADC_Channel_17 is selected */
if (ADC_Channel > ADC_Channel_9)
800103a: 2909 cmp r1, #9
800103c: d91d bls.n 800107a <ADC_RegularChannelConfig+0x42>
{
/* Get the old register value */
tmpreg1 = ADCx->SMPR1;
800103e: 68c5 ldr r5, [r0, #12]
/* Calculate the mask to clear */
tmpreg2 = SMPR1_SMP_Set << (3 * (ADC_Channel - 10));
8001040: f1a1 040a sub.w r4, r1, #10
8001044: eb04 0444 add.w r4, r4, r4, lsl #1
8001048: 2607 movs r6, #7
800104a: 40a6 lsls r6, r4
/* Clear the old channel sample time */
tmpreg1 &= ~tmpreg2;
800104c: ea25 0506 bic.w r5, r5, r6
/* Calculate the mask to set */
tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10));
8001050: fa03 f404 lsl.w r4, r3, r4
/* Set the new channel sample time */
tmpreg1 |= tmpreg2;
8001054: 432c orrs r4, r5
/* Store the new register value */
ADCx->SMPR1 = tmpreg1;
8001056: 60c4 str r4, [r0, #12]
tmpreg1 |= tmpreg2;
/* Store the new register value */
ADCx->SMPR2 = tmpreg1;
}
/* For Rank 1 to 6 */
if (Rank < 7)
8001058: 2a06 cmp r2, #6
800105a: d91a bls.n 8001092 <ADC_RegularChannelConfig+0x5a>
tmpreg1 |= tmpreg2;
/* Store the new register value */
ADCx->SQR3 = tmpreg1;
}
/* For Rank 7 to 12 */
else if (Rank < 13)
800105c: 2a0c cmp r2, #12
800105e: d926 bls.n 80010ae <ADC_RegularChannelConfig+0x76>
}
/* For Rank 13 to 16 */
else
{
/* Get the old register value */
tmpreg1 = ADCx->SQR1;
8001060: 6ac3 ldr r3, [r0, #44] ; 0x2c
/* Calculate the mask to clear */
tmpreg2 = SQR1_SQ_Set << (5 * (Rank - 13));
8001062: 3a0d subs r2, #13
8001064: eb02 0282 add.w r2, r2, r2, lsl #2
8001068: 241f movs r4, #31
800106a: 4094 lsls r4, r2
/* Clear the old SQx bits for the selected rank */
tmpreg1 &= ~tmpreg2;
800106c: ea23 0304 bic.w r3, r3, r4
/* Calculate the mask to set */
tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13));
8001070: fa01 f202 lsl.w r2, r1, r2
/* Set the SQx bits for the selected rank */
tmpreg1 |= tmpreg2;
8001074: 431a orrs r2, r3
/* Store the new register value */
ADCx->SQR1 = tmpreg1;
8001076: 62c2 str r2, [r0, #44] ; 0x2c
}
}
8001078: e017 b.n 80010aa <ADC_RegularChannelConfig+0x72>
tmpreg1 = ADCx->SMPR2;
800107a: 6905 ldr r5, [r0, #16]
tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
800107c: eb01 0641 add.w r6, r1, r1, lsl #1
8001080: 2407 movs r4, #7
8001082: 40b4 lsls r4, r6
tmpreg1 &= ~tmpreg2;
8001084: ea25 0504 bic.w r5, r5, r4
tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
8001088: fa03 f406 lsl.w r4, r3, r6
tmpreg1 |= tmpreg2;
800108c: 432c orrs r4, r5
ADCx->SMPR2 = tmpreg1;
800108e: 6104 str r4, [r0, #16]
8001090: e7e2 b.n 8001058 <ADC_RegularChannelConfig+0x20>
tmpreg1 = ADCx->SQR3;
8001092: 6b43 ldr r3, [r0, #52] ; 0x34
tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1));
8001094: 3a01 subs r2, #1
8001096: eb02 0282 add.w r2, r2, r2, lsl #2
800109a: 241f movs r4, #31
800109c: 4094 lsls r4, r2
tmpreg1 &= ~tmpreg2;
800109e: ea23 0304 bic.w r3, r3, r4
tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1));
80010a2: fa01 f202 lsl.w r2, r1, r2
tmpreg1 |= tmpreg2;
80010a6: 431a orrs r2, r3
ADCx->SQR3 = tmpreg1;
80010a8: 6342 str r2, [r0, #52] ; 0x34
}
80010aa: bc70 pop {r4, r5, r6}
80010ac: 4770 bx lr
tmpreg1 = ADCx->SQR2;
80010ae: 6b03 ldr r3, [r0, #48] ; 0x30
tmpreg2 = SQR2_SQ_Set << (5 * (Rank - 7));
80010b0: 3a07 subs r2, #7
80010b2: eb02 0282 add.w r2, r2, r2, lsl #2
80010b6: 241f movs r4, #31
80010b8: 4094 lsls r4, r2
tmpreg1 &= ~tmpreg2;
80010ba: ea23 0304 bic.w r3, r3, r4
tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7));
80010be: fa01 f202 lsl.w r2, r1, r2
tmpreg1 |= tmpreg2;
80010c2: 431a orrs r2, r3
ADCx->SQR2 = tmpreg1;
80010c4: 6302 str r2, [r0, #48] ; 0x30
80010c6: e7f0 b.n 80010aa <ADC_RegularChannelConfig+0x72>
080010c8 <DMA_DeInit>:
{
/* Check the parameters */
assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
/* Disable the selected DMAy Channelx */
DMAy_Channelx->CCR &= (uint16_t)(~DMA_CCR1_EN);
80010c8: 6803 ldr r3, [r0, #0]
80010ca: f023 0301 bic.w r3, r3, #1
80010ce: 041b lsls r3, r3, #16
80010d0: 0c1b lsrs r3, r3, #16
80010d2: 6003 str r3, [r0, #0]
/* Reset DMAy Channelx control register */
DMAy_Channelx->CCR = 0;
80010d4: 2300 movs r3, #0
80010d6: 6003 str r3, [r0, #0]
/* Reset DMAy Channelx remaining bytes register */
DMAy_Channelx->CNDTR = 0;
80010d8: 6043 str r3, [r0, #4]
/* Reset DMAy Channelx peripheral address register */
DMAy_Channelx->CPAR = 0;
80010da: 6083 str r3, [r0, #8]
/* Reset DMAy Channelx memory address register */
DMAy_Channelx->CMAR = 0;
80010dc: 60c3 str r3, [r0, #12]
if (DMAy_Channelx == DMA1_Channel1)
80010de: 4b36 ldr r3, [pc, #216] ; (80011b8 <DMA_DeInit+0xf0>)
80010e0: 4298 cmp r0, r3
80010e2: d021 beq.n 8001128 <DMA_DeInit+0x60>
{
/* Reset interrupt pending bits for DMA1 Channel1 */
DMA1->IFCR |= DMA1_Channel1_IT_Mask;
}
else if (DMAy_Channelx == DMA1_Channel2)
80010e4: 4b35 ldr r3, [pc, #212] ; (80011bc <DMA_DeInit+0xf4>)
80010e6: 4298 cmp r0, r3
80010e8: d024 beq.n 8001134 <DMA_DeInit+0x6c>
{
/* Reset interrupt pending bits for DMA1 Channel2 */
DMA1->IFCR |= DMA1_Channel2_IT_Mask;
}
else if (DMAy_Channelx == DMA1_Channel3)
80010ea: 4b35 ldr r3, [pc, #212] ; (80011c0 <DMA_DeInit+0xf8>)
80010ec: 4298 cmp r0, r3
80010ee: d027 beq.n 8001140 <DMA_DeInit+0x78>
{
/* Reset interrupt pending bits for DMA1 Channel3 */
DMA1->IFCR |= DMA1_Channel3_IT_Mask;
}
else if (DMAy_Channelx == DMA1_Channel4)
80010f0: 4b34 ldr r3, [pc, #208] ; (80011c4 <DMA_DeInit+0xfc>)
80010f2: 4298 cmp r0, r3
80010f4: d02a beq.n 800114c <DMA_DeInit+0x84>
{
/* Reset interrupt pending bits for DMA1 Channel4 */
DMA1->IFCR |= DMA1_Channel4_IT_Mask;
}
else if (DMAy_Channelx == DMA1_Channel5)
80010f6: 4b34 ldr r3, [pc, #208] ; (80011c8 <DMA_DeInit+0x100>)
80010f8: 4298 cmp r0, r3
80010fa: d02d beq.n 8001158 <DMA_DeInit+0x90>
{
/* Reset interrupt pending bits for DMA1 Channel5 */
DMA1->IFCR |= DMA1_Channel5_IT_Mask;
}
else if (DMAy_Channelx == DMA1_Channel6)
80010fc: 4b33 ldr r3, [pc, #204] ; (80011cc <DMA_DeInit+0x104>)
80010fe: 4298 cmp r0, r3
8001100: d030 beq.n 8001164 <DMA_DeInit+0x9c>
{
/* Reset interrupt pending bits for DMA1 Channel6 */
DMA1->IFCR |= DMA1_Channel6_IT_Mask;
}
else if (DMAy_Channelx == DMA1_Channel7)
8001102: 4b33 ldr r3, [pc, #204] ; (80011d0 <DMA_DeInit+0x108>)
8001104: 4298 cmp r0, r3
8001106: d033 beq.n 8001170 <DMA_DeInit+0xa8>
{
/* Reset interrupt pending bits for DMA1 Channel7 */
DMA1->IFCR |= DMA1_Channel7_IT_Mask;
}
else if (DMAy_Channelx == DMA2_Channel1)
8001108: 4b32 ldr r3, [pc, #200] ; (80011d4 <DMA_DeInit+0x10c>)
800110a: 4298 cmp r0, r3
800110c: d036 beq.n 800117c <DMA_DeInit+0xb4>
{
/* Reset interrupt pending bits for DMA2 Channel1 */
DMA2->IFCR |= DMA2_Channel1_IT_Mask;
}
else if (DMAy_Channelx == DMA2_Channel2)
800110e: 4b32 ldr r3, [pc, #200] ; (80011d8 <DMA_DeInit+0x110>)
8001110: 4298 cmp r0, r3
8001112: d039 beq.n 8001188 <DMA_DeInit+0xc0>
{
/* Reset interrupt pending bits for DMA2 Channel2 */
DMA2->IFCR |= DMA2_Channel2_IT_Mask;
}
else if (DMAy_Channelx == DMA2_Channel3)
8001114: 4b31 ldr r3, [pc, #196] ; (80011dc <DMA_DeInit+0x114>)
8001116: 4298 cmp r0, r3
8001118: d03c beq.n 8001194 <DMA_DeInit+0xcc>
{
/* Reset interrupt pending bits for DMA2 Channel3 */
DMA2->IFCR |= DMA2_Channel3_IT_Mask;
}
else if (DMAy_Channelx == DMA2_Channel4)
800111a: 4b31 ldr r3, [pc, #196] ; (80011e0 <DMA_DeInit+0x118>)
800111c: 4298 cmp r0, r3
800111e: d03f beq.n 80011a0 <DMA_DeInit+0xd8>
/* Reset interrupt pending bits for DMA2 Channel4 */
DMA2->IFCR |= DMA2_Channel4_IT_Mask;
}
else
{
if (DMAy_Channelx == DMA2_Channel5)
8001120: 4b30 ldr r3, [pc, #192] ; (80011e4 <DMA_DeInit+0x11c>)
8001122: 4298 cmp r0, r3
8001124: d042 beq.n 80011ac <DMA_DeInit+0xe4>
8001126: 4770 bx lr
DMA1->IFCR |= DMA1_Channel1_IT_Mask;
8001128: 4a2f ldr r2, [pc, #188] ; (80011e8 <DMA_DeInit+0x120>)
800112a: 6853 ldr r3, [r2, #4]
800112c: f043 030f orr.w r3, r3, #15
8001130: 6053 str r3, [r2, #4]
8001132: 4770 bx lr
DMA1->IFCR |= DMA1_Channel2_IT_Mask;
8001134: 4a2c ldr r2, [pc, #176] ; (80011e8 <DMA_DeInit+0x120>)
8001136: 6853 ldr r3, [r2, #4]
8001138: f043 03f0 orr.w r3, r3, #240 ; 0xf0
800113c: 6053 str r3, [r2, #4]
800113e: 4770 bx lr
DMA1->IFCR |= DMA1_Channel3_IT_Mask;
8001140: 4a29 ldr r2, [pc, #164] ; (80011e8 <DMA_DeInit+0x120>)
8001142: 6853 ldr r3, [r2, #4]
8001144: f443 6370 orr.w r3, r3, #3840 ; 0xf00
8001148: 6053 str r3, [r2, #4]
800114a: 4770 bx lr
DMA1->IFCR |= DMA1_Channel4_IT_Mask;
800114c: 4a26 ldr r2, [pc, #152] ; (80011e8 <DMA_DeInit+0x120>)
800114e: 6853 ldr r3, [r2, #4]
8001150: f443 4370 orr.w r3, r3, #61440 ; 0xf000
8001154: 6053 str r3, [r2, #4]
8001156: 4770 bx lr
DMA1->IFCR |= DMA1_Channel5_IT_Mask;
8001158: 4a23 ldr r2, [pc, #140] ; (80011e8 <DMA_DeInit+0x120>)
800115a: 6853 ldr r3, [r2, #4]
800115c: f443 2370 orr.w r3, r3, #983040 ; 0xf0000
8001160: 6053 str r3, [r2, #4]
8001162: 4770 bx lr
DMA1->IFCR |= DMA1_Channel6_IT_Mask;
8001164: 4a20 ldr r2, [pc, #128] ; (80011e8 <DMA_DeInit+0x120>)
8001166: 6853 ldr r3, [r2, #4]
8001168: f443 0370 orr.w r3, r3, #15728640 ; 0xf00000
800116c: 6053 str r3, [r2, #4]
800116e: 4770 bx lr
DMA1->IFCR |= DMA1_Channel7_IT_Mask;
8001170: 4a1d ldr r2, [pc, #116] ; (80011e8 <DMA_DeInit+0x120>)
8001172: 6853 ldr r3, [r2, #4]
8001174: f043 6370 orr.w r3, r3, #251658240 ; 0xf000000
8001178: 6053 str r3, [r2, #4]
800117a: 4770 bx lr
DMA2->IFCR |= DMA2_Channel1_IT_Mask;
800117c: 4a1b ldr r2, [pc, #108] ; (80011ec <DMA_DeInit+0x124>)
800117e: 6853 ldr r3, [r2, #4]
8001180: f043 030f orr.w r3, r3, #15
8001184: 6053 str r3, [r2, #4]
8001186: 4770 bx lr
DMA2->IFCR |= DMA2_Channel2_IT_Mask;
8001188: 4a18 ldr r2, [pc, #96] ; (80011ec <DMA_DeInit+0x124>)
800118a: 6853 ldr r3, [r2, #4]
800118c: f043 03f0 orr.w r3, r3, #240 ; 0xf0
8001190: 6053 str r3, [r2, #4]
8001192: 4770 bx lr
DMA2->IFCR |= DMA2_Channel3_IT_Mask;
8001194: 4a15 ldr r2, [pc, #84] ; (80011ec <DMA_DeInit+0x124>)
8001196: 6853 ldr r3, [r2, #4]
8001198: f443 6370 orr.w r3, r3, #3840 ; 0xf00
800119c: 6053 str r3, [r2, #4]
800119e: 4770 bx lr
DMA2->IFCR |= DMA2_Channel4_IT_Mask;
80011a0: 4a12 ldr r2, [pc, #72] ; (80011ec <DMA_DeInit+0x124>)
80011a2: 6853 ldr r3, [r2, #4]
80011a4: f443 4370 orr.w r3, r3, #61440 ; 0xf000
80011a8: 6053 str r3, [r2, #4]
80011aa: 4770 bx lr
{
/* Reset interrupt pending bits for DMA2 Channel5 */
DMA2->IFCR |= DMA2_Channel5_IT_Mask;
80011ac: 4a0f ldr r2, [pc, #60] ; (80011ec <DMA_DeInit+0x124>)
80011ae: 6853 ldr r3, [r2, #4]
80011b0: f443 2370 orr.w r3, r3, #983040 ; 0xf0000
80011b4: 6053 str r3, [r2, #4]
}
}
}
80011b6: e7b6 b.n 8001126 <DMA_DeInit+0x5e>
80011b8: 40020008 .word 0x40020008
80011bc: 4002001c .word 0x4002001c
80011c0: 40020030 .word 0x40020030
80011c4: 40020044 .word 0x40020044
80011c8: 40020058 .word 0x40020058
80011cc: 4002006c .word 0x4002006c
80011d0: 40020080 .word 0x40020080
80011d4: 40020408 .word 0x40020408
80011d8: 4002041c .word 0x4002041c
80011dc: 40020430 .word 0x40020430
80011e0: 40020444 .word 0x40020444
80011e4: 40020458 .word 0x40020458
80011e8: 40020000 .word 0x40020000
80011ec: 40020400 .word 0x40020400
080011f0 <DMA_Init>:
* @param DMA_InitStruct: pointer to a DMA_InitTypeDef structure that
* contains the configuration information for the specified DMA Channel.
* @retval None
*/
void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct)
{
80011f0: b410 push {r4}
assert_param(IS_DMA_PRIORITY(DMA_InitStruct->DMA_Priority));
assert_param(IS_DMA_M2M_STATE(DMA_InitStruct->DMA_M2M));
/*--------------------------- DMAy Channelx CCR Configuration -----------------*/
/* Get the DMAy_Channelx CCR value */
tmpreg = DMAy_Channelx->CCR;
80011f2: 6802 ldr r2, [r0, #0]
/* Clear MEM2MEM, PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */
tmpreg &= CCR_CLEAR_Mask;
80011f4: f422 42ff bic.w r2, r2, #32640 ; 0x7f80
80011f8: f022 0270 bic.w r2, r2, #112 ; 0x70
/* Set MINC bit according to DMA_MemoryInc value */
/* Set PSIZE bits according to DMA_PeripheralDataSize value */
/* Set MSIZE bits according to DMA_MemoryDataSize value */
/* Set PL bits according to DMA_Priority value */
/* Set the MEM2MEM bit according to DMA_M2M value */
tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode |
80011fc: 688b ldr r3, [r1, #8]
80011fe: 6a0c ldr r4, [r1, #32]
8001200: 4323 orrs r3, r4
DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc |
8001202: 690c ldr r4, [r1, #16]
tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode |
8001204: 4323 orrs r3, r4
DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc |
8001206: 694c ldr r4, [r1, #20]
8001208: 4323 orrs r3, r4
DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize |
800120a: 698c ldr r4, [r1, #24]
DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc |
800120c: 4323 orrs r3, r4
DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize |
800120e: 69cc ldr r4, [r1, #28]
8001210: 4323 orrs r3, r4
DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M;
8001212: 6a4c ldr r4, [r1, #36] ; 0x24
DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize |
8001214: 4323 orrs r3, r4
DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M;
8001216: 6a8c ldr r4, [r1, #40] ; 0x28
8001218: 4323 orrs r3, r4
tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode |
800121a: 4313 orrs r3, r2
/* Write to DMAy Channelx CCR */
DMAy_Channelx->CCR = tmpreg;
800121c: 6003 str r3, [r0, #0]
/*--------------------------- DMAy Channelx CNDTR Configuration ---------------*/
/* Write to DMAy Channelx CNDTR */
DMAy_Channelx->CNDTR = DMA_InitStruct->DMA_BufferSize;
800121e: 68cb ldr r3, [r1, #12]
8001220: 6043 str r3, [r0, #4]
/*--------------------------- DMAy Channelx CPAR Configuration ----------------*/
/* Write to DMAy Channelx CPAR */
DMAy_Channelx->CPAR = DMA_InitStruct->DMA_PeripheralBaseAddr;
8001222: 680b ldr r3, [r1, #0]
8001224: 6083 str r3, [r0, #8]
/*--------------------------- DMAy Channelx CMAR Configuration ----------------*/
/* Write to DMAy Channelx CMAR */
DMAy_Channelx->CMAR = DMA_InitStruct->DMA_MemoryBaseAddr;
8001226: 684b ldr r3, [r1, #4]
8001228: 60c3 str r3, [r0, #12]
}
800122a: bc10 pop {r4}
800122c: 4770 bx lr
0800122e <DMA_Cmd>:
{
/* Check the parameters */
assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
800122e: b931 cbnz r1, 800123e <DMA_Cmd+0x10>
DMAy_Channelx->CCR |= DMA_CCR1_EN;
}
else
{
/* Disable the selected DMAy Channelx */
DMAy_Channelx->CCR &= (uint16_t)(~DMA_CCR1_EN);
8001230: 6803 ldr r3, [r0, #0]
8001232: f023 0301 bic.w r3, r3, #1
8001236: 041b lsls r3, r3, #16
8001238: 0c1b lsrs r3, r3, #16
800123a: 6003 str r3, [r0, #0]
800123c: 4770 bx lr
DMAy_Channelx->CCR |= DMA_CCR1_EN;
800123e: 6803 ldr r3, [r0, #0]
8001240: f043 0301 orr.w r3, r3, #1
8001244: 6003 str r3, [r0, #0]
8001246: 4770 bx lr
08001248 <DMA_ITConfig>:
{
/* Check the parameters */
assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
assert_param(IS_DMA_CONFIG_IT(DMA_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
8001248: b922 cbnz r2, 8001254 <DMA_ITConfig+0xc>
DMAy_Channelx->CCR |= DMA_IT;
}
else
{
/* Disable the selected DMA interrupts */
DMAy_Channelx->CCR &= ~DMA_IT;
800124a: 6803 ldr r3, [r0, #0]
800124c: ea23 0101 bic.w r1, r3, r1
8001250: 6001 str r1, [r0, #0]
8001252: 4770 bx lr
DMAy_Channelx->CCR |= DMA_IT;
8001254: 6803 ldr r3, [r0, #0]
8001256: 4319 orrs r1, r3
8001258: 6001 str r1, [r0, #0]
800125a: 4770 bx lr
0800125c <DMA_GetFlagStatus>:
/* Check the parameters */
assert_param(IS_DMA_GET_FLAG(DMAy_FLAG));
/* Calculate the used DMAy */
if ((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET)
800125c: f010 5f80 tst.w r0, #268435456 ; 0x10000000
8001260: d005 beq.n 800126e <DMA_GetFlagStatus+0x12>
{
/* Get DMA2 ISR register value */
tmpreg = DMA2->ISR ;
8001262: 4b05 ldr r3, [pc, #20] ; (8001278 <DMA_GetFlagStatus+0x1c>)
8001264: 681b ldr r3, [r3, #0]
/* Get DMA1 ISR register value */
tmpreg = DMA1->ISR ;
}
/* Check the status of the specified DMAy flag */
if ((tmpreg & DMAy_FLAG) != (uint32_t)RESET)
8001266: 4203 tst r3, r0
8001268: d104 bne.n 8001274 <DMA_GetFlagStatus+0x18>
bitstatus = SET;
}
else
{
/* DMAy_FLAG is reset */
bitstatus = RESET;
800126a: 2000 movs r0, #0
}
/* Return the DMAy_FLAG status */
return bitstatus;
}
800126c: 4770 bx lr
tmpreg = DMA1->ISR ;
800126e: 4b03 ldr r3, [pc, #12] ; (800127c <DMA_GetFlagStatus+0x20>)
8001270: 681b ldr r3, [r3, #0]
8001272: e7f8 b.n 8001266 <DMA_GetFlagStatus+0xa>
bitstatus = SET;
8001274: 2001 movs r0, #1
8001276: 4770 bx lr
8001278: 40020400 .word 0x40020400
800127c: 40020000 .word 0x40020000
08001280 <DMA_GetITStatus>:
/* Check the parameters */
assert_param(IS_DMA_GET_IT(DMAy_IT));
/* Calculate the used DMA */
if ((DMAy_IT & FLAG_Mask) != (uint32_t)RESET)
8001280: f010 5f80 tst.w r0, #268435456 ; 0x10000000
8001284: d005 beq.n 8001292 <DMA_GetITStatus+0x12>
{
/* Get DMA2 ISR register value */
tmpreg = DMA2->ISR;
8001286: 4b05 ldr r3, [pc, #20] ; (800129c <DMA_GetITStatus+0x1c>)
8001288: 681b ldr r3, [r3, #0]
/* Get DMA1 ISR register value */
tmpreg = DMA1->ISR;
}
/* Check the status of the specified DMAy interrupt */
if ((tmpreg & DMAy_IT) != (uint32_t)RESET)
800128a: 4203 tst r3, r0
800128c: d104 bne.n 8001298 <DMA_GetITStatus+0x18>
bitstatus = SET;
}
else
{
/* DMAy_IT is reset */
bitstatus = RESET;
800128e: 2000 movs r0, #0
}
/* Return the DMA_IT status */
return bitstatus;
}
8001290: 4770 bx lr
tmpreg = DMA1->ISR;
8001292: 4b03 ldr r3, [pc, #12] ; (80012a0 <DMA_GetITStatus+0x20>)
8001294: 681b ldr r3, [r3, #0]
8001296: e7f8 b.n 800128a <DMA_GetITStatus+0xa>
bitstatus = SET;
8001298: 2001 movs r0, #1
800129a: 4770 bx lr
800129c: 40020400 .word 0x40020400
80012a0: 40020000 .word 0x40020000
080012a4 <DMA_ClearITPendingBit>:
{
/* Check the parameters */
assert_param(IS_DMA_CLEAR_IT(DMAy_IT));
/* Calculate the used DMAy */
if ((DMAy_IT & FLAG_Mask) != (uint32_t)RESET)
80012a4: f010 5f80 tst.w r0, #268435456 ; 0x10000000
80012a8: d102 bne.n 80012b0 <DMA_ClearITPendingBit+0xc>
DMA2->IFCR = DMAy_IT;
}
else
{
/* Clear the selected DMAy interrupt pending bits */
DMA1->IFCR = DMAy_IT;
80012aa: 4b03 ldr r3, [pc, #12] ; (80012b8 <DMA_ClearITPendingBit+0x14>)
80012ac: 6058 str r0, [r3, #4]
80012ae: 4770 bx lr
DMA2->IFCR = DMAy_IT;
80012b0: 4b02 ldr r3, [pc, #8] ; (80012bc <DMA_ClearITPendingBit+0x18>)
80012b2: 6058 str r0, [r3, #4]
80012b4: 4770 bx lr
80012b6: bf00 nop
80012b8: 40020000 .word 0x40020000
80012bc: 40020400 .word 0x40020400
080012c0 <EXTI_Init>:
assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));
assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));
tmp = (uint32_t)EXTI_BASE;
if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)
80012c0: 7983 ldrb r3, [r0, #6]
80012c2: 2b00 cmp r3, #0
80012c4: d035 beq.n 8001332 <EXTI_Init+0x72>
{
80012c6: b410 push {r4}
{
/* Clear EXTI line configuration */
EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;
80012c8: 4b1f ldr r3, [pc, #124] ; (8001348 <EXTI_Init+0x88>)
80012ca: 681a ldr r2, [r3, #0]
80012cc: 6801 ldr r1, [r0, #0]
80012ce: ea22 0201 bic.w r2, r2, r1
80012d2: 601a str r2, [r3, #0]
EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;
80012d4: 685a ldr r2, [r3, #4]
80012d6: 6801 ldr r1, [r0, #0]
80012d8: ea22 0201 bic.w r2, r2, r1
80012dc: 605a str r2, [r3, #4]
tmp += EXTI_InitStruct->EXTI_Mode;
80012de: 7902 ldrb r2, [r0, #4]
80012e0: f102 4280 add.w r2, r2, #1073741824 ; 0x40000000
80012e4: f502 3282 add.w r2, r2, #66560 ; 0x10400
*(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
80012e8: 6811 ldr r1, [r2, #0]
80012ea: 6804 ldr r4, [r0, #0]
80012ec: 4321 orrs r1, r4
80012ee: 6011 str r1, [r2, #0]
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line;
80012f0: 689a ldr r2, [r3, #8]
80012f2: 6801 ldr r1, [r0, #0]
80012f4: ea22 0201 bic.w r2, r2, r1
80012f8: 609a str r2, [r3, #8]
EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;
80012fa: 68da ldr r2, [r3, #12]
80012fc: 6801 ldr r1, [r0, #0]
80012fe: ea22 0201 bic.w r2, r2, r1
8001302: 60da str r2, [r3, #12]
/* Select the trigger for the selected external interrupts */
if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)
8001304: 7943 ldrb r3, [r0, #5]
8001306: 2b10 cmp r3, #16
8001308: d009 beq.n 800131e <EXTI_Init+0x5e>
EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;
}
else
{
tmp = (uint32_t)EXTI_BASE;
tmp += EXTI_InitStruct->EXTI_Trigger;
800130a: f103 4380 add.w r3, r3, #1073741824 ; 0x40000000
800130e: f503 3382 add.w r3, r3, #66560 ; 0x10400
*(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
8001312: 681a ldr r2, [r3, #0]
8001314: 6801 ldr r1, [r0, #0]
8001316: 430a orrs r2, r1
8001318: 601a str r2, [r3, #0]
tmp += EXTI_InitStruct->EXTI_Mode;
/* Disable the selected external lines */
*(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line;
}
}
800131a: bc10 pop {r4}
800131c: 4770 bx lr
EXTI->RTSR |= EXTI_InitStruct->EXTI_Line;
800131e: 4b0a ldr r3, [pc, #40] ; (8001348 <EXTI_Init+0x88>)
8001320: 689a ldr r2, [r3, #8]
8001322: 6801 ldr r1, [r0, #0]
8001324: 430a orrs r2, r1
8001326: 609a str r2, [r3, #8]
EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;
8001328: 68da ldr r2, [r3, #12]
800132a: 6801 ldr r1, [r0, #0]
800132c: 430a orrs r2, r1
800132e: 60da str r2, [r3, #12]
8001330: e7f3 b.n 800131a <EXTI_Init+0x5a>
tmp += EXTI_InitStruct->EXTI_Mode;
8001332: 7903 ldrb r3, [r0, #4]
8001334: f103 4380 add.w r3, r3, #1073741824 ; 0x40000000
8001338: f503 3382 add.w r3, r3, #66560 ; 0x10400
*(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line;
800133c: 681a ldr r2, [r3, #0]
800133e: 6801 ldr r1, [r0, #0]
8001340: ea22 0201 bic.w r2, r2, r1
8001344: 601a str r2, [r3, #0]
}
8001346: 4770 bx lr
8001348: 40010400 .word 0x40010400
0800134c <GPIO_Init>:
* @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
* contains the configuration information for the specified GPIO peripheral.
* @retval None
*/
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
800134c: b4f0 push {r4, r5, r6, r7}
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
/*---------------------------- GPIO Mode Configuration -----------------------*/
currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
800134e: 78cb ldrb r3, [r1, #3]
8001350: f003 020f and.w r2, r3, #15
8001354: 4615 mov r5, r2
if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
8001356: f013 0f10 tst.w r3, #16
800135a: d001 beq.n 8001360 <GPIO_Init+0x14>
{
/* Check the parameters */
assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
/* Output mode */
currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
800135c: 788d ldrb r5, [r1, #2]
800135e: 4315 orrs r5, r2
}
/*---------------------------- GPIO CRL Configuration ------------------------*/
/* Configure the eight low port pins */
if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00)
8001360: 780b ldrb r3, [r1, #0]
8001362: b1e3 cbz r3, 800139e <GPIO_Init+0x52>
{
tmpreg = GPIOx->CRL;
8001364: 6806 ldr r6, [r0, #0]
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
8001366: 2300 movs r3, #0
8001368: e001 b.n 800136e <GPIO_Init+0x22>
/* Write the mode configuration in the corresponding bits */
tmpreg |= (currentmode << pos);
/* Reset the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
{
GPIOx->BRR = (((uint32_t)0x01) << pinpos);
800136a: 6142 str r2, [r0, #20]
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
800136c: 3301 adds r3, #1
800136e: 2b07 cmp r3, #7
8001370: d814 bhi.n 800139c <GPIO_Init+0x50>
pos = ((uint32_t)0x01) << pinpos;
8001372: 2201 movs r2, #1
8001374: 409a lsls r2, r3
currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
8001376: 880c ldrh r4, [r1, #0]
if (currentpin == pos)
8001378: ea32 0404 bics.w r4, r2, r4
800137c: d1f6 bne.n 800136c <GPIO_Init+0x20>
pos = pinpos << 2;
800137e: 009c lsls r4, r3, #2
pinmask = ((uint32_t)0x0F) << pos;
8001380: 270f movs r7, #15
8001382: 40a7 lsls r7, r4
tmpreg &= ~pinmask;
8001384: ea26 0607 bic.w r6, r6, r7
tmpreg |= (currentmode << pos);
8001388: fa05 f404 lsl.w r4, r5, r4
800138c: 4326 orrs r6, r4
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
800138e: 78cc ldrb r4, [r1, #3]
8001390: 2c28 cmp r4, #40 ; 0x28
8001392: d0ea beq.n 800136a <GPIO_Init+0x1e>
}
else
{
/* Set the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
8001394: 2c48 cmp r4, #72 ; 0x48
8001396: d1e9 bne.n 800136c <GPIO_Init+0x20>
{
GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
8001398: 6102 str r2, [r0, #16]
800139a: e7e7 b.n 800136c <GPIO_Init+0x20>
}
}
}
}
GPIOx->CRL = tmpreg;
800139c: 6006 str r6, [r0, #0]
}
/*---------------------------- GPIO CRH Configuration ------------------------*/
/* Configure the eight high port pins */
if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
800139e: 880b ldrh r3, [r1, #0]
80013a0: 2bff cmp r3, #255 ; 0xff
80013a2: d920 bls.n 80013e6 <GPIO_Init+0x9a>
{
tmpreg = GPIOx->CRH;
80013a4: 6846 ldr r6, [r0, #4]
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
80013a6: 2300 movs r3, #0
80013a8: e002 b.n 80013b0 <GPIO_Init+0x64>
/* Write the mode configuration in the corresponding bits */
tmpreg |= (currentmode << pos);
/* Reset the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
{
GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
80013aa: 6142 str r2, [r0, #20]
80013ac: e015 b.n 80013da <GPIO_Init+0x8e>
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
80013ae: 3301 adds r3, #1
80013b0: 2b07 cmp r3, #7
80013b2: d817 bhi.n 80013e4 <GPIO_Init+0x98>
pos = (((uint32_t)0x01) << (pinpos + 0x08));
80013b4: f103 0408 add.w r4, r3, #8
80013b8: 2201 movs r2, #1
80013ba: 40a2 lsls r2, r4
currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
80013bc: 880c ldrh r4, [r1, #0]
if (currentpin == pos)
80013be: ea32 0404 bics.w r4, r2, r4
80013c2: d1f4 bne.n 80013ae <GPIO_Init+0x62>
pos = pinpos << 2;
80013c4: 009c lsls r4, r3, #2
pinmask = ((uint32_t)0x0F) << pos;
80013c6: 270f movs r7, #15
80013c8: 40a7 lsls r7, r4
tmpreg &= ~pinmask;
80013ca: ea26 0607 bic.w r6, r6, r7
tmpreg |= (currentmode << pos);
80013ce: fa05 f404 lsl.w r4, r5, r4
80013d2: 4326 orrs r6, r4
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
80013d4: 78cc ldrb r4, [r1, #3]
80013d6: 2c28 cmp r4, #40 ; 0x28
80013d8: d0e7 beq.n 80013aa <GPIO_Init+0x5e>
}
/* Set the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
80013da: 78cc ldrb r4, [r1, #3]
80013dc: 2c48 cmp r4, #72 ; 0x48
80013de: d1e6 bne.n 80013ae <GPIO_Init+0x62>
{
GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
80013e0: 6102 str r2, [r0, #16]
80013e2: e7e4 b.n 80013ae <GPIO_Init+0x62>
}
}
}
GPIOx->CRH = tmpreg;
80013e4: 6046 str r6, [r0, #4]
}
}
80013e6: bcf0 pop {r4, r5, r6, r7}
80013e8: 4770 bx lr
080013ea <GPIO_SetBits>:
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BSRR = GPIO_Pin;
80013ea: 6101 str r1, [r0, #16]
80013ec: 4770 bx lr
080013ee <GPIO_ResetBits>:
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BRR = GPIO_Pin;
80013ee: 6141 str r1, [r0, #20]
80013f0: 4770 bx lr
...
080013f4 <GPIO_PinRemapConfig>:
* @param NewState: new state of the port pin remapping.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
{
80013f4: b430 push {r4, r5}
/* Check the parameters */
assert_param(IS_GPIO_REMAP(GPIO_Remap));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if((GPIO_Remap & 0x80000000) == 0x80000000)
80013f6: 2800 cmp r0, #0
80013f8: db1d blt.n 8001436 <GPIO_PinRemapConfig+0x42>
{
tmpreg = AFIO->MAPR2;
}
else
{
tmpreg = AFIO->MAPR;
80013fa: 4b1a ldr r3, [pc, #104] ; (8001464 <GPIO_PinRemapConfig+0x70>)
80013fc: 685b ldr r3, [r3, #4]
}
tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
80013fe: f3c0 4503 ubfx r5, r0, #16, #4
tmp = GPIO_Remap & LSB_MASK;
8001402: b282 uxth r2, r0
if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
8001404: f400 1440 and.w r4, r0, #3145728 ; 0x300000
8001408: f5b4 1f40 cmp.w r4, #3145728 ; 0x300000
800140c: d016 beq.n 800143c <GPIO_PinRemapConfig+0x48>
{
tmpreg &= DBGAFR_SWJCFG_MASK;
AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
}
else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
800140e: f410 1f80 tst.w r0, #1048576 ; 0x100000
8001412: d01b beq.n 800144c <GPIO_PinRemapConfig+0x58>
{
tmp1 = ((uint32_t)0x03) << tmpmask;
8001414: 2403 movs r4, #3
8001416: 40ac lsls r4, r5
tmpreg &= ~tmp1;
8001418: ea23 0304 bic.w r3, r3, r4
tmpreg |= ~DBGAFR_SWJCFG_MASK;
800141c: f043 6370 orr.w r3, r3, #251658240 ; 0xf000000
{
tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
tmpreg |= ~DBGAFR_SWJCFG_MASK;
}
if (NewState != DISABLE)
8001420: b119 cbz r1, 800142a <GPIO_PinRemapConfig+0x36>
{
tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
8001422: 0d41 lsrs r1, r0, #21
8001424: 0109 lsls r1, r1, #4
8001426: 408a lsls r2, r1
8001428: 4313 orrs r3, r2
}
if((GPIO_Remap & 0x80000000) == 0x80000000)
800142a: 2800 cmp r0, #0
800142c: db17 blt.n 800145e <GPIO_PinRemapConfig+0x6a>
{
AFIO->MAPR2 = tmpreg;
}
else
{
AFIO->MAPR = tmpreg;
800142e: 4a0d ldr r2, [pc, #52] ; (8001464 <GPIO_PinRemapConfig+0x70>)
8001430: 6053 str r3, [r2, #4]
}
}
8001432: bc30 pop {r4, r5}
8001434: 4770 bx lr
tmpreg = AFIO->MAPR2;
8001436: 4b0b ldr r3, [pc, #44] ; (8001464 <GPIO_PinRemapConfig+0x70>)
8001438: 69db ldr r3, [r3, #28]
800143a: e7e0 b.n 80013fe <GPIO_PinRemapConfig+0xa>
tmpreg &= DBGAFR_SWJCFG_MASK;
800143c: f023 6370 bic.w r3, r3, #251658240 ; 0xf000000
AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
8001440: 4d08 ldr r5, [pc, #32] ; (8001464 <GPIO_PinRemapConfig+0x70>)
8001442: 686c ldr r4, [r5, #4]
8001444: f024 6470 bic.w r4, r4, #251658240 ; 0xf000000
8001448: 606c str r4, [r5, #4]
800144a: e7e9 b.n 8001420 <GPIO_PinRemapConfig+0x2c>
tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
800144c: 0d44 lsrs r4, r0, #21
800144e: 0124 lsls r4, r4, #4
8001450: fa02 f404 lsl.w r4, r2, r4
8001454: ea23 0304 bic.w r3, r3, r4
tmpreg |= ~DBGAFR_SWJCFG_MASK;
8001458: f043 6370 orr.w r3, r3, #251658240 ; 0xf000000
800145c: e7e0 b.n 8001420 <GPIO_PinRemapConfig+0x2c>
AFIO->MAPR2 = tmpreg;
800145e: 4a01 ldr r2, [pc, #4] ; (8001464 <GPIO_PinRemapConfig+0x70>)
8001460: 61d3 str r3, [r2, #28]
8001462: e7e6 b.n 8001432 <GPIO_PinRemapConfig+0x3e>
8001464: 40010000 .word 0x40010000
08001468 <GPIO_EXTILineConfig>:
* @param GPIO_PinSource: specifies the EXTI line to be configured.
* This parameter can be GPIO_PinSourcex where x can be (0..15).
* @retval None
*/
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
{
8001468: b430 push {r4, r5}
uint32_t tmp = 0x00;
/* Check the parameters */
assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
800146a: f001 0303 and.w r3, r1, #3
800146e: 009b lsls r3, r3, #2
8001470: 240f movs r4, #15
8001472: fa04 f503 lsl.w r5, r4, r3
AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
8001476: 0889 lsrs r1, r1, #2
8001478: 4a07 ldr r2, [pc, #28] ; (8001498 <GPIO_EXTILineConfig+0x30>)
800147a: 3102 adds r1, #2
800147c: f852 4021 ldr.w r4, [r2, r1, lsl #2]
8001480: ea24 0405 bic.w r4, r4, r5
8001484: f842 4021 str.w r4, [r2, r1, lsl #2]
AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
8001488: f852 4021 ldr.w r4, [r2, r1, lsl #2]
800148c: 4098 lsls r0, r3
800148e: 4320 orrs r0, r4
8001490: f842 0021 str.w r0, [r2, r1, lsl #2]
}
8001494: bc30 pop {r4, r5}
8001496: 4770 bx lr
8001498: 40010000 .word 0x40010000
0800149c <RCC_ADCCLKConfig>:
void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_RCC_ADCCLK(RCC_PCLK2));
tmpreg = RCC->CFGR;
800149c: 4a03 ldr r2, [pc, #12] ; (80014ac <RCC_ADCCLKConfig+0x10>)
800149e: 6853 ldr r3, [r2, #4]
/* Clear ADCPRE[1:0] bits */
tmpreg &= CFGR_ADCPRE_Reset_Mask;
80014a0: f423 4340 bic.w r3, r3, #49152 ; 0xc000
/* Set ADCPRE[1:0] bits according to RCC_PCLK2 value */
tmpreg |= RCC_PCLK2;
80014a4: 4318 orrs r0, r3
/* Store the new value */
RCC->CFGR = tmpreg;
80014a6: 6050 str r0, [r2, #4]
80014a8: 4770 bx lr
80014aa: bf00 nop
80014ac: 40021000 .word 0x40021000
080014b0 <RCC_GetClocksFreq>:
* @note The result of this function could be not correct when using
* fractional value for HSE crystal.
* @retval None
*/
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
{
80014b0: b410 push {r4}
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
uint32_t prediv1factor = 0;
#endif
/* Get SYSCLK source -------------------------------------------------------*/
tmp = RCC->CFGR & CFGR_SWS_Mask;
80014b2: 4b29 ldr r3, [pc, #164] ; (8001558 <RCC_GetClocksFreq+0xa8>)
80014b4: 685b ldr r3, [r3, #4]
80014b6: f003 030c and.w r3, r3, #12
switch (tmp)
80014ba: 2b04 cmp r3, #4
80014bc: d02b beq.n 8001516 <RCC_GetClocksFreq+0x66>
80014be: 2b08 cmp r3, #8
80014c0: d02c beq.n 800151c <RCC_GetClocksFreq+0x6c>
80014c2: b113 cbz r3, 80014ca <RCC_GetClocksFreq+0x1a>
}
#endif /* STM32F10X_CL */
break;
default:
RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
80014c4: 4b25 ldr r3, [pc, #148] ; (800155c <RCC_GetClocksFreq+0xac>)
80014c6: 6003 str r3, [r0, #0]
break;
80014c8: e001 b.n 80014ce <RCC_GetClocksFreq+0x1e>
RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
80014ca: 4b24 ldr r3, [pc, #144] ; (800155c <RCC_GetClocksFreq+0xac>)
80014cc: 6003 str r3, [r0, #0]
}
/* Compute HCLK, PCLK1, PCLK2 and ADCCLK clocks frequencies ----------------*/
/* Get HCLK prescaler */
tmp = RCC->CFGR & CFGR_HPRE_Set_Mask;
80014ce: 4922 ldr r1, [pc, #136] ; (8001558 <RCC_GetClocksFreq+0xa8>)
80014d0: 684b ldr r3, [r1, #4]
tmp = tmp >> 4;
80014d2: f3c3 1303 ubfx r3, r3, #4, #4
presc = APBAHBPrescTable[tmp];
80014d6: 4c22 ldr r4, [pc, #136] ; (8001560 <RCC_GetClocksFreq+0xb0>)
80014d8: 5ce3 ldrb r3, [r4, r3]
80014da: b2da uxtb r2, r3
/* HCLK clock frequency */
RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc;
80014dc: 6803 ldr r3, [r0, #0]
80014de: 40d3 lsrs r3, r2
80014e0: 6043 str r3, [r0, #4]
/* Get PCLK1 prescaler */
tmp = RCC->CFGR & CFGR_PPRE1_Set_Mask;
80014e2: 684a ldr r2, [r1, #4]
tmp = tmp >> 8;
80014e4: f3c2 2202 ubfx r2, r2, #8, #3
presc = APBAHBPrescTable[tmp];
80014e8: 5ca2 ldrb r2, [r4, r2]
80014ea: b2d2 uxtb r2, r2
/* PCLK1 clock frequency */
RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
80014ec: fa23 f202 lsr.w r2, r3, r2
80014f0: 6082 str r2, [r0, #8]
/* Get PCLK2 prescaler */
tmp = RCC->CFGR & CFGR_PPRE2_Set_Mask;
80014f2: 684a ldr r2, [r1, #4]
tmp = tmp >> 11;
80014f4: f3c2 22c2 ubfx r2, r2, #11, #3
presc = APBAHBPrescTable[tmp];
80014f8: 5ca2 ldrb r2, [r4, r2]
80014fa: b2d2 uxtb r2, r2
/* PCLK2 clock frequency */
RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
80014fc: 40d3 lsrs r3, r2
80014fe: 60c3 str r3, [r0, #12]
/* Get ADCCLK prescaler */
tmp = RCC->CFGR & CFGR_ADCPRE_Set_Mask;
8001500: 684a ldr r2, [r1, #4]
tmp = tmp >> 14;
8001502: f3c2 3281 ubfx r2, r2, #14, #2
presc = ADCPrescTable[tmp];
8001506: 4917 ldr r1, [pc, #92] ; (8001564 <RCC_GetClocksFreq+0xb4>)
8001508: 5c8a ldrb r2, [r1, r2]
800150a: b2d2 uxtb r2, r2
/* ADCCLK clock frequency */
RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc;
800150c: fbb3 f3f2 udiv r3, r3, r2
8001510: 6103 str r3, [r0, #16]
}
8001512: bc10 pop {r4}
8001514: 4770 bx lr
RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;
8001516: 4b11 ldr r3, [pc, #68] ; (800155c <RCC_GetClocksFreq+0xac>)
8001518: 6003 str r3, [r0, #0]
break;
800151a: e7d8 b.n 80014ce <RCC_GetClocksFreq+0x1e>
pllmull = RCC->CFGR & CFGR_PLLMull_Mask;
800151c: 4a0e ldr r2, [pc, #56] ; (8001558 <RCC_GetClocksFreq+0xa8>)
800151e: 6853 ldr r3, [r2, #4]
pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;
8001520: 6852 ldr r2, [r2, #4]
pllmull = ( pllmull >> 18) + 2;
8001522: f3c3 4383 ubfx r3, r3, #18, #4
8001526: 3302 adds r3, #2
if (pllsource == 0x00)
8001528: f412 3f80 tst.w r2, #65536 ; 0x10000
800152c: d009 beq.n 8001542 <RCC_GetClocksFreq+0x92>
if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (uint32_t)RESET)
800152e: 4a0a ldr r2, [pc, #40] ; (8001558 <RCC_GetClocksFreq+0xa8>)
8001530: 6852 ldr r2, [r2, #4]
8001532: f412 3f00 tst.w r2, #131072 ; 0x20000
8001536: d009 beq.n 800154c <RCC_GetClocksFreq+0x9c>
RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE >> 1) * pllmull;
8001538: 4a0b ldr r2, [pc, #44] ; (8001568 <RCC_GetClocksFreq+0xb8>)
800153a: fb02 f303 mul.w r3, r2, r3
800153e: 6003 str r3, [r0, #0]
8001540: e7c5 b.n 80014ce <RCC_GetClocksFreq+0x1e>
RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull;
8001542: 4a09 ldr r2, [pc, #36] ; (8001568 <RCC_GetClocksFreq+0xb8>)
8001544: fb02 f303 mul.w r3, r2, r3
8001548: 6003 str r3, [r0, #0]
800154a: e7c0 b.n 80014ce <RCC_GetClocksFreq+0x1e>
RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull;
800154c: 4a03 ldr r2, [pc, #12] ; (800155c <RCC_GetClocksFreq+0xac>)
800154e: fb02 f303 mul.w r3, r2, r3
8001552: 6003 str r3, [r0, #0]
8001554: e7bb b.n 80014ce <RCC_GetClocksFreq+0x1e>
8001556: bf00 nop
8001558: 40021000 .word 0x40021000
800155c: 007a1200 .word 0x007a1200
8001560: 20000004 .word 0x20000004
8001564: 20000000 .word 0x20000000
8001568: 003d0900 .word 0x003d0900
0800156c <RCC_AHBPeriphClockCmd>:
{
/* Check the parameters */
assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
800156c: b929 cbnz r1, 800157a <RCC_AHBPeriphClockCmd+0xe>
{
RCC->AHBENR |= RCC_AHBPeriph;
}
else
{
RCC->AHBENR &= ~RCC_AHBPeriph;
800156e: 4a05 ldr r2, [pc, #20] ; (8001584 <RCC_AHBPeriphClockCmd+0x18>)
8001570: 6953 ldr r3, [r2, #20]
8001572: ea23 0000 bic.w r0, r3, r0
8001576: 6150 str r0, [r2, #20]
8001578: 4770 bx lr
RCC->AHBENR |= RCC_AHBPeriph;
800157a: 4a02 ldr r2, [pc, #8] ; (8001584 <RCC_AHBPeriphClockCmd+0x18>)
800157c: 6953 ldr r3, [r2, #20]
800157e: 4318 orrs r0, r3
8001580: 6150 str r0, [r2, #20]
8001582: 4770 bx lr
8001584: 40021000 .word 0x40021000
08001588 <RCC_APB2PeriphClockCmd>:
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
8001588: b929 cbnz r1, 8001596 <RCC_APB2PeriphClockCmd+0xe>
{
RCC->APB2ENR |= RCC_APB2Periph;
}
else
{
RCC->APB2ENR &= ~RCC_APB2Periph;
800158a: 4a05 ldr r2, [pc, #20] ; (80015a0 <RCC_APB2PeriphClockCmd+0x18>)
800158c: 6993 ldr r3, [r2, #24]
800158e: ea23 0000 bic.w r0, r3, r0
8001592: 6190 str r0, [r2, #24]
8001594: 4770 bx lr
RCC->APB2ENR |= RCC_APB2Periph;
8001596: 4a02 ldr r2, [pc, #8] ; (80015a0 <RCC_APB2PeriphClockCmd+0x18>)
8001598: 6993 ldr r3, [r2, #24]
800159a: 4318 orrs r0, r3
800159c: 6190 str r0, [r2, #24]
800159e: 4770 bx lr
80015a0: 40021000 .word 0x40021000
080015a4 <RCC_APB1PeriphClockCmd>:
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
80015a4: b929 cbnz r1, 80015b2 <RCC_APB1PeriphClockCmd+0xe>
{
RCC->APB1ENR |= RCC_APB1Periph;
}
else
{
RCC->APB1ENR &= ~RCC_APB1Periph;
80015a6: 4a05 ldr r2, [pc, #20] ; (80015bc <RCC_APB1PeriphClockCmd+0x18>)
80015a8: 69d3 ldr r3, [r2, #28]
80015aa: ea23 0000 bic.w r0, r3, r0
80015ae: 61d0 str r0, [r2, #28]
80015b0: 4770 bx lr
RCC->APB1ENR |= RCC_APB1Periph;
80015b2: 4a02 ldr r2, [pc, #8] ; (80015bc <RCC_APB1PeriphClockCmd+0x18>)
80015b4: 69d3 ldr r3, [r2, #28]
80015b6: 4318 orrs r0, r3
80015b8: 61d0 str r0, [r2, #28]
80015ba: 4770 bx lr
80015bc: 40021000 .word 0x40021000
080015c0 <TI1_Config>:
* This parameter must be a value between 0x00 and 0x0F.
* @retval None
*/
static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
uint16_t TIM_ICFilter)
{
80015c0: b430 push {r4, r5}
uint16_t tmpccmr1 = 0, tmpccer = 0;
/* Disable the Channel 1: Reset the CC1E Bit */
TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC1E);
80015c2: 8c04 ldrh r4, [r0, #32]
80015c4: b2a4 uxth r4, r4
80015c6: f024 0401 bic.w r4, r4, #1
80015ca: b2a4 uxth r4, r4
80015cc: 8404 strh r4, [r0, #32]
tmpccmr1 = TIMx->CCMR1;
80015ce: 8b04 ldrh r4, [r0, #24]
80015d0: b2a4 uxth r4, r4
tmpccer = TIMx->CCER;
80015d2: 8c05 ldrh r5, [r0, #32]
80015d4: b2ad uxth r5, r5
/* Select the Input and set the filter */
tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC1F)));
80015d6: f024 04f3 bic.w r4, r4, #243 ; 0xf3
tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
80015da: 011b lsls r3, r3, #4
80015dc: b29b uxth r3, r3
80015de: 431a orrs r2, r3
80015e0: 4314 orrs r4, r2
if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
80015e2: 4a12 ldr r2, [pc, #72] ; (800162c <TI1_Config+0x6c>)
80015e4: 4290 cmp r0, r2
80015e6: d01a beq.n 800161e <TI1_Config+0x5e>
80015e8: 4b11 ldr r3, [pc, #68] ; (8001630 <TI1_Config+0x70>)
80015ea: 4298 cmp r0, r3
80015ec: d017 beq.n 800161e <TI1_Config+0x5e>
80015ee: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000
80015f2: d014 beq.n 800161e <TI1_Config+0x5e>
80015f4: f5a3 3398 sub.w r3, r3, #77824 ; 0x13000
80015f8: 4298 cmp r0, r3
80015fa: d010 beq.n 800161e <TI1_Config+0x5e>
80015fc: f503 6380 add.w r3, r3, #1024 ; 0x400
8001600: 4298 cmp r0, r3
8001602: d00c beq.n 800161e <TI1_Config+0x5e>
(TIMx == TIM4) ||(TIMx == TIM5))
8001604: f503 6380 add.w r3, r3, #1024 ; 0x400
8001608: 4298 cmp r0, r3
800160a: d008 beq.n 800161e <TI1_Config+0x5e>
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E);
}
else
{
/* Select the Polarity and set the CC1E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P | TIM_CCER_CC1NP));
800160c: f025 030a bic.w r3, r5, #10
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E);
8001610: 4319 orrs r1, r3
8001612: f041 0101 orr.w r1, r1, #1
}
/* Write to TIMx CCMR1 and CCER registers */
TIMx->CCMR1 = tmpccmr1;
8001616: 8304 strh r4, [r0, #24]
TIMx->CCER = tmpccer;
8001618: 8401 strh r1, [r0, #32]
}
800161a: bc30 pop {r4, r5}
800161c: 4770 bx lr
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P));
800161e: f025 0302 bic.w r3, r5, #2
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E);
8001622: 4319 orrs r1, r3
8001624: f041 0101 orr.w r1, r1, #1
8001628: e7f5 b.n 8001616 <TI1_Config+0x56>
800162a: bf00 nop
800162c: 40012c00 .word 0x40012c00
8001630: 40013400 .word 0x40013400
08001634 <TI2_Config>:
* This parameter must be a value between 0x00 and 0x0F.
* @retval None
*/
static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
uint16_t TIM_ICFilter)
{
8001634: b470 push {r4, r5, r6}
uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0;
/* Disable the Channel 2: Reset the CC2E Bit */
TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC2E);
8001636: 8c05 ldrh r5, [r0, #32]
8001638: b2ad uxth r5, r5
800163a: f025 0510 bic.w r5, r5, #16
800163e: b2ad uxth r5, r5
8001640: 8405 strh r5, [r0, #32]
tmpccmr1 = TIMx->CCMR1;
8001642: 8b05 ldrh r5, [r0, #24]
tmpccer = TIMx->CCER;
8001644: 8c04 ldrh r4, [r0, #32]
8001646: b2a4 uxth r4, r4
tmp = (uint16_t)(TIM_ICPolarity << 4);
8001648: 010e lsls r6, r1, #4
800164a: b2b6 uxth r6, r6
/* Select the Input and set the filter */
tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC2S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC2F)));
800164c: f425 7540 bic.w r5, r5, #768 ; 0x300
8001650: 052d lsls r5, r5, #20
8001652: 0d2d lsrs r5, r5, #20
tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12);
8001654: 031b lsls r3, r3, #12
8001656: b29b uxth r3, r3
8001658: 431d orrs r5, r3
tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8);
800165a: 0212 lsls r2, r2, #8
800165c: b292 uxth r2, r2
800165e: 4315 orrs r5, r2
if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
8001660: 4b12 ldr r3, [pc, #72] ; (80016ac <TI2_Config+0x78>)
8001662: 4298 cmp r0, r3
8001664: d01b beq.n 800169e <TI2_Config+0x6a>
8001666: f503 6300 add.w r3, r3, #2048 ; 0x800
800166a: 4298 cmp r0, r3
800166c: d017 beq.n 800169e <TI2_Config+0x6a>
800166e: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000
8001672: d014 beq.n 800169e <TI2_Config+0x6a>
8001674: f5a3 3398 sub.w r3, r3, #77824 ; 0x13000
8001678: 4298 cmp r0, r3
800167a: d010 beq.n 800169e <TI2_Config+0x6a>
800167c: f503 6380 add.w r3, r3, #1024 ; 0x400
8001680: 4298 cmp r0, r3
8001682: d00c beq.n 800169e <TI2_Config+0x6a>
(TIMx == TIM4) ||(TIMx == TIM5))
8001684: f503 6380 add.w r3, r3, #1024 ; 0x400
8001688: 4298 cmp r0, r3
800168a: d008 beq.n 800169e <TI2_Config+0x6a>
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E);
}
else
{
/* Select the Polarity and set the CC2E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P | TIM_CCER_CC2NP));
800168c: f024 04a0 bic.w r4, r4, #160 ; 0xa0
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC2E);
8001690: 430c orrs r4, r1
8001692: f044 0410 orr.w r4, r4, #16
}
/* Write to TIMx CCMR1 and CCER registers */
TIMx->CCMR1 = tmpccmr1 ;
8001696: 8305 strh r5, [r0, #24]
TIMx->CCER = tmpccer;
8001698: 8404 strh r4, [r0, #32]
}
800169a: bc70 pop {r4, r5, r6}
800169c: 4770 bx lr
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P));
800169e: f024 0420 bic.w r4, r4, #32
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E);
80016a2: 4334 orrs r4, r6
80016a4: f044 0410 orr.w r4, r4, #16
80016a8: e7f5 b.n 8001696 <TI2_Config+0x62>
80016aa: bf00 nop
80016ac: 40012c00 .word 0x40012c00
080016b0 <TI3_Config>:
* This parameter must be a value between 0x00 and 0x0F.
* @retval None
*/
static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
uint16_t TIM_ICFilter)
{
80016b0: b470 push {r4, r5, r6}
uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0;
/* Disable the Channel 3: Reset the CC3E Bit */
TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC3E);
80016b2: 8c04 ldrh r4, [r0, #32]
80016b4: b2a4 uxth r4, r4
80016b6: f424 7480 bic.w r4, r4, #256 ; 0x100
80016ba: b2a4 uxth r4, r4
80016bc: 8404 strh r4, [r0, #32]
tmpccmr2 = TIMx->CCMR2;
80016be: 8b84 ldrh r4, [r0, #28]
80016c0: b2a4 uxth r4, r4
tmpccer = TIMx->CCER;
80016c2: 8c05 ldrh r5, [r0, #32]
80016c4: b2ae uxth r6, r5
tmp = (uint16_t)(TIM_ICPolarity << 8);
80016c6: 020d lsls r5, r1, #8
80016c8: b2ad uxth r5, r5
/* Select the Input and set the filter */
tmpccmr2 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR2_CC3S)) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC3F)));
80016ca: f024 04f3 bic.w r4, r4, #243 ; 0xf3
tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
80016ce: 011b lsls r3, r3, #4
80016d0: b29b uxth r3, r3
80016d2: 4313 orrs r3, r2
80016d4: 431c orrs r4, r3
if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
80016d6: 4b12 ldr r3, [pc, #72] ; (8001720 <TI3_Config+0x70>)
80016d8: 4298 cmp r0, r3
80016da: d01b beq.n 8001714 <TI3_Config+0x64>
80016dc: f503 6300 add.w r3, r3, #2048 ; 0x800
80016e0: 4298 cmp r0, r3
80016e2: d017 beq.n 8001714 <TI3_Config+0x64>
80016e4: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000
80016e8: d014 beq.n 8001714 <TI3_Config+0x64>
80016ea: f5a3 3398 sub.w r3, r3, #77824 ; 0x13000
80016ee: 4298 cmp r0, r3
80016f0: d010 beq.n 8001714 <TI3_Config+0x64>
80016f2: f503 6380 add.w r3, r3, #1024 ; 0x400
80016f6: 4298 cmp r0, r3
80016f8: d00c beq.n 8001714 <TI3_Config+0x64>
(TIMx == TIM4) ||(TIMx == TIM5))
80016fa: f503 6380 add.w r3, r3, #1024 ; 0x400
80016fe: 4298 cmp r0, r3
8001700: d008 beq.n 8001714 <TI3_Config+0x64>
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E);
}
else
{
/* Select the Polarity and set the CC3E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC3NP));
8001702: f426 6320 bic.w r3, r6, #2560 ; 0xa00
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC3E);
8001706: 4319 orrs r1, r3
8001708: f441 7180 orr.w r1, r1, #256 ; 0x100
}
/* Write to TIMx CCMR2 and CCER registers */
TIMx->CCMR2 = tmpccmr2;
800170c: 8384 strh r4, [r0, #28]
TIMx->CCER = tmpccer;
800170e: 8401 strh r1, [r0, #32]
}
8001710: bc70 pop {r4, r5, r6}
8001712: 4770 bx lr
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P));
8001714: f426 7100 bic.w r1, r6, #512 ; 0x200
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E);
8001718: 4329 orrs r1, r5
800171a: f441 7180 orr.w r1, r1, #256 ; 0x100
800171e: e7f5 b.n 800170c <TI3_Config+0x5c>
8001720: 40012c00 .word 0x40012c00
08001724 <TI4_Config>:
* This parameter must be a value between 0x00 and 0x0F.
* @retval None
*/
static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
uint16_t TIM_ICFilter)
{
8001724: b470 push {r4, r5, r6}
uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0;
/* Disable the Channel 4: Reset the CC4E Bit */
TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC4E);
8001726: 8c04 ldrh r4, [r0, #32]
8001728: b2a4 uxth r4, r4
800172a: f424 5480 bic.w r4, r4, #4096 ; 0x1000
800172e: b2a4 uxth r4, r4
8001730: 8404 strh r4, [r0, #32]
tmpccmr2 = TIMx->CCMR2;
8001732: 8b84 ldrh r4, [r0, #28]
tmpccer = TIMx->CCER;
8001734: 8c05 ldrh r5, [r0, #32]
8001736: b2ad uxth r5, r5
tmp = (uint16_t)(TIM_ICPolarity << 12);
8001738: 030e lsls r6, r1, #12
800173a: b2b6 uxth r6, r6
/* Select the Input and set the filter */
tmpccmr2 &= (uint16_t)((uint16_t)(~(uint16_t)TIM_CCMR2_CC4S) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC4F)));
800173c: f424 7440 bic.w r4, r4, #768 ; 0x300
8001740: 0524 lsls r4, r4, #20
8001742: 0d24 lsrs r4, r4, #20
tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8);
8001744: 0212 lsls r2, r2, #8
8001746: b292 uxth r2, r2
8001748: 4314 orrs r4, r2
tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12);
800174a: 031b lsls r3, r3, #12
800174c: b29b uxth r3, r3
800174e: 431c orrs r4, r3
if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
8001750: 4b13 ldr r3, [pc, #76] ; (80017a0 <TI4_Config+0x7c>)
8001752: 4298 cmp r0, r3
8001754: d01d beq.n 8001792 <TI4_Config+0x6e>
8001756: f503 6300 add.w r3, r3, #2048 ; 0x800
800175a: 4298 cmp r0, r3
800175c: d019 beq.n 8001792 <TI4_Config+0x6e>
800175e: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000
8001762: d016 beq.n 8001792 <TI4_Config+0x6e>
8001764: f5a3 3398 sub.w r3, r3, #77824 ; 0x13000
8001768: 4298 cmp r0, r3
800176a: d012 beq.n 8001792 <TI4_Config+0x6e>
800176c: f503 6380 add.w r3, r3, #1024 ; 0x400
8001770: 4298 cmp r0, r3
8001772: d00e beq.n 8001792 <TI4_Config+0x6e>
(TIMx == TIM4) ||(TIMx == TIM5))
8001774: f503 6380 add.w r3, r3, #1024 ; 0x400
8001778: 4298 cmp r0, r3
800177a: d00a beq.n 8001792 <TI4_Config+0x6e>
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E);
}
else
{
/* Select the Polarity and set the CC4E Bit */
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC4NP));
800177c: f425 7500 bic.w r5, r5, #512 ; 0x200
8001780: 046d lsls r5, r5, #17
8001782: 0c6d lsrs r5, r5, #17
tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC4E);
8001784: 4329 orrs r1, r5
8001786: f441 5180 orr.w r1, r1, #4096 ; 0x1000
}
/* Write to TIMx CCMR2 and CCER registers */
TIMx->CCMR2 = tmpccmr2;
800178a: 8384 strh r4, [r0, #28]
TIMx->CCER = tmpccer;
800178c: 8401 strh r1, [r0, #32]
}
800178e: bc70 pop {r4, r5, r6}
8001790: 4770 bx lr
tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC4P));
8001792: f425 5100 bic.w r1, r5, #8192 ; 0x2000
tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E);
8001796: 4331 orrs r1, r6
8001798: f441 5180 orr.w r1, r1, #4096 ; 0x1000
800179c: e7f5 b.n 800178a <TI4_Config+0x66>
800179e: bf00 nop
80017a0: 40012c00 .word 0x40012c00
080017a4 <TIM_TimeBaseInit>:
tmpcr1 = TIMx->CR1;
80017a4: 8803 ldrh r3, [r0, #0]
80017a6: b29b uxth r3, r3
if((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM2) || (TIMx == TIM3)||
80017a8: 4a21 ldr r2, [pc, #132] ; (8001830 <TIM_TimeBaseInit+0x8c>)
80017aa: 4290 cmp r0, r2
80017ac: d012 beq.n 80017d4 <TIM_TimeBaseInit+0x30>
80017ae: f502 6200 add.w r2, r2, #2048 ; 0x800
80017b2: 4290 cmp r0, r2
80017b4: d00e beq.n 80017d4 <TIM_TimeBaseInit+0x30>
80017b6: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000
80017ba: d00b beq.n 80017d4 <TIM_TimeBaseInit+0x30>
80017bc: f5a2 3298 sub.w r2, r2, #77824 ; 0x13000
80017c0: 4290 cmp r0, r2
80017c2: d007 beq.n 80017d4 <TIM_TimeBaseInit+0x30>
80017c4: f502 6280 add.w r2, r2, #1024 ; 0x400
80017c8: 4290 cmp r0, r2
80017ca: d003 beq.n 80017d4 <TIM_TimeBaseInit+0x30>
(TIMx == TIM4) || (TIMx == TIM5))
80017cc: f502 6280 add.w r2, r2, #1024 ; 0x400
80017d0: 4290 cmp r0, r2
80017d2: d103 bne.n 80017dc <TIM_TimeBaseInit+0x38>
tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS)));
80017d4: f023 0370 bic.w r3, r3, #112 ; 0x70
tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_CounterMode;
80017d8: 884a ldrh r2, [r1, #2]
80017da: 4313 orrs r3, r2
if((TIMx != TIM6) && (TIMx != TIM7))
80017dc: 4a15 ldr r2, [pc, #84] ; (8001834 <TIM_TimeBaseInit+0x90>)
80017de: 4290 cmp r0, r2
80017e0: d008 beq.n 80017f4 <TIM_TimeBaseInit+0x50>
80017e2: f502 6280 add.w r2, r2, #1024 ; 0x400
80017e6: 4290 cmp r0, r2
80017e8: d004 beq.n 80017f4 <TIM_TimeBaseInit+0x50>
tmpcr1 &= (uint16_t)(~((uint16_t)TIM_CR1_CKD));
80017ea: f423 7340 bic.w r3, r3, #768 ; 0x300
80017ee: b29b uxth r3, r3
tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_ClockDivision;
80017f0: 88ca ldrh r2, [r1, #6]
80017f2: 4313 orrs r3, r2
TIMx->CR1 = tmpcr1;
80017f4: 8003 strh r3, [r0, #0]
TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ;
80017f6: 888b ldrh r3, [r1, #4]
80017f8: 8583 strh r3, [r0, #44] ; 0x2c
TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler;
80017fa: 880b ldrh r3, [r1, #0]
80017fc: 8503 strh r3, [r0, #40] ; 0x28
if ((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM15)|| (TIMx == TIM16) || (TIMx == TIM17))
80017fe: 4b0c ldr r3, [pc, #48] ; (8001830 <TIM_TimeBaseInit+0x8c>)
8001800: 4298 cmp r0, r3
8001802: d00f beq.n 8001824 <TIM_TimeBaseInit+0x80>
8001804: f503 6300 add.w r3, r3, #2048 ; 0x800
8001808: 4298 cmp r0, r3
800180a: d00b beq.n 8001824 <TIM_TimeBaseInit+0x80>
800180c: f503 6340 add.w r3, r3, #3072 ; 0xc00
8001810: 4298 cmp r0, r3
8001812: d007 beq.n 8001824 <TIM_TimeBaseInit+0x80>
8001814: f503 6380 add.w r3, r3, #1024 ; 0x400
8001818: 4298 cmp r0, r3
800181a: d003 beq.n 8001824 <TIM_TimeBaseInit+0x80>
800181c: f503 6380 add.w r3, r3, #1024 ; 0x400
8001820: 4298 cmp r0, r3
8001822: d101 bne.n 8001828 <TIM_TimeBaseInit+0x84>
TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter;
8001824: 7a0b ldrb r3, [r1, #8]
8001826: 8603 strh r3, [r0, #48] ; 0x30
TIMx->EGR = TIM_PSCReloadMode_Immediate;
8001828: 2301 movs r3, #1
800182a: 8283 strh r3, [r0, #20]
800182c: 4770 bx lr
800182e: bf00 nop
8001830: 40012c00 .word 0x40012c00
8001834: 40001000 .word 0x40001000
08001838 <TIM_OC2Init>:
{
8001838: b430 push {r4, r5}
TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC2E));
800183a: 8c03 ldrh r3, [r0, #32]
800183c: b29b uxth r3, r3
800183e: f023 0310 bic.w r3, r3, #16
8001842: b29b uxth r3, r3
8001844: 8403 strh r3, [r0, #32]
tmpccer = TIMx->CCER;
8001846: 8c03 ldrh r3, [r0, #32]
8001848: b29b uxth r3, r3
tmpcr2 = TIMx->CR2;
800184a: 8885 ldrh r5, [r0, #4]
800184c: b2ad uxth r5, r5
tmpccmrx = TIMx->CCMR1;
800184e: 8b02 ldrh r2, [r0, #24]
8001850: b292 uxth r2, r2
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S));
8001852: f422 44e6 bic.w r4, r2, #29440 ; 0x7300
tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8);
8001856: 880a ldrh r2, [r1, #0]
8001858: 0212 lsls r2, r2, #8
800185a: b292 uxth r2, r2
800185c: 4322 orrs r2, r4
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2P));
800185e: f023 0320 bic.w r3, r3, #32
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4);
8001862: 890c ldrh r4, [r1, #8]
8001864: 0124 lsls r4, r4, #4
8001866: b2a4 uxth r4, r4
8001868: 4323 orrs r3, r4
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 4);
800186a: 884c ldrh r4, [r1, #2]
800186c: 0124 lsls r4, r4, #4
800186e: b2a4 uxth r4, r4
8001870: 4323 orrs r3, r4
if((TIMx == TIM1) || (TIMx == TIM8))
8001872: 4c12 ldr r4, [pc, #72] ; (80018bc <TIM_OC2Init+0x84>)
8001874: 42a0 cmp r0, r4
8001876: d00a beq.n 800188e <TIM_OC2Init+0x56>
8001878: f504 6400 add.w r4, r4, #2048 ; 0x800
800187c: 42a0 cmp r0, r4
800187e: d006 beq.n 800188e <TIM_OC2Init+0x56>
TIMx->CR2 = tmpcr2;
8001880: 8085 strh r5, [r0, #4]
TIMx->CCMR1 = tmpccmrx;
8001882: 8302 strh r2, [r0, #24]
TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse;
8001884: 88ca ldrh r2, [r1, #6]
8001886: 8702 strh r2, [r0, #56] ; 0x38
TIMx->CCER = tmpccer;
8001888: 8403 strh r3, [r0, #32]
}
800188a: bc30 pop {r4, r5}
800188c: 4770 bx lr
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NP));
800188e: f023 0380 bic.w r3, r3, #128 ; 0x80
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4);
8001892: 894c ldrh r4, [r1, #10]
8001894: 0124 lsls r4, r4, #4
8001896: b2a4 uxth r4, r4
8001898: 4323 orrs r3, r4
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NE));
800189a: f023 0440 bic.w r4, r3, #64 ; 0x40
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4);
800189e: 888b ldrh r3, [r1, #4]
80018a0: 011b lsls r3, r3, #4
80018a2: b29b uxth r3, r3
80018a4: 4323 orrs r3, r4
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2N));
80018a6: f425 6540 bic.w r5, r5, #3072 ; 0xc00
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 2);
80018aa: 898c ldrh r4, [r1, #12]
80018ac: 00a4 lsls r4, r4, #2
80018ae: b2a4 uxth r4, r4
80018b0: 4325 orrs r5, r4
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2);
80018b2: 89cc ldrh r4, [r1, #14]
80018b4: 00a4 lsls r4, r4, #2
80018b6: b2a4 uxth r4, r4
80018b8: 4325 orrs r5, r4
80018ba: e7e1 b.n 8001880 <TIM_OC2Init+0x48>
80018bc: 40012c00 .word 0x40012c00
080018c0 <TIM_OC3Init>:
{
80018c0: b430 push {r4, r5}
TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC3E));
80018c2: 8c03 ldrh r3, [r0, #32]
80018c4: b29b uxth r3, r3
80018c6: f423 7380 bic.w r3, r3, #256 ; 0x100
80018ca: b29b uxth r3, r3
80018cc: 8403 strh r3, [r0, #32]
tmpccer = TIMx->CCER;
80018ce: 8c03 ldrh r3, [r0, #32]
80018d0: b29b uxth r3, r3
tmpcr2 = TIMx->CR2;
80018d2: 8885 ldrh r5, [r0, #4]
80018d4: b2ad uxth r5, r5
tmpccmrx = TIMx->CCMR2;
80018d6: 8b82 ldrh r2, [r0, #28]
80018d8: b292 uxth r2, r2
tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC3S));
80018da: f022 0273 bic.w r2, r2, #115 ; 0x73
tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;
80018de: 880c ldrh r4, [r1, #0]
80018e0: 4322 orrs r2, r4
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3P));
80018e2: f423 7300 bic.w r3, r3, #512 ; 0x200
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8);
80018e6: 890c ldrh r4, [r1, #8]
80018e8: 0224 lsls r4, r4, #8
80018ea: b2a4 uxth r4, r4
80018ec: 4323 orrs r3, r4
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8);
80018ee: 884c ldrh r4, [r1, #2]
80018f0: 0224 lsls r4, r4, #8
80018f2: b2a4 uxth r4, r4
80018f4: 4323 orrs r3, r4
if((TIMx == TIM1) || (TIMx == TIM8))
80018f6: 4c12 ldr r4, [pc, #72] ; (8001940 <TIM_OC3Init+0x80>)
80018f8: 42a0 cmp r0, r4
80018fa: d00a beq.n 8001912 <TIM_OC3Init+0x52>
80018fc: f504 6400 add.w r4, r4, #2048 ; 0x800
8001900: 42a0 cmp r0, r4
8001902: d006 beq.n 8001912 <TIM_OC3Init+0x52>
TIMx->CR2 = tmpcr2;
8001904: 8085 strh r5, [r0, #4]
TIMx->CCMR2 = tmpccmrx;
8001906: 8382 strh r2, [r0, #28]
TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse;
8001908: 88ca ldrh r2, [r1, #6]
800190a: 8782 strh r2, [r0, #60] ; 0x3c
TIMx->CCER = tmpccer;
800190c: 8403 strh r3, [r0, #32]
}
800190e: bc30 pop {r4, r5}
8001910: 4770 bx lr
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NP));
8001912: f423 6300 bic.w r3, r3, #2048 ; 0x800
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8);
8001916: 894c ldrh r4, [r1, #10]
8001918: 0224 lsls r4, r4, #8
800191a: b2a4 uxth r4, r4
800191c: 4323 orrs r3, r4
tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NE));
800191e: f423 6480 bic.w r4, r3, #1024 ; 0x400
tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8);
8001922: 888b ldrh r3, [r1, #4]
8001924: 021b lsls r3, r3, #8
8001926: b29b uxth r3, r3
8001928: 4323 orrs r3, r4
tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3N));
800192a: f425 5540 bic.w r5, r5, #12288 ; 0x3000
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4);
800192e: 898c ldrh r4, [r1, #12]
8001930: 0124 lsls r4, r4, #4
8001932: b2a4 uxth r4, r4
8001934: 4325 orrs r5, r4
tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4);
8001936: 89cc ldrh r4, [r1, #14]
8001938: 0124 lsls r4, r4, #4
800193a: b2a4 uxth r4, r4
800193c: 4325 orrs r5, r4
800193e: e7e1 b.n 8001904 <TIM_OC3Init+0x44>
8001940: 40012c00 .word 0x40012c00
08001944 <TIM_Cmd>:
if (NewState != DISABLE)
8001944: b931 cbnz r1, 8001954 <TIM_Cmd+0x10>
TIMx->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN));
8001946: 8803 ldrh r3, [r0, #0]
8001948: b29b uxth r3, r3
800194a: f023 0301 bic.w r3, r3, #1
800194e: b29b uxth r3, r3
8001950: 8003 strh r3, [r0, #0]
8001952: 4770 bx lr
TIMx->CR1 |= TIM_CR1_CEN;
8001954: 8803 ldrh r3, [r0, #0]
8001956: b29b uxth r3, r3
8001958: f043 0301 orr.w r3, r3, #1
800195c: 8003 strh r3, [r0, #0]
800195e: 4770 bx lr
08001960 <TIM_CtrlPWMOutputs>:
if (NewState != DISABLE)
8001960: b931 cbnz r1, 8001970 <TIM_CtrlPWMOutputs+0x10>
TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE));
8001962: f8b0 3044 ldrh.w r3, [r0, #68] ; 0x44
8001966: f3c3 030e ubfx r3, r3, #0, #15
800196a: f8a0 3044 strh.w r3, [r0, #68] ; 0x44
800196e: 4770 bx lr
TIMx->BDTR |= TIM_BDTR_MOE;
8001970: f8b0 3044 ldrh.w r3, [r0, #68] ; 0x44
8001974: ea6f 4343 mvn.w r3, r3, lsl #17
8001978: ea6f 4353 mvn.w r3, r3, lsr #17
800197c: b29b uxth r3, r3
800197e: f8a0 3044 strh.w r3, [r0, #68] ; 0x44
8001982: 4770 bx lr
08001984 <TIM_ITConfig>:
if (NewState != DISABLE)
8001984: b92a cbnz r2, 8001992 <TIM_ITConfig+0xe>
TIMx->DIER &= (uint16_t)~TIM_IT;
8001986: 8983 ldrh r3, [r0, #12]
8001988: 43c9 mvns r1, r1
800198a: b289 uxth r1, r1
800198c: 4019 ands r1, r3
800198e: 8181 strh r1, [r0, #12]
8001990: 4770 bx lr
TIMx->DIER |= TIM_IT;
8001992: 8983 ldrh r3, [r0, #12]
8001994: b29b uxth r3, r3
8001996: 4319 orrs r1, r3
8001998: 8181 strh r1, [r0, #12]
800199a: 4770 bx lr
0800199c <TIM_ARRPreloadConfig>:
if (NewState != DISABLE)
800199c: b931 cbnz r1, 80019ac <TIM_ARRPreloadConfig+0x10>
TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE);
800199e: 8803 ldrh r3, [r0, #0]
80019a0: b29b uxth r3, r3
80019a2: f023 0380 bic.w r3, r3, #128 ; 0x80
80019a6: b29b uxth r3, r3
80019a8: 8003 strh r3, [r0, #0]
80019aa: 4770 bx lr
TIMx->CR1 |= TIM_CR1_ARPE;
80019ac: 8803 ldrh r3, [r0, #0]
80019ae: b29b uxth r3, r3
80019b0: f043 0380 orr.w r3, r3, #128 ; 0x80
80019b4: 8003 strh r3, [r0, #0]
80019b6: 4770 bx lr
080019b8 <TIM_OC2PreloadConfig>:
tmpccmr1 = TIMx->CCMR1;
80019b8: 8b03 ldrh r3, [r0, #24]
80019ba: b29b uxth r3, r3
tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2PE);
80019bc: f423 6300 bic.w r3, r3, #2048 ; 0x800
tmpccmr1 |= (uint16_t)(TIM_OCPreload << 8);
80019c0: 0209 lsls r1, r1, #8
80019c2: b289 uxth r1, r1
80019c4: 430b orrs r3, r1
TIMx->CCMR1 = tmpccmr1;
80019c6: 8303 strh r3, [r0, #24]
80019c8: 4770 bx lr
080019ca <TIM_OC3PreloadConfig>:
tmpccmr2 = TIMx->CCMR2;
80019ca: 8b83 ldrh r3, [r0, #28]
80019cc: b29b uxth r3, r3
tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3PE);
80019ce: f023 0308 bic.w r3, r3, #8
tmpccmr2 |= TIM_OCPreload;
80019d2: 4319 orrs r1, r3
TIMx->CCMR2 = tmpccmr2;
80019d4: 8381 strh r1, [r0, #28]
80019d6: 4770 bx lr
080019d8 <TIM_SetCompare2>:
TIMx->CCR2 = Compare2;
80019d8: 8701 strh r1, [r0, #56] ; 0x38
80019da: 4770 bx lr
080019dc <TIM_SetCompare3>:
TIMx->CCR3 = Compare3;
80019dc: 8781 strh r1, [r0, #60] ; 0x3c
80019de: 4770 bx lr
080019e0 <TIM_SetIC1Prescaler>:
TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC1PSC);
80019e0: 8b03 ldrh r3, [r0, #24]
80019e2: b29b uxth r3, r3
80019e4: f023 030c bic.w r3, r3, #12
80019e8: b29b uxth r3, r3
80019ea: 8303 strh r3, [r0, #24]
TIMx->CCMR1 |= TIM_ICPSC;
80019ec: 8b03 ldrh r3, [r0, #24]
80019ee: b29b uxth r3, r3
80019f0: 4319 orrs r1, r3
80019f2: 8301 strh r1, [r0, #24]
80019f4: 4770 bx lr
080019f6 <TIM_SetIC2Prescaler>:
TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC2PSC);
80019f6: 8b03 ldrh r3, [r0, #24]
80019f8: b29b uxth r3, r3
80019fa: f423 6340 bic.w r3, r3, #3072 ; 0xc00
80019fe: b29b uxth r3, r3
8001a00: 8303 strh r3, [r0, #24]
TIMx->CCMR1 |= (uint16_t)(TIM_ICPSC << 8);
8001a02: 8b03 ldrh r3, [r0, #24]
8001a04: b29b uxth r3, r3
8001a06: 0209 lsls r1, r1, #8
8001a08: b289 uxth r1, r1
8001a0a: 430b orrs r3, r1
8001a0c: 8303 strh r3, [r0, #24]
8001a0e: 4770 bx lr
08001a10 <TIM_SetIC3Prescaler>:
TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC3PSC);
8001a10: 8b83 ldrh r3, [r0, #28]
8001a12: b29b uxth r3, r3
8001a14: f023 030c bic.w r3, r3, #12
8001a18: b29b uxth r3, r3
8001a1a: 8383 strh r3, [r0, #28]
TIMx->CCMR2 |= TIM_ICPSC;
8001a1c: 8b83 ldrh r3, [r0, #28]
8001a1e: b29b uxth r3, r3
8001a20: 4319 orrs r1, r3
8001a22: 8381 strh r1, [r0, #28]
8001a24: 4770 bx lr
08001a26 <TIM_SetIC4Prescaler>:
TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC4PSC);
8001a26: 8b83 ldrh r3, [r0, #28]
8001a28: b29b uxth r3, r3
8001a2a: f423 6340 bic.w r3, r3, #3072 ; 0xc00
8001a2e: b29b uxth r3, r3
8001a30: 8383 strh r3, [r0, #28]
TIMx->CCMR2 |= (uint16_t)(TIM_ICPSC << 8);
8001a32: 8b83 ldrh r3, [r0, #28]
8001a34: b29b uxth r3, r3
8001a36: 0209 lsls r1, r1, #8
8001a38: b289 uxth r1, r1
8001a3a: 430b orrs r3, r1
8001a3c: 8383 strh r3, [r0, #28]
8001a3e: 4770 bx lr
08001a40 <TIM_ICInit>:
{
8001a40: b538 push {r3, r4, r5, lr}
8001a42: 4605 mov r5, r0
8001a44: 460c mov r4, r1
if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
8001a46: 880b ldrh r3, [r1, #0]
8001a48: b16b cbz r3, 8001a66 <TIM_ICInit+0x26>
else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2)
8001a4a: 2b04 cmp r3, #4
8001a4c: d015 beq.n 8001a7a <TIM_ICInit+0x3a>
else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3)
8001a4e: 2b08 cmp r3, #8
8001a50: d01d beq.n 8001a8e <TIM_ICInit+0x4e>
TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
8001a52: 890b ldrh r3, [r1, #8]
8001a54: 888a ldrh r2, [r1, #4]
8001a56: 8849 ldrh r1, [r1, #2]
8001a58: f7ff fe64 bl 8001724 <TI4_Config>
TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
8001a5c: 88e1 ldrh r1, [r4, #6]
8001a5e: 4628 mov r0, r5
8001a60: f7ff ffe1 bl 8001a26 <TIM_SetIC4Prescaler>
8001a64: bd38 pop {r3, r4, r5, pc}
TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
8001a66: 890b ldrh r3, [r1, #8]
8001a68: 888a ldrh r2, [r1, #4]
8001a6a: 8849 ldrh r1, [r1, #2]
8001a6c: f7ff fda8 bl 80015c0 <TI1_Config>
TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
8001a70: 88e1 ldrh r1, [r4, #6]
8001a72: 4628 mov r0, r5
8001a74: f7ff ffb4 bl 80019e0 <TIM_SetIC1Prescaler>
8001a78: bd38 pop {r3, r4, r5, pc}
TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
8001a7a: 890b ldrh r3, [r1, #8]
8001a7c: 888a ldrh r2, [r1, #4]
8001a7e: 8849 ldrh r1, [r1, #2]
8001a80: f7ff fdd8 bl 8001634 <TI2_Config>
TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
8001a84: 88e1 ldrh r1, [r4, #6]
8001a86: 4628 mov r0, r5
8001a88: f7ff ffb5 bl 80019f6 <TIM_SetIC2Prescaler>
8001a8c: bd38 pop {r3, r4, r5, pc}
TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
8001a8e: 890b ldrh r3, [r1, #8]
8001a90: 888a ldrh r2, [r1, #4]
8001a92: 8849 ldrh r1, [r1, #2]
8001a94: f7ff fe0c bl 80016b0 <TI3_Config>
TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
8001a98: 88e1 ldrh r1, [r4, #6]
8001a9a: 4628 mov r0, r5
8001a9c: f7ff ffb8 bl 8001a10 <TIM_SetIC3Prescaler>
8001aa0: bd38 pop {r3, r4, r5, pc}
08001aa2 <TIM_GetITStatus>:
itstatus = TIMx->SR & TIM_IT;
8001aa2: 8a02 ldrh r2, [r0, #16]
itenable = TIMx->DIER & TIM_IT;
8001aa4: 8983 ldrh r3, [r0, #12]
8001aa6: 400b ands r3, r1
if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET))
8001aa8: 4211 tst r1, r2
8001aaa: d002 beq.n 8001ab2 <TIM_GetITStatus+0x10>
8001aac: b91b cbnz r3, 8001ab6 <TIM_GetITStatus+0x14>
bitstatus = RESET;
8001aae: 2000 movs r0, #0
8001ab0: 4770 bx lr
8001ab2: 2000 movs r0, #0
8001ab4: 4770 bx lr
bitstatus = SET;
8001ab6: 2001 movs r0, #1
}
8001ab8: 4770 bx lr
08001aba <TIM_ClearITPendingBit>:
TIMx->SR = (uint16_t)~TIM_IT;
8001aba: 43c9 mvns r1, r1
8001abc: b289 uxth r1, r1
8001abe: 8201 strh r1, [r0, #16]
8001ac0: 4770 bx lr
...
08001ac4 <USART_Init>:
* that contains the configuration information for the specified USART
* peripheral.
* @retval None
*/
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
{
8001ac4: b530 push {r4, r5, lr}
8001ac6: b087 sub sp, #28
8001ac8: 4604 mov r4, r0
8001aca: 460d mov r5, r1
}
usartxbase = (uint32_t)USARTx;
/*---------------------------- USART CR2 Configuration -----------------------*/
tmpreg = USARTx->CR2;
8001acc: 8a03 ldrh r3, [r0, #16]
8001ace: b29b uxth r3, r3
/* Clear STOP[13:12] bits */
tmpreg &= CR2_STOP_CLEAR_Mask;
/* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/
/* Set STOP[13:12] bits according to USART_StopBits value */
tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;
8001ad0: 88ca ldrh r2, [r1, #6]
8001ad2: f423 5340 bic.w r3, r3, #12288 ; 0x3000
8001ad6: 4313 orrs r3, r2
/* Write to USART CR2 */
USARTx->CR2 = (uint16_t)tmpreg;
8001ad8: 8203 strh r3, [r0, #16]
/*---------------------------- USART CR1 Configuration -----------------------*/
tmpreg = USARTx->CR1;
8001ada: 8983 ldrh r3, [r0, #12]
8001adc: b29b uxth r3, r3
tmpreg &= CR1_CLEAR_Mask;
/* Configure the USART Word Length, Parity and mode ----------------------- */
/* Set the M bits according to USART_WordLength value */
/* Set PCE and PS bits according to USART_Parity value */
/* Set TE and RE bits according to USART_Mode value */
tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
8001ade: 8889 ldrh r1, [r1, #4]
8001ae0: 8928 ldrh r0, [r5, #8]
USART_InitStruct->USART_Mode;
8001ae2: 896a ldrh r2, [r5, #10]
tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
8001ae4: 4301 orrs r1, r0
8001ae6: 430a orrs r2, r1
8001ae8: f423 53b0 bic.w r3, r3, #5632 ; 0x1600
8001aec: f023 030c bic.w r3, r3, #12
8001af0: 4313 orrs r3, r2
/* Write to USART CR1 */
USARTx->CR1 = (uint16_t)tmpreg;
8001af2: 81a3 strh r3, [r4, #12]
/*---------------------------- USART CR3 Configuration -----------------------*/
tmpreg = USARTx->CR3;
8001af4: 8aa3 ldrh r3, [r4, #20]
8001af6: b29b uxth r3, r3
/* Clear CTSE and RTSE bits */
tmpreg &= CR3_CLEAR_Mask;
/* Configure the USART HFC -------------------------------------------------*/
/* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
8001af8: 89aa ldrh r2, [r5, #12]
8001afa: f423 7340 bic.w r3, r3, #768 ; 0x300
8001afe: 4313 orrs r3, r2
/* Write to USART CR3 */
USARTx->CR3 = (uint16_t)tmpreg;
8001b00: 82a3 strh r3, [r4, #20]
/*---------------------------- USART BRR Configuration -----------------------*/
/* Configure the USART Baud Rate -------------------------------------------*/
RCC_GetClocksFreq(&RCC_ClocksStatus);
8001b02: a801 add r0, sp, #4
8001b04: f7ff fcd4 bl 80014b0 <RCC_GetClocksFreq>
if (usartxbase == USART1_BASE)
8001b08: 4b1e ldr r3, [pc, #120] ; (8001b84 <USART_Init+0xc0>)
8001b0a: 429c cmp r4, r3
8001b0c: d024 beq.n 8001b58 <USART_Init+0x94>
{
apbclock = RCC_ClocksStatus.PCLK2_Frequency;
}
else
{
apbclock = RCC_ClocksStatus.PCLK1_Frequency;
8001b0e: 9b03 ldr r3, [sp, #12]
}
/* Determine the integer part */
if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
8001b10: 89a2 ldrh r2, [r4, #12]
8001b12: f412 4f00 tst.w r2, #32768 ; 0x8000
8001b16: d121 bne.n 8001b5c <USART_Init+0x98>
integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));
}
else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
{
/* Integer part computing in case Oversampling mode is 16 Samples */
integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));
8001b18: eb03 0383 add.w r3, r3, r3, lsl #2
8001b1c: eb03 0383 add.w r3, r3, r3, lsl #2
8001b20: 6829 ldr r1, [r5, #0]
8001b22: 0089 lsls r1, r1, #2
8001b24: fbb3 f1f1 udiv r1, r3, r1
}
tmpreg = (integerdivider / 100) << 4;
8001b28: 4b17 ldr r3, [pc, #92] ; (8001b88 <USART_Init+0xc4>)
8001b2a: fba3 2301 umull r2, r3, r3, r1
8001b2e: 0958 lsrs r0, r3, #5
8001b30: 0105 lsls r5, r0, #4
/* Determine the fractional part */
fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
8001b32: 2364 movs r3, #100 ; 0x64
8001b34: fb00 1313 mls r3, r0, r3, r1
/* Implement the fractional part in the register */
if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
8001b38: 89a2 ldrh r2, [r4, #12]
8001b3a: f412 4f00 tst.w r2, #32768 ; 0x8000
8001b3e: d116 bne.n 8001b6e <USART_Init+0xaa>
{
tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
}
else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
{
tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
8001b40: 011b lsls r3, r3, #4
8001b42: 3332 adds r3, #50 ; 0x32
8001b44: 4a10 ldr r2, [pc, #64] ; (8001b88 <USART_Init+0xc4>)
8001b46: fba2 2303 umull r2, r3, r2, r3
8001b4a: f3c3 1343 ubfx r3, r3, #5, #4
8001b4e: 432b orrs r3, r5
}
/* Write to USART BRR */
USARTx->BRR = (uint16_t)tmpreg;
8001b50: b29b uxth r3, r3
8001b52: 8123 strh r3, [r4, #8]
}
8001b54: b007 add sp, #28
8001b56: bd30 pop {r4, r5, pc}
apbclock = RCC_ClocksStatus.PCLK2_Frequency;
8001b58: 9b04 ldr r3, [sp, #16]
8001b5a: e7d9 b.n 8001b10 <USART_Init+0x4c>
integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));
8001b5c: eb03 0383 add.w r3, r3, r3, lsl #2
8001b60: eb03 0383 add.w r3, r3, r3, lsl #2
8001b64: 6829 ldr r1, [r5, #0]
8001b66: 0049 lsls r1, r1, #1
8001b68: fbb3 f1f1 udiv r1, r3, r1
8001b6c: e7dc b.n 8001b28 <USART_Init+0x64>
tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
8001b6e: 00d9 lsls r1, r3, #3
8001b70: 3132 adds r1, #50 ; 0x32
8001b72: 4a05 ldr r2, [pc, #20] ; (8001b88 <USART_Init+0xc4>)
8001b74: fba2 3101 umull r3, r1, r2, r1
8001b78: f3c1 1242 ubfx r2, r1, #5, #3
8001b7c: ea45 0302 orr.w r3, r5, r2
8001b80: e7e6 b.n 8001b50 <USART_Init+0x8c>
8001b82: bf00 nop
8001b84: 40013800 .word 0x40013800
8001b88: 51eb851f .word 0x51eb851f
08001b8c <USART_Cmd>:
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
8001b8c: b931 cbnz r1, 8001b9c <USART_Cmd+0x10>
USARTx->CR1 |= CR1_UE_Set;
}
else
{
/* Disable the selected USART by clearing the UE bit in the CR1 register */
USARTx->CR1 &= CR1_UE_Reset;
8001b8e: 8983 ldrh r3, [r0, #12]
8001b90: b29b uxth r3, r3
8001b92: f423 5300 bic.w r3, r3, #8192 ; 0x2000
8001b96: b29b uxth r3, r3
8001b98: 8183 strh r3, [r0, #12]
8001b9a: 4770 bx lr
USARTx->CR1 |= CR1_UE_Set;
8001b9c: 8983 ldrh r3, [r0, #12]
8001b9e: b29b uxth r3, r3
8001ba0: f443 5300 orr.w r3, r3, #8192 ; 0x2000
8001ba4: 8183 strh r3, [r0, #12]
8001ba6: 4770 bx lr
08001ba8 <USART_ITConfig>:
* @param NewState: new state of the specified USARTx interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
{
8001ba8: b410 push {r4}
}
usartxbase = (uint32_t)USARTx;
/* Get the USART register index */
usartreg = (((uint8_t)USART_IT) >> 0x05);
8001baa: f3c1 1442 ubfx r4, r1, #5, #3
/* Get the interrupt position */
itpos = USART_IT & IT_Mask;
8001bae: f001 011f and.w r1, r1, #31
itmask = (((uint32_t)0x01) << itpos);
8001bb2: 2301 movs r3, #1
8001bb4: fa03 f101 lsl.w r1, r3, r1
if (usartreg == 0x01) /* The IT is in CR1 register */
8001bb8: 429c cmp r4, r3
8001bba: d009 beq.n 8001bd0 <USART_ITConfig+0x28>
{
usartxbase += 0x0C;
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
8001bbc: 2c02 cmp r4, #2
8001bbe: d009 beq.n 8001bd4 <USART_ITConfig+0x2c>
{
usartxbase += 0x10;
}
else /* The IT is in CR3 register */
{
usartxbase += 0x14;
8001bc0: 3014 adds r0, #20
}
if (NewState != DISABLE)
8001bc2: b94a cbnz r2, 8001bd8 <USART_ITConfig+0x30>
{
*(__IO uint32_t*)usartxbase |= itmask;
}
else
{
*(__IO uint32_t*)usartxbase &= ~itmask;
8001bc4: 6803 ldr r3, [r0, #0]
8001bc6: ea23 0101 bic.w r1, r3, r1
8001bca: 6001 str r1, [r0, #0]
}
}
8001bcc: bc10 pop {r4}
8001bce: 4770 bx lr
usartxbase += 0x0C;
8001bd0: 300c adds r0, #12
8001bd2: e7f6 b.n 8001bc2 <USART_ITConfig+0x1a>
usartxbase += 0x10;
8001bd4: 3010 adds r0, #16
8001bd6: e7f4 b.n 8001bc2 <USART_ITConfig+0x1a>
*(__IO uint32_t*)usartxbase |= itmask;
8001bd8: 6803 ldr r3, [r0, #0]
8001bda: 4319 orrs r1, r3
8001bdc: 6001 str r1, [r0, #0]
8001bde: e7f5 b.n 8001bcc <USART_ITConfig+0x24>
08001be0 <USART_DMACmd>:
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DMAREQ(USART_DMAReq));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
8001be0: b92a cbnz r2, 8001bee <USART_DMACmd+0xe>
}
else
{
/* Disable the DMA transfer for selected requests by clearing the DMAT and/or
DMAR bits in the USART CR3 register */
USARTx->CR3 &= (uint16_t)~USART_DMAReq;
8001be2: 8a83 ldrh r3, [r0, #20]
8001be4: 43c9 mvns r1, r1
8001be6: b289 uxth r1, r1
8001be8: 4019 ands r1, r3
8001bea: 8281 strh r1, [r0, #20]
8001bec: 4770 bx lr
USARTx->CR3 |= USART_DMAReq;
8001bee: 8a83 ldrh r3, [r0, #20]
8001bf0: b29b uxth r3, r3
8001bf2: 4319 orrs r1, r3
8001bf4: 8281 strh r1, [r0, #20]
8001bf6: 4770 bx lr
08001bf8 <USART_ReceiveData>:
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Receive Data */
return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
8001bf8: 8880 ldrh r0, [r0, #4]
}
8001bfa: f3c0 0008 ubfx r0, r0, #0, #9
8001bfe: 4770 bx lr
08001c00 <USART_ClearFlag>:
if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
USARTx->SR = (uint16_t)~USART_FLAG;
8001c00: 43c9 mvns r1, r1
8001c02: b289 uxth r1, r1
8001c04: 8001 strh r1, [r0, #0]
8001c06: 4770 bx lr
08001c08 <USART_GetITStatus>:
* @arg USART_IT_FE: Framing Error interrupt
* @arg USART_IT_PE: Parity Error interrupt
* @retval The new state of USART_IT (SET or RESET).
*/
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
{
8001c08: b410 push {r4}
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
/* Get the USART register index */
usartreg = (((uint8_t)USART_IT) >> 0x05);
8001c0a: f3c1 1242 ubfx r2, r1, #5, #3
/* Get the interrupt position */
itmask = USART_IT & IT_Mask;
8001c0e: f001 041f and.w r4, r1, #31
itmask = (uint32_t)0x01 << itmask;
8001c12: 2301 movs r3, #1
8001c14: 40a3 lsls r3, r4
if (usartreg == 0x01) /* The IT is in CR1 register */
8001c16: 2a01 cmp r2, #1
8001c18: d00f beq.n 8001c3a <USART_GetITStatus+0x32>
{
itmask &= USARTx->CR1;
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
8001c1a: 2a02 cmp r2, #2
8001c1c: d011 beq.n 8001c42 <USART_GetITStatus+0x3a>
{
itmask &= USARTx->CR2;
}
else /* The IT is in CR3 register */
{
itmask &= USARTx->CR3;
8001c1e: 8a82 ldrh r2, [r0, #20]
8001c20: b292 uxth r2, r2
8001c22: 4013 ands r3, r2
}
bitpos = USART_IT >> 0x08;
8001c24: 0a09 lsrs r1, r1, #8
bitpos = (uint32_t)0x01 << bitpos;
8001c26: 2201 movs r2, #1
8001c28: fa02 f101 lsl.w r1, r2, r1
bitpos &= USARTx->SR;
8001c2c: 8802 ldrh r2, [r0, #0]
8001c2e: b292 uxth r2, r2
8001c30: 4011 ands r1, r2
if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
8001c32: b153 cbz r3, 8001c4a <USART_GetITStatus+0x42>
8001c34: b961 cbnz r1, 8001c50 <USART_GetITStatus+0x48>
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
8001c36: 2000 movs r0, #0
8001c38: e008 b.n 8001c4c <USART_GetITStatus+0x44>
itmask &= USARTx->CR1;
8001c3a: 8982 ldrh r2, [r0, #12]
8001c3c: b292 uxth r2, r2
8001c3e: 4013 ands r3, r2
8001c40: e7f0 b.n 8001c24 <USART_GetITStatus+0x1c>
itmask &= USARTx->CR2;
8001c42: 8a02 ldrh r2, [r0, #16]
8001c44: b292 uxth r2, r2
8001c46: 4013 ands r3, r2
8001c48: e7ec b.n 8001c24 <USART_GetITStatus+0x1c>
bitstatus = RESET;
8001c4a: 2000 movs r0, #0
}
return bitstatus;
}
8001c4c: bc10 pop {r4}
8001c4e: 4770 bx lr
bitstatus = SET;
8001c50: 2001 movs r0, #1
8001c52: e7fb b.n 8001c4c <USART_GetITStatus+0x44>
08001c54 <batteryConfigure>:
* @retval None
*
*/
void batteryConfigure(void)
{
8001c54: b5f0 push {r4, r5, r6, r7, lr}
8001c56: b08b sub sp, #44 ; 0x2c
GPIO_InitTypeDef Init_Structure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
Init_Structure.GPIO_Pin = GPIO_Pin_3;
8001c58: 2608 movs r6, #8
8001c5a: f8ad 6024 strh.w r6, [sp, #36] ; 0x24
Init_Structure.GPIO_Speed = GPIO_Speed_10MHz;
8001c5e: 2401 movs r4, #1
8001c60: f88d 4026 strb.w r4, [sp, #38] ; 0x26
Init_Structure.GPIO_Mode = GPIO_Mode_AF_PP;
8001c64: 2318 movs r3, #24
8001c66: f88d 3027 strb.w r3, [sp, #39] ; 0x27
GPIO_Init(GPIOA, &Init_Structure);
8001c6a: 4f4a ldr r7, [pc, #296] ; (8001d94 <batteryConfigure+0x140>)
8001c6c: a909 add r1, sp, #36 ; 0x24
8001c6e: 4638 mov r0, r7
8001c70: f7ff fb6c bl 800134c <GPIO_Init>
// Configure les PIN A0,A4 en input floating.
Init_Structure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_4;
8001c74: 2311 movs r3, #17
8001c76: f8ad 3024 strh.w r3, [sp, #36] ; 0x24
Init_Structure.GPIO_Mode = GPIO_Mode_AIN;
8001c7a: 2500 movs r5, #0
8001c7c: f88d 5027 strb.w r5, [sp, #39] ; 0x27
GPIO_Init(GPIOA, &Init_Structure);
8001c80: a909 add r1, sp, #36 ; 0x24
8001c82: 4638 mov r0, r7
8001c84: f7ff fb62 bl 800134c <GPIO_Init>
// Configure PB11 en input pullup
Init_Structure.GPIO_Pin = GPIO_Pin_11;
8001c88: f44f 6700 mov.w r7, #2048 ; 0x800
8001c8c: f8ad 7024 strh.w r7, [sp, #36] ; 0x24
Init_Structure.GPIO_Mode = GPIO_Mode_IPU;
8001c90: 2348 movs r3, #72 ; 0x48
8001c92: f88d 3027 strb.w r3, [sp, #39] ; 0x27
GPIO_Init(GPIOB, &Init_Structure);
8001c96: a909 add r1, sp, #36 ; 0x24
8001c98: 483f ldr r0, [pc, #252] ; (8001d98 <batteryConfigure+0x144>)
8001c9a: f7ff fb57 bl 800134c <GPIO_Init>
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource11);
8001c9e: 210b movs r1, #11
8001ca0: 4620 mov r0, r4
8001ca2: f7ff fbe1 bl 8001468 <GPIO_EXTILineConfig>
EXTI_InitStructure.EXTI_Line = EXTI_Line11;
8001ca6: 9706 str r7, [sp, #24]
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
8001ca8: f88d 501c strb.w r5, [sp, #28]
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
8001cac: f88d 601d strb.w r6, [sp, #29]
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
8001cb0: f88d 401e strb.w r4, [sp, #30]
EXTI_Init(&EXTI_InitStructure);
8001cb4: a806 add r0, sp, #24
8001cb6: f7ff fb03 bl 80012c0 <EXTI_Init>
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
8001cba: 2328 movs r3, #40 ; 0x28
8001cbc: f88d 3020 strb.w r3, [sp, #32]
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
8001cc0: 2303 movs r3, #3
8001cc2: f88d 3021 strb.w r3, [sp, #33] ; 0x21
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
8001cc6: f88d 5022 strb.w r5, [sp, #34] ; 0x22
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
8001cca: f88d 4023 strb.w r4, [sp, #35] ; 0x23
NVIC_Init(&NVIC_InitStructure);
8001cce: a808 add r0, sp, #32
8001cd0: f7ff f92c bl 8000f2c <NVIC_Init>
// Initialise la dma pour stocker les valeur dans ADCConvertedValue.
DMA_DeInit(DMA1_Channel1);
8001cd4: f106 4680 add.w r6, r6, #1073741824 ; 0x40000000
8001cd8: f506 3600 add.w r6, r6, #131072 ; 0x20000
8001cdc: 4630 mov r0, r6
8001cde: f7ff f9f3 bl 80010c8 <DMA_DeInit>
DMA_BAT_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR); // ADC1_DR_Address;
8001ce2: 492e ldr r1, [pc, #184] ; (8001d9c <batteryConfigure+0x148>)
8001ce4: 4b2e ldr r3, [pc, #184] ; (8001da0 <batteryConfigure+0x14c>)
8001ce6: 600b str r3, [r1, #0]
DMA_BAT_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
8001ce8: 4b2e ldr r3, [pc, #184] ; (8001da4 <batteryConfigure+0x150>)
8001cea: 604b str r3, [r1, #4]
DMA_BAT_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
8001cec: 608d str r5, [r1, #8]
DMA_BAT_InitStructure.DMA_BufferSize = VOLTAGE_BUFFER_SIZE; // voir schèmas ci dessus
8001cee: 2340 movs r3, #64 ; 0x40
8001cf0: 60cb str r3, [r1, #12]
DMA_BAT_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
8001cf2: 610d str r5, [r1, #16]
DMA_BAT_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
8001cf4: 2380 movs r3, #128 ; 0x80
8001cf6: 614b str r3, [r1, #20]
DMA_BAT_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
8001cf8: f44f 7380 mov.w r3, #256 ; 0x100
8001cfc: 618b str r3, [r1, #24]
DMA_BAT_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
8001cfe: f44f 6380 mov.w r3, #1024 ; 0x400
8001d02: 61cb str r3, [r1, #28]
DMA_BAT_InitStructure.DMA_Mode = DMA_Mode_Normal;
8001d04: 620d str r5, [r1, #32]
DMA_BAT_InitStructure.DMA_Priority = DMA_Priority_High;
8001d06: f44f 5300 mov.w r3, #8192 ; 0x2000
8001d0a: 624b str r3, [r1, #36] ; 0x24
DMA_BAT_InitStructure.DMA_M2M = DMA_M2M_Disable;
8001d0c: 628d str r5, [r1, #40] ; 0x28
DMA_Init(DMA1_Channel1, &DMA_BAT_InitStructure);
8001d0e: 4630 mov r0, r6
8001d10: f7ff fa6e bl 80011f0 <DMA_Init>
DMA_Cmd(DMA1_Channel1, ENABLE);
8001d14: 4621 mov r1, r4
8001d16: 4630 mov r0, r6
8001d18: f7ff fa89 bl 800122e <DMA_Cmd>
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
8001d1c: 4622 mov r2, r4
8001d1e: 2102 movs r1, #2
8001d20: 4630 mov r0, r6
8001d22: f7ff fa91 bl 8001248 <DMA_ITConfig>
// Configuration et Calibration de l'ADC1 sur 1 channel.
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
8001d26: 9501 str r5, [sp, #4]
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
8001d28: f88d 4008 strb.w r4, [sp, #8]
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
8001d2c: f88d 4009 strb.w r4, [sp, #9]
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
8001d30: f44f 2360 mov.w r3, #917504 ; 0xe0000
8001d34: 9303 str r3, [sp, #12]
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
8001d36: 9504 str r5, [sp, #16]
ADC_InitStructure.ADC_NbrOfChannel = 1;
8001d38: f88d 4014 strb.w r4, [sp, #20]
ADC_Init(ADC1, &ADC_InitStructure);
8001d3c: 4e1a ldr r6, [pc, #104] ; (8001da8 <batteryConfigure+0x154>)
8001d3e: a901 add r1, sp, #4
8001d40: 4630 mov r0, r6
8001d42: f7ff f927 bl 8000f94 <ADC_Init>
/* ADC1 regular channel1 configuration */
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_71Cycles5);
8001d46: 2306 movs r3, #6
8001d48: 4622 mov r2, r4
8001d4a: 4629 mov r1, r5
8001d4c: 4630 mov r0, r6
8001d4e: f7ff f973 bl 8001038 <ADC_RegularChannelConfig>
/* Start ADC1 Software Conversion */
ADC_Cmd(ADC1, ENABLE);
8001d52: 4621 mov r1, r4
8001d54: 4630 mov r0, r6
8001d56: f7ff f941 bl 8000fdc <ADC_Cmd>
ADC_StartCalibration(ADC1);
8001d5a: 4630 mov r0, r6
8001d5c: f7ff f954 bl 8001008 <ADC_StartCalibration>
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
8001d60: 4811 ldr r0, [pc, #68] ; (8001da8 <batteryConfigure+0x154>)
8001d62: f7ff f956 bl 8001012 <ADC_GetCalibrationStatus>
8001d66: 2800 cmp r0, #0
8001d68: d1fa bne.n 8001d60 <batteryConfigure+0x10c>
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
8001d6a: 2101 movs r1, #1
8001d6c: 480e ldr r0, [pc, #56] ; (8001da8 <batteryConfigure+0x154>)
8001d6e: f7ff f958 bl 8001022 <ADC_SoftwareStartConvCmd>
/* Enable the ADC1 DMA Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
8001d72: 230b movs r3, #11
8001d74: f88d 3020 strb.w r3, [sp, #32]
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
8001d78: 2302 movs r3, #2
8001d7a: f88d 3021 strb.w r3, [sp, #33] ; 0x21
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
8001d7e: 2300 movs r3, #0
8001d80: f88d 3022 strb.w r3, [sp, #34] ; 0x22
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
8001d84: 2301 movs r3, #1
8001d86: f88d 3023 strb.w r3, [sp, #35] ; 0x23
NVIC_Init(&NVIC_InitStructure);
8001d8a: a808 add r0, sp, #32
8001d8c: f7ff f8ce bl 8000f2c <NVIC_Init>
}
8001d90: b00b add sp, #44 ; 0x2c
8001d92: bdf0 pop {r4, r5, r6, r7, pc}
8001d94: 40010800 .word 0x40010800
8001d98: 40010c00 .word 0x40010c00
8001d9c: 20000238 .word 0x20000238
8001da0: 4001244c .word 0x4001244c
8001da4: 20000264 .word 0x20000264
8001da8: 40012400 .word 0x40012400
08001dac <batteryStartAcquisition>:
* @retval None
*
*/
void batteryStartAcquisition(void)
{
8001dac: b510 push {r4, lr}
ADC_DMACmd(ADC1, ENABLE);
8001dae: 2101 movs r1, #1
8001db0: 480a ldr r0, [pc, #40] ; (8001ddc <batteryStartAcquisition+0x30>)
8001db2: f7ff f91e bl 8000ff2 <ADC_DMACmd>
DMA_DeInit(DMA1_Channel1);
8001db6: 4c0a ldr r4, [pc, #40] ; (8001de0 <batteryStartAcquisition+0x34>)
8001db8: 4620 mov r0, r4
8001dba: f7ff f985 bl 80010c8 <DMA_DeInit>
DMA_Init(DMA1_Channel1, &DMA_BAT_InitStructure);
8001dbe: 4909 ldr r1, [pc, #36] ; (8001de4 <batteryStartAcquisition+0x38>)
8001dc0: 4620 mov r0, r4
8001dc2: f7ff fa15 bl 80011f0 <DMA_Init>
DMA_Cmd(DMA1_Channel1, ENABLE);
8001dc6: 2101 movs r1, #1
8001dc8: 4620 mov r0, r4
8001dca: f7ff fa30 bl 800122e <DMA_Cmd>
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
8001dce: 2201 movs r2, #1
8001dd0: 2102 movs r1, #2
8001dd2: 4620 mov r0, r4
8001dd4: f7ff fa38 bl 8001248 <DMA_ITConfig>
8001dd8: bd10 pop {r4, pc}
8001dda: bf00 nop
8001ddc: 40012400 .word 0x40012400
8001de0: 40020008 .word 0x40020008
8001de4: 20000238 .word 0x20000238
08001de8 <batteryRefreshData>:
* @retval None
*
*/
void batteryRefreshData(void)
{
8001de8: b510 push {r4, lr}
DMA_BAT_InitStructure.DMA_BufferSize = VOLTAGE_BUFFER_SIZE;
8001dea: 2240 movs r2, #64 ; 0x40
8001dec: 4b07 ldr r3, [pc, #28] ; (8001e0c <batteryRefreshData+0x24>)
8001dee: 60da str r2, [r3, #12]
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_55Cycles5);
8001df0: 4c07 ldr r4, [pc, #28] ; (8001e10 <batteryRefreshData+0x28>)
8001df2: 2305 movs r3, #5
8001df4: 2201 movs r2, #1
8001df6: 2104 movs r1, #4
8001df8: 4620 mov r0, r4
8001dfa: f7ff f91d bl 8001038 <ADC_RegularChannelConfig>
ADC_Cmd(ADC1, ENABLE);
8001dfe: 2101 movs r1, #1
8001e00: 4620 mov r0, r4
8001e02: f7ff f8eb bl 8000fdc <ADC_Cmd>
batteryStartAcquisition();
8001e06: f7ff ffd1 bl 8001dac <batteryStartAcquisition>
8001e0a: bd10 pop {r4, pc}
8001e0c: 20000238 .word 0x20000238
8001e10: 40012400 .word 0x40012400
08001e14 <batteryManagement>:
* @brief Appelé de manière régulière pour mettre à jour le niveau batterie
*
* @param None
* @retval None
*/
void batteryManagement(void) {
8001e14: b508 push {r3, lr}
int k;
if(Dumber.acquisition==VOLTAGE && Dumber.BatterieChecking==TRUE) {
8001e16: 4b42 ldr r3, [pc, #264] ; (8001f20 <batteryManagement+0x10c>)
8001e18: 7d1b ldrb r3, [r3, #20]
8001e1a: 2b62 cmp r3, #98 ; 0x62
8001e1c: d000 beq.n 8001e20 <batteryManagement+0xc>
8001e1e: bd08 pop {r3, pc}
8001e20: 4b3f ldr r3, [pc, #252] ; (8001f20 <batteryManagement+0x10c>)
8001e22: 799b ldrb r3, [r3, #6]
8001e24: 2b28 cmp r3, #40 ; 0x28
8001e26: d1fa bne.n 8001e1e <batteryManagement+0xa>
vbatLowerVal = 0xFFF;
8001e28: f640 72ff movw r2, #4095 ; 0xfff
8001e2c: 4b3d ldr r3, [pc, #244] ; (8001f24 <batteryManagement+0x110>)
8001e2e: 801a strh r2, [r3, #0]
vbatHighVal = 0;
8001e30: 2200 movs r2, #0
8001e32: 4b3d ldr r3, [pc, #244] ; (8001f28 <batteryManagement+0x114>)
8001e34: 801a strh r2, [r3, #0]
for(k=0; k<VOLTAGE_BUFFER_SIZE; k++)
8001e36: e000 b.n 8001e3a <batteryManagement+0x26>
8001e38: 3201 adds r2, #1
8001e3a: 2a3f cmp r2, #63 ; 0x3f
8001e3c: dc13 bgt.n 8001e66 <batteryManagement+0x52>
{
meanVoltage+=ADCConvertedValue[k];
8001e3e: 4b3b ldr r3, [pc, #236] ; (8001f2c <batteryManagement+0x118>)
8001e40: f833 3012 ldrh.w r3, [r3, r2, lsl #1]
8001e44: 483a ldr r0, [pc, #232] ; (8001f30 <batteryManagement+0x11c>)
8001e46: 6801 ldr r1, [r0, #0]
8001e48: 4419 add r1, r3
8001e4a: 6001 str r1, [r0, #0]
if (vbatLowerVal> ADCConvertedValue[k]) vbatLowerVal = ADCConvertedValue[k];
8001e4c: 4935 ldr r1, [pc, #212] ; (8001f24 <batteryManagement+0x110>)
8001e4e: 8809 ldrh r1, [r1, #0]
8001e50: 428b cmp r3, r1
8001e52: d201 bcs.n 8001e58 <batteryManagement+0x44>
8001e54: 4933 ldr r1, [pc, #204] ; (8001f24 <batteryManagement+0x110>)
8001e56: 800b strh r3, [r1, #0]
if (vbatHighVal< ADCConvertedValue[k]) vbatHighVal = ADCConvertedValue[k];
8001e58: 4933 ldr r1, [pc, #204] ; (8001f28 <batteryManagement+0x114>)
8001e5a: 8809 ldrh r1, [r1, #0]
8001e5c: 428b cmp r3, r1
8001e5e: d9eb bls.n 8001e38 <batteryManagement+0x24>
8001e60: 4931 ldr r1, [pc, #196] ; (8001f28 <batteryManagement+0x114>)
8001e62: 800b strh r3, [r1, #0]
8001e64: e7e8 b.n 8001e38 <batteryManagement+0x24>
}
vbatDiff = vbatHighVal - vbatLowerVal;
8001e66: 4b30 ldr r3, [pc, #192] ; (8001f28 <batteryManagement+0x114>)
8001e68: 881b ldrh r3, [r3, #0]
8001e6a: 4a2e ldr r2, [pc, #184] ; (8001f24 <batteryManagement+0x110>)
8001e6c: 8812 ldrh r2, [r2, #0]
8001e6e: 1a9b subs r3, r3, r2
8001e70: 4a30 ldr r2, [pc, #192] ; (8001f34 <batteryManagement+0x120>)
8001e72: 8013 strh r3, [r2, #0]
meanVoltage= meanVoltage/VOLTAGE_BUFFER_SIZE;
8001e74: 4a2e ldr r2, [pc, #184] ; (8001f30 <batteryManagement+0x11c>)
8001e76: 6813 ldr r3, [r2, #0]
8001e78: 099b lsrs r3, r3, #6
8001e7a: 6013 str r3, [r2, #0]
mesureVoltage = meanVoltage;
8001e7c: 4a2e ldr r2, [pc, #184] ; (8001f38 <batteryManagement+0x124>)
8001e7e: 6013 str r3, [r2, #0]
Dumber.BatteryPercentage = mesureVoltage;
8001e80: b29b uxth r3, r3
8001e82: 4a27 ldr r2, [pc, #156] ; (8001f20 <batteryManagement+0x10c>)
8001e84: 8013 strh r3, [r2, #0]
Dumber.acquisition=FALSE;
8001e86: 2132 movs r1, #50 ; 0x32
8001e88: 7511 strb r1, [r2, #20]
if(Dumber.BatteryPercentage >= VBAT_SEUIL_LOW)
8001e8a: f640 0277 movw r2, #2167 ; 0x877
8001e8e: 4293 cmp r3, r2
8001e90: d91b bls.n 8001eca <batteryManagement+0xb6>
{
cptMesureHigh++;
8001e92: 4a2a ldr r2, [pc, #168] ; (8001f3c <batteryManagement+0x128>)
8001e94: 7813 ldrb r3, [r2, #0]
8001e96: 3301 adds r3, #1
8001e98: b2db uxtb r3, r3
8001e9a: 7013 strb r3, [r2, #0]
if(cptMesureHigh >= COMPTEUR_SEUIL_HIGH)
8001e9c: 2b07 cmp r3, #7
8001e9e: d9be bls.n 8001e1e <batteryManagement+0xa>
{
if(Dumber.StateSystem == STATE_LOW)
8001ea0: 4b1f ldr r3, [pc, #124] ; (8001f20 <batteryManagement+0x10c>)
8001ea2: 791b ldrb r3, [r3, #4]
8001ea4: 2b02 cmp r3, #2
8001ea6: d00c beq.n 8001ec2 <batteryManagement+0xae>
systemChangeState(STATE_RUN);
Dumber.stateBattery = 2;
8001ea8: 2202 movs r2, #2
8001eaa: 4b1d ldr r3, [pc, #116] ; (8001f20 <batteryManagement+0x10c>)
8001eac: 755a strb r2, [r3, #21]
cptMesureHigh=0;
8001eae: 2300 movs r3, #0
8001eb0: 4a22 ldr r2, [pc, #136] ; (8001f3c <batteryManagement+0x128>)
8001eb2: 7013 strb r3, [r2, #0]
cptMesureLow=0;
8001eb4: 4a22 ldr r2, [pc, #136] ; (8001f40 <batteryManagement+0x12c>)
8001eb6: 7013 strb r3, [r2, #0]
cptMesureDisable=0;
8001eb8: 4a22 ldr r2, [pc, #136] ; (8001f44 <batteryManagement+0x130>)
8001eba: 7013 strb r3, [r2, #0]
cptMesureEmergencyHalt=0;
8001ebc: 4a22 ldr r2, [pc, #136] ; (8001f48 <batteryManagement+0x134>)
8001ebe: 6013 str r3, [r2, #0]
8001ec0: bd08 pop {r3, pc}
systemChangeState(STATE_RUN);
8001ec2: 2001 movs r0, #1
8001ec4: f000 ff9c bl 8002e00 <systemChangeState>
8001ec8: e7ee b.n 8001ea8 <batteryManagement+0x94>
}
}
else if (Dumber.BatteryPercentage < VBAT_SEUIL_LOW && Dumber.BatteryPercentage >= VBAT_SEUIL_DISABLE)
8001eca: f2a3 73ca subw r3, r3, #1994 ; 0x7ca
8001ece: b29b uxth r3, r3
8001ed0: 2bad cmp r3, #173 ; 0xad
8001ed2: d819 bhi.n 8001f08 <batteryManagement+0xf4>
{
cptMesureLow++;
8001ed4: 4a1a ldr r2, [pc, #104] ; (8001f40 <batteryManagement+0x12c>)
8001ed6: 7813 ldrb r3, [r2, #0]
8001ed8: 3301 adds r3, #1
8001eda: b2db uxtb r3, r3
8001edc: 7013 strb r3, [r2, #0]
if(cptMesureLow >= COMPTEUR_SEUIL_LOW)
8001ede: 2b07 cmp r3, #7
8001ee0: d99d bls.n 8001e1e <batteryManagement+0xa>
{
if(Dumber.StateSystem == STATE_RUN)
8001ee2: 4b0f ldr r3, [pc, #60] ; (8001f20 <batteryManagement+0x10c>)
8001ee4: 791b ldrb r3, [r3, #4]
8001ee6: 2b01 cmp r3, #1
8001ee8: d00a beq.n 8001f00 <batteryManagement+0xec>
systemChangeState(STATE_LOW);
Dumber.stateBattery =1;
8001eea: 2201 movs r2, #1
8001eec: 4b0c ldr r3, [pc, #48] ; (8001f20 <batteryManagement+0x10c>)
8001eee: 755a strb r2, [r3, #21]
cptMesureHigh=0;
8001ef0: 2300 movs r3, #0
8001ef2: 4a12 ldr r2, [pc, #72] ; (8001f3c <batteryManagement+0x128>)
8001ef4: 7013 strb r3, [r2, #0]
cptMesureLow=0;
8001ef6: 4a12 ldr r2, [pc, #72] ; (8001f40 <batteryManagement+0x12c>)
8001ef8: 7013 strb r3, [r2, #0]
cptMesureDisable=0;
8001efa: 4a12 ldr r2, [pc, #72] ; (8001f44 <batteryManagement+0x130>)
8001efc: 7013 strb r3, [r2, #0]
8001efe: bd08 pop {r3, pc}
systemChangeState(STATE_LOW);
8001f00: 2002 movs r0, #2
8001f02: f000 ff7d bl 8002e00 <systemChangeState>
8001f06: e7f0 b.n 8001eea <batteryManagement+0xd6>
}
}
else // Dumber.BatteryPercentage < VBAT_SEUIL_DISABLE
{
cptMesureDisable++;
8001f08: 4a0e ldr r2, [pc, #56] ; (8001f44 <batteryManagement+0x130>)
8001f0a: 7813 ldrb r3, [r2, #0]
8001f0c: 3301 adds r3, #1
8001f0e: b2db uxtb r3, r3
8001f10: 7013 strb r3, [r2, #0]
if(cptMesureDisable >= COMPTEUR_SEUIL_DISABLE)
8001f12: 2b07 cmp r3, #7
8001f14: d983 bls.n 8001e1e <batteryManagement+0xa>
{
systemChangeState(STATE_DISABLE);
8001f16: 2003 movs r0, #3
8001f18: f000 ff72 bl 8002e00 <systemChangeState>
}
}
}
}
8001f1c: e77f b.n 8001e1e <batteryManagement+0xa>
8001f1e: bf00 nop
8001f20: 20000330 .word 0x20000330
8001f24: 200002ec .word 0x200002ec
8001f28: 200002e4 .word 0x200002e4
8001f2c: 20000264 .word 0x20000264
8001f30: 200002f0 .word 0x200002f0
8001f34: 200002f4 .word 0x200002f4
8001f38: 200002e8 .word 0x200002e8
8001f3c: 20000210 .word 0x20000210
8001f40: 20000211 .word 0x20000211
8001f44: 20000208 .word 0x20000208
8001f48: 2000020c .word 0x2000020c
08001f4c <DMA1_Channel1_IRQHandler>:
* @param None
* @retval None
*
*/
void DMA1_Channel1_IRQHandler(void)
{
8001f4c: b508 push {r3, lr}
//Test on DMA1 Channel1 Transfer Complete interrupt
if (DMA_GetITStatus(DMA1_IT_TC1))
8001f4e: 2002 movs r0, #2
8001f50: f7ff f996 bl 8001280 <DMA_GetITStatus>
8001f54: b900 cbnz r0, 8001f58 <DMA1_Channel1_IRQHandler+0xc>
8001f56: bd08 pop {r3, pc}
{
Dumber.BatterieChecking=TRUE;
8001f58: 2228 movs r2, #40 ; 0x28
8001f5a: 4b03 ldr r3, [pc, #12] ; (8001f68 <DMA1_Channel1_IRQHandler+0x1c>)
8001f5c: 719a strb r2, [r3, #6]
//Clear DMA1 Channel1 Half Transfer, Transfer Complete and Global interrupt pending bits
DMA_ClearITPendingBit(DMA1_IT_GL1);
8001f5e: 2001 movs r0, #1
8001f60: f7ff f9a0 bl 80012a4 <DMA_ClearITPendingBit>
}
}
8001f64: e7f7 b.n 8001f56 <DMA1_Channel1_IRQHandler+0xa>
8001f66: bf00 nop
8001f68: 20000330 .word 0x20000330
08001f6c <EXTI15_10_IRQHandler>:
* @param None
* @retval None
*
*/
void EXTI15_10_IRQHandler(void)
{
8001f6c: b508 push {r3, lr}
systemShutDown();
8001f6e: f000 ff3d bl 8002dec <systemShutDown>
8001f72: e7fe b.n 8001f72 <EXTI15_10_IRQHandler+0x6>
08001f74 <cmdAddChecksum>:
* @retval 0 ou 1
*
*/
void cmdAddChecksum(void) {
uint16_t j;
unsigned char checksum=0;
8001f74: 2100 movs r1, #0
for (j = 0; sendString[j] != '\r'; j++)
8001f76: 460b mov r3, r1
8001f78: e002 b.n 8001f80 <cmdAddChecksum+0xc>
checksum ^= sendString[j];
8001f7a: 4051 eors r1, r2
for (j = 0; sendString[j] != '\r'; j++)
8001f7c: 3301 adds r3, #1
8001f7e: b29b uxth r3, r3
8001f80: 4618 mov r0, r3
8001f82: 4a07 ldr r2, [pc, #28] ; (8001fa0 <cmdAddChecksum+0x2c>)
8001f84: 5cd2 ldrb r2, [r2, r3]
8001f86: 2a0d cmp r2, #13
8001f88: d1f7 bne.n 8001f7a <cmdAddChecksum+0x6>
if (checksum == '\r')
8001f8a: 290d cmp r1, #13
8001f8c: d005 beq.n 8001f9a <cmdAddChecksum+0x26>
checksum++;
sendString[j] = checksum;
8001f8e: 4b04 ldr r3, [pc, #16] ; (8001fa0 <cmdAddChecksum+0x2c>)
8001f90: 5419 strb r1, [r3, r0]
sendString[j + 1] = '\r';
8001f92: 3001 adds r0, #1
8001f94: 220d movs r2, #13
8001f96: 541a strb r2, [r3, r0]
8001f98: 4770 bx lr
checksum++;
8001f9a: 3101 adds r1, #1
8001f9c: b2c9 uxtb r1, r1
8001f9e: e7f6 b.n 8001f8e <cmdAddChecksum+0x1a>
8001fa0: 20000370 .word 0x20000370
08001fa4 <cmdVerifyChecksum>:
* sinon il retournera 1 sans faire de modification.
* @param None
* @retval 0 ou 1
*
*/
char cmdVerifyChecksum(void) {
8001fa4: b538 push {r3, r4, r5, lr}
uint16_t j;
uint16_t length;
unsigned char checksum=0;
length = strlen(receiptString);
8001fa6: 4811 ldr r0, [pc, #68] ; (8001fec <cmdVerifyChecksum+0x48>)
8001fa8: f7fe f8d2 bl 8000150 <strlen>
unsigned char checksum=0;
8001fac: 2200 movs r2, #0
for (j = 0; j < length - 2; j++) {
8001fae: 4613 mov r3, r2
8001fb0: e004 b.n 8001fbc <cmdVerifyChecksum+0x18>
checksum ^= receiptString[j];
8001fb2: 490e ldr r1, [pc, #56] ; (8001fec <cmdVerifyChecksum+0x48>)
8001fb4: 5cc9 ldrb r1, [r1, r3]
8001fb6: 404a eors r2, r1
for (j = 0; j < length - 2; j++) {
8001fb8: 3301 adds r3, #1
8001fba: b29b uxth r3, r3
8001fbc: 461d mov r5, r3
8001fbe: b281 uxth r1, r0
8001fc0: 1e8c subs r4, r1, #2
8001fc2: 42a3 cmp r3, r4
8001fc4: dbf5 blt.n 8001fb2 <cmdVerifyChecksum+0xe>
}
if (checksum == '\r')
8001fc6: 2a0d cmp r2, #13
8001fc8: d005 beq.n 8001fd6 <cmdVerifyChecksum+0x32>
checksum++;
if (receiptString[j] == checksum) {
8001fca: 4b08 ldr r3, [pc, #32] ; (8001fec <cmdVerifyChecksum+0x48>)
8001fcc: 5d5b ldrb r3, [r3, r5]
8001fce: 429a cmp r2, r3
8001fd0: d004 beq.n 8001fdc <cmdVerifyChecksum+0x38>
receiptString[length - 1] = 0;
receiptString[length] = 0;
return 0;
} else
return 1;
8001fd2: 2001 movs r0, #1
}
8001fd4: bd38 pop {r3, r4, r5, pc}
checksum++;
8001fd6: 3201 adds r2, #1
8001fd8: b2d2 uxtb r2, r2
8001fda: e7f6 b.n 8001fca <cmdVerifyChecksum+0x26>
receiptString[length - 2] = 13;
8001fdc: 4b03 ldr r3, [pc, #12] ; (8001fec <cmdVerifyChecksum+0x48>)
8001fde: 220d movs r2, #13
8001fe0: 551a strb r2, [r3, r4]
receiptString[length - 1] = 0;
8001fe2: 1e4a subs r2, r1, #1
8001fe4: 2000 movs r0, #0
8001fe6: 5498 strb r0, [r3, r2]
receiptString[length] = 0;
8001fe8: 5458 strb r0, [r3, r1]
return 0;
8001fea: bd38 pop {r3, r4, r5, pc}
8001fec: 2000034c .word 0x2000034c
08001ff0 <cmdPingAction>:
* @param None
* @retval None
*/
void cmdPingAction(void) {
if (receiptString[1] == '\r')
8001ff0: 4b08 ldr r3, [pc, #32] ; (8002014 <cmdPingAction+0x24>)
8001ff2: 785b ldrb r3, [r3, #1]
8001ff4: 2b0d cmp r3, #13
8001ff6: d006 beq.n 8002006 <cmdPingAction+0x16>
strcpy(sendString, OK_ANS);
else
strcpy(sendString, ERR_ANS);
8001ff8: 4b07 ldr r3, [pc, #28] ; (8002018 <cmdPingAction+0x28>)
8001ffa: 4a08 ldr r2, [pc, #32] ; (800201c <cmdPingAction+0x2c>)
8001ffc: 8811 ldrh r1, [r2, #0]
8001ffe: 7892 ldrb r2, [r2, #2]
8002000: 8019 strh r1, [r3, #0]
8002002: 709a strb r2, [r3, #2]
8002004: 4770 bx lr
strcpy(sendString, OK_ANS);
8002006: 4b04 ldr r3, [pc, #16] ; (8002018 <cmdPingAction+0x28>)
8002008: 4a05 ldr r2, [pc, #20] ; (8002020 <cmdPingAction+0x30>)
800200a: 8811 ldrh r1, [r2, #0]
800200c: 7892 ldrb r2, [r2, #2]
800200e: 8019 strh r1, [r3, #0]
8002010: 709a strb r2, [r3, #2]
8002012: 4770 bx lr
8002014: 2000034c .word 0x2000034c
8002018: 20000370 .word 0x20000370
800201c: 08004098 .word 0x08004098
8002020: 08004094 .word 0x08004094
08002024 <cmdResetAction>:
* Retourne OK_ANS si success dans sendString. Sinon return ERR_ANS.
*
* @param None
* @retval None
*/
void cmdResetAction(void) {
8002024: b508 push {r3, lr}
systemChangeState(STATE_IDLE);
8002026: 2000 movs r0, #0
8002028: f000 feea bl 8002e00 <systemChangeState>
strcpy(sendString, OK_ANS);
800202c: 4b03 ldr r3, [pc, #12] ; (800203c <cmdResetAction+0x18>)
800202e: 4a04 ldr r2, [pc, #16] ; (8002040 <cmdResetAction+0x1c>)
8002030: 8811 ldrh r1, [r2, #0]
8002032: 7892 ldrb r2, [r2, #2]
8002034: 8019 strh r1, [r3, #0]
8002036: 709a strb r2, [r3, #2]
8002038: bd08 pop {r3, pc}
800203a: bf00 nop
800203c: 20000370 .word 0x20000370
8002040: 08004094 .word 0x08004094
08002044 <cmdVersionAction>:
* Retourne la version du soft dans sendString.
* @param None
* @retval None
*/
void cmdVersionAction(void) {
if (receiptString[1] == '\r')
8002044: 4b0a ldr r3, [pc, #40] ; (8002070 <cmdVersionAction+0x2c>)
8002046: 785b ldrb r3, [r3, #1]
8002048: 2b0d cmp r3, #13
800204a: d006 beq.n 800205a <cmdVersionAction+0x16>
strcpy(sendString, VERSION);
else
strcpy(sendString, ERR_ANS);
800204c: 4b09 ldr r3, [pc, #36] ; (8002074 <cmdVersionAction+0x30>)
800204e: 4a0a ldr r2, [pc, #40] ; (8002078 <cmdVersionAction+0x34>)
8002050: 8811 ldrh r1, [r2, #0]
8002052: 7892 ldrb r2, [r2, #2]
8002054: 8019 strh r1, [r3, #0]
8002056: 709a strb r2, [r3, #2]
}
8002058: 4770 bx lr
void cmdVersionAction(void) {
800205a: b410 push {r4}
strcpy(sendString, VERSION);
800205c: 4c05 ldr r4, [pc, #20] ; (8002074 <cmdVersionAction+0x30>)
800205e: 4b07 ldr r3, [pc, #28] ; (800207c <cmdVersionAction+0x38>)
8002060: cb07 ldmia r3!, {r0, r1, r2}
8002062: 6020 str r0, [r4, #0]
8002064: 6061 str r1, [r4, #4]
8002066: 60a2 str r2, [r4, #8]
8002068: 781b ldrb r3, [r3, #0]
800206a: 7323 strb r3, [r4, #12]
}
800206c: bc10 pop {r4}
800206e: 4770 bx lr
8002070: 2000034c .word 0x2000034c
8002074: 20000370 .word 0x20000370
8002078: 08004098 .word 0x08004098
800207c: 080040a4 .word 0x080040a4
08002080 <cmdBusyStateAction>:
*
* @param None
* @retval None
*/
void cmdBusyStateAction(void) {
if ((Dumber.StateSystem == STATE_RUN) || (Dumber.StateSystem == STATE_LOW)) {
8002080: 4b0f ldr r3, [pc, #60] ; (80020c0 <cmdBusyStateAction+0x40>)
8002082: 791b ldrb r3, [r3, #4]
8002084: 3b01 subs r3, #1
8002086: b2db uxtb r3, r3
8002088: 2b01 cmp r3, #1
800208a: d906 bls.n 800209a <cmdBusyStateAction+0x1a>
if (Dumber.busyState == TRUE)
strcpy(sendString, "1\r");
else
strcpy(sendString, "0\r");
} else {
strcpy(sendString, ERR_ANS);
800208c: 4b0d ldr r3, [pc, #52] ; (80020c4 <cmdBusyStateAction+0x44>)
800208e: 4a0e ldr r2, [pc, #56] ; (80020c8 <cmdBusyStateAction+0x48>)
8002090: 8811 ldrh r1, [r2, #0]
8002092: 7892 ldrb r2, [r2, #2]
8002094: 8019 strh r1, [r3, #0]
8002096: 709a strb r2, [r3, #2]
8002098: 4770 bx lr
if (Dumber.busyState == TRUE)
800209a: 4b09 ldr r3, [pc, #36] ; (80020c0 <cmdBusyStateAction+0x40>)
800209c: 7bdb ldrb r3, [r3, #15]
800209e: 2b28 cmp r3, #40 ; 0x28
80020a0: d006 beq.n 80020b0 <cmdBusyStateAction+0x30>
strcpy(sendString, "0\r");
80020a2: 4b08 ldr r3, [pc, #32] ; (80020c4 <cmdBusyStateAction+0x44>)
80020a4: 4a09 ldr r2, [pc, #36] ; (80020cc <cmdBusyStateAction+0x4c>)
80020a6: 8811 ldrh r1, [r2, #0]
80020a8: 7892 ldrb r2, [r2, #2]
80020aa: 8019 strh r1, [r3, #0]
80020ac: 709a strb r2, [r3, #2]
80020ae: 4770 bx lr
strcpy(sendString, "1\r");
80020b0: 4b04 ldr r3, [pc, #16] ; (80020c4 <cmdBusyStateAction+0x44>)
80020b2: 4a07 ldr r2, [pc, #28] ; (80020d0 <cmdBusyStateAction+0x50>)
80020b4: 8811 ldrh r1, [r2, #0]
80020b6: 7892 ldrb r2, [r2, #2]
80020b8: 8019 strh r1, [r3, #0]
80020ba: 709a strb r2, [r3, #2]
80020bc: 4770 bx lr
80020be: bf00 nop
80020c0: 20000330 .word 0x20000330
80020c4: 20000370 .word 0x20000370
80020c8: 08004098 .word 0x08004098
80020cc: 08004064 .word 0x08004064
80020d0: 08004060 .word 0x08004060
080020d4 <cmdResetWatchdogAction>:
* @brief Effectue une remise à zéro du watchdog.
*
* @param None
* @retval None
*/
void cmdResetWatchdogAction(void) {
80020d4: b508 push {r3, lr}
if (systemResetWatchdog()!=0) { // Réussite
80020d6: f000 ff03 bl 8002ee0 <systemResetWatchdog>
80020da: b930 cbnz r0, 80020ea <cmdResetWatchdogAction+0x16>
strcpy(sendString, OK_ANS);
} else strcpy(sendString, ERR_ANS);
80020dc: 4b06 ldr r3, [pc, #24] ; (80020f8 <cmdResetWatchdogAction+0x24>)
80020de: 4a07 ldr r2, [pc, #28] ; (80020fc <cmdResetWatchdogAction+0x28>)
80020e0: 8811 ldrh r1, [r2, #0]
80020e2: 7892 ldrb r2, [r2, #2]
80020e4: 8019 strh r1, [r3, #0]
80020e6: 709a strb r2, [r3, #2]
80020e8: bd08 pop {r3, pc}
strcpy(sendString, OK_ANS);
80020ea: 4b03 ldr r3, [pc, #12] ; (80020f8 <cmdResetWatchdogAction+0x24>)
80020ec: 4a04 ldr r2, [pc, #16] ; (8002100 <cmdResetWatchdogAction+0x2c>)
80020ee: 8811 ldrh r1, [r2, #0]
80020f0: 7892 ldrb r2, [r2, #2]
80020f2: 8019 strh r1, [r3, #0]
80020f4: 709a strb r2, [r3, #2]
80020f6: bd08 pop {r3, pc}
80020f8: 20000370 .word 0x20000370
80020fc: 08004098 .word 0x08004098
8002100: 08004094 .word 0x08004094
08002104 <cmdStartWithWatchdogAction>:
* Qu'il faut remettre à zero entre 950ms et 1050ms.
*
* @param None
* @retval None
*/
void cmdStartWithWatchdogAction(void) {
8002104: b508 push {r3, lr}
if (Dumber.StateSystem == STATE_IDLE && receiptString[1] == '\r') {
8002106: 4b0d ldr r3, [pc, #52] ; (800213c <cmdStartWithWatchdogAction+0x38>)
8002108: 791b ldrb r3, [r3, #4]
800210a: b91b cbnz r3, 8002114 <cmdStartWithWatchdogAction+0x10>
800210c: 4b0c ldr r3, [pc, #48] ; (8002140 <cmdStartWithWatchdogAction+0x3c>)
800210e: 785b ldrb r3, [r3, #1]
8002110: 2b0d cmp r3, #13
8002112: d006 beq.n 8002122 <cmdStartWithWatchdogAction+0x1e>
Dumber.WatchDogStartEnable = TRUE;
systemChangeState(STATE_RUN);
strcpy(sendString, OK_ANS);
} else
strcpy(sendString, ERR_ANS);
8002114: 4b0b ldr r3, [pc, #44] ; (8002144 <cmdStartWithWatchdogAction+0x40>)
8002116: 4a0c ldr r2, [pc, #48] ; (8002148 <cmdStartWithWatchdogAction+0x44>)
8002118: 8811 ldrh r1, [r2, #0]
800211a: 7892 ldrb r2, [r2, #2]
800211c: 8019 strh r1, [r3, #0]
800211e: 709a strb r2, [r3, #2]
8002120: bd08 pop {r3, pc}
Dumber.WatchDogStartEnable = TRUE;
8002122: 2228 movs r2, #40 ; 0x28
8002124: 4b05 ldr r3, [pc, #20] ; (800213c <cmdStartWithWatchdogAction+0x38>)
8002126: 729a strb r2, [r3, #10]
systemChangeState(STATE_RUN);
8002128: 2001 movs r0, #1
800212a: f000 fe69 bl 8002e00 <systemChangeState>
strcpy(sendString, OK_ANS);
800212e: 4b05 ldr r3, [pc, #20] ; (8002144 <cmdStartWithWatchdogAction+0x40>)
8002130: 4a06 ldr r2, [pc, #24] ; (800214c <cmdStartWithWatchdogAction+0x48>)
8002132: 8811 ldrh r1, [r2, #0]
8002134: 7892 ldrb r2, [r2, #2]
8002136: 8019 strh r1, [r3, #0]
8002138: 709a strb r2, [r3, #2]
800213a: bd08 pop {r3, pc}
800213c: 20000330 .word 0x20000330
8002140: 2000034c .word 0x2000034c
8002144: 20000370 .word 0x20000370
8002148: 08004098 .word 0x08004098
800214c: 08004094 .word 0x08004094
08002150 <cmdStartWithoutWatchdogAction>:
* Necessite que dumby soit en mode IDLE au prealable.
*
* @param None
* @retval None
*/
void cmdStartWithoutWatchdogAction(void) {
8002150: b508 push {r3, lr}
if (Dumber.StateSystem == STATE_IDLE && receiptString[1] == '\r') {
8002152: 4b0d ldr r3, [pc, #52] ; (8002188 <cmdStartWithoutWatchdogAction+0x38>)
8002154: 791b ldrb r3, [r3, #4]
8002156: b91b cbnz r3, 8002160 <cmdStartWithoutWatchdogAction+0x10>
8002158: 4b0c ldr r3, [pc, #48] ; (800218c <cmdStartWithoutWatchdogAction+0x3c>)
800215a: 785b ldrb r3, [r3, #1]
800215c: 2b0d cmp r3, #13
800215e: d006 beq.n 800216e <cmdStartWithoutWatchdogAction+0x1e>
Dumber.WatchDogStartEnable = FALSE;
systemChangeState(STATE_RUN);
strcpy(sendString, OK_ANS);
} else
strcpy(sendString, ERR_ANS);
8002160: 4b0b ldr r3, [pc, #44] ; (8002190 <cmdStartWithoutWatchdogAction+0x40>)
8002162: 4a0c ldr r2, [pc, #48] ; (8002194 <cmdStartWithoutWatchdogAction+0x44>)
8002164: 8811 ldrh r1, [r2, #0]
8002166: 7892 ldrb r2, [r2, #2]
8002168: 8019 strh r1, [r3, #0]
800216a: 709a strb r2, [r3, #2]
800216c: bd08 pop {r3, pc}
Dumber.WatchDogStartEnable = FALSE;
800216e: 2232 movs r2, #50 ; 0x32
8002170: 4b05 ldr r3, [pc, #20] ; (8002188 <cmdStartWithoutWatchdogAction+0x38>)
8002172: 729a strb r2, [r3, #10]
systemChangeState(STATE_RUN);
8002174: 2001 movs r0, #1
8002176: f000 fe43 bl 8002e00 <systemChangeState>
strcpy(sendString, OK_ANS);
800217a: 4b05 ldr r3, [pc, #20] ; (8002190 <cmdStartWithoutWatchdogAction+0x40>)
800217c: 4a06 ldr r2, [pc, #24] ; (8002198 <cmdStartWithoutWatchdogAction+0x48>)
800217e: 8811 ldrh r1, [r2, #0]
8002180: 7892 ldrb r2, [r2, #2]
8002182: 8019 strh r1, [r3, #0]
8002184: 709a strb r2, [r3, #2]
8002186: bd08 pop {r3, pc}
8002188: 20000330 .word 0x20000330
800218c: 2000034c .word 0x2000034c
8002190: 20000370 .word 0x20000370
8002194: 08004098 .word 0x08004098
8002198: 08004094 .word 0x08004094
0800219c <cmdMoveAction>:
*
* @param NSTART_WITH_WDone
* @retval None
*/
void cmdMoveAction(void) {
if (Dumber.StateSystem == STATE_RUN || Dumber.StateSystem == STATE_LOW) {
800219c: 4b1e ldr r3, [pc, #120] ; (8002218 <cmdMoveAction+0x7c>)
800219e: 791b ldrb r3, [r3, #4]
80021a0: 3b01 subs r3, #1
80021a2: b2db uxtb r3, r3
80021a4: 2b01 cmp r3, #1
80021a6: d900 bls.n 80021aa <cmdMoveAction+0xe>
80021a8: 4770 bx lr
void cmdMoveAction(void) {
80021aa: b500 push {lr}
80021ac: b085 sub sp, #20
int laps;
uint16_t testReception = sscanf(receiptString, "M=%i\r", &laps);
80021ae: aa03 add r2, sp, #12
80021b0: 491a ldr r1, [pc, #104] ; (800221c <cmdMoveAction+0x80>)
80021b2: 481b ldr r0, [pc, #108] ; (8002220 <cmdMoveAction+0x84>)
80021b4: f001 f946 bl 8003444 <siscanf>
80021b8: b280 uxth r0, r0
unsigned char mod = 0;
tourPositionG = 0;
80021ba: 2300 movs r3, #0
80021bc: 4a19 ldr r2, [pc, #100] ; (8002224 <cmdMoveAction+0x88>)
80021be: 8013 strh r3, [r2, #0]
tourPositionD = 0;
80021c0: 4a19 ldr r2, [pc, #100] ; (8002228 <cmdMoveAction+0x8c>)
80021c2: 8013 strh r3, [r2, #0]
if (testReception == 1) {
80021c4: 2801 cmp r0, #1
80021c6: d008 beq.n 80021da <cmdMoveAction+0x3e>
motorRegulation(mod, mod, (unsigned) laps, (unsigned) laps,
COMMONSPEED, COMMONSPEED);
strcpy(sendString, OK_ANS);
} else
strcpy(sendString, ERR_ANS);
80021c8: 4b18 ldr r3, [pc, #96] ; (800222c <cmdMoveAction+0x90>)
80021ca: 4a19 ldr r2, [pc, #100] ; (8002230 <cmdMoveAction+0x94>)
80021cc: 8811 ldrh r1, [r2, #0]
80021ce: 7892 ldrb r2, [r2, #2]
80021d0: 8019 strh r1, [r3, #0]
80021d2: 709a strb r2, [r3, #2]
}
}
80021d4: b005 add sp, #20
80021d6: f85d fb04 ldr.w pc, [sp], #4
Dumber.cpt_inactivity = 0;
80021da: 4b0f ldr r3, [pc, #60] ; (8002218 <cmdMoveAction+0x7c>)
80021dc: 2200 movs r2, #0
80021de: 611a str r2, [r3, #16]
Dumber.busyState = TRUE;
80021e0: 2228 movs r2, #40 ; 0x28
80021e2: 73da strb r2, [r3, #15]
if (laps < 0) {
80021e4: 9b03 ldr r3, [sp, #12]
80021e6: 2b00 cmp r3, #0
80021e8: db12 blt.n 8002210 <cmdMoveAction+0x74>
mod = FORWARD;
80021ea: 200b movs r0, #11
laps = laps * 2;
80021ec: 9a03 ldr r2, [sp, #12]
80021ee: 0052 lsls r2, r2, #1
80021f0: 9203 str r2, [sp, #12]
motorRegulation(mod, mod, (unsigned) laps, (unsigned) laps,
80021f2: b292 uxth r2, r2
80021f4: 2305 movs r3, #5
80021f6: 9301 str r3, [sp, #4]
80021f8: 9300 str r3, [sp, #0]
80021fa: 4613 mov r3, r2
80021fc: 4601 mov r1, r0
80021fe: f000 fba9 bl 8002954 <motorRegulation>
strcpy(sendString, OK_ANS);
8002202: 4b0a ldr r3, [pc, #40] ; (800222c <cmdMoveAction+0x90>)
8002204: 4a0b ldr r2, [pc, #44] ; (8002234 <cmdMoveAction+0x98>)
8002206: 8811 ldrh r1, [r2, #0]
8002208: 7892 ldrb r2, [r2, #2]
800220a: 8019 strh r1, [r3, #0]
800220c: 709a strb r2, [r3, #2]
800220e: e7e1 b.n 80021d4 <cmdMoveAction+0x38>
laps = laps * -1;
8002210: 425b negs r3, r3
8002212: 9303 str r3, [sp, #12]
mod = REVERSE;
8002214: 200c movs r0, #12
8002216: e7e9 b.n 80021ec <cmdMoveAction+0x50>
8002218: 20000330 .word 0x20000330
800221c: 0800408c .word 0x0800408c
8002220: 2000034c .word 0x2000034c
8002224: 20000328 .word 0x20000328
8002228: 20000318 .word 0x20000318
800222c: 20000370 .word 0x20000370
8002230: 08004098 .word 0x08004098
8002234: 08004094 .word 0x08004094
08002238 <cmdTurnAction>:
*
* @param None
* @retval None
*/
void cmdTurnAction(void) {
if (Dumber.StateSystem == STATE_RUN || Dumber.StateSystem == STATE_LOW) {
8002238: 4b29 ldr r3, [pc, #164] ; (80022e0 <cmdTurnAction+0xa8>)
800223a: 791b ldrb r3, [r3, #4]
800223c: 3b01 subs r3, #1
800223e: b2db uxtb r3, r3
8002240: 2b01 cmp r3, #1
8002242: d900 bls.n 8002246 <cmdTurnAction+0xe>
8002244: 4770 bx lr
void cmdTurnAction(void) {
8002246: b500 push {lr}
8002248: b085 sub sp, #20
int degree;
uint16_t testReception = sscanf(receiptString, "T=%i\r", &degree);
800224a: aa03 add r2, sp, #12
800224c: 4925 ldr r1, [pc, #148] ; (80022e4 <cmdTurnAction+0xac>)
800224e: 4826 ldr r0, [pc, #152] ; (80022e8 <cmdTurnAction+0xb0>)
8002250: f001 f8f8 bl 8003444 <siscanf>
8002254: b280 uxth r0, r0
tourPositionG = 0;
8002256: 2300 movs r3, #0
8002258: 4a24 ldr r2, [pc, #144] ; (80022ec <cmdTurnAction+0xb4>)
800225a: 8013 strh r3, [r2, #0]
tourPositionD = 0;
800225c: 4a24 ldr r2, [pc, #144] ; (80022f0 <cmdTurnAction+0xb8>)
800225e: 8013 strh r3, [r2, #0]
if (testReception == 1) {
8002260: 2801 cmp r0, #1
8002262: d008 beq.n 8002276 <cmdTurnAction+0x3e>
motorRegulation(REVERSE, FORWARD, (unsigned) degree,
(unsigned) degree, LOWSPEED, LOWSPEED);
}
strcpy(sendString, OK_ANS);
} else
strcpy(sendString, ERR_ANS);
8002264: 4b23 ldr r3, [pc, #140] ; (80022f4 <cmdTurnAction+0xbc>)
8002266: 4a24 ldr r2, [pc, #144] ; (80022f8 <cmdTurnAction+0xc0>)
8002268: 8811 ldrh r1, [r2, #0]
800226a: 7892 ldrb r2, [r2, #2]
800226c: 8019 strh r1, [r3, #0]
800226e: 709a strb r2, [r3, #2]
}
}
8002270: b005 add sp, #20
8002272: f85d fb04 ldr.w pc, [sp], #4
degree = degree * 1.40;
8002276: 9803 ldr r0, [sp, #12]
8002278: f7fe f8c4 bl 8000404 <__aeabi_i2d>
800227c: a316 add r3, pc, #88 ; (adr r3, 80022d8 <cmdTurnAction+0xa0>)
800227e: e9d3 2300 ldrd r2, r3, [r3]
8002282: f7fe f925 bl 80004d0 <__aeabi_dmul>
8002286: f7fe fb35 bl 80008f4 <__aeabi_d2iz>
800228a: 9003 str r0, [sp, #12]
Dumber.cpt_inactivity = 0;
800228c: 4b14 ldr r3, [pc, #80] ; (80022e0 <cmdTurnAction+0xa8>)
800228e: 2200 movs r2, #0
8002290: 611a str r2, [r3, #16]
Dumber.busyState = TRUE;
8002292: 2228 movs r2, #40 ; 0x28
8002294: 73da strb r2, [r3, #15]
if (degree < 0) {
8002296: 2800 cmp r0, #0
8002298: db0f blt.n 80022ba <cmdTurnAction+0x82>
motorRegulation(REVERSE, FORWARD, (unsigned) degree,
800229a: b282 uxth r2, r0
800229c: 2302 movs r3, #2
800229e: 9301 str r3, [sp, #4]
80022a0: 9300 str r3, [sp, #0]
80022a2: 4613 mov r3, r2
80022a4: 210b movs r1, #11
80022a6: 200c movs r0, #12
80022a8: f000 fb54 bl 8002954 <motorRegulation>
strcpy(sendString, OK_ANS);
80022ac: 4b11 ldr r3, [pc, #68] ; (80022f4 <cmdTurnAction+0xbc>)
80022ae: 4a13 ldr r2, [pc, #76] ; (80022fc <cmdTurnAction+0xc4>)
80022b0: 8811 ldrh r1, [r2, #0]
80022b2: 7892 ldrb r2, [r2, #2]
80022b4: 8019 strh r1, [r3, #0]
80022b6: 709a strb r2, [r3, #2]
80022b8: e7da b.n 8002270 <cmdTurnAction+0x38>
degree = degree * -1;
80022ba: 4242 negs r2, r0
80022bc: 9203 str r2, [sp, #12]
motorRegulation(FORWARD, REVERSE, (unsigned) degree,
80022be: b292 uxth r2, r2
80022c0: 2302 movs r3, #2
80022c2: 9301 str r3, [sp, #4]
80022c4: 9300 str r3, [sp, #0]
80022c6: 4613 mov r3, r2
80022c8: 210c movs r1, #12
80022ca: 200b movs r0, #11
80022cc: f000 fb42 bl 8002954 <motorRegulation>
80022d0: e7ec b.n 80022ac <cmdTurnAction+0x74>
80022d2: bf00 nop
80022d4: f3af 8000 nop.w
80022d8: 66666666 .word 0x66666666
80022dc: 3ff66666 .word 0x3ff66666
80022e0: 20000330 .word 0x20000330
80022e4: 0800409c .word 0x0800409c
80022e8: 2000034c .word 0x2000034c
80022ec: 20000328 .word 0x20000328
80022f0: 20000318 .word 0x20000318
80022f4: 20000370 .word 0x20000370
80022f8: 08004098 .word 0x08004098
80022fc: 08004094 .word 0x08004094
08002300 <cmdBatteryVoltageAction>:
* Lorsque la batterie est vide, la valeur retournée est 0.
*
* @param None
* @retval None
*/
void cmdBatteryVoltageAction(void) {
8002300: b500 push {lr}
8002302: b083 sub sp, #12
char battery[2];
battery[0] = Dumber.stateBattery + '0';
8002304: 4b07 ldr r3, [pc, #28] ; (8002324 <cmdBatteryVoltageAction+0x24>)
8002306: 7d5b ldrb r3, [r3, #21]
8002308: 3330 adds r3, #48 ; 0x30
800230a: f88d 3004 strb.w r3, [sp, #4]
battery[1] = '\r';
800230e: 230d movs r3, #13
8002310: f88d 3005 strb.w r3, [sp, #5]
strcpy(sendString, battery);
8002314: a901 add r1, sp, #4
8002316: 4804 ldr r0, [pc, #16] ; (8002328 <cmdBatteryVoltageAction+0x28>)
8002318: f001 f8c0 bl 800349c <strcpy>
}
800231c: b003 add sp, #12
800231e: f85d fb04 ldr.w pc, [sp], #4
8002322: bf00 nop
8002324: 20000330 .word 0x20000330
8002328: 20000370 .word 0x20000370
0800232c <cmdDebugAction>:
* Re- Nombre de tour reel effectué.
*
* @param None
* @retval None
*/
void cmdDebugAction(void) {
800232c: b508 push {r3, lr}
uint8_t j;
sprintf(sendString, "Th-D=%u G=%u\r", tourPositionD, tourPositionG);
800232e: 4b0d ldr r3, [pc, #52] ; (8002364 <cmdDebugAction+0x38>)
8002330: 881b ldrh r3, [r3, #0]
8002332: 4a0d ldr r2, [pc, #52] ; (8002368 <cmdDebugAction+0x3c>)
8002334: 8812 ldrh r2, [r2, #0]
8002336: 490d ldr r1, [pc, #52] ; (800236c <cmdDebugAction+0x40>)
8002338: 480d ldr r0, [pc, #52] ; (8002370 <cmdDebugAction+0x44>)
800233a: f000 fef7 bl 800312c <siprintf>
usartSendData();
800233e: f000 ff7f bl 8003240 <usartSendData>
for (j = 0; j < 200; j++);
8002342: 2300 movs r3, #0
8002344: e001 b.n 800234a <cmdDebugAction+0x1e>
8002346: 3301 adds r3, #1
8002348: b2db uxtb r3, r3
800234a: 2bc7 cmp r3, #199 ; 0xc7
800234c: d9fb bls.n 8002346 <cmdDebugAction+0x1a>
sprintf(sendString, "Re-D=%u G=%u\r", G_lapsRight, G_lapsLeft);
800234e: 4b09 ldr r3, [pc, #36] ; (8002374 <cmdDebugAction+0x48>)
8002350: 881b ldrh r3, [r3, #0]
8002352: 4a09 ldr r2, [pc, #36] ; (8002378 <cmdDebugAction+0x4c>)
8002354: 8812 ldrh r2, [r2, #0]
8002356: 4909 ldr r1, [pc, #36] ; (800237c <cmdDebugAction+0x50>)
8002358: 4805 ldr r0, [pc, #20] ; (8002370 <cmdDebugAction+0x44>)
800235a: f000 fee7 bl 800312c <siprintf>
usartSendData();
800235e: f000 ff6f bl 8003240 <usartSendData>
8002362: bd08 pop {r3, pc}
8002364: 20000328 .word 0x20000328
8002368: 20000318 .word 0x20000318
800236c: 08004068 .word 0x08004068
8002370: 20000370 .word 0x20000370
8002374: 2000031e .word 0x2000031e
8002378: 2000032c .word 0x2000032c
800237c: 08004078 .word 0x08004078
08002380 <cmdPowerOffAction>:
* @brief Eteint le robot
*
* @param None
* @retval None
*/
void cmdPowerOffAction(void) {
8002380: b500 push {lr}
8002382: b083 sub sp, #12
volatile int i;
systemChangeState(STATE_DISABLE);
8002384: 2003 movs r0, #3
8002386: f000 fd3b bl 8002e00 <systemChangeState>
strcpy(sendString, OK_ANS);
800238a: 4b0c ldr r3, [pc, #48] ; (80023bc <cmdPowerOffAction+0x3c>)
800238c: 4a0c ldr r2, [pc, #48] ; (80023c0 <cmdPowerOffAction+0x40>)
800238e: 8811 ldrh r1, [r2, #0]
8002390: 7892 ldrb r2, [r2, #2]
8002392: 8019 strh r1, [r3, #0]
8002394: 709a strb r2, [r3, #2]
cmdAddChecksum();
8002396: f7ff fded bl 8001f74 <cmdAddChecksum>
usartSendData();
800239a: f000 ff51 bl 8003240 <usartSendData>
/* Attente d'un certain temps (100 ms), pour que la reponse parte */
for (i=0; i<100000; i++);
800239e: 2300 movs r3, #0
80023a0: 9301 str r3, [sp, #4]
80023a2: e002 b.n 80023aa <cmdPowerOffAction+0x2a>
80023a4: 9b01 ldr r3, [sp, #4]
80023a6: 3301 adds r3, #1
80023a8: 9301 str r3, [sp, #4]
80023aa: 9a01 ldr r2, [sp, #4]
80023ac: 4b05 ldr r3, [pc, #20] ; (80023c4 <cmdPowerOffAction+0x44>)
80023ae: 429a cmp r2, r3
80023b0: ddf8 ble.n 80023a4 <cmdPowerOffAction+0x24>
systemShutDown(); // Ne ressort jamais de cette fonction
80023b2: f000 fd1b bl 8002dec <systemShutDown>
}
80023b6: b003 add sp, #12
80023b8: f85d fb04 ldr.w pc, [sp], #4
80023bc: 20000370 .word 0x20000370
80023c0: 08004094 .word 0x08004094
80023c4: 0001869f .word 0x0001869f
080023c8 <cmdManage>:
void cmdManage(void) {
80023c8: b508 push {r3, lr}
if (cmdVerifyChecksum() != 0) {
80023ca: f7ff fdeb bl 8001fa4 <cmdVerifyChecksum>
80023ce: bb08 cbnz r0, 8002414 <cmdManage+0x4c>
if (Dumber.StateSystem==STATE_DISABLE) { // SI la batterie est trop faible, impossible d'accepter une commande sauf poweroff: on reste dans ce mode
80023d0: 4b32 ldr r3, [pc, #200] ; (800249c <cmdManage+0xd4>)
80023d2: 791b ldrb r3, [r3, #4]
80023d4: 2b03 cmp r3, #3
80023d6: d027 beq.n 8002428 <cmdManage+0x60>
switch (receiptString[0]) {
80023d8: 4b31 ldr r3, [pc, #196] ; (80024a0 <cmdManage+0xd8>)
80023da: 781b ldrb r3, [r3, #0]
80023dc: 3b4d subs r3, #77 ; 0x4d
80023de: 2b2d cmp r3, #45 ; 0x2d
80023e0: d854 bhi.n 800248c <cmdManage+0xc4>
80023e2: e8df f003 tbb [pc, r3]
80023e6: 5344 .short 0x5344
80023e8: 53535353 .word 0x53535353
80023ec: 3e534753 .word 0x3e534753
80023f0: 53535335 .word 0x53535335
80023f4: 53535353 .word 0x53535353
80023f8: 4a4d5353 .word 0x4a4d5353
80023fc: 53535353 .word 0x53535353
8002400: 53535353 .word 0x53535353
8002404: 53535353 .word 0x53535353
8002408: 32532f53 .word 0x32532f53
800240c: 3b415353 .word 0x3b415353
8002410: 50535338 .word 0x50535338
strcpy(sendString, UNKNOW_ANS);
8002414: 4b23 ldr r3, [pc, #140] ; (80024a4 <cmdManage+0xdc>)
8002416: 4a24 ldr r2, [pc, #144] ; (80024a8 <cmdManage+0xe0>)
8002418: 8811 ldrh r1, [r2, #0]
800241a: 7892 ldrb r2, [r2, #2]
800241c: 8019 strh r1, [r3, #0]
800241e: 709a strb r2, [r3, #2]
Dumber.cpt_inactivity=0; // remise a zéro du compteur d'inativité
8002420: 2200 movs r2, #0
8002422: 4b1e ldr r3, [pc, #120] ; (800249c <cmdManage+0xd4>)
8002424: 611a str r2, [r3, #16]
8002426: bd08 pop {r3, pc}
if (receiptString[0]==PowerOffCMD)
8002428: 4b1d ldr r3, [pc, #116] ; (80024a0 <cmdManage+0xd8>)
800242a: 781b ldrb r3, [r3, #0]
800242c: 2b7a cmp r3, #122 ; 0x7a
800242e: d006 beq.n 800243e <cmdManage+0x76>
strcpy(sendString, ERR_ANS);
8002430: 4b1c ldr r3, [pc, #112] ; (80024a4 <cmdManage+0xdc>)
8002432: 4a1e ldr r2, [pc, #120] ; (80024ac <cmdManage+0xe4>)
8002434: 8811 ldrh r1, [r2, #0]
8002436: 7892 ldrb r2, [r2, #2]
8002438: 8019 strh r1, [r3, #0]
800243a: 709a strb r2, [r3, #2]
800243c: e7f0 b.n 8002420 <cmdManage+0x58>
cmdPowerOffAction();
800243e: f7ff ff9f bl 8002380 <cmdPowerOffAction>
8002442: e7ed b.n 8002420 <cmdManage+0x58>
cmdPingAction();
8002444: f7ff fdd4 bl 8001ff0 <cmdPingAction>
break;
8002448: e7ea b.n 8002420 <cmdManage+0x58>
cmdResetAction();
800244a: f7ff fdeb bl 8002024 <cmdResetAction>
break;
800244e: e7e7 b.n 8002420 <cmdManage+0x58>
cmdStartWithWatchdogAction();
8002450: f7ff fe58 bl 8002104 <cmdStartWithWatchdogAction>
break;
8002454: e7e4 b.n 8002420 <cmdManage+0x58>
cmdResetWatchdogAction();
8002456: f7ff fe3d bl 80020d4 <cmdResetWatchdogAction>
break;
800245a: e7e1 b.n 8002420 <cmdManage+0x58>
cmdBatteryVoltageAction();
800245c: f7ff ff50 bl 8002300 <cmdBatteryVoltageAction>
break;
8002460: e7de b.n 8002420 <cmdManage+0x58>
cmdVersionAction();
8002462: f7ff fdef bl 8002044 <cmdVersionAction>
break;
8002466: e7db b.n 8002420 <cmdManage+0x58>
cmdStartWithoutWatchdogAction();
8002468: f7ff fe72 bl 8002150 <cmdStartWithoutWatchdogAction>
break;
800246c: e7d8 b.n 8002420 <cmdManage+0x58>
cmdMoveAction();
800246e: f7ff fe95 bl 800219c <cmdMoveAction>
break;
8002472: e7d5 b.n 8002420 <cmdManage+0x58>
cmdTurnAction();
8002474: f7ff fee0 bl 8002238 <cmdTurnAction>
break;
8002478: e7d2 b.n 8002420 <cmdManage+0x58>
cmdBusyStateAction();
800247a: f7ff fe01 bl 8002080 <cmdBusyStateAction>
break;
800247e: e7cf b.n 8002420 <cmdManage+0x58>
cmdDebugAction();
8002480: f7ff ff54 bl 800232c <cmdDebugAction>
break;
8002484: e7cc b.n 8002420 <cmdManage+0x58>
cmdPowerOffAction();
8002486: f7ff ff7b bl 8002380 <cmdPowerOffAction>
break;
800248a: e7c9 b.n 8002420 <cmdManage+0x58>
strcpy(sendString, UNKNOW_ANS);
800248c: 4b05 ldr r3, [pc, #20] ; (80024a4 <cmdManage+0xdc>)
800248e: 4a06 ldr r2, [pc, #24] ; (80024a8 <cmdManage+0xe0>)
8002490: 8811 ldrh r1, [r2, #0]
8002492: 7892 ldrb r2, [r2, #2]
8002494: 8019 strh r1, [r3, #0]
8002496: 709a strb r2, [r3, #2]
8002498: e7c2 b.n 8002420 <cmdManage+0x58>
800249a: bf00 nop
800249c: 20000330 .word 0x20000330
80024a0: 2000034c .word 0x2000034c
80024a4: 20000370 .word 0x20000370
80024a8: 08004088 .word 0x08004088
80024ac: 08004098 .word 0x08004098
080024b0 <ledConfigure>:
/**
* @brief Configure le GPIO PB0 et PB1 afin de contrôler la led.
* @param Aucun
*/
void ledConfigure(void)
{
80024b0: b500 push {lr}
80024b2: b083 sub sp, #12
GPIO_InitTypeDef Init_Structure;
// Configure les PIN B0 et B1 en output / alternate fonction
Init_Structure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
80024b4: 2303 movs r3, #3
80024b6: f8ad 3004 strh.w r3, [sp, #4]
Init_Structure.GPIO_Speed = GPIO_Speed_50MHz;
80024ba: f88d 3006 strb.w r3, [sp, #6]
Init_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
80024be: 2310 movs r3, #16
80024c0: f88d 3007 strb.w r3, [sp, #7]
GPIO_Init(GPIOB, &Init_Structure);
80024c4: a901 add r1, sp, #4
80024c6: 4806 ldr r0, [pc, #24] ; (80024e0 <ledConfigure+0x30>)
80024c8: f7fe ff40 bl 800134c <GPIO_Init>
etatLED = 1;
80024cc: 2201 movs r2, #1
80024ce: 4b05 ldr r3, [pc, #20] ; (80024e4 <ledConfigure+0x34>)
80024d0: 701a strb r2, [r3, #0]
LEDON =0;
80024d2: 2200 movs r2, #0
80024d4: 4b04 ldr r3, [pc, #16] ; (80024e8 <ledConfigure+0x38>)
80024d6: 701a strb r2, [r3, #0]
}
80024d8: b003 add sp, #12
80024da: f85d fb04 ldr.w pc, [sp], #4
80024de: bf00 nop
80024e0: 40010c00 .word 0x40010c00
80024e4: 20000315 .word 0x20000315
80024e8: 20000314 .word 0x20000314
080024ec <ledOff>:
/**
* @brief Eteint les LED.
* @param Aucun
*/
void ledOff(void)
{
80024ec: b510 push {r4, lr}
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
80024ee: 4c05 ldr r4, [pc, #20] ; (8002504 <ledOff+0x18>)
80024f0: 2101 movs r1, #1
80024f2: 4620 mov r0, r4
80024f4: f7fe ff7b bl 80013ee <GPIO_ResetBits>
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
80024f8: 2102 movs r1, #2
80024fa: 4620 mov r0, r4
80024fc: f7fe ff77 bl 80013ee <GPIO_ResetBits>
8002500: bd10 pop {r4, pc}
8002502: bf00 nop
8002504: 40010c00 .word 0x40010c00
08002508 <ledOn>:
/**
* @brief Allume une couleur de LED.
* @param Aucun
*/
void ledOn(char color)
{
8002508: b510 push {r4, lr}
switch (color)
800250a: 2801 cmp r0, #1
800250c: d00f beq.n 800252e <ledOn+0x26>
800250e: b120 cbz r0, 800251a <ledOn+0x12>
8002510: 2802 cmp r0, #2
8002512: d016 beq.n 8002542 <ledOn+0x3a>
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
break;
default:
ledOff();
8002514: f7ff ffea bl 80024ec <ledOff>
8002518: bd10 pop {r4, pc}
GPIO_SetBits(GPIOB, GPIO_Pin_1);
800251a: 4c0f ldr r4, [pc, #60] ; (8002558 <ledOn+0x50>)
800251c: 2102 movs r1, #2
800251e: 4620 mov r0, r4
8002520: f7fe ff63 bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
8002524: 2101 movs r1, #1
8002526: 4620 mov r0, r4
8002528: f7fe ff61 bl 80013ee <GPIO_ResetBits>
break;
800252c: bd10 pop {r4, pc}
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
800252e: 4c0a ldr r4, [pc, #40] ; (8002558 <ledOn+0x50>)
8002530: 2102 movs r1, #2
8002532: 4620 mov r0, r4
8002534: f7fe ff5b bl 80013ee <GPIO_ResetBits>
GPIO_SetBits(GPIOB,GPIO_Pin_0);
8002538: 2101 movs r1, #1
800253a: 4620 mov r0, r4
800253c: f7fe ff55 bl 80013ea <GPIO_SetBits>
break;
8002540: bd10 pop {r4, pc}
GPIO_SetBits(GPIOB, GPIO_Pin_1);
8002542: 4c05 ldr r4, [pc, #20] ; (8002558 <ledOn+0x50>)
8002544: 2102 movs r1, #2
8002546: 4620 mov r0, r4
8002548: f7fe ff4f bl 80013ea <GPIO_SetBits>
GPIO_SetBits(GPIOB,GPIO_Pin_0);
800254c: 2101 movs r1, #1
800254e: 4620 mov r0, r4
8002550: f7fe ff4b bl 80013ea <GPIO_SetBits>
break;
8002554: bd10 pop {r4, pc}
8002556: bf00 nop
8002558: 40010c00 .word 0x40010c00
0800255c <ledManagement>:
* @brief Gere l'etat du clignotement de la led en fonction de l'etat du système
* Appelée toutes les 10 ms
* @param state: état actuel du système
* @param batteryState: état de la batterie
*/
void ledManagement(States state, char batteryState) {
800255c: b508 push {r3, lr}
static char ledCounter=0;
char color;
if (batteryState>1) color=LED_GREEN;
800255e: 2901 cmp r1, #1
8002560: d907 bls.n 8002572 <ledManagement+0x16>
8002562: 2300 movs r3, #0
else color = LED_RED;
switch (state)
8002564: 2804 cmp r0, #4
8002566: d82e bhi.n 80025c6 <ledManagement+0x6a>
8002568: e8df f000 tbb [pc, r0]
800256c: 2d141405 .word 0x2d141405
8002570: 22 .byte 0x22
8002571: 00 .byte 0x00
else color = LED_RED;
8002572: 2301 movs r3, #1
8002574: e7f6 b.n 8002564 <ledManagement+0x8>
{
case STATE_IDLE:
if ((ledCounter<15) || ((ledCounter>=100) && (ledCounter<115))) ledOn(color);
8002576: 4a1e ldr r2, [pc, #120] ; (80025f0 <ledManagement+0x94>)
8002578: 7812 ldrb r2, [r2, #0]
800257a: 2a0e cmp r2, #14
800257c: d903 bls.n 8002586 <ledManagement+0x2a>
800257e: 3a64 subs r2, #100 ; 0x64
8002580: b2d2 uxtb r2, r2
8002582: 2a0e cmp r2, #14
8002584: d803 bhi.n 800258e <ledManagement+0x32>
8002586: 4618 mov r0, r3
8002588: f7ff ffbe bl 8002508 <ledOn>
800258c: e005 b.n 800259a <ledManagement+0x3e>
else ledOff();
800258e: f7ff ffad bl 80024ec <ledOff>
8002592: e002 b.n 800259a <ledManagement+0x3e>
break;
case STATE_RUN:
case STATE_LOW:
ledOn(color);
8002594: 4618 mov r0, r3
8002596: f7ff ffb7 bl 8002508 <ledOn>
default:
if (ledCounter%10 ==0) ledOn(LED_RED);
else ledOff();
}
ledCounter++;
800259a: 4a15 ldr r2, [pc, #84] ; (80025f0 <ledManagement+0x94>)
800259c: 7813 ldrb r3, [r2, #0]
800259e: 3301 adds r3, #1
80025a0: b2db uxtb r3, r3
80025a2: 7013 strb r3, [r2, #0]
if (ledCounter>200) ledCounter=0;
80025a4: 2bc8 cmp r3, #200 ; 0xc8
80025a6: d902 bls.n 80025ae <ledManagement+0x52>
80025a8: 2200 movs r2, #0
80025aa: 4b11 ldr r3, [pc, #68] ; (80025f0 <ledManagement+0x94>)
80025ac: 701a strb r2, [r3, #0]
80025ae: bd08 pop {r3, pc}
if (ledCounter<100) ledOn(LED_RED);
80025b0: 4b0f ldr r3, [pc, #60] ; (80025f0 <ledManagement+0x94>)
80025b2: 781b ldrb r3, [r3, #0]
80025b4: 2b63 cmp r3, #99 ; 0x63
80025b6: d803 bhi.n 80025c0 <ledManagement+0x64>
80025b8: 2001 movs r0, #1
80025ba: f7ff ffa5 bl 8002508 <ledOn>
80025be: e7ec b.n 800259a <ledManagement+0x3e>
else ledOff();
80025c0: f7ff ff94 bl 80024ec <ledOff>
80025c4: e7e9 b.n 800259a <ledManagement+0x3e>
if (ledCounter%10 ==0) ledOn(LED_RED);
80025c6: 4b0a ldr r3, [pc, #40] ; (80025f0 <ledManagement+0x94>)
80025c8: 781a ldrb r2, [r3, #0]
80025ca: 4b0a ldr r3, [pc, #40] ; (80025f4 <ledManagement+0x98>)
80025cc: fba3 1302 umull r1, r3, r3, r2
80025d0: 08db lsrs r3, r3, #3
80025d2: eb03 0383 add.w r3, r3, r3, lsl #2
80025d6: 0059 lsls r1, r3, #1
80025d8: 1a52 subs r2, r2, r1
80025da: f012 0fff tst.w r2, #255 ; 0xff
80025de: d103 bne.n 80025e8 <ledManagement+0x8c>
80025e0: 2001 movs r0, #1
80025e2: f7ff ff91 bl 8002508 <ledOn>
80025e6: e7d8 b.n 800259a <ledManagement+0x3e>
else ledOff();
80025e8: f7ff ff80 bl 80024ec <ledOff>
80025ec: e7d5 b.n 800259a <ledManagement+0x3e>
80025ee: bf00 nop
80025f0: 20000212 .word 0x20000212
80025f4: cccccccd .word 0xcccccccd
080025f8 <main>:
* @brief Initialise les horloges du micro et de ses périphériques.
* @param None
* @retval None
*/
int main(void)
{
80025f8: b580 push {r7, lr}
80025fa: af00 add r7, sp, #0
/**
* Initialisation
*/
mainPeripheralsInit();
80025fc: f000 f82a bl 8002654 <mainPeripheralsInit>
Wait For Event is a hint instruction that permits the processor to enter
a low-power state until one of a number of events occurs.
*/
__attribute__( ( always_inline ) ) static __INLINE void __WFE(void)
{
__ASM volatile ("wfe");
8002600: bf20 wfe
while (1){
__WFE(); // Bascule la puce en sleep mode
if (Dumber.flagSystick == 1)
8002602: 4b12 ldr r3, [pc, #72] ; (800264c <main+0x54>)
8002604: 7d9b ldrb r3, [r3, #22]
8002606: 2b01 cmp r3, #1
8002608: d1fa bne.n 8002600 <main+0x8>
{
Dumber.flagSystick = 0;
800260a: 4b10 ldr r3, [pc, #64] ; (800264c <main+0x54>)
800260c: 2200 movs r2, #0
800260e: 759a strb r2, [r3, #22]
/* Gestion des niveaux de batterie */
batteryManagement();
8002610: f7ff fc00 bl 8001e14 <batteryManagement>
/* Gestion des moteurs (asservissement, .. */
motorManagement();
8002614: f000 fa70 bl 8002af8 <motorManagement>
/* Gestion du clignotement de la led, f=100Hz*/
ledManagement(Dumber.StateSystem, Dumber.stateBattery);
8002618: 4b0c ldr r3, [pc, #48] ; (800264c <main+0x54>)
800261a: 791a ldrb r2, [r3, #4]
800261c: 4b0b ldr r3, [pc, #44] ; (800264c <main+0x54>)
800261e: 7d5b ldrb r3, [r3, #21]
8002620: 4619 mov r1, r3
8002622: 4610 mov r0, r2
8002624: f7ff ff9a bl 800255c <ledManagement>
if (Dumber.StateSystem == STATE_DISABLE) {
8002628: 4b08 ldr r3, [pc, #32] ; (800264c <main+0x54>)
800262a: 791b ldrb r3, [r3, #4]
800262c: 2b03 cmp r3, #3
800262e: d1e7 bne.n 8002600 <main+0x8>
cptMesureEmergencyHalt++;
8002630: 4b07 ldr r3, [pc, #28] ; (8002650 <main+0x58>)
8002632: 681b ldr r3, [r3, #0]
8002634: 3301 adds r3, #1
8002636: 4a06 ldr r2, [pc, #24] ; (8002650 <main+0x58>)
8002638: 6013 str r3, [r2, #0]
if (cptMesureEmergencyHalt >= COMPTEUR_SEUIL_EMERGENCY_HALT) {
800263a: 4b05 ldr r3, [pc, #20] ; (8002650 <main+0x58>)
800263c: 681b ldr r3, [r3, #0]
800263e: f640 32b7 movw r2, #2999 ; 0xbb7
8002642: 4293 cmp r3, r2
8002644: d9dc bls.n 8002600 <main+0x8>
systemShutDown();
8002646: f000 fbd1 bl 8002dec <systemShutDown>
while (1);
800264a: e7fe b.n 800264a <main+0x52>
800264c: 20000330 .word 0x20000330
8002650: 2000020c .word 0x2000020c
08002654 <mainPeripheralsInit>:
/**
* @brief Initialise les périphériques pour leur utilisation.
* @param None
* @retval None
*/
void mainPeripheralsInit(void) {
8002654: b580 push {r7, lr}
8002656: af00 add r7, sp, #0
mainConfigureClock();
8002658: f000 f80c bl 8002674 <mainConfigureClock>
systemConfigure();
800265c: f000 fb7c bl 8002d58 <systemConfigure>
motorConfigure();
8002660: f000 f81e bl 80026a0 <motorConfigure>
ledConfigure();
8002664: f7ff ff24 bl 80024b0 <ledConfigure>
usartConfigure();
8002668: f000 fd6e bl 8003148 <usartConfigure>
batteryConfigure();
800266c: f7ff faf2 bl 8001c54 <batteryConfigure>
}
8002670: bf00 nop
8002672: bd80 pop {r7, pc}
08002674 <mainConfigureClock>:
* @brief Initialise les horloges du micro et de ses périphériques.
* @param None
* @retval None
*/
void mainConfigureClock(void)
{
8002674: b580 push {r7, lr}
8002676: af00 add r7, sp, #0
//Configuration de la fréquence d'horloge de l'adc */
RCC_ADCCLKConfig(RCC_PCLK2_Div2);
8002678: 2000 movs r0, #0
800267a: f7fe ff0f bl 800149c <RCC_ADCCLKConfig>
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
800267e: 2101 movs r1, #1
8002680: 2001 movs r0, #1
8002682: f7fe ff73 bl 800156c <RCC_AHBPeriphClockCmd>
//Activation de l'horloge du GPIO, de A, B et C, de ADC1, de AFIO
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM2|RCC_APB2Periph_USART1, ENABLE);
8002686: 2101 movs r1, #1
8002688: f244 0003 movw r0, #16387 ; 0x4003
800268c: f7fe ff8a bl 80015a4 <RCC_APB1PeriphClockCmd>
RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1| RCC_APB2Periph_TIM1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
8002690: 2101 movs r1, #1
8002692: f645 201d movw r0, #23069 ; 0x5a1d
8002696: f7fe ff77 bl 8001588 <RCC_APB2PeriphClockCmd>
RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1|RCC_APB2Periph_SPI1,
ENABLE);
}
800269a: bf00 nop
800269c: bd80 pop {r7, pc}
...
080026a0 <motorConfigure>:
* @param None
* @retval None
*
*/
void motorConfigure(void)
{
80026a0: b5f0 push {r4, r5, r6, r7, lr}
80026a2: b08d sub sp, #52 ; 0x34
TIM_OCInitTypeDef TIM2_Configure;
TIM_ICInitTypeDef TIM_ICInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// Configure les PIN A1 et A2 en output / alternate fonction
Init_Structure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
80026a4: 2306 movs r3, #6
80026a6: f8ad 302c strh.w r3, [sp, #44] ; 0x2c
Init_Structure.GPIO_Speed = GPIO_Speed_50MHz;
80026aa: 2403 movs r4, #3
80026ac: f88d 402e strb.w r4, [sp, #46] ; 0x2e
Init_Structure.GPIO_Mode = GPIO_Mode_AF_PP;
80026b0: 2318 movs r3, #24
80026b2: f88d 302f strb.w r3, [sp, #47] ; 0x2f
GPIO_Init(GPIOA, &Init_Structure);
80026b6: 4d57 ldr r5, [pc, #348] ; (8002814 <motorConfigure+0x174>)
80026b8: a90b add r1, sp, #44 ; 0x2c
80026ba: 4628 mov r0, r5
80026bc: f7fe fe46 bl 800134c <GPIO_Init>
// Configure les PIN B12,B13,B14, et B15 en output ppull.
Init_Structure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
80026c0: f44f 4370 mov.w r3, #61440 ; 0xf000
80026c4: f8ad 302c strh.w r3, [sp, #44] ; 0x2c
Init_Structure.GPIO_Speed = GPIO_Speed_50MHz;
80026c8: f88d 402e strb.w r4, [sp, #46] ; 0x2e
Init_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
80026cc: 2610 movs r6, #16
80026ce: f88d 602f strb.w r6, [sp, #47] ; 0x2f
GPIO_Init(GPIOB, &Init_Structure);
80026d2: a90b add r1, sp, #44 ; 0x2c
80026d4: 4850 ldr r0, [pc, #320] ; (8002818 <motorConfigure+0x178>)
80026d6: f7fe fe39 bl 800134c <GPIO_Init>
// Configure les PIN A12 en output ppull - enable encodeurs
Init_Structure.GPIO_Pin = GPIO_Pin_12;
80026da: f44f 5380 mov.w r3, #4096 ; 0x1000
80026de: f8ad 302c strh.w r3, [sp, #44] ; 0x2c
Init_Structure.GPIO_Speed = GPIO_Speed_50MHz;
80026e2: f88d 402e strb.w r4, [sp, #46] ; 0x2e
Init_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
80026e6: f88d 602f strb.w r6, [sp, #47] ; 0x2f
GPIO_Init(GPIOA, &Init_Structure);
80026ea: a90b add r1, sp, #44 ; 0x2c
80026ec: 4628 mov r0, r5
80026ee: f7fe fe2d bl 800134c <GPIO_Init>
// Configure les PIN A8,A9,A10, et A11 en input floating.
Init_Structure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
80026f2: f44f 6370 mov.w r3, #3840 ; 0xf00
80026f6: f8ad 302c strh.w r3, [sp, #44] ; 0x2c
Init_Structure.GPIO_Speed = GPIO_Speed_50MHz;
80026fa: f88d 402e strb.w r4, [sp, #46] ; 0x2e
Init_Structure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
80026fe: 2604 movs r6, #4
8002700: f88d 602f strb.w r6, [sp, #47] ; 0x2f
GPIO_Init(GPIOA, &Init_Structure);
8002704: a90b add r1, sp, #44 ; 0x2c
8002706: 4628 mov r0, r5
8002708: f7fe fe20 bl 800134c <GPIO_Init>
// Configuration du timer 2 (pwm moteurs*
// On souhaite une résolution du PWM de 256 valeurs MOTOR1 TIM2
TIM2_TempsPWMsettings.TIM_Period = 255;
800270c: 23ff movs r3, #255 ; 0xff
800270e: f8ad 3024 strh.w r3, [sp, #36] ; 0x24
TIM2_TempsPWMsettings.TIM_Prescaler = 0;
8002712: 2400 movs r4, #0
8002714: f8ad 4020 strh.w r4, [sp, #32]
TIM2_TempsPWMsettings.TIM_ClockDivision=0;
8002718: f8ad 4026 strh.w r4, [sp, #38] ; 0x26
TIM2_TempsPWMsettings.TIM_CounterMode=TIM_CounterMode_Up;
800271c: f8ad 4022 strh.w r4, [sp, #34] ; 0x22
TIM_TimeBaseInit(TIM2, &TIM2_TempsPWMsettings);
8002720: a908 add r1, sp, #32
8002722: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
8002726: f7ff f83d bl 80017a4 <TIM_TimeBaseInit>
// Configuration du PWM sur le timer 2
TIM2_Configure.TIM_OCMode=TIM_OCMode_PWM2;
800272a: 2370 movs r3, #112 ; 0x70
800272c: f8ad 3010 strh.w r3, [sp, #16]
TIM2_Configure.TIM_OutputState = TIM_OutputState_Enable;
8002730: 2501 movs r5, #1
8002732: f8ad 5012 strh.w r5, [sp, #18]
TIM2_Configure.TIM_OutputNState = TIM_OutputNState_Enable;
8002736: f8ad 6014 strh.w r6, [sp, #20]
TIM2_Configure.TIM_Pulse = 256; // Constante initialisée à 256, pour un rapport cyclique nul
800273a: f44f 7380 mov.w r3, #256 ; 0x100
800273e: f8ad 3016 strh.w r3, [sp, #22]
TIM2_Configure.TIM_OCPolarity = TIM_OCPolarity_High;
8002742: f8ad 4018 strh.w r4, [sp, #24]
TIM_OC3Init(TIM2, &TIM2_Configure);
8002746: a904 add r1, sp, #16
8002748: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
800274c: f7ff f8b8 bl 80018c0 <TIM_OC3Init>
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);
8002750: 2108 movs r1, #8
8002752: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
8002756: f7ff f938 bl 80019ca <TIM_OC3PreloadConfig>
TIM_OC2Init(TIM2, &TIM2_Configure);
800275a: a904 add r1, sp, #16
800275c: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
8002760: f7ff f86a bl 8001838 <TIM_OC2Init>
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
8002764: 2108 movs r1, #8
8002766: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
800276a: f7ff f925 bl 80019b8 <TIM_OC2PreloadConfig>
TIM_ARRPreloadConfig(TIM2, ENABLE);
800276e: 4629 mov r1, r5
8002770: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
8002774: f7ff f912 bl 800199c <TIM_ARRPreloadConfig>
// Enable Counter
TIM_Cmd(TIM2, ENABLE);
8002778: 4629 mov r1, r5
800277a: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
800277e: f7ff f8e1 bl 8001944 <TIM_Cmd>
TIM_CtrlPWMOutputs(TIM2,ENABLE);
8002782: 4629 mov r1, r5
8002784: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
8002788: f7ff f8ea bl 8001960 <TIM_CtrlPWMOutputs>
// Configuration de la capture de l'encodeur 1
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
800278c: f8ad 4004 strh.w r4, [sp, #4]
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
8002790: f8ad 4006 strh.w r4, [sp, #6]
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
8002794: f8ad 5008 strh.w r5, [sp, #8]
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
8002798: f8ad 400a strh.w r4, [sp, #10]
TIM_ICInitStructure.TIM_ICFilter = 0x0;
800279c: f8ad 400c strh.w r4, [sp, #12]
TIM_ICInit(TIM1, &TIM_ICInitStructure);
80027a0: 4e1e ldr r6, [pc, #120] ; (800281c <motorConfigure+0x17c>)
80027a2: a901 add r1, sp, #4
80027a4: 4630 mov r0, r6
80027a6: f7ff f94b bl 8001a40 <TIM_ICInit>
TIM_Cmd(TIM1, ENABLE);
80027aa: 4629 mov r1, r5
80027ac: 4630 mov r0, r6
80027ae: f7ff f8c9 bl 8001944 <TIM_Cmd>
TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
80027b2: 462a mov r2, r5
80027b4: 2102 movs r1, #2
80027b6: 4630 mov r0, r6
80027b8: f7ff f8e4 bl 8001984 <TIM_ITConfig>
// Configuration de la capture de l'encodeur 1
TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
80027bc: 2708 movs r7, #8
80027be: f8ad 7004 strh.w r7, [sp, #4]
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
80027c2: f8ad 4006 strh.w r4, [sp, #6]
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
80027c6: f8ad 5008 strh.w r5, [sp, #8]
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
80027ca: f8ad 400a strh.w r4, [sp, #10]
TIM_ICInitStructure.TIM_ICFilter = 0x0;
80027ce: f8ad 400c strh.w r4, [sp, #12]
TIM_ICInit(TIM1, &TIM_ICInitStructure);
80027d2: a901 add r1, sp, #4
80027d4: 4630 mov r0, r6
80027d6: f7ff f933 bl 8001a40 <TIM_ICInit>
TIM_Cmd(TIM1, ENABLE);
80027da: 4629 mov r1, r5
80027dc: 4630 mov r0, r6
80027de: f7ff f8b1 bl 8001944 <TIM_Cmd>
TIM_ITConfig(TIM1, TIM_IT_CC3, ENABLE);
80027e2: 462a mov r2, r5
80027e4: 4639 mov r1, r7
80027e6: 4630 mov r0, r6
80027e8: f7ff f8cc bl 8001984 <TIM_ITConfig>
// Enable the TIM1 Capture interrupt
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
80027ec: 231b movs r3, #27
80027ee: f88d 3000 strb.w r3, [sp]
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
80027f2: f88d 5001 strb.w r5, [sp, #1]
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
80027f6: f88d 5002 strb.w r5, [sp, #2]
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
80027fa: f88d 5003 strb.w r5, [sp, #3]
NVIC_Init(&NVIC_InitStructure);
80027fe: 4668 mov r0, sp
8002800: f7fe fb94 bl 8000f2c <NVIC_Init>
// RAZ des variables
regulation_vitesseD = 0;
8002804: 4b06 ldr r3, [pc, #24] ; (8002820 <motorConfigure+0x180>)
8002806: 801c strh r4, [r3, #0]
regulation_vitesseG = 0;
8002808: 4b06 ldr r3, [pc, #24] ; (8002824 <motorConfigure+0x184>)
800280a: 801c strh r4, [r3, #0]
asservissement =0;
800280c: 4b06 ldr r3, [pc, #24] ; (8002828 <motorConfigure+0x188>)
800280e: 801c strh r4, [r3, #0]
}
8002810: b00d add sp, #52 ; 0x34
8002812: bdf0 pop {r4, r5, r6, r7, pc}
8002814: 40010800 .word 0x40010800
8002818: 40010c00 .word 0x40010c00
800281c: 40012c00 .word 0x40012c00
8002820: 2000032a .word 0x2000032a
8002824: 2000031c .word 0x2000031c
8002828: 2000031a .word 0x2000031a
0800282c <motorCmdRight>:
* @param Consigne de vitesse du moteur, défini par un pwm entre 0 et 255.
* @retval None
*/
void motorCmdRight(char mod, uint16_t pwm)
{
800282c: b538 push {r3, r4, r5, lr}
pwm = 256 - pwm;
800282e: f5c1 7180 rsb r1, r1, #256 ; 0x100
8002832: b28c uxth r4, r1
switch (mod) {
8002834: 280c cmp r0, #12
8002836: d02a beq.n 800288e <motorCmdRight+0x62>
8002838: 280d cmp r0, #13
800283a: d00b beq.n 8002854 <motorCmdRight+0x28>
800283c: 280b cmp r0, #11
800283e: d01a beq.n 8002876 <motorCmdRight+0x4a>
GPIO_SetBits(GPIOB, GPIO_Pin_13);
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
break;
default:
GPIO_ResetBits(GPIOB, 12);
8002840: 4d19 ldr r5, [pc, #100] ; (80028a8 <motorCmdRight+0x7c>)
8002842: 210c movs r1, #12
8002844: 4628 mov r0, r5
8002846: f7fe fdd2 bl 80013ee <GPIO_ResetBits>
GPIO_ResetBits(GPIOB, 13);
800284a: 210d movs r1, #13
800284c: 4628 mov r0, r5
800284e: f7fe fdce bl 80013ee <GPIO_ResetBits>
8002852: e00a b.n 800286a <motorCmdRight+0x3e>
GPIO_SetBits(GPIOB, GPIO_Pin_12);
8002854: 4d14 ldr r5, [pc, #80] ; (80028a8 <motorCmdRight+0x7c>)
8002856: f44f 5180 mov.w r1, #4096 ; 0x1000
800285a: 4628 mov r0, r5
800285c: f7fe fdc5 bl 80013ea <GPIO_SetBits>
GPIO_SetBits(GPIOB, GPIO_Pin_13);
8002860: f44f 5100 mov.w r1, #8192 ; 0x2000
8002864: 4628 mov r0, r5
8002866: f7fe fdc0 bl 80013ea <GPIO_SetBits>
}
TIM_SetCompare3(TIM2, pwm);
800286a: 4621 mov r1, r4
800286c: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
8002870: f7ff f8b4 bl 80019dc <TIM_SetCompare3>
8002874: bd38 pop {r3, r4, r5, pc}
GPIO_SetBits(GPIOB, GPIO_Pin_12);
8002876: 4d0c ldr r5, [pc, #48] ; (80028a8 <motorCmdRight+0x7c>)
8002878: f44f 5180 mov.w r1, #4096 ; 0x1000
800287c: 4628 mov r0, r5
800287e: f7fe fdb4 bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
8002882: f44f 5100 mov.w r1, #8192 ; 0x2000
8002886: 4628 mov r0, r5
8002888: f7fe fdb1 bl 80013ee <GPIO_ResetBits>
break;
800288c: e7ed b.n 800286a <motorCmdRight+0x3e>
GPIO_SetBits(GPIOB, GPIO_Pin_13);
800288e: 4d06 ldr r5, [pc, #24] ; (80028a8 <motorCmdRight+0x7c>)
8002890: f44f 5100 mov.w r1, #8192 ; 0x2000
8002894: 4628 mov r0, r5
8002896: f7fe fda8 bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
800289a: f44f 5180 mov.w r1, #4096 ; 0x1000
800289e: 4628 mov r0, r5
80028a0: f7fe fda5 bl 80013ee <GPIO_ResetBits>
break;
80028a4: e7e1 b.n 800286a <motorCmdRight+0x3e>
80028a6: bf00 nop
80028a8: 40010c00 .word 0x40010c00
080028ac <motorCmdLeft>:
* @param Mode de fonctionnement du moteur, peut être égal aux constantes BRAKE, FORWARD, REVERSE définis dans moteur.h
* @param Consigne de vitesse du moteur, défini par un pwm entre 0 et 255.
* @retval None
*/
void motorCmdLeft(char mod, uint16_t pwm) {
80028ac: b538 push {r3, r4, r5, lr}
pwm = 256 - pwm;
80028ae: f5c1 7180 rsb r1, r1, #256 ; 0x100
80028b2: b28c uxth r4, r1
switch (mod) {
80028b4: 280c cmp r0, #12
80028b6: d02c beq.n 8002912 <motorCmdLeft+0x66>
80028b8: 280d cmp r0, #13
80028ba: d00d beq.n 80028d8 <motorCmdLeft+0x2c>
80028bc: 280b cmp r0, #11
80028be: d01c beq.n 80028fa <motorCmdLeft+0x4e>
GPIO_SetBits(GPIOB, GPIO_Pin_14);
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
break;
default:
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
80028c0: 4d1a ldr r5, [pc, #104] ; (800292c <motorCmdLeft+0x80>)
80028c2: f44f 4180 mov.w r1, #16384 ; 0x4000
80028c6: 4628 mov r0, r5
80028c8: f7fe fd91 bl 80013ee <GPIO_ResetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
80028cc: f44f 4100 mov.w r1, #32768 ; 0x8000
80028d0: 4628 mov r0, r5
80028d2: f7fe fd8c bl 80013ee <GPIO_ResetBits>
80028d6: e00a b.n 80028ee <motorCmdLeft+0x42>
GPIO_SetBits(GPIOB, GPIO_Pin_14);
80028d8: 4d14 ldr r5, [pc, #80] ; (800292c <motorCmdLeft+0x80>)
80028da: f44f 4180 mov.w r1, #16384 ; 0x4000
80028de: 4628 mov r0, r5
80028e0: f7fe fd83 bl 80013ea <GPIO_SetBits>
GPIO_SetBits(GPIOB, GPIO_Pin_15);
80028e4: f44f 4100 mov.w r1, #32768 ; 0x8000
80028e8: 4628 mov r0, r5
80028ea: f7fe fd7e bl 80013ea <GPIO_SetBits>
}
TIM_SetCompare2(TIM2, pwm);
80028ee: 4621 mov r1, r4
80028f0: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
80028f4: f7ff f870 bl 80019d8 <TIM_SetCompare2>
80028f8: bd38 pop {r3, r4, r5, pc}
GPIO_SetBits(GPIOB, GPIO_Pin_15);
80028fa: 4d0c ldr r5, [pc, #48] ; (800292c <motorCmdLeft+0x80>)
80028fc: f44f 4100 mov.w r1, #32768 ; 0x8000
8002900: 4628 mov r0, r5
8002902: f7fe fd72 bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
8002906: f44f 4180 mov.w r1, #16384 ; 0x4000
800290a: 4628 mov r0, r5
800290c: f7fe fd6f bl 80013ee <GPIO_ResetBits>
break;
8002910: e7ed b.n 80028ee <motorCmdLeft+0x42>
GPIO_SetBits(GPIOB, GPIO_Pin_14);
8002912: 4d06 ldr r5, [pc, #24] ; (800292c <motorCmdLeft+0x80>)
8002914: f44f 4180 mov.w r1, #16384 ; 0x4000
8002918: 4628 mov r0, r5
800291a: f7fe fd66 bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
800291e: f44f 4100 mov.w r1, #32768 ; 0x8000
8002922: 4628 mov r0, r5
8002924: f7fe fd63 bl 80013ee <GPIO_ResetBits>
break;
8002928: e7e1 b.n 80028ee <motorCmdLeft+0x42>
800292a: bf00 nop
800292c: 40010c00 .word 0x40010c00
08002930 <motorSpeedUpdateLeft>:
* @brief Commande de plus haut niveau pour contrôler la vitesse moteur Gauche.
*
* @param Consigne de vitesse du moteur, défini par un pwm entre 0 et 255.
* @retval None
*/
void motorSpeedUpdateLeft(uint16_t pwm) {
8002930: b508 push {r3, lr}
pwm = 256 - pwm;
8002932: f5c0 7180 rsb r1, r0, #256 ; 0x100
TIM_SetCompare2(TIM2, pwm);
8002936: b289 uxth r1, r1
8002938: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
800293c: f7ff f84c bl 80019d8 <TIM_SetCompare2>
8002940: bd08 pop {r3, pc}
08002942 <motorSpeedUpdateRight>:
* @brief Commande de plus haut niveau pour contrôler la vitesse moteur Droit.
*
* @param Consigne de vitesse du moteur, défini par un pwm entre 0 et 255.
* @retval None
*/
void motorSpeedUpdateRight(uint16_t pwm) {
8002942: b508 push {r3, lr}
pwm = 256 - pwm;
8002944: f5c0 7180 rsb r1, r0, #256 ; 0x100
TIM_SetCompare3(TIM2, pwm);
8002948: b289 uxth r1, r1
800294a: f04f 4080 mov.w r0, #1073741824 ; 0x40000000
800294e: f7ff f845 bl 80019dc <TIM_SetCompare3>
8002952: bd08 pop {r3, pc}
08002954 <motorRegulation>:
* @param Vitesse de la roue de gauche.
*
* @retval None
*/
void motorRegulation(char modRight, char modLeft, uint16_t lapsRight,
uint16_t lapsLeft, uint16_t speedRight, uint16_t speedLeft) {
8002954: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
8002958: 460c mov r4, r1
800295a: 4616 mov r6, r2
800295c: 4698 mov r8, r3
800295e: f8bd 5020 ldrh.w r5, [sp, #32]
8002962: f8bd 7024 ldrh.w r7, [sp, #36] ; 0x24
/*Moteur Droit*/
switch (modRight) {
8002966: 280c cmp r0, #12
8002968: d039 beq.n 80029de <motorRegulation+0x8a>
800296a: 280d cmp r0, #13
800296c: d00c beq.n 8002988 <motorRegulation+0x34>
800296e: 280b cmp r0, #11
8002970: d028 beq.n 80029c4 <motorRegulation+0x70>
GPIO_SetBits(GPIOB, GPIO_Pin_13);
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
break;
default:
GPIO_ResetBits(GPIOB, 12);
8002972: f8df 9100 ldr.w r9, [pc, #256] ; 8002a74 <motorRegulation+0x120>
8002976: 210c movs r1, #12
8002978: 4648 mov r0, r9
800297a: f7fe fd38 bl 80013ee <GPIO_ResetBits>
GPIO_ResetBits(GPIOB, 13);
800297e: 210d movs r1, #13
8002980: 4648 mov r0, r9
8002982: f7fe fd34 bl 80013ee <GPIO_ResetBits>
8002986: e00b b.n 80029a0 <motorRegulation+0x4c>
GPIO_SetBits(GPIOB, GPIO_Pin_12);
8002988: f8df 90e8 ldr.w r9, [pc, #232] ; 8002a74 <motorRegulation+0x120>
800298c: f44f 5180 mov.w r1, #4096 ; 0x1000
8002990: 4648 mov r0, r9
8002992: f7fe fd2a bl 80013ea <GPIO_SetBits>
GPIO_SetBits(GPIOB, GPIO_Pin_13);
8002996: f44f 5100 mov.w r1, #8192 ; 0x2000
800299a: 4648 mov r0, r9
800299c: f7fe fd25 bl 80013ea <GPIO_SetBits>
}
/* Moteur Gauche */
switch (modLeft) {
80029a0: 2c0c cmp r4, #12
80029a2: d047 beq.n 8002a34 <motorRegulation+0xe0>
80029a4: 2c0d cmp r4, #13
80029a6: d027 beq.n 80029f8 <motorRegulation+0xa4>
80029a8: 2c0b cmp r4, #11
80029aa: d037 beq.n 8002a1c <motorRegulation+0xc8>
GPIO_SetBits(GPIOB, GPIO_Pin_14);
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
break;
default:
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
80029ac: 4c31 ldr r4, [pc, #196] ; (8002a74 <motorRegulation+0x120>)
80029ae: f44f 4180 mov.w r1, #16384 ; 0x4000
80029b2: 4620 mov r0, r4
80029b4: f7fe fd1b bl 80013ee <GPIO_ResetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
80029b8: f44f 4100 mov.w r1, #32768 ; 0x8000
80029bc: 4620 mov r0, r4
80029be: f7fe fd16 bl 80013ee <GPIO_ResetBits>
80029c2: e024 b.n 8002a0e <motorRegulation+0xba>
GPIO_SetBits(GPIOB, GPIO_Pin_12);
80029c4: f8df 90ac ldr.w r9, [pc, #172] ; 8002a74 <motorRegulation+0x120>
80029c8: f44f 5180 mov.w r1, #4096 ; 0x1000
80029cc: 4648 mov r0, r9
80029ce: f7fe fd0c bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
80029d2: f44f 5100 mov.w r1, #8192 ; 0x2000
80029d6: 4648 mov r0, r9
80029d8: f7fe fd09 bl 80013ee <GPIO_ResetBits>
break;
80029dc: e7e0 b.n 80029a0 <motorRegulation+0x4c>
GPIO_SetBits(GPIOB, GPIO_Pin_13);
80029de: f8df 9094 ldr.w r9, [pc, #148] ; 8002a74 <motorRegulation+0x120>
80029e2: f44f 5100 mov.w r1, #8192 ; 0x2000
80029e6: 4648 mov r0, r9
80029e8: f7fe fcff bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
80029ec: f44f 5180 mov.w r1, #4096 ; 0x1000
80029f0: 4648 mov r0, r9
80029f2: f7fe fcfc bl 80013ee <GPIO_ResetBits>
break;
80029f6: e7d3 b.n 80029a0 <motorRegulation+0x4c>
GPIO_SetBits(GPIOB, GPIO_Pin_14);
80029f8: 4c1e ldr r4, [pc, #120] ; (8002a74 <motorRegulation+0x120>)
80029fa: f44f 4180 mov.w r1, #16384 ; 0x4000
80029fe: 4620 mov r0, r4
8002a00: f7fe fcf3 bl 80013ea <GPIO_SetBits>
GPIO_SetBits(GPIOB, GPIO_Pin_15);
8002a04: f44f 4100 mov.w r1, #32768 ; 0x8000
8002a08: 4620 mov r0, r4
8002a0a: f7fe fcee bl 80013ea <GPIO_SetBits>
}
if ((speedRight == 0 && lapsRight > 0)
8002a0e: b905 cbnz r5, 8002a12 <motorRegulation+0xbe>
8002a10: b91e cbnz r6, 8002a1a <motorRegulation+0xc6>
|| (speedLeft == 0 && lapsLeft > 0)) {
8002a12: b9df cbnz r7, 8002a4c <motorRegulation+0xf8>
8002a14: f1b8 0f00 cmp.w r8, #0
8002a18: d018 beq.n 8002a4c <motorRegulation+0xf8>
8002a1a: e7fe b.n 8002a1a <motorRegulation+0xc6>
GPIO_SetBits(GPIOB, GPIO_Pin_15);
8002a1c: 4c15 ldr r4, [pc, #84] ; (8002a74 <motorRegulation+0x120>)
8002a1e: f44f 4100 mov.w r1, #32768 ; 0x8000
8002a22: 4620 mov r0, r4
8002a24: f7fe fce1 bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
8002a28: f44f 4180 mov.w r1, #16384 ; 0x4000
8002a2c: 4620 mov r0, r4
8002a2e: f7fe fcde bl 80013ee <GPIO_ResetBits>
break;
8002a32: e7ec b.n 8002a0e <motorRegulation+0xba>
GPIO_SetBits(GPIOB, GPIO_Pin_14);
8002a34: 4c0f ldr r4, [pc, #60] ; (8002a74 <motorRegulation+0x120>)
8002a36: f44f 4180 mov.w r1, #16384 ; 0x4000
8002a3a: 4620 mov r0, r4
8002a3c: f7fe fcd5 bl 80013ea <GPIO_SetBits>
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
8002a40: f44f 4100 mov.w r1, #32768 ; 0x8000
8002a44: 4620 mov r0, r4
8002a46: f7fe fcd2 bl 80013ee <GPIO_ResetBits>
break;
8002a4a: e7e0 b.n 8002a0e <motorRegulation+0xba>
while (1);
}
G_lapsLeft = lapsLeft;
8002a4c: 4b0a ldr r3, [pc, #40] ; (8002a78 <motorRegulation+0x124>)
8002a4e: f8a3 8000 strh.w r8, [r3]
G_speedLeft = speedLeft;
8002a52: 4b0a ldr r3, [pc, #40] ; (8002a7c <motorRegulation+0x128>)
8002a54: 801f strh r7, [r3, #0]
G_lapsRight = lapsRight;
8002a56: 4b0a ldr r3, [pc, #40] ; (8002a80 <motorRegulation+0x12c>)
8002a58: 801e strh r6, [r3, #0]
G_speedRight = speedRight;
8002a5a: 4b0a ldr r3, [pc, #40] ; (8002a84 <motorRegulation+0x130>)
8002a5c: 801d strh r5, [r3, #0]
asservissement = 1;
8002a5e: 2201 movs r2, #1
8002a60: 4b09 ldr r3, [pc, #36] ; (8002a88 <motorRegulation+0x134>)
8002a62: 801a strh r2, [r3, #0]
tourPositionD = 0;
8002a64: 2300 movs r3, #0
8002a66: 4a09 ldr r2, [pc, #36] ; (8002a8c <motorRegulation+0x138>)
8002a68: 8013 strh r3, [r2, #0]
tourPositionG = 0;
8002a6a: 4a09 ldr r2, [pc, #36] ; (8002a90 <motorRegulation+0x13c>)
8002a6c: 8013 strh r3, [r2, #0]
8002a6e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
8002a72: bf00 nop
8002a74: 40010c00 .word 0x40010c00
8002a78: 2000031e .word 0x2000031e
8002a7c: 20000014 .word 0x20000014
8002a80: 2000032c .word 0x2000032c
8002a84: 20000016 .word 0x20000016
8002a88: 2000031a .word 0x2000031a
8002a8c: 20000318 .word 0x20000318
8002a90: 20000328 .word 0x20000328
08002a94 <TIM1_CC_IRQHandler>:
* de tour des deux roues.
*
* @param None
* @retval None
*/
void TIM1_CC_IRQHandler(void) {
8002a94: b508 push {r3, lr}
if (TIM_GetITStatus(TIM1, TIM_IT_CC1) == SET) {
8002a96: 2102 movs r1, #2
8002a98: 4812 ldr r0, [pc, #72] ; (8002ae4 <TIM1_CC_IRQHandler+0x50>)
8002a9a: f7ff f802 bl 8001aa2 <TIM_GetITStatus>
8002a9e: 2801 cmp r0, #1
8002aa0: d006 beq.n 8002ab0 <TIM1_CC_IRQHandler+0x1c>
TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);
tourD++;
tourPositionD++;
}
if (TIM_GetITStatus(TIM1, TIM_IT_CC3) == SET) {
8002aa2: 2108 movs r1, #8
8002aa4: 480f ldr r0, [pc, #60] ; (8002ae4 <TIM1_CC_IRQHandler+0x50>)
8002aa6: f7fe fffc bl 8001aa2 <TIM_GetITStatus>
8002aaa: 2801 cmp r0, #1
8002aac: d00d beq.n 8002aca <TIM1_CC_IRQHandler+0x36>
8002aae: bd08 pop {r3, pc}
TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);
8002ab0: 2102 movs r1, #2
8002ab2: 480c ldr r0, [pc, #48] ; (8002ae4 <TIM1_CC_IRQHandler+0x50>)
8002ab4: f7ff f801 bl 8001aba <TIM_ClearITPendingBit>
tourD++;
8002ab8: 4a0b ldr r2, [pc, #44] ; (8002ae8 <TIM1_CC_IRQHandler+0x54>)
8002aba: 8813 ldrh r3, [r2, #0]
8002abc: 3301 adds r3, #1
8002abe: 8013 strh r3, [r2, #0]
tourPositionD++;
8002ac0: 4a0a ldr r2, [pc, #40] ; (8002aec <TIM1_CC_IRQHandler+0x58>)
8002ac2: 8813 ldrh r3, [r2, #0]
8002ac4: 3301 adds r3, #1
8002ac6: 8013 strh r3, [r2, #0]
8002ac8: e7eb b.n 8002aa2 <TIM1_CC_IRQHandler+0xe>
TIM_ClearITPendingBit(TIM1, TIM_IT_CC3);
8002aca: 2108 movs r1, #8
8002acc: 4805 ldr r0, [pc, #20] ; (8002ae4 <TIM1_CC_IRQHandler+0x50>)
8002ace: f7fe fff4 bl 8001aba <TIM_ClearITPendingBit>
tourG++;
8002ad2: 4a07 ldr r2, [pc, #28] ; (8002af0 <TIM1_CC_IRQHandler+0x5c>)
8002ad4: 8813 ldrh r3, [r2, #0]
8002ad6: 3301 adds r3, #1
8002ad8: 8013 strh r3, [r2, #0]
tourPositionG++;
8002ada: 4a06 ldr r2, [pc, #24] ; (8002af4 <TIM1_CC_IRQHandler+0x60>)
8002adc: 8813 ldrh r3, [r2, #0]
8002ade: 3301 adds r3, #1
8002ae0: 8013 strh r3, [r2, #0]
}
}
8002ae2: e7e4 b.n 8002aae <TIM1_CC_IRQHandler+0x1a>
8002ae4: 40012c00 .word 0x40012c00
8002ae8: 20000224 .word 0x20000224
8002aec: 20000318 .word 0x20000318
8002af0: 20000226 .word 0x20000226
8002af4: 20000328 .word 0x20000328
08002af8 <motorManagement>:
* @brief Gestion de l'asservissement des moteurs
*
* @param None
* @retval None
*/
void motorManagement(void) {
8002af8: b5f8 push {r3, r4, r5, r6, r7, lr}
if (regulation_vitesseD) {
8002afa: 4b68 ldr r3, [pc, #416] ; (8002c9c <motorManagement+0x1a4>)
8002afc: 881b ldrh r3, [r3, #0]
8002afe: 2b00 cmp r3, #0
8002b00: d045 beq.n 8002b8e <motorManagement+0x96>
erreurD = (signed int) G_speedRight - (signed int) tourD;
8002b02: 4b67 ldr r3, [pc, #412] ; (8002ca0 <motorManagement+0x1a8>)
8002b04: 8818 ldrh r0, [r3, #0]
8002b06: 4b67 ldr r3, [pc, #412] ; (8002ca4 <motorManagement+0x1ac>)
8002b08: 881b ldrh r3, [r3, #0]
8002b0a: 1ac0 subs r0, r0, r3
8002b0c: 4b66 ldr r3, [pc, #408] ; (8002ca8 <motorManagement+0x1b0>)
8002b0e: 6018 str r0, [r3, #0]
motD = kp * erreurD + integration1;
8002b10: f7fd ffd2 bl 8000ab8 <__aeabi_i2f>
8002b14: 4607 mov r7, r0
8002b16: 4965 ldr r1, [pc, #404] ; (8002cac <motorManagement+0x1b4>)
8002b18: f7fe f822 bl 8000b60 <__aeabi_fmul>
8002b1c: 4d64 ldr r5, [pc, #400] ; (8002cb0 <motorManagement+0x1b8>)
8002b1e: 682e ldr r6, [r5, #0]
8002b20: 4631 mov r1, r6
8002b22: f7fd ff15 bl 8000950 <__addsf3>
8002b26: 4604 mov r4, r0
8002b28: 4b62 ldr r3, [pc, #392] ; (8002cb4 <motorManagement+0x1bc>)
8002b2a: 6018 str r0, [r3, #0]
integration1 += ki * erreurD;
8002b2c: f04f 517f mov.w r1, #1069547520 ; 0x3fc00000
8002b30: 4638 mov r0, r7
8002b32: f7fe f815 bl 8000b60 <__aeabi_fmul>
8002b36: 4601 mov r1, r0
8002b38: 4630 mov r0, r6
8002b3a: f7fd ff09 bl 8000950 <__addsf3>
8002b3e: 6028 str r0, [r5, #0]
if (motD > 255) motD = 255;
8002b40: 495d ldr r1, [pc, #372] ; (8002cb8 <motorManagement+0x1c0>)
8002b42: 4620 mov r0, r4
8002b44: f7fe f9c8 bl 8000ed8 <__aeabi_fcmpgt>
8002b48: b110 cbz r0, 8002b50 <motorManagement+0x58>
8002b4a: 4a5b ldr r2, [pc, #364] ; (8002cb8 <motorManagement+0x1c0>)
8002b4c: 4b59 ldr r3, [pc, #356] ; (8002cb4 <motorManagement+0x1bc>)
8002b4e: 601a str r2, [r3, #0]
if (motD < 0) motD = 0;
8002b50: 2100 movs r1, #0
8002b52: 4b58 ldr r3, [pc, #352] ; (8002cb4 <motorManagement+0x1bc>)
8002b54: 6818 ldr r0, [r3, #0]
8002b56: f7fe f9a1 bl 8000e9c <__aeabi_fcmplt>
8002b5a: 2800 cmp r0, #0
8002b5c: d168 bne.n 8002c30 <motorManagement+0x138>
motD = (uint16_t) motD;
8002b5e: 4d55 ldr r5, [pc, #340] ; (8002cb4 <motorManagement+0x1bc>)
8002b60: 6828 ldr r0, [r5, #0]
8002b62: f7fe f9c3 bl 8000eec <__aeabi_f2uiz>
8002b66: b284 uxth r4, r0
8002b68: 4620 mov r0, r4
8002b6a: f7fd ffa1 bl 8000ab0 <__aeabi_ui2f>
8002b6e: 6028 str r0, [r5, #0]
motorSpeedUpdateRight(motD);
8002b70: 4620 mov r0, r4
8002b72: f7ff fee6 bl 8002942 <motorSpeedUpdateRight>
tourD = 0;
8002b76: 2300 movs r3, #0
8002b78: 4a4a ldr r2, [pc, #296] ; (8002ca4 <motorManagement+0x1ac>)
8002b7a: 8013 strh r3, [r2, #0]
regulation_vitesseD = 0;
8002b7c: 4a47 ldr r2, [pc, #284] ; (8002c9c <motorManagement+0x1a4>)
8002b7e: 8013 strh r3, [r2, #0]
if (G_lapsRight - tourPositionD < 0) {
8002b80: 4b4e ldr r3, [pc, #312] ; (8002cbc <motorManagement+0x1c4>)
8002b82: 881b ldrh r3, [r3, #0]
8002b84: 4a4e ldr r2, [pc, #312] ; (8002cc0 <motorManagement+0x1c8>)
8002b86: 8812 ldrh r2, [r2, #0]
8002b88: 1a9b subs r3, r3, r2
8002b8a: 2b00 cmp r3, #0
8002b8c: db54 blt.n 8002c38 <motorManagement+0x140>
motorCmdRight(BRAKE, 255);
}
}
if (regulation_vitesseG) {
8002b8e: 4b4d ldr r3, [pc, #308] ; (8002cc4 <motorManagement+0x1cc>)
8002b90: 881b ldrh r3, [r3, #0]
8002b92: 2b00 cmp r3, #0
8002b94: d044 beq.n 8002c20 <motorManagement+0x128>
erreurG = (signed int) G_speedLeft - (signed int) tourG;
8002b96: 4b4c ldr r3, [pc, #304] ; (8002cc8 <motorManagement+0x1d0>)
8002b98: 8818 ldrh r0, [r3, #0]
8002b9a: 4b4c ldr r3, [pc, #304] ; (8002ccc <motorManagement+0x1d4>)
8002b9c: 881b ldrh r3, [r3, #0]
8002b9e: 1ac0 subs r0, r0, r3
8002ba0: 4b4b ldr r3, [pc, #300] ; (8002cd0 <motorManagement+0x1d8>)
8002ba2: 6018 str r0, [r3, #0]
motG = kp * erreurG + integration2;
8002ba4: f7fd ff88 bl 8000ab8 <__aeabi_i2f>
8002ba8: 4607 mov r7, r0
8002baa: 4940 ldr r1, [pc, #256] ; (8002cac <motorManagement+0x1b4>)
8002bac: f7fd ffd8 bl 8000b60 <__aeabi_fmul>
8002bb0: 4d48 ldr r5, [pc, #288] ; (8002cd4 <motorManagement+0x1dc>)
8002bb2: 682e ldr r6, [r5, #0]
8002bb4: 4631 mov r1, r6
8002bb6: f7fd fecb bl 8000950 <__addsf3>
8002bba: 4604 mov r4, r0
8002bbc: 4b46 ldr r3, [pc, #280] ; (8002cd8 <motorManagement+0x1e0>)
8002bbe: 6018 str r0, [r3, #0]
integration2 += ki * erreurG;
8002bc0: f04f 517f mov.w r1, #1069547520 ; 0x3fc00000
8002bc4: 4638 mov r0, r7
8002bc6: f7fd ffcb bl 8000b60 <__aeabi_fmul>
8002bca: 4601 mov r1, r0
8002bcc: 4630 mov r0, r6
8002bce: f7fd febf bl 8000950 <__addsf3>
8002bd2: 6028 str r0, [r5, #0]
if (motG > 255) motG = 255;
8002bd4: 4938 ldr r1, [pc, #224] ; (8002cb8 <motorManagement+0x1c0>)
8002bd6: 4620 mov r0, r4
8002bd8: f7fe f97e bl 8000ed8 <__aeabi_fcmpgt>
8002bdc: b110 cbz r0, 8002be4 <motorManagement+0xec>
8002bde: 4a36 ldr r2, [pc, #216] ; (8002cb8 <motorManagement+0x1c0>)
8002be0: 4b3d ldr r3, [pc, #244] ; (8002cd8 <motorManagement+0x1e0>)
8002be2: 601a str r2, [r3, #0]
if (motG < 0) motG = 0;
8002be4: 2100 movs r1, #0
8002be6: 4b3c ldr r3, [pc, #240] ; (8002cd8 <motorManagement+0x1e0>)
8002be8: 6818 ldr r0, [r3, #0]
8002bea: f7fe f957 bl 8000e9c <__aeabi_fcmplt>
8002bee: bb40 cbnz r0, 8002c42 <motorManagement+0x14a>
motG = (uint16_t) motG;
8002bf0: 4d39 ldr r5, [pc, #228] ; (8002cd8 <motorManagement+0x1e0>)
8002bf2: 6828 ldr r0, [r5, #0]
8002bf4: f7fe f97a bl 8000eec <__aeabi_f2uiz>
8002bf8: b284 uxth r4, r0
8002bfa: 4620 mov r0, r4
8002bfc: f7fd ff58 bl 8000ab0 <__aeabi_ui2f>
8002c00: 6028 str r0, [r5, #0]
motorSpeedUpdateLeft(motG);
8002c02: 4620 mov r0, r4
8002c04: f7ff fe94 bl 8002930 <motorSpeedUpdateLeft>
tourG = 0;
8002c08: 2300 movs r3, #0
8002c0a: 4a30 ldr r2, [pc, #192] ; (8002ccc <motorManagement+0x1d4>)
8002c0c: 8013 strh r3, [r2, #0]
regulation_vitesseG = 0;
8002c0e: 4a2d ldr r2, [pc, #180] ; (8002cc4 <motorManagement+0x1cc>)
8002c10: 8013 strh r3, [r2, #0]
if (G_lapsLeft - tourPositionG < 0) {
8002c12: 4b32 ldr r3, [pc, #200] ; (8002cdc <motorManagement+0x1e4>)
8002c14: 881b ldrh r3, [r3, #0]
8002c16: 4a32 ldr r2, [pc, #200] ; (8002ce0 <motorManagement+0x1e8>)
8002c18: 8812 ldrh r2, [r2, #0]
8002c1a: 1a9b subs r3, r3, r2
8002c1c: 2b00 cmp r3, #0
8002c1e: db14 blt.n 8002c4a <motorManagement+0x152>
motorCmdLeft(BRAKE, 255);
}
}
if (G_lapsLeft - tourPositionG < 0 && G_lapsRight - tourPositionD < 0
8002c20: 4b2e ldr r3, [pc, #184] ; (8002cdc <motorManagement+0x1e4>)
8002c22: 881b ldrh r3, [r3, #0]
8002c24: 4a2e ldr r2, [pc, #184] ; (8002ce0 <motorManagement+0x1e8>)
8002c26: 8812 ldrh r2, [r2, #0]
8002c28: 1a9b subs r3, r3, r2
8002c2a: 2b00 cmp r3, #0
8002c2c: db12 blt.n 8002c54 <motorManagement+0x15c>
8002c2e: bdf8 pop {r3, r4, r5, r6, r7, pc}
if (motD < 0) motD = 0;
8002c30: 2200 movs r2, #0
8002c32: 4b20 ldr r3, [pc, #128] ; (8002cb4 <motorManagement+0x1bc>)
8002c34: 601a str r2, [r3, #0]
8002c36: e792 b.n 8002b5e <motorManagement+0x66>
motorCmdRight(BRAKE, 255);
8002c38: 21ff movs r1, #255 ; 0xff
8002c3a: 200d movs r0, #13
8002c3c: f7ff fdf6 bl 800282c <motorCmdRight>
8002c40: e7a5 b.n 8002b8e <motorManagement+0x96>
if (motG < 0) motG = 0;
8002c42: 2200 movs r2, #0
8002c44: 4b24 ldr r3, [pc, #144] ; (8002cd8 <motorManagement+0x1e0>)
8002c46: 601a str r2, [r3, #0]
8002c48: e7d2 b.n 8002bf0 <motorManagement+0xf8>
motorCmdLeft(BRAKE, 255);
8002c4a: 21ff movs r1, #255 ; 0xff
8002c4c: 200d movs r0, #13
8002c4e: f7ff fe2d bl 80028ac <motorCmdLeft>
8002c52: e7e5 b.n 8002c20 <motorManagement+0x128>
if (G_lapsLeft - tourPositionG < 0 && G_lapsRight - tourPositionD < 0
8002c54: 4b19 ldr r3, [pc, #100] ; (8002cbc <motorManagement+0x1c4>)
8002c56: 881b ldrh r3, [r3, #0]
8002c58: 4a19 ldr r2, [pc, #100] ; (8002cc0 <motorManagement+0x1c8>)
8002c5a: 8812 ldrh r2, [r2, #0]
8002c5c: 1a9b subs r3, r3, r2
8002c5e: 2b00 cmp r3, #0
8002c60: dae5 bge.n 8002c2e <motorManagement+0x136>
&& asservissement == 1) {
8002c62: 4b20 ldr r3, [pc, #128] ; (8002ce4 <motorManagement+0x1ec>)
8002c64: 881b ldrh r3, [r3, #0]
8002c66: 2b01 cmp r3, #1
8002c68: d1e1 bne.n 8002c2e <motorManagement+0x136>
motorCmdLeft(BRAKE, 255);
8002c6a: 21ff movs r1, #255 ; 0xff
8002c6c: 200d movs r0, #13
8002c6e: f7ff fe1d bl 80028ac <motorCmdLeft>
motorCmdRight(BRAKE, 255);
8002c72: 21ff movs r1, #255 ; 0xff
8002c74: 200d movs r0, #13
8002c76: f7ff fdd9 bl 800282c <motorCmdRight>
asservissement = 0;
8002c7a: 2300 movs r3, #0
8002c7c: 4a19 ldr r2, [pc, #100] ; (8002ce4 <motorManagement+0x1ec>)
8002c7e: 8013 strh r3, [r2, #0]
erreurD = 0;
8002c80: 4a09 ldr r2, [pc, #36] ; (8002ca8 <motorManagement+0x1b0>)
8002c82: 6013 str r3, [r2, #0]
erreurG = 0;
8002c84: 4a12 ldr r2, [pc, #72] ; (8002cd0 <motorManagement+0x1d8>)
8002c86: 6013 str r3, [r2, #0]
integration1 = 0;
8002c88: 2200 movs r2, #0
8002c8a: 4909 ldr r1, [pc, #36] ; (8002cb0 <motorManagement+0x1b8>)
8002c8c: 600a str r2, [r1, #0]
integration2 = 0;
8002c8e: 4911 ldr r1, [pc, #68] ; (8002cd4 <motorManagement+0x1dc>)
8002c90: 600a str r2, [r1, #0]
Dumber.busyState = FALSE;
8002c92: 4a15 ldr r2, [pc, #84] ; (8002ce8 <motorManagement+0x1f0>)
8002c94: 2132 movs r1, #50 ; 0x32
8002c96: 73d1 strb r1, [r2, #15]
Dumber.cpt_inactivity = 0;
8002c98: 6113 str r3, [r2, #16]
}
}
8002c9a: e7c8 b.n 8002c2e <motorManagement+0x136>
8002c9c: 2000032a .word 0x2000032a
8002ca0: 20000016 .word 0x20000016
8002ca4: 20000224 .word 0x20000224
8002ca8: 20000320 .word 0x20000320
8002cac: 41700000 .word 0x41700000
8002cb0: 20000214 .word 0x20000214
8002cb4: 2000021c .word 0x2000021c
8002cb8: 437f0000 .word 0x437f0000
8002cbc: 2000032c .word 0x2000032c
8002cc0: 20000318 .word 0x20000318
8002cc4: 2000031c .word 0x2000031c
8002cc8: 20000014 .word 0x20000014
8002ccc: 20000226 .word 0x20000226
8002cd0: 20000324 .word 0x20000324
8002cd4: 20000218 .word 0x20000218
8002cd8: 20000220 .word 0x20000220
8002cdc: 2000031e .word 0x2000031e
8002ce0: 20000328 .word 0x20000328
8002ce4: 2000031a .word 0x2000031a
8002ce8: 20000330 .word 0x20000330
08002cec <NMI_Handler>:
/******************************************************************************/
/**
* @brief This function handles NMI exception.
*/
void NMI_Handler(void) {
8002cec: b480 push {r7}
8002cee: af00 add r7, sp, #0
}
8002cf0: bf00 nop
8002cf2: 46bd mov sp, r7
8002cf4: bc80 pop {r7}
8002cf6: 4770 bx lr
08002cf8 <HardFault_Handler>:
/**
* @brief This function handles Hard Fault exception.
*/
void HardFault_Handler(void) {
8002cf8: b480 push {r7}
8002cfa: af00 add r7, sp, #0
/* Go to infinite loop when Hard Fault exception occurs */
while (1) {
8002cfc: e7fe b.n 8002cfc <HardFault_Handler+0x4>
08002cfe <MemManage_Handler>:
}
/**
* @brief This function handles Memory Manage exception.
*/
void MemManage_Handler(void) {
8002cfe: b480 push {r7}
8002d00: af00 add r7, sp, #0
/* Go to infinite loop when Memory Manage exception occurs */
while (1) {
8002d02: e7fe b.n 8002d02 <MemManage_Handler+0x4>
08002d04 <BusFault_Handler>:
/**
* @brief This function handles Bus Fault exception.
*/
void BusFault_Handler(void) {
8002d04: b480 push {r7}
8002d06: af00 add r7, sp, #0
/* Go to infinite loop when Bus Fault exception occurs */
while (1) {
8002d08: e7fe b.n 8002d08 <BusFault_Handler+0x4>
08002d0a <UsageFault_Handler>:
}
/**
* @brief This function handles Usage Fault exception.
*/
void UsageFault_Handler(void) {
8002d0a: b480 push {r7}
8002d0c: af00 add r7, sp, #0
/* Go to infinite loop when Usage Fault exception occurs */
while (1) {
8002d0e: e7fe b.n 8002d0e <UsageFault_Handler+0x4>
08002d10 <SVC_Handler>:
}
/**
* @brief This function handles SVCall exception.
*/
void SVC_Handler(void) {
8002d10: b480 push {r7}
8002d12: af00 add r7, sp, #0
}
8002d14: bf00 nop
8002d16: 46bd mov sp, r7
8002d18: bc80 pop {r7}
8002d1a: 4770 bx lr
08002d1c <DebugMon_Handler>:
/**
* @brief This function handles Debug Monitor exception.
*/
void DebugMon_Handler(void) {
8002d1c: b480 push {r7}
8002d1e: af00 add r7, sp, #0
}
8002d20: bf00 nop
8002d22: 46bd mov sp, r7
8002d24: bc80 pop {r7}
8002d26: 4770 bx lr
08002d28 <PendSV_Handler>:
/**
* @brief This function handles PendSVC exception.
*/
void PendSV_Handler(void) {
8002d28: b480 push {r7}
8002d2a: af00 add r7, sp, #0
}
8002d2c: bf00 nop
8002d2e: 46bd mov sp, r7
8002d30: bc80 pop {r7}
8002d32: 4770 bx lr
08002d34 <_sbrk>:
errno = ENOSYS;
return -1;
}
void * _sbrk(int32_t incr)
{
8002d34: 4603 mov r3, r0
extern char end; /* Set by linker. */
static char * heap_end;
char * prev_heap_end;
if (heap_end == 0) {
8002d36: 4a06 ldr r2, [pc, #24] ; (8002d50 <_sbrk+0x1c>)
8002d38: 6812 ldr r2, [r2, #0]
8002d3a: b122 cbz r2, 8002d46 <_sbrk+0x12>
heap_end = & end;
}
prev_heap_end = heap_end;
8002d3c: 4a04 ldr r2, [pc, #16] ; (8002d50 <_sbrk+0x1c>)
8002d3e: 6810 ldr r0, [r2, #0]
heap_end += incr;
8002d40: 4403 add r3, r0
8002d42: 6013 str r3, [r2, #0]
return (void *) prev_heap_end;
}
8002d44: 4770 bx lr
heap_end = & end;
8002d46: 4903 ldr r1, [pc, #12] ; (8002d54 <_sbrk+0x20>)
8002d48: 4a01 ldr r2, [pc, #4] ; (8002d50 <_sbrk+0x1c>)
8002d4a: 6011 str r1, [r2, #0]
8002d4c: e7f6 b.n 8002d3c <_sbrk+0x8>
8002d4e: bf00 nop
8002d50: 20000228 .word 0x20000228
8002d54: 20000394 .word 0x20000394
08002d58 <systemConfigure>:
* Liaison série : USART
*@param None
*@retval None
*/
void systemConfigure(void)
{
8002d58: b510 push {r4, lr}
8002d5a: b082 sub sp, #8
GPIO_InitTypeDef Init_Structure;
// Configure le systick pour générer des interruptions toutes les 10ms.
SysTick_Config(SystemCoreClock / 100); //configuration du systick à 10ms
8002d5c: 4b1d ldr r3, [pc, #116] ; (8002dd4 <systemConfigure+0x7c>)
8002d5e: 681b ldr r3, [r3, #0]
8002d60: 4a1d ldr r2, [pc, #116] ; (8002dd8 <systemConfigure+0x80>)
8002d62: fba2 2303 umull r2, r3, r2, r3
8002d66: 095b lsrs r3, r3, #5
\return 0 Function succeeded
\return 1 Function failed
*/
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
8002d68: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000
8002d6c: d20c bcs.n 8002d88 <systemConfigure+0x30>
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
8002d6e: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000
8002d72: 3b01 subs r3, #1
8002d74: 4a19 ldr r2, [pc, #100] ; (8002ddc <systemConfigure+0x84>)
8002d76: 6053 str r3, [r2, #4]
SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */
8002d78: 21f0 movs r1, #240 ; 0xf0
8002d7a: 4b19 ldr r3, [pc, #100] ; (8002de0 <systemConfigure+0x88>)
8002d7c: f883 1023 strb.w r1, [r3, #35] ; 0x23
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
8002d80: 2300 movs r3, #0
8002d82: 6093 str r3, [r2, #8]
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
8002d84: 2307 movs r3, #7
8002d86: 6013 str r3, [r2, #0]
// Assigne et défini le GPIO necessaire pour la gestion du shutdown.
Init_Structure.GPIO_Pin = GPIO_Pin_5;
8002d88: 2120 movs r1, #32
8002d8a: f8ad 1004 strh.w r1, [sp, #4]
Init_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
8002d8e: 2310 movs r3, #16
8002d90: f88d 3007 strb.w r3, [sp, #7]
Init_Structure.GPIO_Speed = GPIO_Speed_50MHz;
8002d94: 2303 movs r3, #3
8002d96: f88d 3006 strb.w r3, [sp, #6]
GPIO_SetBits(GPIOB, GPIO_Pin_5);
8002d9a: 4c12 ldr r4, [pc, #72] ; (8002de4 <systemConfigure+0x8c>)
8002d9c: 4620 mov r0, r4
8002d9e: f7fe fb24 bl 80013ea <GPIO_SetBits>
GPIO_Init(GPIOB, &Init_Structure);
8002da2: a901 add r1, sp, #4
8002da4: 4620 mov r0, r4
8002da6: f7fe fad1 bl 800134c <GPIO_Init>
// Initialise la structure system Dumber
Dumber.BatteryPercentage = UNDEFINED;
8002daa: 4b0f ldr r3, [pc, #60] ; (8002de8 <systemConfigure+0x90>)
8002dac: 2265 movs r2, #101 ; 0x65
8002dae: 801a strh r2, [r3, #0]
Dumber.BatteryCurrent = UNDEFINED;
8002db0: 805a strh r2, [r3, #2]
// Retourne le pourcentage de charge de la batterie
Dumber.StateSystem = STATE_IDLE; // État de la MAE
8002db2: 2100 movs r1, #0
8002db4: 7119 strb r1, [r3, #4]
Dumber.AddOn = FALSE; // Un AddOn a été détecté
8002db6: 2232 movs r2, #50 ; 0x32
8002db8: 715a strb r2, [r3, #5]
Dumber.BatterieChecking = FALSE; // On doit vérifier la valeur de la batterie
8002dba: 719a strb r2, [r3, #6]
Dumber.WatchDogStartEnable = FALSE; // Le Robot a été lancé en mode WithWatchDog ou WithoutWatchDog
8002dbc: 729a strb r2, [r3, #10]
Dumber.InvalidWatchdogResetCpt=0;
8002dbe: 7399 strb r1, [r3, #14]
Dumber.cpt_watchdog = 0;
8002dc0: 8199 strh r1, [r3, #12]
Dumber.cpt_systick = 0;
8002dc2: 8119 strh r1, [r3, #8]
Dumber.cpt_inactivity = 0;
8002dc4: 6119 str r1, [r3, #16]
Dumber.acquisition = FALSE;
8002dc6: 751a strb r2, [r3, #20]
Dumber.busyState = FALSE;
8002dc8: 73da strb r2, [r3, #15]
Dumber.stateBattery = 2;
8002dca: 2202 movs r2, #2
8002dcc: 755a strb r2, [r3, #21]
}
8002dce: b002 add sp, #8
8002dd0: bd10 pop {r4, pc}
8002dd2: bf00 nop
8002dd4: 20000018 .word 0x20000018
8002dd8: 51eb851f .word 0x51eb851f
8002ddc: e000e010 .word 0xe000e010
8002de0: e000ed00 .word 0xe000ed00
8002de4: 40010c00 .word 0x40010c00
8002de8: 20000330 .word 0x20000330
08002dec <systemShutDown>:
/**
* @brief Désactive les interruptions et entre dans une boucle while (1) en attendant l'extinction du CPU.
* @param None
*/
void systemShutDown(void) {
8002dec: b508 push {r3, lr}
This function disables IRQ interrupts by setting the I-bit in the CPSR.
Can only be executed in Privileged modes.
*/
__attribute__( ( always_inline ) ) static __INLINE void __disable_irq(void)
{
__ASM volatile ("cpsid i");
8002dee: b672 cpsid i
__disable_irq();
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
8002df0: 2120 movs r1, #32
8002df2: 4802 ldr r0, [pc, #8] ; (8002dfc <systemShutDown+0x10>)
8002df4: f7fe fafb bl 80013ee <GPIO_ResetBits>
8002df8: e7fe b.n 8002df8 <systemShutDown+0xc>
8002dfa: bf00 nop
8002dfc: 40010c00 .word 0x40010c00
08002e00 <systemChangeState>:
* @brief Bascule le système dans un état.
*
* @param state: Nouvel état
* @retval None
*/
void systemChangeState(States state) {
8002e00: b510 push {r4, lr}
switch (state)
8002e02: 2804 cmp r0, #4
8002e04: d85e bhi.n 8002ec4 <systemChangeState+0xc4>
8002e06: e8df f000 tbb [pc, r0]
8002e0a: 1903 .short 0x1903
8002e0c: 2f24 .short 0x2f24
8002e0e: 4a .byte 0x4a
8002e0f: 00 .byte 0x00
{
case STATE_IDLE:
Dumber.StateSystem = STATE_IDLE;
8002e10: 4b2e ldr r3, [pc, #184] ; (8002ecc <systemChangeState+0xcc>)
8002e12: 2400 movs r4, #0
8002e14: 711c strb r4, [r3, #4]
Dumber.WatchDogStartEnable = FALSE;
8002e16: 2232 movs r2, #50 ; 0x32
8002e18: 729a strb r2, [r3, #10]
Dumber.cpt_watchdog = 0;
8002e1a: 819c strh r4, [r3, #12]
Dumber.InvalidWatchdogResetCpt=0;
8002e1c: 739c strb r4, [r3, #14]
Dumber.cpt_systick = 0;
8002e1e: 811c strh r4, [r3, #8]
GPIO_SetBits(GPIOA,GPIO_Pin_12); // Désactive les encodeurs
8002e20: f44f 5180 mov.w r1, #4096 ; 0x1000
8002e24: 482a ldr r0, [pc, #168] ; (8002ed0 <systemChangeState+0xd0>)
8002e26: f7fe fae0 bl 80013ea <GPIO_SetBits>
motorCmdLeft(BRAKE, 0);
8002e2a: 4621 mov r1, r4
8002e2c: 200d movs r0, #13
8002e2e: f7ff fd3d bl 80028ac <motorCmdLeft>
motorCmdRight(BRAKE, 0);
8002e32: 4621 mov r1, r4
8002e34: 200d movs r0, #13
8002e36: f7ff fcf9 bl 800282c <motorCmdRight>
break;
8002e3a: bd10 pop {r4, pc}
case STATE_RUN:
Dumber.StateSystem=STATE_RUN;
8002e3c: 4c23 ldr r4, [pc, #140] ; (8002ecc <systemChangeState+0xcc>)
8002e3e: 2301 movs r3, #1
8002e40: 7123 strb r3, [r4, #4]
GPIO_ResetBits(GPIOA,GPIO_Pin_12); // Active les encodeurs
8002e42: f44f 5180 mov.w r1, #4096 ; 0x1000
8002e46: 4822 ldr r0, [pc, #136] ; (8002ed0 <systemChangeState+0xd0>)
8002e48: f7fe fad1 bl 80013ee <GPIO_ResetBits>
Dumber.cpt_watchdog=0;
8002e4c: 2300 movs r3, #0
8002e4e: 81a3 strh r3, [r4, #12]
break;
8002e50: bd10 pop {r4, pc}
case STATE_LOW:
Dumber.StateSystem=STATE_LOW;
8002e52: 4c1e ldr r4, [pc, #120] ; (8002ecc <systemChangeState+0xcc>)
8002e54: 2302 movs r3, #2
8002e56: 7123 strb r3, [r4, #4]
GPIO_ResetBits(GPIOA,GPIO_Pin_12); // Active les encodeurs
8002e58: f44f 5180 mov.w r1, #4096 ; 0x1000
8002e5c: 481c ldr r0, [pc, #112] ; (8002ed0 <systemChangeState+0xd0>)
8002e5e: f7fe fac6 bl 80013ee <GPIO_ResetBits>
Dumber.cpt_watchdog=0;
8002e62: 2300 movs r3, #0
8002e64: 81a3 strh r3, [r4, #12]
break;
8002e66: bd10 pop {r4, pc}
case STATE_DISABLE:
Dumber.StateSystem=STATE_DISABLE;
8002e68: 4c18 ldr r4, [pc, #96] ; (8002ecc <systemChangeState+0xcc>)
8002e6a: 2303 movs r3, #3
8002e6c: 7123 strb r3, [r4, #4]
GPIO_SetBits(GPIOA,GPIO_Pin_12); // Désactive les encodeurs
8002e6e: f44f 5180 mov.w r1, #4096 ; 0x1000
8002e72: 4817 ldr r0, [pc, #92] ; (8002ed0 <systemChangeState+0xd0>)
8002e74: f7fe fab9 bl 80013ea <GPIO_SetBits>
motorCmdRight(BRAKE,0);
8002e78: 2100 movs r1, #0
8002e7a: 200d movs r0, #13
8002e7c: f7ff fcd6 bl 800282c <motorCmdRight>
motorCmdLeft(BRAKE,0);
8002e80: 2100 movs r1, #0
8002e82: 200d movs r0, #13
8002e84: f7ff fd12 bl 80028ac <motorCmdLeft>
Dumber.WatchDogStartEnable = FALSE;
8002e88: 2332 movs r3, #50 ; 0x32
8002e8a: 72a3 strb r3, [r4, #10]
cptMesureHigh=0;
8002e8c: 2300 movs r3, #0
8002e8e: 4a11 ldr r2, [pc, #68] ; (8002ed4 <systemChangeState+0xd4>)
8002e90: 7013 strb r3, [r2, #0]
cptMesureLow=0;
8002e92: 4a11 ldr r2, [pc, #68] ; (8002ed8 <systemChangeState+0xd8>)
8002e94: 7013 strb r3, [r2, #0]
cptMesureDisable=0;
8002e96: 4a11 ldr r2, [pc, #68] ; (8002edc <systemChangeState+0xdc>)
8002e98: 7013 strb r3, [r2, #0]
Dumber.stateBattery= 0;
8002e9a: 7563 strb r3, [r4, #21]
break;
8002e9c: bd10 pop {r4, pc}
case STATE_WATCHDOG_DISABLE:
Dumber.StateSystem=STATE_WATCHDOG_DISABLE;
8002e9e: 4c0b ldr r4, [pc, #44] ; (8002ecc <systemChangeState+0xcc>)
8002ea0: 2304 movs r3, #4
8002ea2: 7123 strb r3, [r4, #4]
GPIO_SetBits(GPIOA,GPIO_Pin_12); // Désactive les encodeurs
8002ea4: f44f 5180 mov.w r1, #4096 ; 0x1000
8002ea8: 4809 ldr r0, [pc, #36] ; (8002ed0 <systemChangeState+0xd0>)
8002eaa: f7fe fa9e bl 80013ea <GPIO_SetBits>
motorCmdRight(BRAKE,0);
8002eae: 2100 movs r1, #0
8002eb0: 200d movs r0, #13
8002eb2: f7ff fcbb bl 800282c <motorCmdRight>
motorCmdLeft(BRAKE,0);
8002eb6: 2100 movs r1, #0
8002eb8: 200d movs r0, #13
8002eba: f7ff fcf7 bl 80028ac <motorCmdLeft>
Dumber.WatchDogStartEnable = FALSE;
8002ebe: 2332 movs r3, #50 ; 0x32
8002ec0: 72a3 strb r3, [r4, #10]
break;
8002ec2: bd10 pop {r4, pc}
default:
/* Unknown state -> go into DISABLE */
systemChangeState(STATE_DISABLE);
8002ec4: 2003 movs r0, #3
8002ec6: f7ff ff9b bl 8002e00 <systemChangeState>
8002eca: bd10 pop {r4, pc}
8002ecc: 20000330 .word 0x20000330
8002ed0: 40010800 .word 0x40010800
8002ed4: 20000210 .word 0x20000210
8002ed8: 20000211 .word 0x20000211
8002edc: 20000208 .word 0x20000208
08002ee0 <systemResetWatchdog>:
* @brief Remise à zéro du watchdog, en fonction de l'état en cours.
*
* @param None
* @retval None
*/
char systemResetWatchdog(void) {
8002ee0: b508 push {r3, lr}
char resultat =0;
if ((Dumber.StateSystem == STATE_RUN) || (Dumber.StateSystem == STATE_LOW)) { // si on est actif
8002ee2: 4b14 ldr r3, [pc, #80] ; (8002f34 <systemResetWatchdog+0x54>)
8002ee4: 791b ldrb r3, [r3, #4]
8002ee6: 3b01 subs r3, #1
8002ee8: b2db uxtb r3, r3
8002eea: 2b01 cmp r3, #1
8002eec: d901 bls.n 8002ef2 <systemResetWatchdog+0x12>
char resultat =0;
8002eee: 2000 movs r0, #0
8002ef0: bd08 pop {r3, pc}
if (Dumber.WatchDogStartEnable == TRUE) { // si le watchdog est lancé
8002ef2: 4b10 ldr r3, [pc, #64] ; (8002f34 <systemResetWatchdog+0x54>)
8002ef4: 7a9b ldrb r3, [r3, #10]
8002ef6: 2b28 cmp r3, #40 ; 0x28
8002ef8: d001 beq.n 8002efe <systemResetWatchdog+0x1e>
char resultat =0;
8002efa: 2000 movs r0, #0
resultat=1;
}
}
return resultat;
}
8002efc: bd08 pop {r3, pc}
if ((Dumber.cpt_watchdog >= WATCHDOG_MIN) && (Dumber.cpt_watchdog <= WATCHDOG_MAX)) { // si le watchdog est dans sa plage réarmable
8002efe: 4b0d ldr r3, [pc, #52] ; (8002f34 <systemResetWatchdog+0x54>)
8002f00: 899b ldrh r3, [r3, #12]
8002f02: f2a3 33ca subw r3, r3, #970 ; 0x3ca
8002f06: b29b uxth r3, r3
8002f08: 2b3c cmp r3, #60 ; 0x3c
8002f0a: d807 bhi.n 8002f1c <systemResetWatchdog+0x3c>
Dumber.InvalidWatchdogResetCpt=0; // on remet le compteur d'erreur à zéro
8002f0c: 2200 movs r2, #0
8002f0e: 4b09 ldr r3, [pc, #36] ; (8002f34 <systemResetWatchdog+0x54>)
8002f10: 739a strb r2, [r3, #14]
Dumber.cpt_watchdog = 0; // on remet le watchdog à zéro
8002f12: 2200 movs r2, #0
8002f14: 4b07 ldr r3, [pc, #28] ; (8002f34 <systemResetWatchdog+0x54>)
8002f16: 819a strh r2, [r3, #12]
resultat=1;
8002f18: 2001 movs r0, #1
8002f1a: bd08 pop {r3, pc}
Dumber.InvalidWatchdogResetCpt++; // on incrémente le compteur d'erreur
8002f1c: 4a05 ldr r2, [pc, #20] ; (8002f34 <systemResetWatchdog+0x54>)
8002f1e: 7b93 ldrb r3, [r2, #14]
8002f20: 3301 adds r3, #1
8002f22: b2db uxtb r3, r3
8002f24: 7393 strb r3, [r2, #14]
if (Dumber.InvalidWatchdogResetCpt>WATCHDOG_INVALID_COUNTER_MAX) // on a atteint le max d'erreur possible
8002f26: 2b03 cmp r3, #3
8002f28: d9f3 bls.n 8002f12 <systemResetWatchdog+0x32>
systemChangeState(STATE_WATCHDOG_DISABLE); // le système est désactivé
8002f2a: 2004 movs r0, #4
8002f2c: f7ff ff68 bl 8002e00 <systemChangeState>
8002f30: e7ef b.n 8002f12 <systemResetWatchdog+0x32>
8002f32: bf00 nop
8002f34: 20000330 .word 0x20000330
08002f38 <SysTick_Handler>:
* Défini les valeurs d'inactivités.
* Défini la valeur de clignotement de la LED.
*
* @note Tout ces temps sont calculés sous base du systick.
*/
void SysTick_Handler(void){
8002f38: b508 push {r3, lr}
Dumber.cpt_systick+=10;
8002f3a: 492f ldr r1, [pc, #188] ; (8002ff8 <SysTick_Handler+0xc0>)
8002f3c: 890b ldrh r3, [r1, #8]
8002f3e: 330a adds r3, #10
8002f40: b29a uxth r2, r3
8002f42: 810a strh r2, [r1, #8]
Dumber.cpt_inactivity+=10;
8002f44: 690b ldr r3, [r1, #16]
8002f46: 330a adds r3, #10
8002f48: 610b str r3, [r1, #16]
if(asservissement == 1){
8002f4a: 4b2c ldr r3, [pc, #176] ; (8002ffc <SysTick_Handler+0xc4>)
8002f4c: 881b ldrh r3, [r3, #0]
8002f4e: 2b01 cmp r3, #1
8002f50: d038 beq.n 8002fc4 <SysTick_Handler+0x8c>
regulation_vitesseD =1;
regulation_vitesseG =1;
}
if(Dumber.cpt_systick % TIMER_1s==0) Dumber.cpt_systick=0;
8002f52: 4b2b ldr r3, [pc, #172] ; (8003000 <SysTick_Handler+0xc8>)
8002f54: fba3 1302 umull r1, r3, r3, r2
8002f58: 099b lsrs r3, r3, #6
8002f5a: f44f 717a mov.w r1, #1000 ; 0x3e8
8002f5e: fb01 2313 mls r3, r1, r3, r2
8002f62: b29b uxth r3, r3
8002f64: b913 cbnz r3, 8002f6c <SysTick_Handler+0x34>
8002f66: 2200 movs r2, #0
8002f68: 4b23 ldr r3, [pc, #140] ; (8002ff8 <SysTick_Handler+0xc0>)
8002f6a: 811a strh r2, [r3, #8]
/* Gestion du watchdog */
if((Dumber.WatchDogStartEnable == TRUE) && (Dumber.StateSystem != STATE_IDLE))
8002f6c: 4b22 ldr r3, [pc, #136] ; (8002ff8 <SysTick_Handler+0xc0>)
8002f6e: 7a9b ldrb r3, [r3, #10]
8002f70: 2b28 cmp r3, #40 ; 0x28
8002f72: d02c beq.n 8002fce <SysTick_Handler+0x96>
Dumber.cpt_watchdog+=10;
else
Dumber.cpt_watchdog=0;
8002f74: 2200 movs r2, #0
8002f76: 4b20 ldr r3, [pc, #128] ; (8002ff8 <SysTick_Handler+0xc0>)
8002f78: 819a strh r2, [r3, #12]
if (Dumber.cpt_watchdog > WATCHDOG_MAX) {
8002f7a: 4b1f ldr r3, [pc, #124] ; (8002ff8 <SysTick_Handler+0xc0>)
8002f7c: 899a ldrh r2, [r3, #12]
8002f7e: f240 4306 movw r3, #1030 ; 0x406
8002f82: 429a cmp r2, r3
8002f84: d905 bls.n 8002f92 <SysTick_Handler+0x5a>
Dumber.cpt_watchdog=30; // pour avoir toujours un watchdog cadancé à 1000 ms, et pas 1030ms
8002f86: 4b1c ldr r3, [pc, #112] ; (8002ff8 <SysTick_Handler+0xc0>)
8002f88: 221e movs r2, #30
8002f8a: 819a strh r2, [r3, #12]
Dumber.InvalidWatchdogResetCpt++;
8002f8c: 7b9a ldrb r2, [r3, #14]
8002f8e: 3201 adds r2, #1
8002f90: 739a strb r2, [r3, #14]
}
if (Dumber.InvalidWatchdogResetCpt > WATCHDOG_INVALID_COUNTER_MAX) {
8002f92: 4b19 ldr r3, [pc, #100] ; (8002ff8 <SysTick_Handler+0xc0>)
8002f94: 7b9b ldrb r3, [r3, #14]
8002f96: 2b03 cmp r3, #3
8002f98: d822 bhi.n 8002fe0 <SysTick_Handler+0xa8>
systemChangeState(STATE_WATCHDOG_DISABLE);
}
if(Dumber.cpt_systick % 500 == 0){
8002f9a: 4b17 ldr r3, [pc, #92] ; (8002ff8 <SysTick_Handler+0xc0>)
8002f9c: 891a ldrh r2, [r3, #8]
8002f9e: 4b18 ldr r3, [pc, #96] ; (8003000 <SysTick_Handler+0xc8>)
8002fa0: fba3 1302 umull r1, r3, r3, r2
8002fa4: 095b lsrs r3, r3, #5
8002fa6: f44f 71fa mov.w r1, #500 ; 0x1f4
8002faa: fb01 2313 mls r3, r1, r3, r2
8002fae: b29b uxth r3, r3
8002fb0: b1d3 cbz r3, 8002fe8 <SysTick_Handler+0xb0>
if (etatLED ==12) etatLED = 0;
}*/
#if !defined (__NO_INACTIVITY_SHUTDOWN__)
if(Dumber.cpt_inactivity>=120000){
8002fb2: 4b11 ldr r3, [pc, #68] ; (8002ff8 <SysTick_Handler+0xc0>)
8002fb4: 691a ldr r2, [r3, #16]
8002fb6: 4b13 ldr r3, [pc, #76] ; (8003004 <SysTick_Handler+0xcc>)
8002fb8: 429a cmp r2, r3
8002fba: dc1b bgt.n 8002ff4 <SysTick_Handler+0xbc>
}
#else
#warning "Shutdown after inactivity period disabled! Not for production !!!"
#endif /* __NO_INACTIVITY_SHUTDOWN__ */
Dumber.flagSystick=1;
8002fbc: 2201 movs r2, #1
8002fbe: 4b0e ldr r3, [pc, #56] ; (8002ff8 <SysTick_Handler+0xc0>)
8002fc0: 759a strb r2, [r3, #22]
8002fc2: bd08 pop {r3, pc}
regulation_vitesseD =1;
8002fc4: 4910 ldr r1, [pc, #64] ; (8003008 <SysTick_Handler+0xd0>)
8002fc6: 800b strh r3, [r1, #0]
regulation_vitesseG =1;
8002fc8: 4910 ldr r1, [pc, #64] ; (800300c <SysTick_Handler+0xd4>)
8002fca: 800b strh r3, [r1, #0]
8002fcc: e7c1 b.n 8002f52 <SysTick_Handler+0x1a>
if((Dumber.WatchDogStartEnable == TRUE) && (Dumber.StateSystem != STATE_IDLE))
8002fce: 4b0a ldr r3, [pc, #40] ; (8002ff8 <SysTick_Handler+0xc0>)
8002fd0: 791b ldrb r3, [r3, #4]
8002fd2: 2b00 cmp r3, #0
8002fd4: d0ce beq.n 8002f74 <SysTick_Handler+0x3c>
Dumber.cpt_watchdog+=10;
8002fd6: 4a08 ldr r2, [pc, #32] ; (8002ff8 <SysTick_Handler+0xc0>)
8002fd8: 8993 ldrh r3, [r2, #12]
8002fda: 330a adds r3, #10
8002fdc: 8193 strh r3, [r2, #12]
8002fde: e7cc b.n 8002f7a <SysTick_Handler+0x42>
systemChangeState(STATE_WATCHDOG_DISABLE);
8002fe0: 2004 movs r0, #4
8002fe2: f7ff ff0d bl 8002e00 <systemChangeState>
8002fe6: e7d8 b.n 8002f9a <SysTick_Handler+0x62>
Dumber.acquisition=VOLTAGE;
8002fe8: 2262 movs r2, #98 ; 0x62
8002fea: 4b03 ldr r3, [pc, #12] ; (8002ff8 <SysTick_Handler+0xc0>)
8002fec: 751a strb r2, [r3, #20]
batteryRefreshData();
8002fee: f7fe fefb bl 8001de8 <batteryRefreshData>
8002ff2: e7de b.n 8002fb2 <SysTick_Handler+0x7a>
systemShutDown();
8002ff4: f7ff fefa bl 8002dec <systemShutDown>
8002ff8: 20000330 .word 0x20000330
8002ffc: 2000031a .word 0x2000031a
8003000: 10624dd3 .word 0x10624dd3
8003004: 0001d4bf .word 0x0001d4bf
8003008: 2000032a .word 0x2000032a
800300c: 2000031c .word 0x2000031c
08003010 <ts_itoa>:
** Abstract: Convert integer to ascii
** Returns: void
**---------------------------------------------------------------------------
*/
void ts_itoa(char **buf, unsigned int d, int base)
{
8003010: b470 push {r4, r5, r6}
int div = 1;
8003012: 2301 movs r3, #1
while (d/div >= base)
8003014: e001 b.n 800301a <ts_itoa+0xa>
div *= base;
8003016: fb02 f303 mul.w r3, r2, r3
while (d/div >= base)
800301a: fbb1 f4f3 udiv r4, r1, r3
800301e: 4294 cmp r4, r2
8003020: d2f9 bcs.n 8003016 <ts_itoa+0x6>
8003022: e004 b.n 800302e <ts_itoa+0x1e>
d = d%div;
div /= base;
if (num > 9)
*((*buf)++) = (num-10) + 'A';
else
*((*buf)++) = num + '0';
8003024: 6805 ldr r5, [r0, #0]
8003026: 1c6e adds r6, r5, #1
8003028: 6006 str r6, [r0, #0]
800302a: 3430 adds r4, #48 ; 0x30
800302c: 702c strb r4, [r5, #0]
while (div != 0)
800302e: b16b cbz r3, 800304c <ts_itoa+0x3c>
int num = d/div;
8003030: fbb1 f4f3 udiv r4, r1, r3
d = d%div;
8003034: fb03 1114 mls r1, r3, r4, r1
div /= base;
8003038: fb93 f3f2 sdiv r3, r3, r2
if (num > 9)
800303c: 2c09 cmp r4, #9
800303e: ddf1 ble.n 8003024 <ts_itoa+0x14>
*((*buf)++) = (num-10) + 'A';
8003040: 6805 ldr r5, [r0, #0]
8003042: 1c6e adds r6, r5, #1
8003044: 6006 str r6, [r0, #0]
8003046: 3437 adds r4, #55 ; 0x37
8003048: 702c strb r4, [r5, #0]
800304a: e7f0 b.n 800302e <ts_itoa+0x1e>
}
}
800304c: bc70 pop {r4, r5, r6}
800304e: 4770 bx lr
08003050 <ts_formatstring>:
** Abstract: Writes arguments va to buffer buf according to format fmt
** Returns: Length of string
**---------------------------------------------------------------------------
*/
int ts_formatstring(char *buf, const char *fmt, va_list va)
{
8003050: b530 push {r4, r5, lr}
8003052: b083 sub sp, #12
8003054: 9001 str r0, [sp, #4]
8003056: 460c mov r4, r1
8003058: 9200 str r2, [sp, #0]
char *start_buf = buf;
800305a: 4605 mov r5, r0
while(*fmt)
800305c: e03e b.n 80030dc <ts_formatstring+0x8c>
{
/* Character needs formating? */
if (*fmt == '%')
{
switch (*(++fmt))
800305e: 7863 ldrb r3, [r4, #1]
8003060: 2b64 cmp r3, #100 ; 0x64
8003062: d01c beq.n 800309e <ts_formatstring+0x4e>
8003064: d90d bls.n 8003082 <ts_formatstring+0x32>
8003066: 2b73 cmp r3, #115 ; 0x73
8003068: d04a beq.n 8003100 <ts_formatstring+0xb0>
800306a: d916 bls.n 800309a <ts_formatstring+0x4a>
800306c: 2b75 cmp r3, #117 ; 0x75
800306e: d121 bne.n 80030b4 <ts_formatstring+0x64>
*buf++ = *arg++;
}
}
break;
case 'u':
ts_itoa(&buf, va_arg(va, unsigned int), 10);
8003070: 9b00 ldr r3, [sp, #0]
8003072: 1d1a adds r2, r3, #4
8003074: 9200 str r2, [sp, #0]
8003076: 220a movs r2, #10
8003078: 6819 ldr r1, [r3, #0]
800307a: a801 add r0, sp, #4
800307c: f7ff ffc8 bl 8003010 <ts_itoa>
break;
8003080: e02b b.n 80030da <ts_formatstring+0x8a>
switch (*(++fmt))
8003082: 2b58 cmp r3, #88 ; 0x58
8003084: d018 beq.n 80030b8 <ts_formatstring+0x68>
8003086: 2b63 cmp r3, #99 ; 0x63
8003088: d01f beq.n 80030ca <ts_formatstring+0x7a>
800308a: 2b25 cmp r3, #37 ; 0x25
800308c: d125 bne.n 80030da <ts_formatstring+0x8a>
case 'x':
case 'X':
ts_itoa(&buf, va_arg(va, int), 16);
break;
case '%':
*buf++ = '%';
800308e: 9b01 ldr r3, [sp, #4]
8003090: 1c5a adds r2, r3, #1
8003092: 9201 str r2, [sp, #4]
8003094: 2225 movs r2, #37 ; 0x25
8003096: 701a strb r2, [r3, #0]
break;
8003098: e01f b.n 80030da <ts_formatstring+0x8a>
switch (*(++fmt))
800309a: 2b69 cmp r3, #105 ; 0x69
800309c: d11d bne.n 80030da <ts_formatstring+0x8a>
signed int val = va_arg(va, signed int);
800309e: 9b00 ldr r3, [sp, #0]
80030a0: 1d1a adds r2, r3, #4
80030a2: 9200 str r2, [sp, #0]
80030a4: 6819 ldr r1, [r3, #0]
if (val < 0)
80030a6: 2900 cmp r1, #0
80030a8: db23 blt.n 80030f2 <ts_formatstring+0xa2>
ts_itoa(&buf, val, 10);
80030aa: 220a movs r2, #10
80030ac: a801 add r0, sp, #4
80030ae: f7ff ffaf bl 8003010 <ts_itoa>
break;
80030b2: e012 b.n 80030da <ts_formatstring+0x8a>
switch (*(++fmt))
80030b4: 2b78 cmp r3, #120 ; 0x78
80030b6: d110 bne.n 80030da <ts_formatstring+0x8a>
ts_itoa(&buf, va_arg(va, int), 16);
80030b8: 9b00 ldr r3, [sp, #0]
80030ba: 1d1a adds r2, r3, #4
80030bc: 9200 str r2, [sp, #0]
80030be: 2210 movs r2, #16
80030c0: 6819 ldr r1, [r3, #0]
80030c2: a801 add r0, sp, #4
80030c4: f7ff ffa4 bl 8003010 <ts_itoa>
break;
80030c8: e007 b.n 80030da <ts_formatstring+0x8a>
*buf++ = va_arg(va, int);
80030ca: 9b01 ldr r3, [sp, #4]
80030cc: 1c5a adds r2, r3, #1
80030ce: 9201 str r2, [sp, #4]
80030d0: 9a00 ldr r2, [sp, #0]
80030d2: 1d11 adds r1, r2, #4
80030d4: 9100 str r1, [sp, #0]
80030d6: 6812 ldr r2, [r2, #0]
80030d8: 701a strb r2, [r3, #0]
}
fmt++;
80030da: 3402 adds r4, #2
while(*fmt)
80030dc: 7823 ldrb r3, [r4, #0]
80030de: b1f3 cbz r3, 800311e <ts_formatstring+0xce>
if (*fmt == '%')
80030e0: 2b25 cmp r3, #37 ; 0x25
80030e2: d0bc beq.n 800305e <ts_formatstring+0xe>
}
/* Else just copy */
else
{
*buf++ = *fmt++;
80030e4: 9b01 ldr r3, [sp, #4]
80030e6: 1c5a adds r2, r3, #1
80030e8: 9201 str r2, [sp, #4]
80030ea: 7822 ldrb r2, [r4, #0]
80030ec: 701a strb r2, [r3, #0]
80030ee: 3401 adds r4, #1
80030f0: e7f4 b.n 80030dc <ts_formatstring+0x8c>
val *= -1;
80030f2: 4249 negs r1, r1
*buf++ = '-';
80030f4: 9b01 ldr r3, [sp, #4]
80030f6: 1c5a adds r2, r3, #1
80030f8: 9201 str r2, [sp, #4]
80030fa: 222d movs r2, #45 ; 0x2d
80030fc: 701a strb r2, [r3, #0]
80030fe: e7d4 b.n 80030aa <ts_formatstring+0x5a>
char * arg = va_arg(va, char *);
8003100: 9b00 ldr r3, [sp, #0]
8003102: 1d1a adds r2, r3, #4
8003104: 9200 str r2, [sp, #0]
8003106: 681b ldr r3, [r3, #0]
while (*arg)
8003108: e005 b.n 8003116 <ts_formatstring+0xc6>
*buf++ = *arg++;
800310a: 9a01 ldr r2, [sp, #4]
800310c: 1c51 adds r1, r2, #1
800310e: 9101 str r1, [sp, #4]
8003110: 7819 ldrb r1, [r3, #0]
8003112: 7011 strb r1, [r2, #0]
8003114: 3301 adds r3, #1
while (*arg)
8003116: 781a ldrb r2, [r3, #0]
8003118: 2a00 cmp r2, #0
800311a: d1f6 bne.n 800310a <ts_formatstring+0xba>
800311c: e7dd b.n 80030da <ts_formatstring+0x8a>
}
}
*buf = 0;
800311e: 2200 movs r2, #0
8003120: 9b01 ldr r3, [sp, #4]
8003122: 701a strb r2, [r3, #0]
return (int)(buf - start_buf);
}
8003124: 9801 ldr r0, [sp, #4]
8003126: 1b40 subs r0, r0, r5
8003128: b003 add sp, #12
800312a: bd30 pop {r4, r5, pc}
0800312c <siprintf>:
** given character string according to the format parameter.
** Returns: Number of bytes written
**===========================================================================
*/
int siprintf(char *buf, const char *fmt, ...)
{
800312c: b40e push {r1, r2, r3}
800312e: b500 push {lr}
8003130: b082 sub sp, #8
8003132: aa03 add r2, sp, #12
8003134: f852 1b04 ldr.w r1, [r2], #4
int length;
va_list va;
va_start(va, fmt);
8003138: 9201 str r2, [sp, #4]
length = ts_formatstring(buf, fmt, va);
800313a: f7ff ff89 bl 8003050 <ts_formatstring>
va_end(va);
return length;
}
800313e: b002 add sp, #8
8003140: f85d eb04 ldr.w lr, [sp], #4
8003144: b003 add sp, #12
8003146: 4770 bx lr
08003148 <usartConfigure>:
* @param Aucun
* @retval Aucun
*/
void usartConfigure(void)
{
8003148: b5f0 push {r4, r5, r6, r7, lr}
800314a: b087 sub sp, #28
GPIO_InitTypeDef Init_Structure;
NVIC_InitTypeDef NVIC_InitStructure;
// Configure les lignes d'E/S
// Configure Output ALTERNATE FONCTION PPULL PORT B6 Tx
Init_Structure.GPIO_Pin = GPIO_Pin_6;
800314c: 2340 movs r3, #64 ; 0x40
800314e: f8ad 3004 strh.w r3, [sp, #4]
Init_Structure.GPIO_Mode = GPIO_Mode_AF_PP;
8003152: 2318 movs r3, #24
8003154: f88d 3007 strb.w r3, [sp, #7]
Init_Structure.GPIO_Speed=GPIO_Speed_50MHz;
8003158: 2303 movs r3, #3
800315a: f88d 3006 strb.w r3, [sp, #6]
GPIO_Init(GPIOB, &Init_Structure);
800315e: 4c23 ldr r4, [pc, #140] ; (80031ec <usartConfigure+0xa4>)
8003160: a901 add r1, sp, #4
8003162: 4620 mov r0, r4
8003164: f7fe f8f2 bl 800134c <GPIO_Init>
// Configure B7 Rx
Init_Structure.GPIO_Pin = GPIO_Pin_7;
8003168: 2780 movs r7, #128 ; 0x80
800316a: f8ad 7004 strh.w r7, [sp, #4]
Init_Structure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
800316e: 2604 movs r6, #4
8003170: f88d 6007 strb.w r6, [sp, #7]
GPIO_Init(GPIOB, &Init_Structure);
8003174: eb0d 0106 add.w r1, sp, r6
8003178: 4620 mov r0, r4
800317a: f7fe f8e7 bl 800134c <GPIO_Init>
// Configure l'USART
USART_InitStructure.USART_BaudRate = 9600;
800317e: f44f 5316 mov.w r3, #9600 ; 0x2580
8003182: 9302 str r3, [sp, #8]
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
8003184: 2400 movs r4, #0
8003186: f8ad 400c strh.w r4, [sp, #12]
USART_InitStructure.USART_StopBits = USART_StopBits_1;
800318a: f8ad 400e strh.w r4, [sp, #14]
USART_InitStructure.USART_Parity = USART_Parity_No;
800318e: f8ad 4010 strh.w r4, [sp, #16]
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
8003192: f8ad 4014 strh.w r4, [sp, #20]
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
8003196: 230c movs r3, #12
8003198: f8ad 3012 strh.w r3, [sp, #18]
USART_Init(USART1, &USART_InitStructure);
800319c: 4d14 ldr r5, [pc, #80] ; (80031f0 <usartConfigure+0xa8>)
800319e: a902 add r1, sp, #8
80031a0: 4628 mov r0, r5
80031a2: f7fe fc8f bl 8001ac4 <USART_Init>
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
80031a6: 2201 movs r2, #1
80031a8: 4639 mov r1, r7
80031aa: 4628 mov r0, r5
80031ac: f7fe fd18 bl 8001be0 <USART_DMACmd>
USART_Cmd(USART1, ENABLE);
80031b0: 2101 movs r1, #1
80031b2: 4628 mov r0, r5
80031b4: f7fe fcea bl 8001b8c <USART_Cmd>
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
80031b8: 2101 movs r1, #1
80031ba: 4630 mov r0, r6
80031bc: f7fe f91a bl 80013f4 <GPIO_PinRemapConfig>
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
80031c0: 2201 movs r2, #1
80031c2: f240 5125 movw r1, #1317 ; 0x525
80031c6: 4628 mov r0, r5
80031c8: f7fe fcee bl 8001ba8 <USART_ITConfig>
// configure les interruptions de l'USART
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
80031cc: 2325 movs r3, #37 ; 0x25
80031ce: f88d 3000 strb.w r3, [sp]
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
80031d2: f88d 4001 strb.w r4, [sp, #1]
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
80031d6: f88d 4002 strb.w r4, [sp, #2]
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
80031da: 2301 movs r3, #1
80031dc: f88d 3003 strb.w r3, [sp, #3]
NVIC_Init(&NVIC_InitStructure);
80031e0: 4668 mov r0, sp
80031e2: f7fd fea3 bl 8000f2c <NVIC_Init>
}
80031e6: b007 add sp, #28
80031e8: bdf0 pop {r4, r5, r6, r7, pc}
80031ea: bf00 nop
80031ec: 40010c00 .word 0x40010c00
80031f0: 40013800 .word 0x40013800
080031f4 <usartInitDMA>:
*
* @param Aucun
* @retval Aucun
*/
void usartInitDMA(uint16_t bufferSize)
{
80031f4: b530 push {r4, r5, lr}
80031f6: b08d sub sp, #52 ; 0x34
80031f8: 4605 mov r5, r0
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel4);
80031fa: 4c0e ldr r4, [pc, #56] ; (8003234 <usartInitDMA+0x40>)
80031fc: 4620 mov r0, r4
80031fe: f7fd ff63 bl 80010c8 <DMA_DeInit>
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40013804;
8003202: 4b0d ldr r3, [pc, #52] ; (8003238 <usartInitDMA+0x44>)
8003204: 9301 str r3, [sp, #4]
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)sendString;
8003206: 4b0d ldr r3, [pc, #52] ; (800323c <usartInitDMA+0x48>)
8003208: 9302 str r3, [sp, #8]
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
800320a: 2310 movs r3, #16
800320c: 9303 str r3, [sp, #12]
DMA_InitStructure.DMA_BufferSize = bufferSize;
800320e: 9504 str r5, [sp, #16]
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
8003210: 2300 movs r3, #0
8003212: 9305 str r3, [sp, #20]
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
8003214: 2280 movs r2, #128 ; 0x80
8003216: 9206 str r2, [sp, #24]
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
8003218: 9307 str r3, [sp, #28]
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
800321a: 9308 str r3, [sp, #32]
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
800321c: 9309 str r3, [sp, #36] ; 0x24
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
800321e: f44f 5240 mov.w r2, #12288 ; 0x3000
8003222: 920a str r2, [sp, #40] ; 0x28
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
8003224: 930b str r3, [sp, #44] ; 0x2c
DMA_Init(DMA1_Channel4, &DMA_InitStructure);
8003226: a901 add r1, sp, #4
8003228: 4620 mov r0, r4
800322a: f7fd ffe1 bl 80011f0 <DMA_Init>
}
800322e: b00d add sp, #52 ; 0x34
8003230: bd30 pop {r4, r5, pc}
8003232: bf00 nop
8003234: 40020044 .word 0x40020044
8003238: 40013804 .word 0x40013804
800323c: 20000370 .word 0x20000370
08003240 <usartSendData>:
* @brief Chargement du buffer Tx dans la DMA et envoi via l'UART
*
* @param Aucun
* @retval Aucun
*/
void usartSendData(void){
8003240: b508 push {r3, lr}
int taille;
for(taille = 0; sendString[taille]!= '\r'; taille++);
8003242: 2000 movs r0, #0
8003244: e000 b.n 8003248 <usartSendData+0x8>
8003246: 3001 adds r0, #1
8003248: 4b10 ldr r3, [pc, #64] ; (800328c <usartSendData+0x4c>)
800324a: 5c1b ldrb r3, [r3, r0]
800324c: 2b0d cmp r3, #13
800324e: d1fa bne.n 8003246 <usartSendData+0x6>
usartInitDMA(taille+1);
8003250: 3001 adds r0, #1
8003252: b280 uxth r0, r0
8003254: f7ff ffce bl 80031f4 <usartInitDMA>
DMA_Cmd(DMA1_Channel4, ENABLE);
8003258: 2101 movs r1, #1
800325a: 480d ldr r0, [pc, #52] ; (8003290 <usartSendData+0x50>)
800325c: f7fd ffe7 bl 800122e <DMA_Cmd>
while (DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET);
8003260: f44f 5000 mov.w r0, #8192 ; 0x2000
8003264: f7fd fffa bl 800125c <DMA_GetFlagStatus>
8003268: 2800 cmp r0, #0
800326a: d0f9 beq.n 8003260 <usartSendData+0x20>
for(i=0; i<TBuffer;i++)
800326c: 2200 movs r2, #0
800326e: 4b09 ldr r3, [pc, #36] ; (8003294 <usartSendData+0x54>)
8003270: 801a strh r2, [r3, #0]
8003272: e005 b.n 8003280 <usartSendData+0x40>
sendString[i]=0;
8003274: 2100 movs r1, #0
8003276: 4a05 ldr r2, [pc, #20] ; (800328c <usartSendData+0x4c>)
8003278: 54d1 strb r1, [r2, r3]
for(i=0; i<TBuffer;i++)
800327a: 3301 adds r3, #1
800327c: 4a05 ldr r2, [pc, #20] ; (8003294 <usartSendData+0x54>)
800327e: 8013 strh r3, [r2, #0]
8003280: 4b04 ldr r3, [pc, #16] ; (8003294 <usartSendData+0x54>)
8003282: 881b ldrh r3, [r3, #0]
8003284: 2b1d cmp r3, #29
8003286: d9f5 bls.n 8003274 <usartSendData+0x34>
}
8003288: bd08 pop {r3, pc}
800328a: bf00 nop
800328c: 20000370 .word 0x20000370
8003290: 40020044 .word 0x40020044
8003294: 2000036a .word 0x2000036a
08003298 <USART1_IRQHandler>:
{
8003298: b538 push {r3, r4, r5, lr}
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
800329a: f240 5125 movw r1, #1317 ; 0x525
800329e: 4829 ldr r0, [pc, #164] ; (8003344 <USART1_IRQHandler+0xac>)
80032a0: f7fe fcb2 bl 8001c08 <USART_GetITStatus>
80032a4: b9d0 cbnz r0, 80032dc <USART1_IRQHandler+0x44>
tmp = USART1->SR;
80032a6: 4827 ldr r0, [pc, #156] ; (8003344 <USART1_IRQHandler+0xac>)
80032a8: 8802 ldrh r2, [r0, #0]
80032aa: b292 uxth r2, r2
80032ac: 4b26 ldr r3, [pc, #152] ; (8003348 <USART1_IRQHandler+0xb0>)
80032ae: 801a strh r2, [r3, #0]
tmp = USART1->CR1;
80032b0: 8982 ldrh r2, [r0, #12]
80032b2: b292 uxth r2, r2
80032b4: 801a strh r2, [r3, #0]
tmp = USART1->CR2;
80032b6: 8a02 ldrh r2, [r0, #16]
80032b8: b292 uxth r2, r2
80032ba: 801a strh r2, [r3, #0]
tmp = USART1->CR3;
80032bc: 8a82 ldrh r2, [r0, #20]
80032be: b292 uxth r2, r2
80032c0: 801a strh r2, [r3, #0]
tmp = USART1->BRR;
80032c2: 8902 ldrh r2, [r0, #8]
80032c4: b292 uxth r2, r2
80032c6: 801a strh r2, [r3, #0]
tmp = USART1->GTPR;
80032c8: 8b02 ldrh r2, [r0, #24]
80032ca: b292 uxth r2, r2
80032cc: 801a strh r2, [r3, #0]
tmp = USART1->SR;
80032ce: 8802 ldrh r2, [r0, #0]
80032d0: b292 uxth r2, r2
80032d2: 801a strh r2, [r3, #0]
USART_ClearFlag(USART1, USART_FLAG_RXNE);
80032d4: 2120 movs r1, #32
80032d6: f7fe fc93 bl 8001c00 <USART_ClearFlag>
80032da: bd38 pop {r3, r4, r5, pc}
receiptString[cpt_Rx] = USART_ReceiveData(USART1);
80032dc: 4c1b ldr r4, [pc, #108] ; (800334c <USART1_IRQHandler+0xb4>)
80032de: 8825 ldrh r5, [r4, #0]
80032e0: 4818 ldr r0, [pc, #96] ; (8003344 <USART1_IRQHandler+0xac>)
80032e2: f7fe fc89 bl 8001bf8 <USART_ReceiveData>
80032e6: 4b1a ldr r3, [pc, #104] ; (8003350 <USART1_IRQHandler+0xb8>)
80032e8: 5558 strb r0, [r3, r5]
if (cpt_Rx < 16)
80032ea: 8823 ldrh r3, [r4, #0]
80032ec: 2b0f cmp r3, #15
80032ee: d801 bhi.n 80032f4 <USART1_IRQHandler+0x5c>
cpt_Rx++;
80032f0: 3301 adds r3, #1
80032f2: 8023 strh r3, [r4, #0]
if (receiptString[cpt_Rx - 1] == '\r') {
80032f4: 4b15 ldr r3, [pc, #84] ; (800334c <USART1_IRQHandler+0xb4>)
80032f6: 881b ldrh r3, [r3, #0]
80032f8: 3b01 subs r3, #1
80032fa: 4a15 ldr r2, [pc, #84] ; (8003350 <USART1_IRQHandler+0xb8>)
80032fc: 5cd3 ldrb r3, [r2, r3]
80032fe: 2b0d cmp r3, #13
8003300: d1d1 bne.n 80032a6 <USART1_IRQHandler+0xe>
cmdManage();
8003302: f7ff f861 bl 80023c8 <cmdManage>
if (Dumber.AddOn == FALSE) {
8003306: 4b13 ldr r3, [pc, #76] ; (8003354 <USART1_IRQHandler+0xbc>)
8003308: 795b ldrb r3, [r3, #5]
800330a: 2b32 cmp r3, #50 ; 0x32
800330c: d003 beq.n 8003316 <USART1_IRQHandler+0x7e>
for (i = 0; i < cpt_Rx + 1; i++)
800330e: 2200 movs r2, #0
8003310: 4b11 ldr r3, [pc, #68] ; (8003358 <USART1_IRQHandler+0xc0>)
8003312: 801a strh r2, [r3, #0]
8003314: e00a b.n 800332c <USART1_IRQHandler+0x94>
cmdAddChecksum();
8003316: f7fe fe2d bl 8001f74 <cmdAddChecksum>
usartSendData(); // Fonction bloquante
800331a: f7ff ff91 bl 8003240 <usartSendData>
800331e: e7f6 b.n 800330e <USART1_IRQHandler+0x76>
receiptString[i] = 0;
8003320: 2100 movs r1, #0
8003322: 4a0b ldr r2, [pc, #44] ; (8003350 <USART1_IRQHandler+0xb8>)
8003324: 54d1 strb r1, [r2, r3]
for (i = 0; i < cpt_Rx + 1; i++)
8003326: 3301 adds r3, #1
8003328: 4a0b ldr r2, [pc, #44] ; (8003358 <USART1_IRQHandler+0xc0>)
800332a: 8013 strh r3, [r2, #0]
800332c: 4b0a ldr r3, [pc, #40] ; (8003358 <USART1_IRQHandler+0xc0>)
800332e: 881b ldrh r3, [r3, #0]
8003330: 4a06 ldr r2, [pc, #24] ; (800334c <USART1_IRQHandler+0xb4>)
8003332: 8812 ldrh r2, [r2, #0]
8003334: 3201 adds r2, #1
8003336: 4293 cmp r3, r2
8003338: dbf2 blt.n 8003320 <USART1_IRQHandler+0x88>
cpt_Rx = 0;
800333a: 2200 movs r2, #0
800333c: 4b03 ldr r3, [pc, #12] ; (800334c <USART1_IRQHandler+0xb4>)
800333e: 801a strh r2, [r3, #0]
8003340: e7b1 b.n 80032a6 <USART1_IRQHandler+0xe>
8003342: bf00 nop
8003344: 40013800 .word 0x40013800
8003348: 20000348 .word 0x20000348
800334c: 2000022c .word 0x2000022c
8003350: 2000034c .word 0x2000034c
8003354: 20000330 .word 0x20000330
8003358: 2000036a .word 0x2000036a
0800335c <Reset_Handler>:
.section .text.Reset_Handler
.weak Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
ldr sp, =_estack /* Atollic update: set stack pointer */
800335c: f8df d034 ldr.w sp, [pc, #52] ; 8003394 <LoopFillZerobss+0x14>
/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
8003360: 2100 movs r1, #0
b LoopCopyDataInit
8003362: e003 b.n 800336c <LoopCopyDataInit>
08003364 <CopyDataInit>:
CopyDataInit:
ldr r3, =_sidata
8003364: 4b0c ldr r3, [pc, #48] ; (8003398 <LoopFillZerobss+0x18>)
ldr r3, [r3, r1]
8003366: 585b ldr r3, [r3, r1]
str r3, [r0, r1]
8003368: 5043 str r3, [r0, r1]
adds r1, r1, #4
800336a: 3104 adds r1, #4
0800336c <LoopCopyDataInit>:
LoopCopyDataInit:
ldr r0, =_sdata
800336c: 480b ldr r0, [pc, #44] ; (800339c <LoopFillZerobss+0x1c>)
ldr r3, =_edata
800336e: 4b0c ldr r3, [pc, #48] ; (80033a0 <LoopFillZerobss+0x20>)
adds r2, r0, r1
8003370: 1842 adds r2, r0, r1
cmp r2, r3
8003372: 429a cmp r2, r3
bcc CopyDataInit
8003374: d3f6 bcc.n 8003364 <CopyDataInit>
ldr r2, =_sbss
8003376: 4a0b ldr r2, [pc, #44] ; (80033a4 <LoopFillZerobss+0x24>)
b LoopFillZerobss
8003378: e002 b.n 8003380 <LoopFillZerobss>
0800337a <FillZerobss>:
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
800337a: 2300 movs r3, #0
str r3, [r2], #4
800337c: f842 3b04 str.w r3, [r2], #4
08003380 <LoopFillZerobss>:
LoopFillZerobss:
ldr r3, = _ebss
8003380: 4b09 ldr r3, [pc, #36] ; (80033a8 <LoopFillZerobss+0x28>)
cmp r2, r3
8003382: 429a cmp r2, r3
bcc FillZerobss
8003384: d3f9 bcc.n 800337a <FillZerobss>
/* Call the clock system intitialization function.*/
bl SystemInit
8003386: f000 f813 bl 80033b0 <SystemInit>
/* Call static constructors */
bl __libc_init_array
800338a: f000 f837 bl 80033fc <__libc_init_array>
/* Call the application's entry point.*/
bl main
800338e: f7ff f933 bl 80025f8 <main>
bx lr
8003392: 4770 bx lr
ldr sp, =_estack /* Atollic update: set stack pointer */
8003394: 20002800 .word 0x20002800
ldr r3, =_sidata
8003398: 08004248 .word 0x08004248
ldr r0, =_sdata
800339c: 20000000 .word 0x20000000
ldr r3, =_edata
80033a0: 200001ec .word 0x200001ec
ldr r2, =_sbss
80033a4: 200001ec .word 0x200001ec
ldr r3, = _ebss
80033a8: 20000394 .word 0x20000394
080033ac <ADC1_2_IRQHandler>:
* @retval : None
*/
.section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
b Infinite_Loop
80033ac: e7fe b.n 80033ac <ADC1_2_IRQHandler>
...
080033b0 <SystemInit>:
*/
void SystemInit (void)
{
/* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
80033b0: 4b0f ldr r3, [pc, #60] ; (80033f0 <SystemInit+0x40>)
80033b2: 681a ldr r2, [r3, #0]
80033b4: f042 0201 orr.w r2, r2, #1
80033b8: 601a str r2, [r3, #0]
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
80033ba: 6859 ldr r1, [r3, #4]
80033bc: 4a0d ldr r2, [pc, #52] ; (80033f4 <SystemInit+0x44>)
80033be: 400a ands r2, r1
80033c0: 605a str r2, [r3, #4]
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
80033c2: 681a ldr r2, [r3, #0]
80033c4: f022 7284 bic.w r2, r2, #17301504 ; 0x1080000
80033c8: f422 3280 bic.w r2, r2, #65536 ; 0x10000
80033cc: 601a str r2, [r3, #0]
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
80033ce: 681a ldr r2, [r3, #0]
80033d0: f422 2280 bic.w r2, r2, #262144 ; 0x40000
80033d4: 601a str r2, [r3, #0]
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC->CFGR &= (uint32_t)0xFF80FFFF;
80033d6: 685a ldr r2, [r3, #4]
80033d8: f422 02fe bic.w r2, r2, #8323072 ; 0x7f0000
80033dc: 605a str r2, [r3, #4]
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000;
#else
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000;
80033de: f44f 021f mov.w r2, #10420224 ; 0x9f0000
80033e2: 609a str r2, [r3, #8]
SetSysClock();
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
80033e4: f04f 6200 mov.w r2, #134217728 ; 0x8000000
80033e8: 4b03 ldr r3, [pc, #12] ; (80033f8 <SystemInit+0x48>)
80033ea: 609a str r2, [r3, #8]
80033ec: 4770 bx lr
80033ee: bf00 nop
80033f0: 40021000 .word 0x40021000
80033f4: f8ff0000 .word 0xf8ff0000
80033f8: e000ed00 .word 0xe000ed00
080033fc <__libc_init_array>:
80033fc: b570 push {r4, r5, r6, lr}
80033fe: 2500 movs r5, #0
8003400: 4e0c ldr r6, [pc, #48] ; (8003434 <__libc_init_array+0x38>)
8003402: 4c0d ldr r4, [pc, #52] ; (8003438 <__libc_init_array+0x3c>)
8003404: 1ba4 subs r4, r4, r6
8003406: 10a4 asrs r4, r4, #2
8003408: 42a5 cmp r5, r4
800340a: d109 bne.n 8003420 <__libc_init_array+0x24>
800340c: f000 fe16 bl 800403c <_init>
8003410: 2500 movs r5, #0
8003412: 4e0a ldr r6, [pc, #40] ; (800343c <__libc_init_array+0x40>)
8003414: 4c0a ldr r4, [pc, #40] ; (8003440 <__libc_init_array+0x44>)
8003416: 1ba4 subs r4, r4, r6
8003418: 10a4 asrs r4, r4, #2
800341a: 42a5 cmp r5, r4
800341c: d105 bne.n 800342a <__libc_init_array+0x2e>
800341e: bd70 pop {r4, r5, r6, pc}
8003420: f856 3025 ldr.w r3, [r6, r5, lsl #2]
8003424: 4798 blx r3
8003426: 3501 adds r5, #1
8003428: e7ee b.n 8003408 <__libc_init_array+0xc>
800342a: f856 3025 ldr.w r3, [r6, r5, lsl #2]
800342e: 4798 blx r3
8003430: 3501 adds r5, #1
8003432: e7f2 b.n 800341a <__libc_init_array+0x1e>
8003434: 08004240 .word 0x08004240
8003438: 08004240 .word 0x08004240
800343c: 08004240 .word 0x08004240
8003440: 08004244 .word 0x08004244
08003444 <siscanf>:
8003444: b40e push {r1, r2, r3}
8003446: f44f 7201 mov.w r2, #516 ; 0x204
800344a: b530 push {r4, r5, lr}
800344c: b09c sub sp, #112 ; 0x70
800344e: ac1f add r4, sp, #124 ; 0x7c
8003450: f854 5b04 ldr.w r5, [r4], #4
8003454: f8ad 2014 strh.w r2, [sp, #20]
8003458: 9002 str r0, [sp, #8]
800345a: 9006 str r0, [sp, #24]
800345c: f7fc fe78 bl 8000150 <strlen>
8003460: 4b0b ldr r3, [pc, #44] ; (8003490 <siscanf+0x4c>)
8003462: 9003 str r0, [sp, #12]
8003464: 930b str r3, [sp, #44] ; 0x2c
8003466: 2300 movs r3, #0
8003468: 930f str r3, [sp, #60] ; 0x3c
800346a: 9314 str r3, [sp, #80] ; 0x50
800346c: f64f 73ff movw r3, #65535 ; 0xffff
8003470: 9007 str r0, [sp, #28]
8003472: 4808 ldr r0, [pc, #32] ; (8003494 <siscanf+0x50>)
8003474: f8ad 3016 strh.w r3, [sp, #22]
8003478: 462a mov r2, r5
800347a: 4623 mov r3, r4
800347c: a902 add r1, sp, #8
800347e: 6800 ldr r0, [r0, #0]
8003480: 9401 str r4, [sp, #4]
8003482: f000 f917 bl 80036b4 <__ssvfiscanf_r>
8003486: b01c add sp, #112 ; 0x70
8003488: e8bd 4030 ldmia.w sp!, {r4, r5, lr}
800348c: b003 add sp, #12
800348e: 4770 bx lr
8003490: 08003499 .word 0x08003499
8003494: 2000001c .word 0x2000001c
08003498 <__seofread>:
8003498: 2000 movs r0, #0
800349a: 4770 bx lr
0800349c <strcpy>:
800349c: 4603 mov r3, r0
800349e: f811 2b01 ldrb.w r2, [r1], #1
80034a2: f803 2b01 strb.w r2, [r3], #1
80034a6: 2a00 cmp r2, #0
80034a8: d1f9 bne.n 800349e <strcpy+0x2>
80034aa: 4770 bx lr
080034ac <_free_r>:
80034ac: b538 push {r3, r4, r5, lr}
80034ae: 4605 mov r5, r0
80034b0: 2900 cmp r1, #0
80034b2: d043 beq.n 800353c <_free_r+0x90>
80034b4: f851 3c04 ldr.w r3, [r1, #-4]
80034b8: 1f0c subs r4, r1, #4
80034ba: 2b00 cmp r3, #0
80034bc: bfb8 it lt
80034be: 18e4 addlt r4, r4, r3
80034c0: f000 fd7d bl 8003fbe <__malloc_lock>
80034c4: 4a1e ldr r2, [pc, #120] ; (8003540 <_free_r+0x94>)
80034c6: 6813 ldr r3, [r2, #0]
80034c8: 4610 mov r0, r2
80034ca: b933 cbnz r3, 80034da <_free_r+0x2e>
80034cc: 6063 str r3, [r4, #4]
80034ce: 6014 str r4, [r2, #0]
80034d0: 4628 mov r0, r5
80034d2: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
80034d6: f000 bd73 b.w 8003fc0 <__malloc_unlock>
80034da: 42a3 cmp r3, r4
80034dc: d90b bls.n 80034f6 <_free_r+0x4a>
80034de: 6821 ldr r1, [r4, #0]
80034e0: 1862 adds r2, r4, r1
80034e2: 4293 cmp r3, r2
80034e4: bf01 itttt eq
80034e6: 681a ldreq r2, [r3, #0]
80034e8: 685b ldreq r3, [r3, #4]
80034ea: 1852 addeq r2, r2, r1
80034ec: 6022 streq r2, [r4, #0]
80034ee: 6063 str r3, [r4, #4]
80034f0: 6004 str r4, [r0, #0]
80034f2: e7ed b.n 80034d0 <_free_r+0x24>
80034f4: 4613 mov r3, r2
80034f6: 685a ldr r2, [r3, #4]
80034f8: b10a cbz r2, 80034fe <_free_r+0x52>
80034fa: 42a2 cmp r2, r4
80034fc: d9fa bls.n 80034f4 <_free_r+0x48>
80034fe: 6819 ldr r1, [r3, #0]
8003500: 1858 adds r0, r3, r1
8003502: 42a0 cmp r0, r4
8003504: d10b bne.n 800351e <_free_r+0x72>
8003506: 6820 ldr r0, [r4, #0]
8003508: 4401 add r1, r0
800350a: 1858 adds r0, r3, r1
800350c: 4282 cmp r2, r0
800350e: 6019 str r1, [r3, #0]
8003510: d1de bne.n 80034d0 <_free_r+0x24>
8003512: 6810 ldr r0, [r2, #0]
8003514: 6852 ldr r2, [r2, #4]
8003516: 4401 add r1, r0
8003518: 6019 str r1, [r3, #0]
800351a: 605a str r2, [r3, #4]
800351c: e7d8 b.n 80034d0 <_free_r+0x24>
800351e: d902 bls.n 8003526 <_free_r+0x7a>
8003520: 230c movs r3, #12
8003522: 602b str r3, [r5, #0]
8003524: e7d4 b.n 80034d0 <_free_r+0x24>
8003526: 6820 ldr r0, [r4, #0]
8003528: 1821 adds r1, r4, r0
800352a: 428a cmp r2, r1
800352c: bf01 itttt eq
800352e: 6811 ldreq r1, [r2, #0]
8003530: 6852 ldreq r2, [r2, #4]
8003532: 1809 addeq r1, r1, r0
8003534: 6021 streq r1, [r4, #0]
8003536: 6062 str r2, [r4, #4]
8003538: 605c str r4, [r3, #4]
800353a: e7c9 b.n 80034d0 <_free_r+0x24>
800353c: bd38 pop {r3, r4, r5, pc}
800353e: bf00 nop
8003540: 20000230 .word 0x20000230
08003544 <_malloc_r>:
8003544: b570 push {r4, r5, r6, lr}
8003546: 1ccd adds r5, r1, #3
8003548: f025 0503 bic.w r5, r5, #3
800354c: 3508 adds r5, #8
800354e: 2d0c cmp r5, #12
8003550: bf38 it cc
8003552: 250c movcc r5, #12
8003554: 2d00 cmp r5, #0
8003556: 4606 mov r6, r0
8003558: db01 blt.n 800355e <_malloc_r+0x1a>
800355a: 42a9 cmp r1, r5
800355c: d903 bls.n 8003566 <_malloc_r+0x22>
800355e: 230c movs r3, #12
8003560: 6033 str r3, [r6, #0]
8003562: 2000 movs r0, #0
8003564: bd70 pop {r4, r5, r6, pc}
8003566: f000 fd2a bl 8003fbe <__malloc_lock>
800356a: 4a23 ldr r2, [pc, #140] ; (80035f8 <_malloc_r+0xb4>)
800356c: 6814 ldr r4, [r2, #0]
800356e: 4621 mov r1, r4
8003570: b991 cbnz r1, 8003598 <_malloc_r+0x54>
8003572: 4c22 ldr r4, [pc, #136] ; (80035fc <_malloc_r+0xb8>)
8003574: 6823 ldr r3, [r4, #0]
8003576: b91b cbnz r3, 8003580 <_malloc_r+0x3c>
8003578: 4630 mov r0, r6
800357a: f000 fb49 bl 8003c10 <_sbrk_r>
800357e: 6020 str r0, [r4, #0]
8003580: 4629 mov r1, r5
8003582: 4630 mov r0, r6
8003584: f000 fb44 bl 8003c10 <_sbrk_r>
8003588: 1c43 adds r3, r0, #1
800358a: d126 bne.n 80035da <_malloc_r+0x96>
800358c: 230c movs r3, #12
800358e: 4630 mov r0, r6
8003590: 6033 str r3, [r6, #0]
8003592: f000 fd15 bl 8003fc0 <__malloc_unlock>
8003596: e7e4 b.n 8003562 <_malloc_r+0x1e>
8003598: 680b ldr r3, [r1, #0]
800359a: 1b5b subs r3, r3, r5
800359c: d41a bmi.n 80035d4 <_malloc_r+0x90>
800359e: 2b0b cmp r3, #11
80035a0: d90f bls.n 80035c2 <_malloc_r+0x7e>
80035a2: 600b str r3, [r1, #0]
80035a4: 18cc adds r4, r1, r3
80035a6: 50cd str r5, [r1, r3]
80035a8: 4630 mov r0, r6
80035aa: f000 fd09 bl 8003fc0 <__malloc_unlock>
80035ae: f104 000b add.w r0, r4, #11
80035b2: 1d23 adds r3, r4, #4
80035b4: f020 0007 bic.w r0, r0, #7
80035b8: 1ac3 subs r3, r0, r3
80035ba: d01b beq.n 80035f4 <_malloc_r+0xb0>
80035bc: 425a negs r2, r3
80035be: 50e2 str r2, [r4, r3]
80035c0: bd70 pop {r4, r5, r6, pc}
80035c2: 428c cmp r4, r1
80035c4: bf0b itete eq
80035c6: 6863 ldreq r3, [r4, #4]
80035c8: 684b ldrne r3, [r1, #4]
80035ca: 6013 streq r3, [r2, #0]
80035cc: 6063 strne r3, [r4, #4]
80035ce: bf18 it ne
80035d0: 460c movne r4, r1
80035d2: e7e9 b.n 80035a8 <_malloc_r+0x64>
80035d4: 460c mov r4, r1
80035d6: 6849 ldr r1, [r1, #4]
80035d8: e7ca b.n 8003570 <_malloc_r+0x2c>
80035da: 1cc4 adds r4, r0, #3
80035dc: f024 0403 bic.w r4, r4, #3
80035e0: 42a0 cmp r0, r4
80035e2: d005 beq.n 80035f0 <_malloc_r+0xac>
80035e4: 1a21 subs r1, r4, r0
80035e6: 4630 mov r0, r6
80035e8: f000 fb12 bl 8003c10 <_sbrk_r>
80035ec: 3001 adds r0, #1
80035ee: d0cd beq.n 800358c <_malloc_r+0x48>
80035f0: 6025 str r5, [r4, #0]
80035f2: e7d9 b.n 80035a8 <_malloc_r+0x64>
80035f4: bd70 pop {r4, r5, r6, pc}
80035f6: bf00 nop
80035f8: 20000230 .word 0x20000230
80035fc: 20000234 .word 0x20000234
08003600 <_sungetc_r>:
8003600: b538 push {r3, r4, r5, lr}
8003602: 1c4b adds r3, r1, #1
8003604: 4614 mov r4, r2
8003606: d103 bne.n 8003610 <_sungetc_r+0x10>
8003608: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff
800360c: 4628 mov r0, r5
800360e: bd38 pop {r3, r4, r5, pc}
8003610: 8993 ldrh r3, [r2, #12]
8003612: b2cd uxtb r5, r1
8003614: f023 0320 bic.w r3, r3, #32
8003618: 8193 strh r3, [r2, #12]
800361a: 6b53 ldr r3, [r2, #52] ; 0x34
800361c: 6852 ldr r2, [r2, #4]
800361e: b18b cbz r3, 8003644 <_sungetc_r+0x44>
8003620: 6ba3 ldr r3, [r4, #56] ; 0x38
8003622: 429a cmp r2, r3
8003624: da08 bge.n 8003638 <_sungetc_r+0x38>
8003626: 6823 ldr r3, [r4, #0]
8003628: 1e5a subs r2, r3, #1
800362a: 6022 str r2, [r4, #0]
800362c: f803 5c01 strb.w r5, [r3, #-1]
8003630: 6863 ldr r3, [r4, #4]
8003632: 3301 adds r3, #1
8003634: 6063 str r3, [r4, #4]
8003636: e7e9 b.n 800360c <_sungetc_r+0xc>
8003638: 4621 mov r1, r4
800363a: f000 fc4b bl 8003ed4 <__submore>
800363e: 2800 cmp r0, #0
8003640: d0f1 beq.n 8003626 <_sungetc_r+0x26>
8003642: e7e1 b.n 8003608 <_sungetc_r+0x8>
8003644: 6921 ldr r1, [r4, #16]
8003646: 6823 ldr r3, [r4, #0]
8003648: b151 cbz r1, 8003660 <_sungetc_r+0x60>
800364a: 4299 cmp r1, r3
800364c: d208 bcs.n 8003660 <_sungetc_r+0x60>
800364e: f813 1c01 ldrb.w r1, [r3, #-1]
8003652: 428d cmp r5, r1
8003654: d104 bne.n 8003660 <_sungetc_r+0x60>
8003656: 3b01 subs r3, #1
8003658: 3201 adds r2, #1
800365a: 6023 str r3, [r4, #0]
800365c: 6062 str r2, [r4, #4]
800365e: e7d5 b.n 800360c <_sungetc_r+0xc>
8003660: 63e3 str r3, [r4, #60] ; 0x3c
8003662: f104 0344 add.w r3, r4, #68 ; 0x44
8003666: 6363 str r3, [r4, #52] ; 0x34
8003668: 2303 movs r3, #3
800366a: 63a3 str r3, [r4, #56] ; 0x38
800366c: 4623 mov r3, r4
800366e: 6422 str r2, [r4, #64] ; 0x40
8003670: f803 5f46 strb.w r5, [r3, #70]!
8003674: 6023 str r3, [r4, #0]
8003676: 2301 movs r3, #1
8003678: e7dc b.n 8003634 <_sungetc_r+0x34>
0800367a <__ssrefill_r>:
800367a: b510 push {r4, lr}
800367c: 460c mov r4, r1
800367e: 6b49 ldr r1, [r1, #52] ; 0x34
8003680: b169 cbz r1, 800369e <__ssrefill_r+0x24>
8003682: f104 0344 add.w r3, r4, #68 ; 0x44
8003686: 4299 cmp r1, r3
8003688: d001 beq.n 800368e <__ssrefill_r+0x14>
800368a: f7ff ff0f bl 80034ac <_free_r>
800368e: 2000 movs r0, #0
8003690: 6c23 ldr r3, [r4, #64] ; 0x40
8003692: 6360 str r0, [r4, #52] ; 0x34
8003694: 6063 str r3, [r4, #4]
8003696: b113 cbz r3, 800369e <__ssrefill_r+0x24>
8003698: 6be3 ldr r3, [r4, #60] ; 0x3c
800369a: 6023 str r3, [r4, #0]
800369c: bd10 pop {r4, pc}
800369e: 6923 ldr r3, [r4, #16]
80036a0: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
80036a4: 6023 str r3, [r4, #0]
80036a6: 2300 movs r3, #0
80036a8: 6063 str r3, [r4, #4]
80036aa: 89a3 ldrh r3, [r4, #12]
80036ac: f043 0320 orr.w r3, r3, #32
80036b0: 81a3 strh r3, [r4, #12]
80036b2: bd10 pop {r4, pc}
080036b4 <__ssvfiscanf_r>:
80036b4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
80036b8: f5ad 7d25 sub.w sp, sp, #660 ; 0x294
80036bc: 9301 str r3, [sp, #4]
80036be: 2300 movs r3, #0
80036c0: 4606 mov r6, r0
80036c2: 460c mov r4, r1
80036c4: 4692 mov sl, r2
80036c6: 270a movs r7, #10
80036c8: 9346 str r3, [sp, #280] ; 0x118
80036ca: 9347 str r3, [sp, #284] ; 0x11c
80036cc: 4b9f ldr r3, [pc, #636] ; (800394c <__ssvfiscanf_r+0x298>)
80036ce: f10d 080c add.w r8, sp, #12
80036d2: 93a2 str r3, [sp, #648] ; 0x288
80036d4: 4b9e ldr r3, [pc, #632] ; (8003950 <__ssvfiscanf_r+0x29c>)
80036d6: f8df 927c ldr.w r9, [pc, #636] ; 8003954 <__ssvfiscanf_r+0x2a0>
80036da: f8cd 8120 str.w r8, [sp, #288] ; 0x120
80036de: 93a3 str r3, [sp, #652] ; 0x28c
80036e0: f89a 3000 ldrb.w r3, [sl]
80036e4: 2b00 cmp r3, #0
80036e6: f000 812f beq.w 8003948 <__ssvfiscanf_r+0x294>
80036ea: f000 fc2f bl 8003f4c <__locale_ctype_ptr>
80036ee: f89a b000 ldrb.w fp, [sl]
80036f2: 4458 add r0, fp
80036f4: 7843 ldrb r3, [r0, #1]
80036f6: f013 0308 ands.w r3, r3, #8
80036fa: d143 bne.n 8003784 <__ssvfiscanf_r+0xd0>
80036fc: f1bb 0f25 cmp.w fp, #37 ; 0x25
8003700: f10a 0501 add.w r5, sl, #1
8003704: f040 8099 bne.w 800383a <__ssvfiscanf_r+0x186>
8003708: 9345 str r3, [sp, #276] ; 0x114
800370a: 9343 str r3, [sp, #268] ; 0x10c
800370c: f89a 3001 ldrb.w r3, [sl, #1]
8003710: 2b2a cmp r3, #42 ; 0x2a
8003712: d103 bne.n 800371c <__ssvfiscanf_r+0x68>
8003714: 2310 movs r3, #16
8003716: f10a 0502 add.w r5, sl, #2
800371a: 9343 str r3, [sp, #268] ; 0x10c
800371c: 7829 ldrb r1, [r5, #0]
800371e: 46aa mov sl, r5
8003720: f1a1 0230 sub.w r2, r1, #48 ; 0x30
8003724: 2a09 cmp r2, #9
8003726: f105 0501 add.w r5, r5, #1
800372a: d941 bls.n 80037b0 <__ssvfiscanf_r+0xfc>
800372c: 2203 movs r2, #3
800372e: 4889 ldr r0, [pc, #548] ; (8003954 <__ssvfiscanf_r+0x2a0>)
8003730: f000 fc2c bl 8003f8c <memchr>
8003734: b138 cbz r0, 8003746 <__ssvfiscanf_r+0x92>
8003736: eba0 0309 sub.w r3, r0, r9
800373a: 2001 movs r0, #1
800373c: 46aa mov sl, r5
800373e: 4098 lsls r0, r3
8003740: 9b43 ldr r3, [sp, #268] ; 0x10c
8003742: 4318 orrs r0, r3
8003744: 9043 str r0, [sp, #268] ; 0x10c
8003746: f89a 3000 ldrb.w r3, [sl]
800374a: f10a 0501 add.w r5, sl, #1
800374e: 2b67 cmp r3, #103 ; 0x67
8003750: d84a bhi.n 80037e8 <__ssvfiscanf_r+0x134>
8003752: 2b65 cmp r3, #101 ; 0x65
8003754: f080 80b7 bcs.w 80038c6 <__ssvfiscanf_r+0x212>
8003758: 2b47 cmp r3, #71 ; 0x47
800375a: d82f bhi.n 80037bc <__ssvfiscanf_r+0x108>
800375c: 2b45 cmp r3, #69 ; 0x45
800375e: f080 80b2 bcs.w 80038c6 <__ssvfiscanf_r+0x212>
8003762: 2b00 cmp r3, #0
8003764: f000 8082 beq.w 800386c <__ssvfiscanf_r+0x1b8>
8003768: 2b25 cmp r3, #37 ; 0x25
800376a: d066 beq.n 800383a <__ssvfiscanf_r+0x186>
800376c: 2303 movs r3, #3
800376e: 9744 str r7, [sp, #272] ; 0x110
8003770: 9349 str r3, [sp, #292] ; 0x124
8003772: e045 b.n 8003800 <__ssvfiscanf_r+0x14c>
8003774: 9947 ldr r1, [sp, #284] ; 0x11c
8003776: 3301 adds r3, #1
8003778: 3101 adds r1, #1
800377a: 9147 str r1, [sp, #284] ; 0x11c
800377c: 6861 ldr r1, [r4, #4]
800377e: 6023 str r3, [r4, #0]
8003780: 3901 subs r1, #1
8003782: 6061 str r1, [r4, #4]
8003784: 6863 ldr r3, [r4, #4]
8003786: 2b00 cmp r3, #0
8003788: dd0b ble.n 80037a2 <__ssvfiscanf_r+0xee>
800378a: f000 fbdf bl 8003f4c <__locale_ctype_ptr>
800378e: 6823 ldr r3, [r4, #0]
8003790: 7819 ldrb r1, [r3, #0]
8003792: 4408 add r0, r1
8003794: 7841 ldrb r1, [r0, #1]
8003796: 070d lsls r5, r1, #28
8003798: d4ec bmi.n 8003774 <__ssvfiscanf_r+0xc0>
800379a: f10a 0501 add.w r5, sl, #1
800379e: 46aa mov sl, r5
80037a0: e79e b.n 80036e0 <__ssvfiscanf_r+0x2c>
80037a2: 9ba3 ldr r3, [sp, #652] ; 0x28c
80037a4: 4621 mov r1, r4
80037a6: 4630 mov r0, r6
80037a8: 4798 blx r3
80037aa: 2800 cmp r0, #0
80037ac: d0ed beq.n 800378a <__ssvfiscanf_r+0xd6>
80037ae: e7f4 b.n 800379a <__ssvfiscanf_r+0xe6>
80037b0: 9b45 ldr r3, [sp, #276] ; 0x114
80037b2: fb07 1303 mla r3, r7, r3, r1
80037b6: 3b30 subs r3, #48 ; 0x30
80037b8: 9345 str r3, [sp, #276] ; 0x114
80037ba: e7af b.n 800371c <__ssvfiscanf_r+0x68>
80037bc: 2b5b cmp r3, #91 ; 0x5b
80037be: d061 beq.n 8003884 <__ssvfiscanf_r+0x1d0>
80037c0: d80c bhi.n 80037dc <__ssvfiscanf_r+0x128>
80037c2: 2b58 cmp r3, #88 ; 0x58
80037c4: d1d2 bne.n 800376c <__ssvfiscanf_r+0xb8>
80037c6: 9a43 ldr r2, [sp, #268] ; 0x10c
80037c8: f442 7200 orr.w r2, r2, #512 ; 0x200
80037cc: 9243 str r2, [sp, #268] ; 0x10c
80037ce: 2210 movs r2, #16
80037d0: 9244 str r2, [sp, #272] ; 0x110
80037d2: 2b6f cmp r3, #111 ; 0x6f
80037d4: bfb4 ite lt
80037d6: 2303 movlt r3, #3
80037d8: 2304 movge r3, #4
80037da: e010 b.n 80037fe <__ssvfiscanf_r+0x14a>
80037dc: 2b63 cmp r3, #99 ; 0x63
80037de: d05c beq.n 800389a <__ssvfiscanf_r+0x1e6>
80037e0: 2b64 cmp r3, #100 ; 0x64
80037e2: d1c3 bne.n 800376c <__ssvfiscanf_r+0xb8>
80037e4: 9744 str r7, [sp, #272] ; 0x110
80037e6: e7f4 b.n 80037d2 <__ssvfiscanf_r+0x11e>
80037e8: 2b70 cmp r3, #112 ; 0x70
80037ea: d042 beq.n 8003872 <__ssvfiscanf_r+0x1be>
80037ec: d81d bhi.n 800382a <__ssvfiscanf_r+0x176>
80037ee: 2b6e cmp r3, #110 ; 0x6e
80037f0: d059 beq.n 80038a6 <__ssvfiscanf_r+0x1f2>
80037f2: d843 bhi.n 800387c <__ssvfiscanf_r+0x1c8>
80037f4: 2b69 cmp r3, #105 ; 0x69
80037f6: d1b9 bne.n 800376c <__ssvfiscanf_r+0xb8>
80037f8: 2300 movs r3, #0
80037fa: 9344 str r3, [sp, #272] ; 0x110
80037fc: 2303 movs r3, #3
80037fe: 9349 str r3, [sp, #292] ; 0x124
8003800: 6863 ldr r3, [r4, #4]
8003802: 2b00 cmp r3, #0
8003804: dd61 ble.n 80038ca <__ssvfiscanf_r+0x216>
8003806: 9b43 ldr r3, [sp, #268] ; 0x10c
8003808: 0659 lsls r1, r3, #25
800380a: d56f bpl.n 80038ec <__ssvfiscanf_r+0x238>
800380c: 9b49 ldr r3, [sp, #292] ; 0x124
800380e: 2b02 cmp r3, #2
8003810: dc7c bgt.n 800390c <__ssvfiscanf_r+0x258>
8003812: ab01 add r3, sp, #4
8003814: 4622 mov r2, r4
8003816: a943 add r1, sp, #268 ; 0x10c
8003818: 4630 mov r0, r6
800381a: f000 f89f bl 800395c <_scanf_chars>
800381e: 2801 cmp r0, #1
8003820: f000 8092 beq.w 8003948 <__ssvfiscanf_r+0x294>
8003824: 2802 cmp r0, #2
8003826: d1ba bne.n 800379e <__ssvfiscanf_r+0xea>
8003828: e01d b.n 8003866 <__ssvfiscanf_r+0x1b2>
800382a: 2b75 cmp r3, #117 ; 0x75
800382c: d0da beq.n 80037e4 <__ssvfiscanf_r+0x130>
800382e: 2b78 cmp r3, #120 ; 0x78
8003830: d0c9 beq.n 80037c6 <__ssvfiscanf_r+0x112>
8003832: 2b73 cmp r3, #115 ; 0x73
8003834: d19a bne.n 800376c <__ssvfiscanf_r+0xb8>
8003836: 2302 movs r3, #2
8003838: e7e1 b.n 80037fe <__ssvfiscanf_r+0x14a>
800383a: 6863 ldr r3, [r4, #4]
800383c: 2b00 cmp r3, #0
800383e: dd0c ble.n 800385a <__ssvfiscanf_r+0x1a6>
8003840: 6823 ldr r3, [r4, #0]
8003842: 781a ldrb r2, [r3, #0]
8003844: 4593 cmp fp, r2
8003846: d17f bne.n 8003948 <__ssvfiscanf_r+0x294>
8003848: 3301 adds r3, #1
800384a: 6862 ldr r2, [r4, #4]
800384c: 6023 str r3, [r4, #0]
800384e: 9b47 ldr r3, [sp, #284] ; 0x11c
8003850: 3a01 subs r2, #1
8003852: 3301 adds r3, #1
8003854: 6062 str r2, [r4, #4]
8003856: 9347 str r3, [sp, #284] ; 0x11c
8003858: e7a1 b.n 800379e <__ssvfiscanf_r+0xea>
800385a: 9ba3 ldr r3, [sp, #652] ; 0x28c
800385c: 4621 mov r1, r4
800385e: 4630 mov r0, r6
8003860: 4798 blx r3
8003862: 2800 cmp r0, #0
8003864: d0ec beq.n 8003840 <__ssvfiscanf_r+0x18c>
8003866: 9846 ldr r0, [sp, #280] ; 0x118
8003868: 2800 cmp r0, #0
800386a: d163 bne.n 8003934 <__ssvfiscanf_r+0x280>
800386c: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
8003870: e066 b.n 8003940 <__ssvfiscanf_r+0x28c>
8003872: 9a43 ldr r2, [sp, #268] ; 0x10c
8003874: f042 0220 orr.w r2, r2, #32
8003878: 9243 str r2, [sp, #268] ; 0x10c
800387a: e7a4 b.n 80037c6 <__ssvfiscanf_r+0x112>
800387c: 2308 movs r3, #8
800387e: 9344 str r3, [sp, #272] ; 0x110
8003880: 2304 movs r3, #4
8003882: e7bc b.n 80037fe <__ssvfiscanf_r+0x14a>
8003884: 4629 mov r1, r5
8003886: 4640 mov r0, r8
8003888: f000 f9d2 bl 8003c30 <__sccl>
800388c: 9b43 ldr r3, [sp, #268] ; 0x10c
800388e: 4605 mov r5, r0
8003890: f043 0340 orr.w r3, r3, #64 ; 0x40
8003894: 9343 str r3, [sp, #268] ; 0x10c
8003896: 2301 movs r3, #1
8003898: e7b1 b.n 80037fe <__ssvfiscanf_r+0x14a>
800389a: 9b43 ldr r3, [sp, #268] ; 0x10c
800389c: f043 0340 orr.w r3, r3, #64 ; 0x40
80038a0: 9343 str r3, [sp, #268] ; 0x10c
80038a2: 2300 movs r3, #0
80038a4: e7ab b.n 80037fe <__ssvfiscanf_r+0x14a>
80038a6: 9a43 ldr r2, [sp, #268] ; 0x10c
80038a8: 06d0 lsls r0, r2, #27
80038aa: f53f af78 bmi.w 800379e <__ssvfiscanf_r+0xea>
80038ae: f012 0f01 tst.w r2, #1
80038b2: 9a01 ldr r2, [sp, #4]
80038b4: 9b47 ldr r3, [sp, #284] ; 0x11c
80038b6: f102 0104 add.w r1, r2, #4
80038ba: 9101 str r1, [sp, #4]
80038bc: 6812 ldr r2, [r2, #0]
80038be: bf14 ite ne
80038c0: 8013 strhne r3, [r2, #0]
80038c2: 6013 streq r3, [r2, #0]
80038c4: e76b b.n 800379e <__ssvfiscanf_r+0xea>
80038c6: 2305 movs r3, #5
80038c8: e799 b.n 80037fe <__ssvfiscanf_r+0x14a>
80038ca: 9ba3 ldr r3, [sp, #652] ; 0x28c
80038cc: 4621 mov r1, r4
80038ce: 4630 mov r0, r6
80038d0: 4798 blx r3
80038d2: 2800 cmp r0, #0
80038d4: d097 beq.n 8003806 <__ssvfiscanf_r+0x152>
80038d6: e7c6 b.n 8003866 <__ssvfiscanf_r+0x1b2>
80038d8: 9a47 ldr r2, [sp, #284] ; 0x11c
80038da: 3201 adds r2, #1
80038dc: 9247 str r2, [sp, #284] ; 0x11c
80038de: 6862 ldr r2, [r4, #4]
80038e0: 3a01 subs r2, #1
80038e2: 2a00 cmp r2, #0
80038e4: 6062 str r2, [r4, #4]
80038e6: dd0a ble.n 80038fe <__ssvfiscanf_r+0x24a>
80038e8: 3301 adds r3, #1
80038ea: 6023 str r3, [r4, #0]
80038ec: f000 fb2e bl 8003f4c <__locale_ctype_ptr>
80038f0: 6823 ldr r3, [r4, #0]
80038f2: 781a ldrb r2, [r3, #0]
80038f4: 4410 add r0, r2
80038f6: 7842 ldrb r2, [r0, #1]
80038f8: 0712 lsls r2, r2, #28
80038fa: d4ed bmi.n 80038d8 <__ssvfiscanf_r+0x224>
80038fc: e786 b.n 800380c <__ssvfiscanf_r+0x158>
80038fe: 9ba3 ldr r3, [sp, #652] ; 0x28c
8003900: 4621 mov r1, r4
8003902: 4630 mov r0, r6
8003904: 4798 blx r3
8003906: 2800 cmp r0, #0
8003908: d0f0 beq.n 80038ec <__ssvfiscanf_r+0x238>
800390a: e7ac b.n 8003866 <__ssvfiscanf_r+0x1b2>
800390c: 2b04 cmp r3, #4
800390e: dc06 bgt.n 800391e <__ssvfiscanf_r+0x26a>
8003910: ab01 add r3, sp, #4
8003912: 4622 mov r2, r4
8003914: a943 add r1, sp, #268 ; 0x10c
8003916: 4630 mov r0, r6
8003918: f000 f884 bl 8003a24 <_scanf_i>
800391c: e77f b.n 800381e <__ssvfiscanf_r+0x16a>
800391e: 4b0e ldr r3, [pc, #56] ; (8003958 <__ssvfiscanf_r+0x2a4>)
8003920: 2b00 cmp r3, #0
8003922: f43f af3c beq.w 800379e <__ssvfiscanf_r+0xea>
8003926: ab01 add r3, sp, #4
8003928: 4622 mov r2, r4
800392a: a943 add r1, sp, #268 ; 0x10c
800392c: 4630 mov r0, r6
800392e: f3af 8000 nop.w
8003932: e774 b.n 800381e <__ssvfiscanf_r+0x16a>
8003934: 89a3 ldrh r3, [r4, #12]
8003936: f013 0f40 tst.w r3, #64 ; 0x40
800393a: bf18 it ne
800393c: f04f 30ff movne.w r0, #4294967295 ; 0xffffffff
8003940: f50d 7d25 add.w sp, sp, #660 ; 0x294
8003944: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
8003948: 9846 ldr r0, [sp, #280] ; 0x118
800394a: e7f9 b.n 8003940 <__ssvfiscanf_r+0x28c>
800394c: 08003601 .word 0x08003601
8003950: 0800367b .word 0x0800367b
8003954: 080040b4 .word 0x080040b4
8003958: 00000000 .word 0x00000000
0800395c <_scanf_chars>:
800395c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
8003960: 4615 mov r5, r2
8003962: 688a ldr r2, [r1, #8]
8003964: 4680 mov r8, r0
8003966: 460c mov r4, r1
8003968: b932 cbnz r2, 8003978 <_scanf_chars+0x1c>
800396a: 698a ldr r2, [r1, #24]
800396c: 2a00 cmp r2, #0
800396e: bf0c ite eq
8003970: 2201 moveq r2, #1
8003972: f04f 32ff movne.w r2, #4294967295 ; 0xffffffff
8003976: 608a str r2, [r1, #8]
8003978: 2600 movs r6, #0
800397a: 6822 ldr r2, [r4, #0]
800397c: 06d1 lsls r1, r2, #27
800397e: bf5f itttt pl
8003980: 681a ldrpl r2, [r3, #0]
8003982: 1d11 addpl r1, r2, #4
8003984: 6019 strpl r1, [r3, #0]
8003986: 6817 ldrpl r7, [r2, #0]
8003988: 69a3 ldr r3, [r4, #24]
800398a: b1db cbz r3, 80039c4 <_scanf_chars+0x68>
800398c: 2b01 cmp r3, #1
800398e: d107 bne.n 80039a0 <_scanf_chars+0x44>
8003990: 682b ldr r3, [r5, #0]
8003992: 6962 ldr r2, [r4, #20]
8003994: 781b ldrb r3, [r3, #0]
8003996: 5cd3 ldrb r3, [r2, r3]
8003998: b9a3 cbnz r3, 80039c4 <_scanf_chars+0x68>
800399a: 2e00 cmp r6, #0
800399c: d131 bne.n 8003a02 <_scanf_chars+0xa6>
800399e: e006 b.n 80039ae <_scanf_chars+0x52>
80039a0: 2b02 cmp r3, #2
80039a2: d007 beq.n 80039b4 <_scanf_chars+0x58>
80039a4: 2e00 cmp r6, #0
80039a6: d12c bne.n 8003a02 <_scanf_chars+0xa6>
80039a8: 69a3 ldr r3, [r4, #24]
80039aa: 2b01 cmp r3, #1
80039ac: d129 bne.n 8003a02 <_scanf_chars+0xa6>
80039ae: 2001 movs r0, #1
80039b0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
80039b4: f000 faca bl 8003f4c <__locale_ctype_ptr>
80039b8: 682b ldr r3, [r5, #0]
80039ba: 781b ldrb r3, [r3, #0]
80039bc: 4418 add r0, r3
80039be: 7843 ldrb r3, [r0, #1]
80039c0: 071b lsls r3, r3, #28
80039c2: d4ef bmi.n 80039a4 <_scanf_chars+0x48>
80039c4: 6823 ldr r3, [r4, #0]
80039c6: 3601 adds r6, #1
80039c8: 06da lsls r2, r3, #27
80039ca: bf5e ittt pl
80039cc: 682b ldrpl r3, [r5, #0]
80039ce: 781b ldrbpl r3, [r3, #0]
80039d0: 703b strbpl r3, [r7, #0]
80039d2: 682a ldr r2, [r5, #0]
80039d4: 686b ldr r3, [r5, #4]
80039d6: f102 0201 add.w r2, r2, #1
80039da: 602a str r2, [r5, #0]
80039dc: 68a2 ldr r2, [r4, #8]
80039de: f103 33ff add.w r3, r3, #4294967295 ; 0xffffffff
80039e2: f102 32ff add.w r2, r2, #4294967295 ; 0xffffffff
80039e6: 606b str r3, [r5, #4]
80039e8: bf58 it pl
80039ea: 3701 addpl r7, #1
80039ec: 60a2 str r2, [r4, #8]
80039ee: b142 cbz r2, 8003a02 <_scanf_chars+0xa6>
80039f0: 2b00 cmp r3, #0
80039f2: dcc9 bgt.n 8003988 <_scanf_chars+0x2c>
80039f4: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180
80039f8: 4629 mov r1, r5
80039fa: 4640 mov r0, r8
80039fc: 4798 blx r3
80039fe: 2800 cmp r0, #0
8003a00: d0c2 beq.n 8003988 <_scanf_chars+0x2c>
8003a02: 6823 ldr r3, [r4, #0]
8003a04: f013 0310 ands.w r3, r3, #16
8003a08: d105 bne.n 8003a16 <_scanf_chars+0xba>
8003a0a: 68e2 ldr r2, [r4, #12]
8003a0c: 3201 adds r2, #1
8003a0e: 60e2 str r2, [r4, #12]
8003a10: 69a2 ldr r2, [r4, #24]
8003a12: b102 cbz r2, 8003a16 <_scanf_chars+0xba>
8003a14: 703b strb r3, [r7, #0]
8003a16: 6923 ldr r3, [r4, #16]
8003a18: 2000 movs r0, #0
8003a1a: 441e add r6, r3
8003a1c: 6126 str r6, [r4, #16]
8003a1e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
...
08003a24 <_scanf_i>:
8003a24: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
8003a28: 460c mov r4, r1
8003a2a: 469a mov sl, r3
8003a2c: 4b74 ldr r3, [pc, #464] ; (8003c00 <_scanf_i+0x1dc>)
8003a2e: b087 sub sp, #28
8003a30: 4683 mov fp, r0
8003a32: 4616 mov r6, r2
8003a34: e893 0007 ldmia.w r3, {r0, r1, r2}
8003a38: ab03 add r3, sp, #12
8003a3a: 68a7 ldr r7, [r4, #8]
8003a3c: e883 0007 stmia.w r3, {r0, r1, r2}
8003a40: 4b70 ldr r3, [pc, #448] ; (8003c04 <_scanf_i+0x1e0>)
8003a42: 69a1 ldr r1, [r4, #24]
8003a44: 4a70 ldr r2, [pc, #448] ; (8003c08 <_scanf_i+0x1e4>)
8003a46: f104 091c add.w r9, r4, #28
8003a4a: 2903 cmp r1, #3
8003a4c: bf18 it ne
8003a4e: 461a movne r2, r3
8003a50: 1e7b subs r3, r7, #1
8003a52: f5b3 7fae cmp.w r3, #348 ; 0x15c
8003a56: bf84 itt hi
8003a58: f240 135d movwhi r3, #349 ; 0x15d
8003a5c: 60a3 strhi r3, [r4, #8]
8003a5e: 6823 ldr r3, [r4, #0]
8003a60: bf88 it hi
8003a62: f46f 75ae mvnhi.w r5, #348 ; 0x15c
8003a66: f443 6350 orr.w r3, r3, #3328 ; 0xd00
8003a6a: 6023 str r3, [r4, #0]
8003a6c: bf98 it ls
8003a6e: 2700 movls r7, #0
8003a70: 464b mov r3, r9
8003a72: f04f 0800 mov.w r8, #0
8003a76: 9200 str r2, [sp, #0]
8003a78: bf88 it hi
8003a7a: 197f addhi r7, r7, r5
8003a7c: 6831 ldr r1, [r6, #0]
8003a7e: 9301 str r3, [sp, #4]
8003a80: ab03 add r3, sp, #12
8003a82: f853 0028 ldr.w r0, [r3, r8, lsl #2]
8003a86: 2202 movs r2, #2
8003a88: 7809 ldrb r1, [r1, #0]
8003a8a: f000 fa7f bl 8003f8c <memchr>
8003a8e: 9b01 ldr r3, [sp, #4]
8003a90: b328 cbz r0, 8003ade <_scanf_i+0xba>
8003a92: f1b8 0f01 cmp.w r8, #1
8003a96: d156 bne.n 8003b46 <_scanf_i+0x122>
8003a98: 6862 ldr r2, [r4, #4]
8003a9a: b92a cbnz r2, 8003aa8 <_scanf_i+0x84>
8003a9c: 2208 movs r2, #8
8003a9e: 6062 str r2, [r4, #4]
8003aa0: 6822 ldr r2, [r4, #0]
8003aa2: f442 7200 orr.w r2, r2, #512 ; 0x200
8003aa6: 6022 str r2, [r4, #0]
8003aa8: 6822 ldr r2, [r4, #0]
8003aaa: f422 62a0 bic.w r2, r2, #1280 ; 0x500
8003aae: 6022 str r2, [r4, #0]
8003ab0: 68a2 ldr r2, [r4, #8]
8003ab2: 1e51 subs r1, r2, #1
8003ab4: 60a1 str r1, [r4, #8]
8003ab6: b192 cbz r2, 8003ade <_scanf_i+0xba>
8003ab8: 6832 ldr r2, [r6, #0]
8003aba: 1c5d adds r5, r3, #1
8003abc: 1c51 adds r1, r2, #1
8003abe: 6031 str r1, [r6, #0]
8003ac0: 7812 ldrb r2, [r2, #0]
8003ac2: 701a strb r2, [r3, #0]
8003ac4: 6873 ldr r3, [r6, #4]
8003ac6: 3b01 subs r3, #1
8003ac8: 2b00 cmp r3, #0
8003aca: 6073 str r3, [r6, #4]
8003acc: dc06 bgt.n 8003adc <_scanf_i+0xb8>
8003ace: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180
8003ad2: 4631 mov r1, r6
8003ad4: 4658 mov r0, fp
8003ad6: 4798 blx r3
8003ad8: 2800 cmp r0, #0
8003ada: d177 bne.n 8003bcc <_scanf_i+0x1a8>
8003adc: 462b mov r3, r5
8003ade: f108 0801 add.w r8, r8, #1
8003ae2: f1b8 0f03 cmp.w r8, #3
8003ae6: d1c9 bne.n 8003a7c <_scanf_i+0x58>
8003ae8: 6862 ldr r2, [r4, #4]
8003aea: b90a cbnz r2, 8003af0 <_scanf_i+0xcc>
8003aec: 220a movs r2, #10
8003aee: 6062 str r2, [r4, #4]
8003af0: 6862 ldr r2, [r4, #4]
8003af2: 4946 ldr r1, [pc, #280] ; (8003c0c <_scanf_i+0x1e8>)
8003af4: 6960 ldr r0, [r4, #20]
8003af6: 1a89 subs r1, r1, r2
8003af8: 9301 str r3, [sp, #4]
8003afa: f000 f899 bl 8003c30 <__sccl>
8003afe: 9b01 ldr r3, [sp, #4]
8003b00: f04f 0800 mov.w r8, #0
8003b04: 461d mov r5, r3
8003b06: 68a3 ldr r3, [r4, #8]
8003b08: 2b00 cmp r3, #0
8003b0a: d039 beq.n 8003b80 <_scanf_i+0x15c>
8003b0c: 6831 ldr r1, [r6, #0]
8003b0e: 6960 ldr r0, [r4, #20]
8003b10: 780a ldrb r2, [r1, #0]
8003b12: 5c80 ldrb r0, [r0, r2]
8003b14: 2800 cmp r0, #0
8003b16: d033 beq.n 8003b80 <_scanf_i+0x15c>
8003b18: 2a30 cmp r2, #48 ; 0x30
8003b1a: 6822 ldr r2, [r4, #0]
8003b1c: d121 bne.n 8003b62 <_scanf_i+0x13e>
8003b1e: 0510 lsls r0, r2, #20
8003b20: d51f bpl.n 8003b62 <_scanf_i+0x13e>
8003b22: f108 0801 add.w r8, r8, #1
8003b26: b117 cbz r7, 8003b2e <_scanf_i+0x10a>
8003b28: 3301 adds r3, #1
8003b2a: 3f01 subs r7, #1
8003b2c: 60a3 str r3, [r4, #8]
8003b2e: 6873 ldr r3, [r6, #4]
8003b30: 3b01 subs r3, #1
8003b32: 2b00 cmp r3, #0
8003b34: 6073 str r3, [r6, #4]
8003b36: dd1c ble.n 8003b72 <_scanf_i+0x14e>
8003b38: 6833 ldr r3, [r6, #0]
8003b3a: 3301 adds r3, #1
8003b3c: 6033 str r3, [r6, #0]
8003b3e: 68a3 ldr r3, [r4, #8]
8003b40: 3b01 subs r3, #1
8003b42: 60a3 str r3, [r4, #8]
8003b44: e7df b.n 8003b06 <_scanf_i+0xe2>
8003b46: f1b8 0f02 cmp.w r8, #2
8003b4a: d1b1 bne.n 8003ab0 <_scanf_i+0x8c>
8003b4c: 6822 ldr r2, [r4, #0]
8003b4e: f402 61c0 and.w r1, r2, #1536 ; 0x600
8003b52: f5b1 7f00 cmp.w r1, #512 ; 0x200
8003b56: d1c2 bne.n 8003ade <_scanf_i+0xba>
8003b58: 2110 movs r1, #16
8003b5a: f442 7280 orr.w r2, r2, #256 ; 0x100
8003b5e: 6061 str r1, [r4, #4]
8003b60: e7a5 b.n 8003aae <_scanf_i+0x8a>
8003b62: f422 6210 bic.w r2, r2, #2304 ; 0x900
8003b66: 6022 str r2, [r4, #0]
8003b68: 780b ldrb r3, [r1, #0]
8003b6a: 3501 adds r5, #1
8003b6c: f805 3c01 strb.w r3, [r5, #-1]
8003b70: e7dd b.n 8003b2e <_scanf_i+0x10a>
8003b72: f8d4 3180 ldr.w r3, [r4, #384] ; 0x180
8003b76: 4631 mov r1, r6
8003b78: 4658 mov r0, fp
8003b7a: 4798 blx r3
8003b7c: 2800 cmp r0, #0
8003b7e: d0de beq.n 8003b3e <_scanf_i+0x11a>
8003b80: 6823 ldr r3, [r4, #0]
8003b82: 05d9 lsls r1, r3, #23
8003b84: d50c bpl.n 8003ba0 <_scanf_i+0x17c>
8003b86: 454d cmp r5, r9
8003b88: d908 bls.n 8003b9c <_scanf_i+0x178>
8003b8a: f815 1c01 ldrb.w r1, [r5, #-1]
8003b8e: 1e6f subs r7, r5, #1
8003b90: f8d4 317c ldr.w r3, [r4, #380] ; 0x17c
8003b94: 4632 mov r2, r6
8003b96: 4658 mov r0, fp
8003b98: 4798 blx r3
8003b9a: 463d mov r5, r7
8003b9c: 454d cmp r5, r9
8003b9e: d02c beq.n 8003bfa <_scanf_i+0x1d6>
8003ba0: 6822 ldr r2, [r4, #0]
8003ba2: f012 0210 ands.w r2, r2, #16
8003ba6: d11e bne.n 8003be6 <_scanf_i+0x1c2>
8003ba8: 702a strb r2, [r5, #0]
8003baa: 6863 ldr r3, [r4, #4]
8003bac: 4649 mov r1, r9
8003bae: 4658 mov r0, fp
8003bb0: 9e00 ldr r6, [sp, #0]
8003bb2: 47b0 blx r6
8003bb4: 6822 ldr r2, [r4, #0]
8003bb6: f8da 3000 ldr.w r3, [sl]
8003bba: f012 0f20 tst.w r2, #32
8003bbe: d008 beq.n 8003bd2 <_scanf_i+0x1ae>
8003bc0: 1d1a adds r2, r3, #4
8003bc2: f8ca 2000 str.w r2, [sl]
8003bc6: 681b ldr r3, [r3, #0]
8003bc8: 6018 str r0, [r3, #0]
8003bca: e009 b.n 8003be0 <_scanf_i+0x1bc>
8003bcc: f04f 0800 mov.w r8, #0
8003bd0: e7d6 b.n 8003b80 <_scanf_i+0x15c>
8003bd2: 07d2 lsls r2, r2, #31
8003bd4: d5f4 bpl.n 8003bc0 <_scanf_i+0x19c>
8003bd6: 1d1a adds r2, r3, #4
8003bd8: f8ca 2000 str.w r2, [sl]
8003bdc: 681b ldr r3, [r3, #0]
8003bde: 8018 strh r0, [r3, #0]
8003be0: 68e3 ldr r3, [r4, #12]
8003be2: 3301 adds r3, #1
8003be4: 60e3 str r3, [r4, #12]
8003be6: 2000 movs r0, #0
8003be8: eba5 0509 sub.w r5, r5, r9
8003bec: 44a8 add r8, r5
8003bee: 6925 ldr r5, [r4, #16]
8003bf0: 4445 add r5, r8
8003bf2: 6125 str r5, [r4, #16]
8003bf4: b007 add sp, #28
8003bf6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
8003bfa: 2001 movs r0, #1
8003bfc: e7fa b.n 8003bf4 <_scanf_i+0x1d0>
8003bfe: bf00 nop
8003c00: 08004054 .word 0x08004054
8003c04: 08003eb1 .word 0x08003eb1
8003c08: 08003d91 .word 0x08003d91
8003c0c: 080040c8 .word 0x080040c8
08003c10 <_sbrk_r>:
8003c10: b538 push {r3, r4, r5, lr}
8003c12: 2300 movs r3, #0
8003c14: 4c05 ldr r4, [pc, #20] ; (8003c2c <_sbrk_r+0x1c>)
8003c16: 4605 mov r5, r0
8003c18: 4608 mov r0, r1
8003c1a: 6023 str r3, [r4, #0]
8003c1c: f7ff f88a bl 8002d34 <_sbrk>
8003c20: 1c43 adds r3, r0, #1
8003c22: d102 bne.n 8003c2a <_sbrk_r+0x1a>
8003c24: 6823 ldr r3, [r4, #0]
8003c26: b103 cbz r3, 8003c2a <_sbrk_r+0x1a>
8003c28: 602b str r3, [r5, #0]
8003c2a: bd38 pop {r3, r4, r5, pc}
8003c2c: 20000390 .word 0x20000390
08003c30 <__sccl>:
8003c30: b570 push {r4, r5, r6, lr}
8003c32: 780b ldrb r3, [r1, #0]
8003c34: 1e44 subs r4, r0, #1
8003c36: 2b5e cmp r3, #94 ; 0x5e
8003c38: bf13 iteet ne
8003c3a: 1c4a addne r2, r1, #1
8003c3c: 1c8a addeq r2, r1, #2
8003c3e: 784b ldrbeq r3, [r1, #1]
8003c40: 2100 movne r1, #0
8003c42: bf08 it eq
8003c44: 2101 moveq r1, #1
8003c46: f100 05ff add.w r5, r0, #255 ; 0xff
8003c4a: f804 1f01 strb.w r1, [r4, #1]!
8003c4e: 42a5 cmp r5, r4
8003c50: d1fb bne.n 8003c4a <__sccl+0x1a>
8003c52: b913 cbnz r3, 8003c5a <__sccl+0x2a>
8003c54: 3a01 subs r2, #1
8003c56: 4610 mov r0, r2
8003c58: bd70 pop {r4, r5, r6, pc}
8003c5a: f081 0401 eor.w r4, r1, #1
8003c5e: 4611 mov r1, r2
8003c60: 54c4 strb r4, [r0, r3]
8003c62: 780d ldrb r5, [r1, #0]
8003c64: 1c4a adds r2, r1, #1
8003c66: 2d2d cmp r5, #45 ; 0x2d
8003c68: d006 beq.n 8003c78 <__sccl+0x48>
8003c6a: 2d5d cmp r5, #93 ; 0x5d
8003c6c: d0f3 beq.n 8003c56 <__sccl+0x26>
8003c6e: b90d cbnz r5, 8003c74 <__sccl+0x44>
8003c70: 460a mov r2, r1
8003c72: e7f0 b.n 8003c56 <__sccl+0x26>
8003c74: 462b mov r3, r5
8003c76: e7f2 b.n 8003c5e <__sccl+0x2e>
8003c78: 784e ldrb r6, [r1, #1]
8003c7a: 2e5d cmp r6, #93 ; 0x5d
8003c7c: d0fa beq.n 8003c74 <__sccl+0x44>
8003c7e: 42b3 cmp r3, r6
8003c80: dcf8 bgt.n 8003c74 <__sccl+0x44>
8003c82: 3102 adds r1, #2
8003c84: 3301 adds r3, #1
8003c86: 429e cmp r6, r3
8003c88: 54c4 strb r4, [r0, r3]
8003c8a: dcfb bgt.n 8003c84 <__sccl+0x54>
8003c8c: e7e9 b.n 8003c62 <__sccl+0x32>
08003c8e <_strtol_l.isra.0>:
8003c8e: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
8003c92: 4680 mov r8, r0
8003c94: 4689 mov r9, r1
8003c96: 4692 mov sl, r2
8003c98: 461f mov r7, r3
8003c9a: 468b mov fp, r1
8003c9c: 465d mov r5, fp
8003c9e: 980a ldr r0, [sp, #40] ; 0x28
8003ca0: f815 4b01 ldrb.w r4, [r5], #1
8003ca4: f000 f94f bl 8003f46 <__locale_ctype_ptr_l>
8003ca8: 4420 add r0, r4
8003caa: 7846 ldrb r6, [r0, #1]
8003cac: f016 0608 ands.w r6, r6, #8
8003cb0: d10b bne.n 8003cca <_strtol_l.isra.0+0x3c>
8003cb2: 2c2d cmp r4, #45 ; 0x2d
8003cb4: d10b bne.n 8003cce <_strtol_l.isra.0+0x40>
8003cb6: 2601 movs r6, #1
8003cb8: 782c ldrb r4, [r5, #0]
8003cba: f10b 0502 add.w r5, fp, #2
8003cbe: b167 cbz r7, 8003cda <_strtol_l.isra.0+0x4c>
8003cc0: 2f10 cmp r7, #16
8003cc2: d114 bne.n 8003cee <_strtol_l.isra.0+0x60>
8003cc4: 2c30 cmp r4, #48 ; 0x30
8003cc6: d00a beq.n 8003cde <_strtol_l.isra.0+0x50>
8003cc8: e011 b.n 8003cee <_strtol_l.isra.0+0x60>
8003cca: 46ab mov fp, r5
8003ccc: e7e6 b.n 8003c9c <_strtol_l.isra.0+0xe>
8003cce: 2c2b cmp r4, #43 ; 0x2b
8003cd0: bf04 itt eq
8003cd2: 782c ldrbeq r4, [r5, #0]
8003cd4: f10b 0502 addeq.w r5, fp, #2
8003cd8: e7f1 b.n 8003cbe <_strtol_l.isra.0+0x30>
8003cda: 2c30 cmp r4, #48 ; 0x30
8003cdc: d127 bne.n 8003d2e <_strtol_l.isra.0+0xa0>
8003cde: 782b ldrb r3, [r5, #0]
8003ce0: f003 03df and.w r3, r3, #223 ; 0xdf
8003ce4: 2b58 cmp r3, #88 ; 0x58
8003ce6: d14b bne.n 8003d80 <_strtol_l.isra.0+0xf2>
8003ce8: 2710 movs r7, #16
8003cea: 786c ldrb r4, [r5, #1]
8003cec: 3502 adds r5, #2
8003cee: 2e00 cmp r6, #0
8003cf0: bf0c ite eq
8003cf2: f06f 4100 mvneq.w r1, #2147483648 ; 0x80000000
8003cf6: f04f 4100 movne.w r1, #2147483648 ; 0x80000000
8003cfa: 2200 movs r2, #0
8003cfc: fbb1 fef7 udiv lr, r1, r7
8003d00: 4610 mov r0, r2
8003d02: fb07 1c1e mls ip, r7, lr, r1
8003d06: f1a4 0330 sub.w r3, r4, #48 ; 0x30
8003d0a: 2b09 cmp r3, #9
8003d0c: d811 bhi.n 8003d32 <_strtol_l.isra.0+0xa4>
8003d0e: 461c mov r4, r3
8003d10: 42a7 cmp r7, r4
8003d12: dd1d ble.n 8003d50 <_strtol_l.isra.0+0xc2>
8003d14: 1c53 adds r3, r2, #1
8003d16: d007 beq.n 8003d28 <_strtol_l.isra.0+0x9a>
8003d18: 4586 cmp lr, r0
8003d1a: d316 bcc.n 8003d4a <_strtol_l.isra.0+0xbc>
8003d1c: d101 bne.n 8003d22 <_strtol_l.isra.0+0x94>
8003d1e: 45a4 cmp ip, r4
8003d20: db13 blt.n 8003d4a <_strtol_l.isra.0+0xbc>
8003d22: 2201 movs r2, #1
8003d24: fb00 4007 mla r0, r0, r7, r4
8003d28: f815 4b01 ldrb.w r4, [r5], #1
8003d2c: e7eb b.n 8003d06 <_strtol_l.isra.0+0x78>
8003d2e: 270a movs r7, #10
8003d30: e7dd b.n 8003cee <_strtol_l.isra.0+0x60>
8003d32: f1a4 0341 sub.w r3, r4, #65 ; 0x41
8003d36: 2b19 cmp r3, #25
8003d38: d801 bhi.n 8003d3e <_strtol_l.isra.0+0xb0>
8003d3a: 3c37 subs r4, #55 ; 0x37
8003d3c: e7e8 b.n 8003d10 <_strtol_l.isra.0+0x82>
8003d3e: f1a4 0361 sub.w r3, r4, #97 ; 0x61
8003d42: 2b19 cmp r3, #25
8003d44: d804 bhi.n 8003d50 <_strtol_l.isra.0+0xc2>
8003d46: 3c57 subs r4, #87 ; 0x57
8003d48: e7e2 b.n 8003d10 <_strtol_l.isra.0+0x82>
8003d4a: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff
8003d4e: e7eb b.n 8003d28 <_strtol_l.isra.0+0x9a>
8003d50: 1c53 adds r3, r2, #1
8003d52: d108 bne.n 8003d66 <_strtol_l.isra.0+0xd8>
8003d54: 2322 movs r3, #34 ; 0x22
8003d56: 4608 mov r0, r1
8003d58: f8c8 3000 str.w r3, [r8]
8003d5c: f1ba 0f00 cmp.w sl, #0
8003d60: d107 bne.n 8003d72 <_strtol_l.isra.0+0xe4>
8003d62: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
8003d66: b106 cbz r6, 8003d6a <_strtol_l.isra.0+0xdc>
8003d68: 4240 negs r0, r0
8003d6a: f1ba 0f00 cmp.w sl, #0
8003d6e: d00c beq.n 8003d8a <_strtol_l.isra.0+0xfc>
8003d70: b122 cbz r2, 8003d7c <_strtol_l.isra.0+0xee>
8003d72: 3d01 subs r5, #1
8003d74: f8ca 5000 str.w r5, [sl]
8003d78: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
8003d7c: 464d mov r5, r9
8003d7e: e7f9 b.n 8003d74 <_strtol_l.isra.0+0xe6>
8003d80: 2430 movs r4, #48 ; 0x30
8003d82: 2f00 cmp r7, #0
8003d84: d1b3 bne.n 8003cee <_strtol_l.isra.0+0x60>
8003d86: 2708 movs r7, #8
8003d88: e7b1 b.n 8003cee <_strtol_l.isra.0+0x60>
8003d8a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
...
08003d90 <_strtol_r>:
8003d90: b537 push {r0, r1, r2, r4, r5, lr}
8003d92: 4c06 ldr r4, [pc, #24] ; (8003dac <_strtol_r+0x1c>)
8003d94: 4d06 ldr r5, [pc, #24] ; (8003db0 <_strtol_r+0x20>)
8003d96: 6824 ldr r4, [r4, #0]
8003d98: 6a24 ldr r4, [r4, #32]
8003d9a: 2c00 cmp r4, #0
8003d9c: bf08 it eq
8003d9e: 462c moveq r4, r5
8003da0: 9400 str r4, [sp, #0]
8003da2: f7ff ff74 bl 8003c8e <_strtol_l.isra.0>
8003da6: b003 add sp, #12
8003da8: bd30 pop {r4, r5, pc}
8003daa: bf00 nop
8003dac: 2000001c .word 0x2000001c
8003db0: 20000080 .word 0x20000080
08003db4 <_strtoul_l.isra.0>:
8003db4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
8003db8: 4680 mov r8, r0
8003dba: 4689 mov r9, r1
8003dbc: 4692 mov sl, r2
8003dbe: 461e mov r6, r3
8003dc0: 460f mov r7, r1
8003dc2: 463d mov r5, r7
8003dc4: 9808 ldr r0, [sp, #32]
8003dc6: f815 4b01 ldrb.w r4, [r5], #1
8003dca: f000 f8bc bl 8003f46 <__locale_ctype_ptr_l>
8003dce: 4420 add r0, r4
8003dd0: 7843 ldrb r3, [r0, #1]
8003dd2: f013 0308 ands.w r3, r3, #8
8003dd6: d10a bne.n 8003dee <_strtoul_l.isra.0+0x3a>
8003dd8: 2c2d cmp r4, #45 ; 0x2d
8003dda: d10a bne.n 8003df2 <_strtoul_l.isra.0+0x3e>
8003ddc: 2301 movs r3, #1
8003dde: 782c ldrb r4, [r5, #0]
8003de0: 1cbd adds r5, r7, #2
8003de2: b15e cbz r6, 8003dfc <_strtoul_l.isra.0+0x48>
8003de4: 2e10 cmp r6, #16
8003de6: d113 bne.n 8003e10 <_strtoul_l.isra.0+0x5c>
8003de8: 2c30 cmp r4, #48 ; 0x30
8003dea: d009 beq.n 8003e00 <_strtoul_l.isra.0+0x4c>
8003dec: e010 b.n 8003e10 <_strtoul_l.isra.0+0x5c>
8003dee: 462f mov r7, r5
8003df0: e7e7 b.n 8003dc2 <_strtoul_l.isra.0+0xe>
8003df2: 2c2b cmp r4, #43 ; 0x2b
8003df4: bf04 itt eq
8003df6: 782c ldrbeq r4, [r5, #0]
8003df8: 1cbd addeq r5, r7, #2
8003dfa: e7f2 b.n 8003de2 <_strtoul_l.isra.0+0x2e>
8003dfc: 2c30 cmp r4, #48 ; 0x30
8003dfe: d125 bne.n 8003e4c <_strtoul_l.isra.0+0x98>
8003e00: 782a ldrb r2, [r5, #0]
8003e02: f002 02df and.w r2, r2, #223 ; 0xdf
8003e06: 2a58 cmp r2, #88 ; 0x58
8003e08: d14a bne.n 8003ea0 <_strtoul_l.isra.0+0xec>
8003e0a: 2610 movs r6, #16
8003e0c: 786c ldrb r4, [r5, #1]
8003e0e: 3502 adds r5, #2
8003e10: f04f 31ff mov.w r1, #4294967295 ; 0xffffffff
8003e14: fbb1 f1f6 udiv r1, r1, r6
8003e18: 2700 movs r7, #0
8003e1a: fb06 fe01 mul.w lr, r6, r1
8003e1e: 4638 mov r0, r7
8003e20: ea6f 0e0e mvn.w lr, lr
8003e24: f1a4 0230 sub.w r2, r4, #48 ; 0x30
8003e28: 2a09 cmp r2, #9
8003e2a: d811 bhi.n 8003e50 <_strtoul_l.isra.0+0x9c>
8003e2c: 4614 mov r4, r2
8003e2e: 42a6 cmp r6, r4
8003e30: dd1d ble.n 8003e6e <_strtoul_l.isra.0+0xba>
8003e32: 2f00 cmp r7, #0
8003e34: db18 blt.n 8003e68 <_strtoul_l.isra.0+0xb4>
8003e36: 4281 cmp r1, r0
8003e38: d316 bcc.n 8003e68 <_strtoul_l.isra.0+0xb4>
8003e3a: d101 bne.n 8003e40 <_strtoul_l.isra.0+0x8c>
8003e3c: 45a6 cmp lr, r4
8003e3e: db13 blt.n 8003e68 <_strtoul_l.isra.0+0xb4>
8003e40: 2701 movs r7, #1
8003e42: fb00 4006 mla r0, r0, r6, r4
8003e46: f815 4b01 ldrb.w r4, [r5], #1
8003e4a: e7eb b.n 8003e24 <_strtoul_l.isra.0+0x70>
8003e4c: 260a movs r6, #10
8003e4e: e7df b.n 8003e10 <_strtoul_l.isra.0+0x5c>
8003e50: f1a4 0241 sub.w r2, r4, #65 ; 0x41
8003e54: 2a19 cmp r2, #25
8003e56: d801 bhi.n 8003e5c <_strtoul_l.isra.0+0xa8>
8003e58: 3c37 subs r4, #55 ; 0x37
8003e5a: e7e8 b.n 8003e2e <_strtoul_l.isra.0+0x7a>
8003e5c: f1a4 0261 sub.w r2, r4, #97 ; 0x61
8003e60: 2a19 cmp r2, #25
8003e62: d804 bhi.n 8003e6e <_strtoul_l.isra.0+0xba>
8003e64: 3c57 subs r4, #87 ; 0x57
8003e66: e7e2 b.n 8003e2e <_strtoul_l.isra.0+0x7a>
8003e68: f04f 37ff mov.w r7, #4294967295 ; 0xffffffff
8003e6c: e7eb b.n 8003e46 <_strtoul_l.isra.0+0x92>
8003e6e: 2f00 cmp r7, #0
8003e70: da09 bge.n 8003e86 <_strtoul_l.isra.0+0xd2>
8003e72: 2322 movs r3, #34 ; 0x22
8003e74: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
8003e78: f8c8 3000 str.w r3, [r8]
8003e7c: f1ba 0f00 cmp.w sl, #0
8003e80: d107 bne.n 8003e92 <_strtoul_l.isra.0+0xde>
8003e82: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
8003e86: b103 cbz r3, 8003e8a <_strtoul_l.isra.0+0xd6>
8003e88: 4240 negs r0, r0
8003e8a: f1ba 0f00 cmp.w sl, #0
8003e8e: d00c beq.n 8003eaa <_strtoul_l.isra.0+0xf6>
8003e90: b127 cbz r7, 8003e9c <_strtoul_l.isra.0+0xe8>
8003e92: 3d01 subs r5, #1
8003e94: f8ca 5000 str.w r5, [sl]
8003e98: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
8003e9c: 464d mov r5, r9
8003e9e: e7f9 b.n 8003e94 <_strtoul_l.isra.0+0xe0>
8003ea0: 2430 movs r4, #48 ; 0x30
8003ea2: 2e00 cmp r6, #0
8003ea4: d1b4 bne.n 8003e10 <_strtoul_l.isra.0+0x5c>
8003ea6: 2608 movs r6, #8
8003ea8: e7b2 b.n 8003e10 <_strtoul_l.isra.0+0x5c>
8003eaa: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
...
08003eb0 <_strtoul_r>:
8003eb0: b537 push {r0, r1, r2, r4, r5, lr}
8003eb2: 4c06 ldr r4, [pc, #24] ; (8003ecc <_strtoul_r+0x1c>)
8003eb4: 4d06 ldr r5, [pc, #24] ; (8003ed0 <_strtoul_r+0x20>)
8003eb6: 6824 ldr r4, [r4, #0]
8003eb8: 6a24 ldr r4, [r4, #32]
8003eba: 2c00 cmp r4, #0
8003ebc: bf08 it eq
8003ebe: 462c moveq r4, r5
8003ec0: 9400 str r4, [sp, #0]
8003ec2: f7ff ff77 bl 8003db4 <_strtoul_l.isra.0>
8003ec6: b003 add sp, #12
8003ec8: bd30 pop {r4, r5, pc}
8003eca: bf00 nop
8003ecc: 2000001c .word 0x2000001c
8003ed0: 20000080 .word 0x20000080
08003ed4 <__submore>:
8003ed4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
8003ed8: 460c mov r4, r1
8003eda: 6b49 ldr r1, [r1, #52] ; 0x34
8003edc: f104 0344 add.w r3, r4, #68 ; 0x44
8003ee0: 4299 cmp r1, r3
8003ee2: d11c bne.n 8003f1e <__submore+0x4a>
8003ee4: f44f 6180 mov.w r1, #1024 ; 0x400
8003ee8: f7ff fb2c bl 8003544 <_malloc_r>
8003eec: b918 cbnz r0, 8003ef6 <__submore+0x22>
8003eee: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
8003ef2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
8003ef6: f44f 6380 mov.w r3, #1024 ; 0x400
8003efa: 63a3 str r3, [r4, #56] ; 0x38
8003efc: f894 3046 ldrb.w r3, [r4, #70] ; 0x46
8003f00: 6360 str r0, [r4, #52] ; 0x34
8003f02: f880 33ff strb.w r3, [r0, #1023] ; 0x3ff
8003f06: f894 3045 ldrb.w r3, [r4, #69] ; 0x45
8003f0a: f200 30fd addw r0, r0, #1021 ; 0x3fd
8003f0e: 7043 strb r3, [r0, #1]
8003f10: f894 3044 ldrb.w r3, [r4, #68] ; 0x44
8003f14: 7003 strb r3, [r0, #0]
8003f16: 6020 str r0, [r4, #0]
8003f18: 2000 movs r0, #0
8003f1a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
8003f1e: 6ba6 ldr r6, [r4, #56] ; 0x38
8003f20: 0077 lsls r7, r6, #1
8003f22: 463a mov r2, r7
8003f24: f000 f84d bl 8003fc2 <_realloc_r>
8003f28: 4605 mov r5, r0
8003f2a: 2800 cmp r0, #0
8003f2c: d0df beq.n 8003eee <__submore+0x1a>
8003f2e: eb00 0806 add.w r8, r0, r6
8003f32: 4601 mov r1, r0
8003f34: 4632 mov r2, r6
8003f36: 4640 mov r0, r8
8003f38: f000 f836 bl 8003fa8 <memcpy>
8003f3c: f8c4 8000 str.w r8, [r4]
8003f40: 6365 str r5, [r4, #52] ; 0x34
8003f42: 63a7 str r7, [r4, #56] ; 0x38
8003f44: e7e8 b.n 8003f18 <__submore+0x44>
08003f46 <__locale_ctype_ptr_l>:
8003f46: f8d0 00ec ldr.w r0, [r0, #236] ; 0xec
8003f4a: 4770 bx lr
08003f4c <__locale_ctype_ptr>:
8003f4c: 4b04 ldr r3, [pc, #16] ; (8003f60 <__locale_ctype_ptr+0x14>)
8003f4e: 4a05 ldr r2, [pc, #20] ; (8003f64 <__locale_ctype_ptr+0x18>)
8003f50: 681b ldr r3, [r3, #0]
8003f52: 6a1b ldr r3, [r3, #32]
8003f54: 2b00 cmp r3, #0
8003f56: bf08 it eq
8003f58: 4613 moveq r3, r2
8003f5a: f8d3 00ec ldr.w r0, [r3, #236] ; 0xec
8003f5e: 4770 bx lr
8003f60: 2000001c .word 0x2000001c
8003f64: 20000080 .word 0x20000080
08003f68 <__ascii_mbtowc>:
8003f68: b082 sub sp, #8
8003f6a: b901 cbnz r1, 8003f6e <__ascii_mbtowc+0x6>
8003f6c: a901 add r1, sp, #4
8003f6e: b142 cbz r2, 8003f82 <__ascii_mbtowc+0x1a>
8003f70: b14b cbz r3, 8003f86 <__ascii_mbtowc+0x1e>
8003f72: 7813 ldrb r3, [r2, #0]
8003f74: 600b str r3, [r1, #0]
8003f76: 7812 ldrb r2, [r2, #0]
8003f78: 1c10 adds r0, r2, #0
8003f7a: bf18 it ne
8003f7c: 2001 movne r0, #1
8003f7e: b002 add sp, #8
8003f80: 4770 bx lr
8003f82: 4610 mov r0, r2
8003f84: e7fb b.n 8003f7e <__ascii_mbtowc+0x16>
8003f86: f06f 0001 mvn.w r0, #1
8003f8a: e7f8 b.n 8003f7e <__ascii_mbtowc+0x16>
08003f8c <memchr>:
8003f8c: b510 push {r4, lr}
8003f8e: b2c9 uxtb r1, r1
8003f90: 4402 add r2, r0
8003f92: 4290 cmp r0, r2
8003f94: 4603 mov r3, r0
8003f96: d101 bne.n 8003f9c <memchr+0x10>
8003f98: 2000 movs r0, #0
8003f9a: bd10 pop {r4, pc}
8003f9c: 781c ldrb r4, [r3, #0]
8003f9e: 3001 adds r0, #1
8003fa0: 428c cmp r4, r1
8003fa2: d1f6 bne.n 8003f92 <memchr+0x6>
8003fa4: 4618 mov r0, r3
8003fa6: bd10 pop {r4, pc}
08003fa8 <memcpy>:
8003fa8: b510 push {r4, lr}
8003faa: 1e43 subs r3, r0, #1
8003fac: 440a add r2, r1
8003fae: 4291 cmp r1, r2
8003fb0: d100 bne.n 8003fb4 <memcpy+0xc>
8003fb2: bd10 pop {r4, pc}
8003fb4: f811 4b01 ldrb.w r4, [r1], #1
8003fb8: f803 4f01 strb.w r4, [r3, #1]!
8003fbc: e7f7 b.n 8003fae <memcpy+0x6>
08003fbe <__malloc_lock>:
8003fbe: 4770 bx lr
08003fc0 <__malloc_unlock>:
8003fc0: 4770 bx lr
08003fc2 <_realloc_r>:
8003fc2: b5f8 push {r3, r4, r5, r6, r7, lr}
8003fc4: 4607 mov r7, r0
8003fc6: 4614 mov r4, r2
8003fc8: 460e mov r6, r1
8003fca: b921 cbnz r1, 8003fd6 <_realloc_r+0x14>
8003fcc: 4611 mov r1, r2
8003fce: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
8003fd2: f7ff bab7 b.w 8003544 <_malloc_r>
8003fd6: b922 cbnz r2, 8003fe2 <_realloc_r+0x20>
8003fd8: f7ff fa68 bl 80034ac <_free_r>
8003fdc: 4625 mov r5, r4
8003fde: 4628 mov r0, r5
8003fe0: bdf8 pop {r3, r4, r5, r6, r7, pc}
8003fe2: f000 f821 bl 8004028 <_malloc_usable_size_r>
8003fe6: 4284 cmp r4, r0
8003fe8: d90f bls.n 800400a <_realloc_r+0x48>
8003fea: 4621 mov r1, r4
8003fec: 4638 mov r0, r7
8003fee: f7ff faa9 bl 8003544 <_malloc_r>
8003ff2: 4605 mov r5, r0
8003ff4: 2800 cmp r0, #0
8003ff6: d0f2 beq.n 8003fde <_realloc_r+0x1c>
8003ff8: 4631 mov r1, r6
8003ffa: 4622 mov r2, r4
8003ffc: f7ff ffd4 bl 8003fa8 <memcpy>
8004000: 4631 mov r1, r6
8004002: 4638 mov r0, r7
8004004: f7ff fa52 bl 80034ac <_free_r>
8004008: e7e9 b.n 8003fde <_realloc_r+0x1c>
800400a: 4635 mov r5, r6
800400c: e7e7 b.n 8003fde <_realloc_r+0x1c>
0800400e <__ascii_wctomb>:
800400e: b149 cbz r1, 8004024 <__ascii_wctomb+0x16>
8004010: 2aff cmp r2, #255 ; 0xff
8004012: bf8b itete hi
8004014: 238a movhi r3, #138 ; 0x8a
8004016: 700a strbls r2, [r1, #0]
8004018: 6003 strhi r3, [r0, #0]
800401a: 2001 movls r0, #1
800401c: bf88 it hi
800401e: f04f 30ff movhi.w r0, #4294967295 ; 0xffffffff
8004022: 4770 bx lr
8004024: 4608 mov r0, r1
8004026: 4770 bx lr
08004028 <_malloc_usable_size_r>:
8004028: f851 0c04 ldr.w r0, [r1, #-4]
800402c: 2800 cmp r0, #0
800402e: f1a0 0004 sub.w r0, r0, #4
8004032: bfbc itt lt
8004034: 580b ldrlt r3, [r1, r0]
8004036: 18c0 addlt r0, r0, r3
8004038: 4770 bx lr
...
0800403c <_init>:
800403c: b5f8 push {r3, r4, r5, r6, r7, lr}
800403e: bf00 nop
8004040: bcf8 pop {r3, r4, r5, r6, r7}
8004042: bc08 pop {r3}
8004044: 469e mov lr, r3
8004046: 4770 bx lr
08004048 <_fini>:
8004048: b5f8 push {r3, r4, r5, r6, r7, lr}
800404a: bf00 nop
800404c: bcf8 pop {r3, r4, r5, r6, r7}
800404e: bc08 pop {r3}
8004050: 469e mov lr, r3
8004052: 4770 bx lr