You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

11241 lines
431 KiB
Plaintext

d21_i2c_detect.elf: file format elf32-littlearm
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00004a40 00000000 00000000 00010000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .relocate 00000068 20000000 00004a40 00020000 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 000001f8 20000068 00004aa8 00020068 2**2
ALLOC
3 .stack 00002000 20000260 00004ca0 00020068 2**0
ALLOC
4 .ARM.attributes 00000028 00000000 00000000 00020068 2**0
CONTENTS, READONLY
5 .comment 00000059 00000000 00000000 00020090 2**0
CONTENTS, READONLY
6 .debug_info 0002ed6b 00000000 00000000 000200e9 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 000040b7 00000000 00000000 0004ee54 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_loc 000059fe 00000000 00000000 00052f0b 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_aranges 000005b0 00000000 00000000 00058909 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_ranges 000005e0 00000000 00000000 00058eb9 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_macro 0001c3ea 00000000 00000000 00059499 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_line 0000dad3 00000000 00000000 00075883 2**0
CONTENTS, READONLY, DEBUGGING
13 .debug_str 0008f19a 00000000 00000000 00083356 2**0
CONTENTS, READONLY, DEBUGGING
14 .debug_frame 000016cc 00000000 00000000 001124f0 2**2
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <exception_table>:
0: 60 22 00 20 c9 1b 00 00 c5 1b 00 00 c5 1b 00 00 `". ............
...
2c: c5 1b 00 00 00 00 00 00 00 00 00 00 c5 1b 00 00 ................
3c: c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 ................
4c: c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 ................
5c: c5 1b 00 00 c5 1b 00 00 f9 14 00 00 09 15 00 00 ................
6c: 19 15 00 00 29 15 00 00 39 15 00 00 49 15 00 00 ....)...9...I...
7c: c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 ................
8c: c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 ................
9c: c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 c5 1b 00 00 ................
ac: c5 1b 00 00 00 00 00 00 ........
000000b4 <__do_global_dtors_aux>:
b4: b510 push {r4, lr}
b6: 4c06 ldr r4, [pc, #24] ; (d0 <__do_global_dtors_aux+0x1c>)
b8: 7823 ldrb r3, [r4, #0]
ba: 2b00 cmp r3, #0
bc: d107 bne.n ce <__do_global_dtors_aux+0x1a>
be: 4b05 ldr r3, [pc, #20] ; (d4 <__do_global_dtors_aux+0x20>)
c0: 2b00 cmp r3, #0
c2: d002 beq.n ca <__do_global_dtors_aux+0x16>
c4: 4804 ldr r0, [pc, #16] ; (d8 <__do_global_dtors_aux+0x24>)
c6: e000 b.n ca <__do_global_dtors_aux+0x16>
c8: bf00 nop
ca: 2301 movs r3, #1
cc: 7023 strb r3, [r4, #0]
ce: bd10 pop {r4, pc}
d0: 20000068 .word 0x20000068
d4: 00000000 .word 0x00000000
d8: 00004a40 .word 0x00004a40
000000dc <frame_dummy>:
dc: 4b08 ldr r3, [pc, #32] ; (100 <frame_dummy+0x24>)
de: b510 push {r4, lr}
e0: 2b00 cmp r3, #0
e2: d003 beq.n ec <frame_dummy+0x10>
e4: 4907 ldr r1, [pc, #28] ; (104 <frame_dummy+0x28>)
e6: 4808 ldr r0, [pc, #32] ; (108 <frame_dummy+0x2c>)
e8: e000 b.n ec <frame_dummy+0x10>
ea: bf00 nop
ec: 4807 ldr r0, [pc, #28] ; (10c <frame_dummy+0x30>)
ee: 6803 ldr r3, [r0, #0]
f0: 2b00 cmp r3, #0
f2: d100 bne.n f6 <frame_dummy+0x1a>
f4: bd10 pop {r4, pc}
f6: 4b06 ldr r3, [pc, #24] ; (110 <frame_dummy+0x34>)
f8: 2b00 cmp r3, #0
fa: d0fb beq.n f4 <frame_dummy+0x18>
fc: 4798 blx r3
fe: e7f9 b.n f4 <frame_dummy+0x18>
100: 00000000 .word 0x00000000
104: 2000006c .word 0x2000006c
108: 00004a40 .word 0x00004a40
10c: 00004a40 .word 0x00004a40
110: 00000000 .word 0x00000000
00000114 <_i2c_master_wait_for_sync>:
/* Set action to NACK */
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_ACKACT;
} else {
/* Save data to buffer. */
_i2c_master_wait_for_sync(module);
packet->data[counter++] = i2c_module->DATA.reg;
114: 6801 ldr r1, [r0, #0]
/* Wait for response. */
tmp_status = _i2c_master_wait_for_bus(module);
116: 2207 movs r2, #7
118: 69cb ldr r3, [r1, #28]
11a: 421a tst r2, r3
11c: d1fc bne.n 118 <_i2c_master_wait_for_sync+0x4>
11e: 4770 bx lr
00000120 <i2c_master_init>:
}
/* Check for error. */
if (tmp_status != STATUS_OK) {
120: b5f0 push {r4, r5, r6, r7, lr}
122: 46d6 mov lr, sl
packet->data[counter++] = i2c_module->DATA.reg;
124: 464f mov r7, r9
while (tmp_data_length--) {
126: 4646 mov r6, r8
128: b5c0 push {r6, r7, lr}
if (!(i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(2))) {
12a: b08a sub sp, #40 ; 0x28
12c: 0006 movs r6, r0
12e: 000f movs r7, r1
if (module->send_nack && (((!sclsm_flag) && (tmp_data_length == 0)) ||
130: 0014 movs r4, r2
132: 6031 str r1, [r6, #0]
134: 0008 movs r0, r1
136: 4ba0 ldr r3, [pc, #640] ; (3b8 <i2c_master_init+0x298>)
138: 4798 blx r3
13a: 4aa0 ldr r2, [pc, #640] ; (3bc <i2c_master_init+0x29c>)
13c: 6a11 ldr r1, [r2, #32]
13e: 1c85 adds r5, r0, #2
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_ACKACT;
140: 2301 movs r3, #1
142: 40ab lsls r3, r5
144: 430b orrs r3, r1
146: 6213 str r3, [r2, #32]
148: a909 add r1, sp, #36 ; 0x24
14a: 7b23 ldrb r3, [r4, #12]
14c: 700b strb r3, [r1, #0]
14e: 3014 adds r0, #20
packet->data[counter++] = i2c_module->DATA.reg;
150: b2c5 uxtb r5, r0
tmp_status = _i2c_master_wait_for_bus(module);
152: 0028 movs r0, r5
break;
}
}
if (module->send_stop) {
154: 4b9a ldr r3, [pc, #616] ; (3c0 <i2c_master_init+0x2a0>)
156: 4798 blx r3
158: 0028 movs r0, r5
_i2c_master_wait_for_sync(module);
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
}
/* Save last data to buffer. */
_i2c_master_wait_for_sync(module);
15a: 4b9a ldr r3, [pc, #616] ; (3c4 <i2c_master_init+0x2a4>)
15c: 4798 blx r3
15e: 7b20 ldrb r0, [r4, #12]
packet->data[counter] = i2c_module->DATA.reg;
160: 2100 movs r1, #0
162: 4b99 ldr r3, [pc, #612] ; (3c8 <i2c_master_init+0x2a8>)
164: 4798 blx r3
166: 683b ldr r3, [r7, #0]
168: 201c movs r0, #28
16a: 079b lsls r3, r3, #30
16c: d505 bpl.n 17a <i2c_master_init+0x5a>
_i2c_master_wait_for_sync(module);
16e: b00a add sp, #40 ; 0x28
170: bc1c pop {r2, r3, r4}
172: 4690 mov r8, r2
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
174: 4699 mov r9, r3
176: 46a2 mov sl, r4
178: bdf0 pop {r4, r5, r6, r7, pc}
17a: 683b ldr r3, [r7, #0]
17c: 3817 subs r0, #23
17e: 07db lsls r3, r3, #31
return STATUS_ERR_PACKET_COLLISION;
180: d4f5 bmi.n 16e <i2c_master_init+0x4e>
182: 6830 ldr r0, [r6, #0]
184: 4b8c ldr r3, [pc, #560] ; (3b8 <i2c_master_init+0x298>)
186: 4699 mov r9, r3
188: 4798 blx r3
18a: 0005 movs r5, r0
18c: 498f ldr r1, [pc, #572] ; (3cc <i2c_master_init+0x2ac>)
18e: 4b90 ldr r3, [pc, #576] ; (3d0 <i2c_master_init+0x2b0>)
190: 4798 blx r3
192: 00ad lsls r5, r5, #2
194: 4b8f ldr r3, [pc, #572] ; (3d4 <i2c_master_init+0x2b4>)
196: 50ee str r6, [r5, r3]
198: 2300 movs r3, #0
19a: 7633 strb r3, [r6, #24]
19c: 7673 strb r3, [r6, #25]
19e: 2500 movs r5, #0
module->buffer_length = 0;
1a0: 8373 strh r3, [r6, #26]
module->buffer_remaining = 0;
1a2: 83b3 strh r3, [r6, #28]
module->status = STATUS_OK;
1a4: 2225 movs r2, #37 ; 0x25
1a6: 54b5 strb r5, [r6, r2]
module->buffer = NULL;
1a8: 6233 str r3, [r6, #32]
i2c_module->CTRLA.reg = SERCOM_I2CM_CTRLA_MODE(0x5);
1aa: 3314 adds r3, #20
1ac: 603b str r3, [r7, #0]
SercomI2cm *const i2c_module = &(module->hw->I2CM);
1ae: 6833 ldr r3, [r6, #0]
1b0: 4698 mov r8, r3
uint8_t sercom_index = _sercom_get_sercom_inst_index(sercom_hw);
1b2: 0018 movs r0, r3
1b4: 47c8 blx r9
1b6: 4681 mov r9, r0
{
/* Sanity check arguments */
Assert(config);
/* Default configuration values */
config->mux_position = SYSTEM_PINMUX_GPIO;
1b8: 2380 movs r3, #128 ; 0x80
1ba: aa08 add r2, sp, #32
1bc: 7013 strb r3, [r2, #0]
config->direction = SYSTEM_PINMUX_PIN_DIR_INPUT;
1be: 7055 strb r5, [r2, #1]
config->input_pull = SYSTEM_PINMUX_PIN_PULL_UP;
1c0: 2301 movs r3, #1
1c2: 7093 strb r3, [r2, #2]
config->powersave = false;
1c4: 70d5 strb r5, [r2, #3]
uint32_t pad0 = config->pinmux_pad0;
1c6: 69e0 ldr r0, [r4, #28]
uint32_t pad1 = config->pinmux_pad1;
1c8: 6a27 ldr r7, [r4, #32]
if (pad0 == PINMUX_DEFAULT) {
1ca: 2800 cmp r0, #0
1cc: d100 bne.n 1d0 <i2c_master_init+0xb0>
1ce: e0af b.n 330 <i2c_master_init+0x210>
pin_conf.mux_position = pad0 & 0xFFFF;
1d0: ab08 add r3, sp, #32
1d2: 7018 strb r0, [r3, #0]
pin_conf.direction = SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK;
1d4: 2302 movs r3, #2
1d6: aa08 add r2, sp, #32
1d8: 7053 strb r3, [r2, #1]
system_pinmux_pin_set_config(pad0 >> 16, &pin_conf);
1da: 0c00 lsrs r0, r0, #16
1dc: b2c0 uxtb r0, r0
1de: 0011 movs r1, r2
1e0: 4b7d ldr r3, [pc, #500] ; (3d8 <i2c_master_init+0x2b8>)
1e2: 4798 blx r3
if (pad1 == PINMUX_DEFAULT) {
1e4: 2f00 cmp r7, #0
1e6: d100 bne.n 1ea <i2c_master_init+0xca>
1e8: e0a7 b.n 33a <i2c_master_init+0x21a>
pin_conf.mux_position = pad1 & 0xFFFF;
1ea: ab08 add r3, sp, #32
1ec: 701f strb r7, [r3, #0]
pin_conf.direction = SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK;
1ee: 2302 movs r3, #2
1f0: aa08 add r2, sp, #32
1f2: 7053 strb r3, [r2, #1]
system_pinmux_pin_set_config(pad1 >> 16, &pin_conf);
1f4: 0c3f lsrs r7, r7, #16
1f6: b2f8 uxtb r0, r7
1f8: 0011 movs r1, r2
1fa: 4b77 ldr r3, [pc, #476] ; (3d8 <i2c_master_init+0x2b8>)
1fc: 4798 blx r3
module->unknown_bus_state_timeout = config->unknown_bus_state_timeout;
1fe: 8aa3 ldrh r3, [r4, #20]
200: 80f3 strh r3, [r6, #6]
module->buffer_timeout = config->buffer_timeout;
202: 8ae3 ldrh r3, [r4, #22]
204: 8133 strh r3, [r6, #8]
if (config->run_in_standby || system_is_debugger_present()) {
206: 7e23 ldrb r3, [r4, #24]
tmp_ctrla = SERCOM_I2CM_CTRLA_RUNSTDBY;
208: 2280 movs r2, #128 ; 0x80
if (config->run_in_standby || system_is_debugger_present()) {
20a: 2b00 cmp r3, #0
20c: d104 bne.n 218 <i2c_master_init+0xf8>
* \retval false Debugger is not connected to the system
*
*/
static inline bool system_is_debugger_present(void)
{
return DSU->STATUSB.reg & DSU_STATUSB_DBGPRES;
20e: 4b73 ldr r3, [pc, #460] ; (3dc <i2c_master_init+0x2bc>)
210: 789b ldrb r3, [r3, #2]
212: 079b lsls r3, r3, #30
tmp_ctrla = SERCOM_I2CM_CTRLA_RUNSTDBY;
214: 0fdb lsrs r3, r3, #31
216: 01da lsls r2, r3, #7
tmp_ctrla |= config->transfer_speed;
218: 68a1 ldr r1, [r4, #8]
21a: 6923 ldr r3, [r4, #16]
21c: 430b orrs r3, r1
21e: 4313 orrs r3, r2
if (config->scl_low_timeout) {
220: 2224 movs r2, #36 ; 0x24
222: 5ca2 ldrb r2, [r4, r2]
224: 2a00 cmp r2, #0
226: d002 beq.n 22e <i2c_master_init+0x10e>
tmp_ctrla |= SERCOM_I2CM_CTRLA_LOWTOUTEN;
228: 2280 movs r2, #128 ; 0x80
22a: 05d2 lsls r2, r2, #23
22c: 4313 orrs r3, r2
tmp_ctrla |= config->inactive_timeout;
22e: 6aa2 ldr r2, [r4, #40] ; 0x28
230: 4313 orrs r3, r2
if (config->scl_stretch_only_after_ack_bit || (config->transfer_speed == I2C_MASTER_SPEED_HIGH_SPEED)) {
232: 222c movs r2, #44 ; 0x2c
234: 5ca2 ldrb r2, [r4, r2]
236: 2a00 cmp r2, #0
238: d103 bne.n 242 <i2c_master_init+0x122>
23a: 2280 movs r2, #128 ; 0x80
23c: 0492 lsls r2, r2, #18
23e: 4291 cmp r1, r2
240: d102 bne.n 248 <i2c_master_init+0x128>
tmp_ctrla |= SERCOM_I2CM_CTRLA_SCLSM;
242: 2280 movs r2, #128 ; 0x80
244: 0512 lsls r2, r2, #20
246: 4313 orrs r3, r2
if (config->slave_scl_low_extend_timeout) {
248: 222d movs r2, #45 ; 0x2d
24a: 5ca2 ldrb r2, [r4, r2]
24c: 2a00 cmp r2, #0
24e: d002 beq.n 256 <i2c_master_init+0x136>
tmp_ctrla |= SERCOM_I2CM_CTRLA_SEXTTOEN;
250: 2280 movs r2, #128 ; 0x80
252: 0412 lsls r2, r2, #16
254: 4313 orrs r3, r2
if (config->master_scl_low_extend_timeout) {
256: 222e movs r2, #46 ; 0x2e
258: 5ca2 ldrb r2, [r4, r2]
25a: 2a00 cmp r2, #0
25c: d002 beq.n 264 <i2c_master_init+0x144>
tmp_ctrla |= SERCOM_I2CM_CTRLA_MEXTTOEN;
25e: 2280 movs r2, #128 ; 0x80
260: 03d2 lsls r2, r2, #15
262: 4313 orrs r3, r2
i2c_module->CTRLA.reg |= tmp_ctrla;
264: 4642 mov r2, r8
266: 6812 ldr r2, [r2, #0]
268: 4313 orrs r3, r2
26a: 4642 mov r2, r8
26c: 6013 str r3, [r2, #0]
i2c_module->CTRLB.reg = SERCOM_I2CM_CTRLB_SMEN;
26e: 2380 movs r3, #128 ; 0x80
270: 005b lsls r3, r3, #1
272: 6053 str r3, [r2, #4]
uint32_t fgclk = system_gclk_chan_get_hz(SERCOM0_GCLK_ID_CORE + sercom_index);
274: 4648 mov r0, r9
276: 3014 adds r0, #20
278: b2c0 uxtb r0, r0
27a: 4b59 ldr r3, [pc, #356] ; (3e0 <i2c_master_init+0x2c0>)
27c: 4798 blx r3
27e: 9007 str r0, [sp, #28]
uint32_t fscl = 1000 * config->baud_rate;
280: 23fa movs r3, #250 ; 0xfa
282: 009b lsls r3, r3, #2
284: 6822 ldr r2, [r4, #0]
286: 435a muls r2, r3
288: 4691 mov r9, r2
uint32_t fscl_hs = 1000 * config->baud_rate_high_speed;
28a: 6863 ldr r3, [r4, #4]
28c: 469a mov sl, r3
tmp_baud = (int32_t)(div_ceil(
28e: 4d55 ldr r5, [pc, #340] ; (3e4 <i2c_master_init+0x2c4>)
290: 47a8 blx r5
292: 9000 str r0, [sp, #0]
294: 9101 str r1, [sp, #4]
296: 464b mov r3, r9
298: 0058 lsls r0, r3, #1
29a: 47a8 blx r5
29c: 9002 str r0, [sp, #8]
29e: 9103 str r1, [sp, #12]
2a0: 8e20 ldrh r0, [r4, #48] ; 0x30
2a2: 47a8 blx r5
2a4: 9004 str r0, [sp, #16]
2a6: 9105 str r1, [sp, #20]
2a8: 4f4f ldr r7, [pc, #316] ; (3e8 <i2c_master_init+0x2c8>)
2aa: 4a50 ldr r2, [pc, #320] ; (3ec <i2c_master_init+0x2cc>)
2ac: 4b50 ldr r3, [pc, #320] ; (3f0 <i2c_master_init+0x2d0>)
2ae: 9800 ldr r0, [sp, #0]
2b0: 9901 ldr r1, [sp, #4]
2b2: 47b8 blx r7
2b4: 0002 movs r2, r0
2b6: 000b movs r3, r1
2b8: 9804 ldr r0, [sp, #16]
2ba: 9905 ldr r1, [sp, #20]
2bc: 47b8 blx r7
2be: 4e4d ldr r6, [pc, #308] ; (3f4 <i2c_master_init+0x2d4>)
2c0: 2200 movs r2, #0
2c2: 4b4d ldr r3, [pc, #308] ; (3f8 <i2c_master_init+0x2d8>)
2c4: 47b0 blx r6
2c6: 9004 str r0, [sp, #16]
2c8: 9105 str r1, [sp, #20]
2ca: 4648 mov r0, r9
2cc: 47a8 blx r5
2ce: 0002 movs r2, r0
2d0: 000b movs r3, r1
2d2: 9804 ldr r0, [sp, #16]
2d4: 9905 ldr r1, [sp, #20]
2d6: 47b8 blx r7
2d8: 0002 movs r2, r0
2da: 000b movs r3, r1
2dc: 4d47 ldr r5, [pc, #284] ; (3fc <i2c_master_init+0x2dc>)
2de: 9800 ldr r0, [sp, #0]
2e0: 9901 ldr r1, [sp, #4]
2e2: 47a8 blx r5
2e4: 9a02 ldr r2, [sp, #8]
2e6: 9b03 ldr r3, [sp, #12]
2e8: 47b0 blx r6
2ea: 2200 movs r2, #0
2ec: 4b44 ldr r3, [pc, #272] ; (400 <i2c_master_init+0x2e0>)
2ee: 47a8 blx r5
2f0: 9a02 ldr r2, [sp, #8]
2f2: 9b03 ldr r3, [sp, #12]
2f4: 4d43 ldr r5, [pc, #268] ; (404 <i2c_master_init+0x2e4>)
2f6: 47a8 blx r5
2f8: 4b43 ldr r3, [pc, #268] ; (408 <i2c_master_init+0x2e8>)
2fa: 4798 blx r3
2fc: 0005 movs r5, r0
if (config->transfer_speed == I2C_MASTER_SPEED_HIGH_SPEED) {
2fe: 2380 movs r3, #128 ; 0x80
300: 049b lsls r3, r3, #18
302: 68a2 ldr r2, [r4, #8]
304: 429a cmp r2, r3
306: d01e beq.n 346 <i2c_master_init+0x226>
if (tmp_baud > 255 || tmp_baud < 0 || tmp_baud_hs > 255 || tmp_baud_hs < 0) {
308: 0003 movs r3, r0
30a: 2040 movs r0, #64 ; 0x40
30c: 2dff cmp r5, #255 ; 0xff
30e: d900 bls.n 312 <i2c_master_init+0x1f2>
310: e72d b.n 16e <i2c_master_init+0x4e>
int32_t tmp_baudlow_hs = 0;
312: 2400 movs r4, #0
int32_t tmp_baud_hs = 0;
314: 2000 movs r0, #0
i2c_module->BAUD.reg = SERCOM_I2CM_BAUD_BAUD(tmp_baud) |
316: 25ff movs r5, #255 ; 0xff
318: 401d ands r5, r3
SERCOM_I2CM_BAUD_HSBAUD(tmp_baud_hs) | SERCOM_I2CM_BAUD_HSBAUDLOW(tmp_baudlow_hs);
31a: 0624 lsls r4, r4, #24
31c: 4325 orrs r5, r4
31e: 0400 lsls r0, r0, #16
320: 23ff movs r3, #255 ; 0xff
322: 041b lsls r3, r3, #16
324: 4018 ands r0, r3
326: 4305 orrs r5, r0
i2c_module->BAUD.reg = SERCOM_I2CM_BAUD_BAUD(tmp_baud) |
328: 4643 mov r3, r8
32a: 60dd str r5, [r3, #12]
enum status_code tmp_status_code = STATUS_OK;
32c: 2000 movs r0, #0
32e: e71e b.n 16e <i2c_master_init+0x4e>
pad0 = _sercom_get_default_pad(sercom_hw, 0);
330: 2100 movs r1, #0
332: 4640 mov r0, r8
334: 4b35 ldr r3, [pc, #212] ; (40c <i2c_master_init+0x2ec>)
336: 4798 blx r3
338: e74a b.n 1d0 <i2c_master_init+0xb0>
pad1 = _sercom_get_default_pad(sercom_hw, 1);
33a: 2101 movs r1, #1
33c: 4640 mov r0, r8
33e: 4b33 ldr r3, [pc, #204] ; (40c <i2c_master_init+0x2ec>)
340: 4798 blx r3
342: 0007 movs r7, r0
344: e751 b.n 1ea <i2c_master_init+0xca>
uint32_t fscl_hs = 1000 * config->baud_rate_high_speed;
346: 26fa movs r6, #250 ; 0xfa
348: 00b6 lsls r6, r6, #2
34a: 4653 mov r3, sl
34c: 435e muls r6, r3
tmp_baudlow_hs = (int32_t)((fgclk * 2.0) / (3.0 * fscl_hs) - 1);
34e: 9800 ldr r0, [sp, #0]
350: 9901 ldr r1, [sp, #4]
352: 0002 movs r2, r0
354: 000b movs r3, r1
356: 4c27 ldr r4, [pc, #156] ; (3f4 <i2c_master_init+0x2d4>)
358: 47a0 blx r4
35a: 9000 str r0, [sp, #0]
35c: 9101 str r1, [sp, #4]
35e: 0030 movs r0, r6
360: 4b20 ldr r3, [pc, #128] ; (3e4 <i2c_master_init+0x2c4>)
362: 4798 blx r3
364: 2200 movs r2, #0
366: 4b2a ldr r3, [pc, #168] ; (410 <i2c_master_init+0x2f0>)
368: 47b8 blx r7
36a: 0002 movs r2, r0
36c: 000b movs r3, r1
36e: 9800 ldr r0, [sp, #0]
370: 9901 ldr r1, [sp, #4]
372: 4c24 ldr r4, [pc, #144] ; (404 <i2c_master_init+0x2e4>)
374: 47a0 blx r4
376: 2200 movs r2, #0
378: 4b21 ldr r3, [pc, #132] ; (400 <i2c_master_init+0x2e0>)
37a: 4c20 ldr r4, [pc, #128] ; (3fc <i2c_master_init+0x2dc>)
37c: 47a0 blx r4
37e: 4b22 ldr r3, [pc, #136] ; (408 <i2c_master_init+0x2e8>)
380: 4798 blx r3
382: 1e04 subs r4, r0, #0
if (tmp_baudlow_hs) {
384: d00c beq.n 3a0 <i2c_master_init+0x280>
tmp_baud_hs = (int32_t)(fgclk / fscl_hs) - 2 - tmp_baudlow_hs;
386: 0031 movs r1, r6
388: 9807 ldr r0, [sp, #28]
38a: 4b22 ldr r3, [pc, #136] ; (414 <i2c_master_init+0x2f4>)
38c: 4798 blx r3
38e: 3802 subs r0, #2
390: 1b00 subs r0, r0, r4
if (tmp_baud > 255 || tmp_baud < 0 || tmp_baud_hs > 255 || tmp_baud_hs < 0) {
392: 002b movs r3, r5
394: 2dff cmp r5, #255 ; 0xff
396: d80c bhi.n 3b2 <i2c_master_init+0x292>
398: 28ff cmp r0, #255 ; 0xff
39a: d9bc bls.n 316 <i2c_master_init+0x1f6>
39c: 2040 movs r0, #64 ; 0x40
39e: e6e6 b.n 16e <i2c_master_init+0x4e>
tmp_baud_hs = (int32_t)(div_ceil(fgclk, 2 * fscl_hs)) - 1;
3a0: 0071 lsls r1, r6, #1
3a2: 1e48 subs r0, r1, #1
3a4: 9b07 ldr r3, [sp, #28]
3a6: 469c mov ip, r3
3a8: 4460 add r0, ip
3aa: 4b1a ldr r3, [pc, #104] ; (414 <i2c_master_init+0x2f4>)
3ac: 4798 blx r3
3ae: 3801 subs r0, #1
3b0: e7ef b.n 392 <i2c_master_init+0x272>
if (tmp_baud > 255 || tmp_baud < 0 || tmp_baud_hs > 255 || tmp_baud_hs < 0) {
3b2: 2040 movs r0, #64 ; 0x40
3b4: e6db b.n 16e <i2c_master_init+0x4e>
3b6: 46c0 nop ; (mov r8, r8)
3b8: 00001451 .word 0x00001451
3bc: 40000400 .word 0x40000400
3c0: 00001a6d .word 0x00001a6d
3c4: 000019e1 .word 0x000019e1
3c8: 0000128d .word 0x0000128d
3cc: 000006a1 .word 0x000006a1
3d0: 0000148d .word 0x0000148d
3d4: 20000244 .word 0x20000244
3d8: 00001b65 .word 0x00001b65
3dc: 41002000 .word 0x41002000
3e0: 00001a89 .word 0x00001a89
3e4: 000036cd .word 0x000036cd
3e8: 00002b39 .word 0x00002b39
3ec: e826d695 .word 0xe826d695
3f0: 3e112e0b .word 0x3e112e0b
3f4: 00001eb1 .word 0x00001eb1
3f8: 40240000 .word 0x40240000
3fc: 00003039 .word 0x00003039
400: 3ff00000 .word 0x3ff00000
404: 000024d1 .word 0x000024d1
408: 00003665 .word 0x00003665
40c: 000012d9 .word 0x000012d9
410: 40080000 .word 0x40080000
414: 00001d45 .word 0x00001d45
00000418 <_i2c_master_address_response>:
SercomI2cm *const i2c_module = &(module->hw->I2CM);
418: 6803 ldr r3, [r0, #0]
if (i2c_module->INTFLAG.reg & SERCOM_I2CM_INTFLAG_SB) {
41a: 7e1a ldrb r2, [r3, #24]
41c: 0792 lsls r2, r2, #30
41e: d507 bpl.n 430 <_i2c_master_address_response+0x18>
i2c_module->INTFLAG.reg = SERCOM_I2CM_INTFLAG_SB;
420: 2202 movs r2, #2
422: 761a strb r2, [r3, #24]
if (i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_ARBLOST) {
424: 8b5b ldrh r3, [r3, #26]
426: 079b lsls r3, r3, #30
return STATUS_ERR_PACKET_COLLISION;
428: 2041 movs r0, #65 ; 0x41
return STATUS_OK;
42a: 17db asrs r3, r3, #31
42c: 4018 ands r0, r3
}
42e: 4770 bx lr
} else if (i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_RXNACK) {
430: 8b5a ldrh r2, [r3, #26]
432: 0752 lsls r2, r2, #29
434: d506 bpl.n 444 <_i2c_master_address_response+0x2c>
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
436: 6859 ldr r1, [r3, #4]
438: 22c0 movs r2, #192 ; 0xc0
43a: 0292 lsls r2, r2, #10
43c: 430a orrs r2, r1
43e: 605a str r2, [r3, #4]
return STATUS_ERR_BAD_ADDRESS;
440: 2018 movs r0, #24
442: e7f4 b.n 42e <_i2c_master_address_response+0x16>
return STATUS_OK;
444: 2000 movs r0, #0
446: e7f2 b.n 42e <_i2c_master_address_response+0x16>
00000448 <_i2c_master_wait_for_bus>:
{
448: b530 push {r4, r5, lr}
SercomI2cm *const i2c_module = &(module->hw->I2CM);
44a: 6802 ldr r2, [r0, #0]
uint16_t timeout_counter = 0;
44c: 2300 movs r3, #0
while (!(i2c_module->INTFLAG.reg & SERCOM_I2CM_INTFLAG_MB) &&
44e: 2401 movs r4, #1
450: 2502 movs r5, #2
452: 7e11 ldrb r1, [r2, #24]
454: 4221 tst r1, r4
456: d10b bne.n 470 <_i2c_master_wait_for_bus+0x28>
!(i2c_module->INTFLAG.reg & SERCOM_I2CM_INTFLAG_SB)) {
458: 7e11 ldrb r1, [r2, #24]
while (!(i2c_module->INTFLAG.reg & SERCOM_I2CM_INTFLAG_MB) &&
45a: 4229 tst r1, r5
45c: d106 bne.n 46c <_i2c_master_wait_for_bus+0x24>
if (++timeout_counter >= module->buffer_timeout) {
45e: 3301 adds r3, #1
460: b29b uxth r3, r3
462: 8901 ldrh r1, [r0, #8]
464: 4299 cmp r1, r3
466: d8f4 bhi.n 452 <_i2c_master_wait_for_bus+0xa>
return STATUS_ERR_TIMEOUT;
468: 2012 movs r0, #18
46a: e002 b.n 472 <_i2c_master_wait_for_bus+0x2a>
return STATUS_OK;
46c: 2000 movs r0, #0
46e: e000 b.n 472 <_i2c_master_wait_for_bus+0x2a>
470: 2000 movs r0, #0
}
472: bd30 pop {r4, r5, pc}
00000474 <_i2c_master_send_hs_master_code>:
{
474: b510 push {r4, lr}
SercomI2cm *const i2c_module = &(module->hw->I2CM);
476: 6804 ldr r4, [r0, #0]
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_ACKACT;
478: 6862 ldr r2, [r4, #4]
47a: 2380 movs r3, #128 ; 0x80
47c: 02db lsls r3, r3, #11
47e: 4313 orrs r3, r2
480: 6063 str r3, [r4, #4]
i2c_module->ADDR.reg = hs_master_code;
482: 6261 str r1, [r4, #36] ; 0x24
tmp_status = _i2c_master_wait_for_bus(module);
484: 4b02 ldr r3, [pc, #8] ; (490 <_i2c_master_send_hs_master_code+0x1c>)
486: 4798 blx r3
i2c_module->INTFLAG.reg = SERCOM_I2CM_INTENCLR_MB;
488: 2301 movs r3, #1
48a: 7623 strb r3, [r4, #24]
}
48c: bd10 pop {r4, pc}
48e: 46c0 nop ; (mov r8, r8)
490: 00000449 .word 0x00000449
00000494 <_i2c_master_write_packet>:
* acknowledged the address
*/
static enum status_code _i2c_master_write_packet(
struct i2c_master_module *const module,
struct i2c_master_packet *const packet)
{
494: b5f0 push {r4, r5, r6, r7, lr}
496: 46de mov lr, fp
498: 4657 mov r7, sl
49a: 464e mov r6, r9
49c: 4645 mov r5, r8
49e: b5e0 push {r5, r6, r7, lr}
4a0: b083 sub sp, #12
4a2: 0006 movs r6, r0
4a4: 000f movs r7, r1
SercomI2cm *const i2c_module = &(module->hw->I2CM);
4a6: 6805 ldr r5, [r0, #0]
/* Return value. */
enum status_code tmp_status;
uint16_t tmp_data_length = packet->data_length;
4a8: 884c ldrh r4, [r1, #2]
_i2c_master_wait_for_sync(module);
4aa: 4b32 ldr r3, [pc, #200] ; (574 <_i2c_master_write_packet+0xe0>)
4ac: 4798 blx r3
/* Switch to high speed mode */
if (packet->high_speed) {
4ae: 7a7b ldrb r3, [r7, #9]
4b0: 2b00 cmp r3, #0
4b2: d11d bne.n 4f0 <_i2c_master_write_packet+0x5c>
_i2c_master_send_hs_master_code(module, packet->hs_master_code);
}
/* Set action to ACK. */
i2c_module->CTRLB.reg &= ~SERCOM_I2CM_CTRLB_ACKACT;
4b4: 686b ldr r3, [r5, #4]
4b6: 4a30 ldr r2, [pc, #192] ; (578 <_i2c_master_write_packet+0xe4>)
4b8: 4013 ands r3, r2
4ba: 606b str r3, [r5, #4]
/* Set address and direction bit. Will send start command on bus. */
if (packet->ten_bit_address) {
4bc: 7a3b ldrb r3, [r7, #8]
4be: 2b00 cmp r3, #0
4c0: d01b beq.n 4fa <_i2c_master_write_packet+0x66>
i2c_module->ADDR.reg = (packet->address << 1) | I2C_TRANSFER_WRITE |
4c2: 883b ldrh r3, [r7, #0]
4c4: 005b lsls r3, r3, #1
(packet->high_speed << SERCOM_I2CM_ADDR_HS_Pos) |
4c6: 7a7a ldrb r2, [r7, #9]
4c8: 0392 lsls r2, r2, #14
i2c_module->ADDR.reg = (packet->address << 1) | I2C_TRANSFER_WRITE |
4ca: 4313 orrs r3, r2
(packet->high_speed << SERCOM_I2CM_ADDR_HS_Pos) |
4cc: 2280 movs r2, #128 ; 0x80
4ce: 0212 lsls r2, r2, #8
4d0: 4313 orrs r3, r2
i2c_module->ADDR.reg = (packet->address << 1) | I2C_TRANSFER_WRITE |
4d2: 626b str r3, [r5, #36] ; 0x24
} else {
i2c_module->ADDR.reg = (packet->address << 1) | I2C_TRANSFER_WRITE |
(packet->high_speed << SERCOM_I2CM_ADDR_HS_Pos);
}
/* Wait for response on bus. */
tmp_status = _i2c_master_wait_for_bus(module);
4d4: 0030 movs r0, r6
4d6: 4b29 ldr r3, [pc, #164] ; (57c <_i2c_master_write_packet+0xe8>)
4d8: 4798 blx r3
4da: 9001 str r0, [sp, #4]
/* Check for address response error unless previous error is
* detected. */
if (tmp_status == STATUS_OK) {
4dc: 2800 cmp r0, #0
4de: d013 beq.n 508 <_i2c_master_write_packet+0x74>
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
}
}
return tmp_status;
}
4e0: 9801 ldr r0, [sp, #4]
4e2: b003 add sp, #12
4e4: bc3c pop {r2, r3, r4, r5}
4e6: 4690 mov r8, r2
4e8: 4699 mov r9, r3
4ea: 46a2 mov sl, r4
4ec: 46ab mov fp, r5
4ee: bdf0 pop {r4, r5, r6, r7, pc}
_i2c_master_send_hs_master_code(module, packet->hs_master_code);
4f0: 7ab9 ldrb r1, [r7, #10]
4f2: 0030 movs r0, r6
4f4: 4b22 ldr r3, [pc, #136] ; (580 <_i2c_master_write_packet+0xec>)
4f6: 4798 blx r3
4f8: e7dc b.n 4b4 <_i2c_master_write_packet+0x20>
i2c_module->ADDR.reg = (packet->address << 1) | I2C_TRANSFER_WRITE |
4fa: 883b ldrh r3, [r7, #0]
4fc: 005b lsls r3, r3, #1
(packet->high_speed << SERCOM_I2CM_ADDR_HS_Pos);
4fe: 7a7a ldrb r2, [r7, #9]
500: 0392 lsls r2, r2, #14
i2c_module->ADDR.reg = (packet->address << 1) | I2C_TRANSFER_WRITE |
502: 4313 orrs r3, r2
504: 626b str r3, [r5, #36] ; 0x24
506: e7e5 b.n 4d4 <_i2c_master_write_packet+0x40>
tmp_status = _i2c_master_address_response(module);
508: 0030 movs r0, r6
50a: 4b1e ldr r3, [pc, #120] ; (584 <_i2c_master_write_packet+0xf0>)
50c: 4798 blx r3
50e: 1e03 subs r3, r0, #0
510: 9001 str r0, [sp, #4]
if (tmp_status == STATUS_OK) {
512: d1e5 bne.n 4e0 <_i2c_master_write_packet+0x4c>
514: 46a0 mov r8, r4
516: 2400 movs r4, #0
if (!(i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(2))) {
518: 3320 adds r3, #32
51a: 4699 mov r9, r3
_i2c_master_wait_for_sync(module);
51c: 4b15 ldr r3, [pc, #84] ; (574 <_i2c_master_write_packet+0xe0>)
51e: 469b mov fp, r3
tmp_status = _i2c_master_wait_for_bus(module);
520: 4b16 ldr r3, [pc, #88] ; (57c <_i2c_master_write_packet+0xe8>)
522: 469a mov sl, r3
while (tmp_data_length--) {
524: 4544 cmp r4, r8
526: d015 beq.n 554 <_i2c_master_write_packet+0xc0>
if (!(i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(2))) {
528: 8b6b ldrh r3, [r5, #26]
52a: 464a mov r2, r9
52c: 4213 tst r3, r2
52e: d01d beq.n 56c <_i2c_master_write_packet+0xd8>
_i2c_master_wait_for_sync(module);
530: 0030 movs r0, r6
532: 47d8 blx fp
i2c_module->DATA.reg = packet->data[buffer_counter++];
534: 687b ldr r3, [r7, #4]
536: 5d1a ldrb r2, [r3, r4]
538: 2328 movs r3, #40 ; 0x28
53a: 54ea strb r2, [r5, r3]
tmp_status = _i2c_master_wait_for_bus(module);
53c: 0030 movs r0, r6
53e: 47d0 blx sl
if (tmp_status != STATUS_OK) {
540: 2800 cmp r0, #0
542: d106 bne.n 552 <_i2c_master_write_packet+0xbe>
if (i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_RXNACK) {
544: 8b6b ldrh r3, [r5, #26]
546: 3401 adds r4, #1
548: 075b lsls r3, r3, #29
54a: d5eb bpl.n 524 <_i2c_master_write_packet+0x90>
tmp_status = STATUS_ERR_OVERFLOW;
54c: 231e movs r3, #30
54e: 9301 str r3, [sp, #4]
550: e000 b.n 554 <_i2c_master_write_packet+0xc0>
tmp_status = _i2c_master_wait_for_bus(module);
552: 9001 str r0, [sp, #4]
if (module->send_stop) {
554: 7ab3 ldrb r3, [r6, #10]
556: 2b00 cmp r3, #0
558: d0c2 beq.n 4e0 <_i2c_master_write_packet+0x4c>
_i2c_master_wait_for_sync(module);
55a: 0030 movs r0, r6
55c: 4b05 ldr r3, [pc, #20] ; (574 <_i2c_master_write_packet+0xe0>)
55e: 4798 blx r3
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
560: 686a ldr r2, [r5, #4]
562: 23c0 movs r3, #192 ; 0xc0
564: 029b lsls r3, r3, #10
566: 4313 orrs r3, r2
568: 606b str r3, [r5, #4]
56a: e7b9 b.n 4e0 <_i2c_master_write_packet+0x4c>
return STATUS_ERR_PACKET_COLLISION;
56c: 2341 movs r3, #65 ; 0x41
56e: 9301 str r3, [sp, #4]
570: e7b6 b.n 4e0 <_i2c_master_write_packet+0x4c>
572: 46c0 nop ; (mov r8, r8)
574: 00000115 .word 0x00000115
578: fffbffff .word 0xfffbffff
57c: 00000449 .word 0x00000449
580: 00000475 .word 0x00000475
584: 00000419 .word 0x00000419
00000588 <i2c_master_write_packet_wait>:
* last data sent
*/
enum status_code i2c_master_write_packet_wait(
struct i2c_master_module *const module,
struct i2c_master_packet *const packet)
{
588: b510 push {r4, lr}
Assert(module->hw);
Assert(packet);
#if I2C_MASTER_CALLBACK_MODE == true
/* Check if the I2C module is busy with a job */
if (module->buffer_remaining > 0) {
58a: 8b83 ldrh r3, [r0, #28]
58c: b29b uxth r3, r3
return STATUS_BUSY;
58e: 2205 movs r2, #5
if (module->buffer_remaining > 0) {
590: 2b00 cmp r3, #0
592: d001 beq.n 598 <i2c_master_write_packet_wait+0x10>
module->send_stop = true;
module->send_nack = true;
return _i2c_master_write_packet(module, packet);
}
594: 0010 movs r0, r2
596: bd10 pop {r4, pc}
module->send_stop = true;
598: 3301 adds r3, #1
59a: 7283 strb r3, [r0, #10]
module->send_nack = true;
59c: 72c3 strb r3, [r0, #11]
return _i2c_master_write_packet(module, packet);
59e: 4b02 ldr r3, [pc, #8] ; (5a8 <i2c_master_write_packet_wait+0x20>)
5a0: 4798 blx r3
5a2: 0002 movs r2, r0
5a4: e7f6 b.n 594 <i2c_master_write_packet_wait+0xc>
5a6: 46c0 nop ; (mov r8, r8)
5a8: 00000495 .word 0x00000495
000005ac <i2c_master_write_packet_wait_no_stop>:
* more data
*/
enum status_code i2c_master_write_packet_wait_no_stop(
struct i2c_master_module *const module,
struct i2c_master_packet *const packet)
{
5ac: b510 push {r4, lr}
Assert(module->hw);
Assert(packet);
#if I2C_MASTER_CALLBACK_MODE == true
/* Check if the I2C module is busy with a job */
if (module->buffer_remaining > 0) {
5ae: 8b83 ldrh r3, [r0, #28]
5b0: b29b uxth r3, r3
return STATUS_BUSY;
5b2: 2205 movs r2, #5
if (module->buffer_remaining > 0) {
5b4: 2b00 cmp r3, #0
5b6: d001 beq.n 5bc <i2c_master_write_packet_wait_no_stop+0x10>
module->send_stop = false;
module->send_nack = true;
return _i2c_master_write_packet(module, packet);
}
5b8: 0010 movs r0, r2
5ba: bd10 pop {r4, pc}
module->send_stop = false;
5bc: 7283 strb r3, [r0, #10]
module->send_nack = true;
5be: 3301 adds r3, #1
5c0: 72c3 strb r3, [r0, #11]
return _i2c_master_write_packet(module, packet);
5c2: 4b02 ldr r3, [pc, #8] ; (5cc <i2c_master_write_packet_wait_no_stop+0x20>)
5c4: 4798 blx r3
5c6: 0002 movs r2, r0
5c8: e7f6 b.n 5b8 <i2c_master_write_packet_wait_no_stop+0xc>
5ca: 46c0 nop ; (mov r8, r8)
5cc: 00000495 .word 0x00000495
000005d0 <_i2c_master_wait_for_sync>:
{
/* Sanity check */
Assert(module);
Assert(module->hw);
SercomI2cm *const i2c_hw = &(module->hw->I2CM);
5d0: 6801 ldr r1, [r0, #0]
#if defined(FEATURE_SERCOM_SYNCBUSY_SCHEME_VERSION_1)
return (i2c_hw->STATUS.reg & SERCOM_I2CM_STATUS_SYNCBUSY);
#elif defined(FEATURE_SERCOM_SYNCBUSY_SCHEME_VERSION_2)
return (i2c_hw->SYNCBUSY.reg & SERCOM_I2CM_SYNCBUSY_MASK);
5d2: 2207 movs r2, #7
5d4: 69cb ldr r3, [r1, #28]
const struct i2c_master_module *const module)
{
/* Sanity check */
Assert(module);
while (i2c_master_is_syncing(module)) {
5d6: 421a tst r2, r3
5d8: d1fc bne.n 5d4 <_i2c_master_wait_for_sync+0x4>
/* Wait for I2C module to sync. */
}
}
5da: 4770 bx lr
000005dc <_i2c_master_read>:
*
* \param[in,out] module Pointer to software module structure
*/
static void _i2c_master_read(
struct i2c_master_module *const module)
{
5dc: b570 push {r4, r5, r6, lr}
5de: 0004 movs r4, r0
/* Sanity check arguments. */
Assert(module);
Assert(module->hw);
SercomI2cm *const i2c_module = &(module->hw->I2CM);
5e0: 6806 ldr r6, [r0, #0]
bool sclsm_flag = i2c_module->CTRLA.bit.SCLSM;
5e2: 6832 ldr r2, [r6, #0]
/* Find index to save next value in buffer */
uint16_t buffer_index = module->buffer_length;
5e4: 8b45 ldrh r5, [r0, #26]
buffer_index -= module->buffer_remaining;
5e6: 8b83 ldrh r3, [r0, #28]
5e8: 1aed subs r5, r5, r3
5ea: b2ad uxth r5, r5
module->buffer_remaining--;
5ec: 8b83 ldrh r3, [r0, #28]
5ee: 3b01 subs r3, #1
5f0: b29b uxth r3, r3
5f2: 8383 strh r3, [r0, #28]
if (sclsm_flag) {
5f4: 0113 lsls r3, r2, #4
5f6: d51d bpl.n 634 <_i2c_master_read+0x58>
if (module->send_nack && module->buffer_remaining == 1) {
5f8: 7ac3 ldrb r3, [r0, #11]
5fa: 2b00 cmp r3, #0
5fc: d003 beq.n 606 <_i2c_master_read+0x2a>
5fe: 8b83 ldrh r3, [r0, #28]
600: b29b uxth r3, r3
602: 2b01 cmp r3, #1
604: d010 beq.n 628 <_i2c_master_read+0x4c>
/* Set action to NACK. */
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_ACKACT;
}
}
if (module->buffer_remaining == 0) {
606: 8ba3 ldrh r3, [r4, #28]
608: b29b uxth r3, r3
60a: 2b00 cmp r3, #0
60c: d102 bne.n 614 <_i2c_master_read+0x38>
if (module->send_stop) {
60e: 7aa3 ldrb r3, [r4, #10]
610: 2b00 cmp r3, #0
612: d11c bne.n 64e <_i2c_master_read+0x72>
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
}
}
/* Read byte from slave and put in buffer */
_i2c_master_wait_for_sync(module);
614: 0020 movs r0, r4
616: 4b12 ldr r3, [pc, #72] ; (660 <_i2c_master_read+0x84>)
618: 4798 blx r3
module->buffer[buffer_index] = i2c_module->DATA.reg;
61a: 6a23 ldr r3, [r4, #32]
61c: 195d adds r5, r3, r5
61e: 2328 movs r3, #40 ; 0x28
620: 5cf3 ldrb r3, [r6, r3]
622: b2db uxtb r3, r3
624: 702b strb r3, [r5, #0]
}
626: bd70 pop {r4, r5, r6, pc}
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_ACKACT;
628: 6872 ldr r2, [r6, #4]
62a: 2380 movs r3, #128 ; 0x80
62c: 02db lsls r3, r3, #11
62e: 4313 orrs r3, r2
630: 6073 str r3, [r6, #4]
632: e7e8 b.n 606 <_i2c_master_read+0x2a>
if (module->send_nack && module->buffer_remaining == 0) {
634: 7ac3 ldrb r3, [r0, #11]
636: 2b00 cmp r3, #0
638: d0e5 beq.n 606 <_i2c_master_read+0x2a>
63a: 8b83 ldrh r3, [r0, #28]
63c: b29b uxth r3, r3
63e: 2b00 cmp r3, #0
640: d1e1 bne.n 606 <_i2c_master_read+0x2a>
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_ACKACT;
642: 6872 ldr r2, [r6, #4]
644: 2380 movs r3, #128 ; 0x80
646: 02db lsls r3, r3, #11
648: 4313 orrs r3, r2
64a: 6073 str r3, [r6, #4]
64c: e7db b.n 606 <_i2c_master_read+0x2a>
_i2c_master_wait_for_sync(module);
64e: 0020 movs r0, r4
650: 4b03 ldr r3, [pc, #12] ; (660 <_i2c_master_read+0x84>)
652: 4798 blx r3
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
654: 6872 ldr r2, [r6, #4]
656: 23c0 movs r3, #192 ; 0xc0
658: 029b lsls r3, r3, #10
65a: 4313 orrs r3, r2
65c: 6073 str r3, [r6, #4]
65e: e7d9 b.n 614 <_i2c_master_read+0x38>
660: 000005d1 .word 0x000005d1
00000664 <_i2c_master_write>:
* Write next data. Used by interrupt handler to send next data byte to slave.
*
* \param[in,out] module Pointer to software module structure
*/
static void _i2c_master_write(struct i2c_master_module *const module)
{
664: b570 push {r4, r5, r6, lr}
666: 0004 movs r4, r0
/* Sanity check arguments. */
Assert(module);
Assert(module->hw);
SercomI2cm *const i2c_module = &(module->hw->I2CM);
668: 6805 ldr r5, [r0, #0]
/* Check for ack from slave */
if (i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_RXNACK)
66a: 8b6b ldrh r3, [r5, #26]
66c: 075b lsls r3, r3, #29
66e: d503 bpl.n 678 <_i2c_master_write+0x14>
{
/* Set status */
module->status = STATUS_ERR_OVERFLOW;
670: 221e movs r2, #30
672: 2325 movs r3, #37 ; 0x25
674: 54c2 strb r2, [r0, r3]
module->buffer_remaining--;
/* Write byte from buffer to slave */
_i2c_master_wait_for_sync(module);
i2c_module->DATA.reg = module->buffer[buffer_index];
}
676: bd70 pop {r4, r5, r6, pc}
uint16_t buffer_index = module->buffer_length;
678: 8b46 ldrh r6, [r0, #26]
buffer_index -= module->buffer_remaining;
67a: 8b83 ldrh r3, [r0, #28]
67c: 1af6 subs r6, r6, r3
67e: b2b6 uxth r6, r6
module->buffer_remaining--;
680: 8b83 ldrh r3, [r0, #28]
682: 3b01 subs r3, #1
684: b29b uxth r3, r3
686: 8383 strh r3, [r0, #28]
_i2c_master_wait_for_sync(module);
688: 4b04 ldr r3, [pc, #16] ; (69c <_i2c_master_write+0x38>)
68a: 4798 blx r3
i2c_module->DATA.reg = module->buffer[buffer_index];
68c: 6a23 ldr r3, [r4, #32]
68e: 199e adds r6, r3, r6
690: 7833 ldrb r3, [r6, #0]
692: b2db uxtb r3, r3
694: 2228 movs r2, #40 ; 0x28
696: 54ab strb r3, [r5, r2]
698: e7ed b.n 676 <_i2c_master_write+0x12>
69a: 46c0 nop ; (mov r8, r8)
69c: 000005d1 .word 0x000005d1
000006a0 <_i2c_master_interrupt_handler>:
*
* \param[in] instance SERCOM instance that triggered the interrupt
*/
void _i2c_master_interrupt_handler(
uint8_t instance)
{
6a0: b570 push {r4, r5, r6, lr}
/* Get software module for callback handling */
struct i2c_master_module *module =
6a2: 0080 lsls r0, r0, #2
6a4: 4b75 ldr r3, [pc, #468] ; (87c <_i2c_master_interrupt_handler+0x1dc>)
6a6: 58c4 ldr r4, [r0, r3]
(struct i2c_master_module*)_sercom_instances[instance];
Assert(module);
SercomI2cm *const i2c_module = &(module->hw->I2CM);
6a8: 6825 ldr r5, [r4, #0]
bool sclsm_flag = i2c_module->CTRLA.bit.SCLSM;
6aa: 682b ldr r3, [r5, #0]
6ac: 011b lsls r3, r3, #4
6ae: 0fda lsrs r2, r3, #31
/* Combine callback registered and enabled masks */
uint8_t callback_mask = module->enabled_callback;
6b0: 7e63 ldrb r3, [r4, #25]
callback_mask &= module->registered_callback;
6b2: 7e26 ldrb r6, [r4, #24]
6b4: 401e ands r6, r3
/* Check if the module should respond to address ack */
if ((module->buffer_length <= 0) && (module->buffer_remaining > 0)) {
6b6: 8b63 ldrh r3, [r4, #26]
6b8: b29b uxth r3, r3
6ba: 2b00 cmp r3, #0
6bc: d103 bne.n 6c6 <_i2c_master_interrupt_handler+0x26>
6be: 8ba3 ldrh r3, [r4, #28]
6c0: b29b uxth r3, r3
6c2: 2b00 cmp r3, #0
6c4: d123 bne.n 70e <_i2c_master_interrupt_handler+0x6e>
/* Call function for address response */
_i2c_master_async_address_response(module);
/* Check if buffer write is done */
} else if ((module->buffer_length > 0) && (module->buffer_remaining <= 0) &&
6c6: 8b63 ldrh r3, [r4, #26]
6c8: b29b uxth r3, r3
6ca: 2b00 cmp r3, #0
6cc: d008 beq.n 6e0 <_i2c_master_interrupt_handler+0x40>
6ce: 8ba3 ldrh r3, [r4, #28]
6d0: b29b uxth r3, r3
6d2: 2b00 cmp r3, #0
6d4: d104 bne.n 6e0 <_i2c_master_interrupt_handler+0x40>
(module->status == STATUS_BUSY) &&
6d6: 3325 adds r3, #37 ; 0x25
6d8: 5ce3 ldrb r3, [r4, r3]
} else if ((module->buffer_length > 0) && (module->buffer_remaining <= 0) &&
6da: 2b05 cmp r3, #5
6dc: d100 bne.n 6e0 <_i2c_master_interrupt_handler+0x40>
6de: e06d b.n 7bc <_i2c_master_interrupt_handler+0x11c>
if (callback_mask & (1 << I2C_MASTER_CALLBACK_WRITE_COMPLETE)) {
module->callbacks[I2C_MASTER_CALLBACK_WRITE_COMPLETE](module);
}
/* Continue buffer write/read */
} else if ((module->buffer_length > 0) && (module->buffer_remaining > 0)){
6e0: 8b63 ldrh r3, [r4, #26]
6e2: b29b uxth r3, r3
6e4: 2b00 cmp r3, #0
6e6: d024 beq.n 732 <_i2c_master_interrupt_handler+0x92>
6e8: 8ba3 ldrh r3, [r4, #28]
6ea: b29b uxth r3, r3
6ec: 2b00 cmp r3, #0
6ee: d020 beq.n 732 <_i2c_master_interrupt_handler+0x92>
/* Check that bus ownership is not lost */
if ((!(i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(2))) &&
6f0: 8b6b ldrh r3, [r5, #26]
6f2: 069b lsls r3, r3, #26
6f4: d500 bpl.n 6f8 <_i2c_master_interrupt_handler+0x58>
6f6: e081 b.n 7fc <_i2c_master_interrupt_handler+0x15c>
6f8: 2a00 cmp r2, #0
6fa: d004 beq.n 706 <_i2c_master_interrupt_handler+0x66>
(!(sclsm_flag && (module->buffer_remaining == 1)))) {
6fc: 8ba3 ldrh r3, [r4, #28]
6fe: b29b uxth r3, r3
700: 2b01 cmp r3, #1
702: d100 bne.n 706 <_i2c_master_interrupt_handler+0x66>
704: e07a b.n 7fc <_i2c_master_interrupt_handler+0x15c>
module->status = STATUS_ERR_PACKET_COLLISION;
706: 2241 movs r2, #65 ; 0x41
708: 2325 movs r3, #37 ; 0x25
70a: 54e2 strb r2, [r4, r3]
70c: e011 b.n 732 <_i2c_master_interrupt_handler+0x92>
if (i2c_module->INTFLAG.reg & SERCOM_I2CM_INTFLAG_MB)
70e: 7e2b ldrb r3, [r5, #24]
710: 07db lsls r3, r3, #31
712: d507 bpl.n 724 <_i2c_master_interrupt_handler+0x84>
i2c_module->INTFLAG.reg = SERCOM_I2CM_INTENCLR_MB;
714: 2301 movs r3, #1
716: 762b strb r3, [r5, #24]
if (i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_ARBLOST) {
718: 8b6b ldrh r3, [r5, #26]
71a: 079b lsls r3, r3, #30
71c: d52e bpl.n 77c <_i2c_master_interrupt_handler+0xdc>
module->status = STATUS_ERR_PACKET_COLLISION;
71e: 2241 movs r2, #65 ; 0x41
720: 2325 movs r3, #37 ; 0x25
722: 54e2 strb r2, [r4, r3]
module->buffer_length = module->buffer_remaining;
724: 8ba3 ldrh r3, [r4, #28]
726: b29b uxth r3, r3
728: 8363 strh r3, [r4, #26]
if (module->status == STATUS_BUSY) {
72a: 2325 movs r3, #37 ; 0x25
72c: 5ce3 ldrb r3, [r4, r3]
72e: 2b05 cmp r3, #5
730: d038 beq.n 7a4 <_i2c_master_interrupt_handler+0x104>
_i2c_master_read(module);
}
}
/* Check if read buffer transfer is complete */
if ((module->buffer_length > 0) && (module->buffer_remaining <= 0) &&
732: 8b63 ldrh r3, [r4, #26]
734: b29b uxth r3, r3
736: 2b00 cmp r3, #0
738: d007 beq.n 74a <_i2c_master_interrupt_handler+0xaa>
73a: 8ba3 ldrh r3, [r4, #28]
73c: b29b uxth r3, r3
73e: 2b00 cmp r3, #0
740: d103 bne.n 74a <_i2c_master_interrupt_handler+0xaa>
(module->status == STATUS_BUSY) &&
742: 3325 adds r3, #37 ; 0x25
744: 5ce3 ldrb r3, [r4, r3]
if ((module->buffer_length > 0) && (module->buffer_remaining <= 0) &&
746: 2b05 cmp r3, #5
748: d064 beq.n 814 <_i2c_master_interrupt_handler+0x174>
module->callbacks[I2C_MASTER_CALLBACK_WRITE_COMPLETE](module);
}
}
/* Check for error */
if ((module->status != STATUS_BUSY) && (module->status != STATUS_OK)) {
74a: 2325 movs r3, #37 ; 0x25
74c: 5ce3 ldrb r3, [r4, r3]
74e: 2b05 cmp r3, #5
750: d013 beq.n 77a <_i2c_master_interrupt_handler+0xda>
752: 2325 movs r3, #37 ; 0x25
754: 5ce3 ldrb r3, [r4, r3]
756: 2b00 cmp r3, #0
758: d00f beq.n 77a <_i2c_master_interrupt_handler+0xda>
/* Stop packet operation */
i2c_module->INTENCLR.reg = SERCOM_I2CM_INTENCLR_MB |
75a: 2303 movs r3, #3
75c: 752b strb r3, [r5, #20]
SERCOM_I2CM_INTENCLR_SB;
module->buffer_length = 0;
75e: 2300 movs r3, #0
760: 8363 strh r3, [r4, #26]
module->buffer_remaining = 0;
762: 83a3 strh r3, [r4, #28]
/* Send nack and stop command unless arbitration is lost */
if ((module->status != STATUS_ERR_PACKET_COLLISION) &&
764: 3325 adds r3, #37 ; 0x25
766: 5ce3 ldrb r3, [r4, r3]
768: 2b41 cmp r3, #65 ; 0x41
76a: d003 beq.n 774 <_i2c_master_interrupt_handler+0xd4>
76c: 7aa3 ldrb r3, [r4, #10]
76e: 2b00 cmp r3, #0
770: d000 beq.n 774 <_i2c_master_interrupt_handler+0xd4>
772: e075 b.n 860 <_i2c_master_interrupt_handler+0x1c0>
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_ACKACT |
SERCOM_I2CM_CTRLB_CMD(3);
}
/* Call error callback if enabled and registered */
if (callback_mask & (1 << I2C_MASTER_CALLBACK_ERROR)) {
774: 0773 lsls r3, r6, #29
776: d500 bpl.n 77a <_i2c_master_interrupt_handler+0xda>
778: e07b b.n 872 <_i2c_master_interrupt_handler+0x1d2>
module->callbacks[I2C_MASTER_CALLBACK_ERROR](module);
}
}
}
77a: bd70 pop {r4, r5, r6, pc}
else if (i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_RXNACK) {
77c: 8b6b ldrh r3, [r5, #26]
77e: 075b lsls r3, r3, #29
780: d5d0 bpl.n 724 <_i2c_master_interrupt_handler+0x84>
module->status = STATUS_ERR_BAD_ADDRESS;
782: 2218 movs r2, #24
784: 2325 movs r3, #37 ; 0x25
786: 54e2 strb r2, [r4, r3]
module->buffer_remaining = 0;
788: 2300 movs r3, #0
78a: 83a3 strh r3, [r4, #28]
if (module->send_stop) {
78c: 7aa3 ldrb r3, [r4, #10]
78e: 2b00 cmp r3, #0
790: d0c8 beq.n 724 <_i2c_master_interrupt_handler+0x84>
_i2c_master_wait_for_sync(module);
792: 0020 movs r0, r4
794: 4b3a ldr r3, [pc, #232] ; (880 <_i2c_master_interrupt_handler+0x1e0>)
796: 4798 blx r3
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
798: 686a ldr r2, [r5, #4]
79a: 23c0 movs r3, #192 ; 0xc0
79c: 029b lsls r3, r3, #10
79e: 4313 orrs r3, r2
7a0: 606b str r3, [r5, #4]
7a2: e7bf b.n 724 <_i2c_master_interrupt_handler+0x84>
if (module->transfer_direction == I2C_TRANSFER_WRITE) {
7a4: 331f adds r3, #31
7a6: 5ce3 ldrb r3, [r4, r3]
7a8: 2b00 cmp r3, #0
7aa: d003 beq.n 7b4 <_i2c_master_interrupt_handler+0x114>
_i2c_master_read(module);
7ac: 0020 movs r0, r4
7ae: 4b35 ldr r3, [pc, #212] ; (884 <_i2c_master_interrupt_handler+0x1e4>)
7b0: 4798 blx r3
7b2: e7be b.n 732 <_i2c_master_interrupt_handler+0x92>
_i2c_master_write(module);
7b4: 0020 movs r0, r4
7b6: 4b34 ldr r3, [pc, #208] ; (888 <_i2c_master_interrupt_handler+0x1e8>)
7b8: 4798 blx r3
7ba: e7ba b.n 732 <_i2c_master_interrupt_handler+0x92>
(module->transfer_direction == I2C_TRANSFER_WRITE)) {
7bc: 331f adds r3, #31
7be: 5ce3 ldrb r3, [r4, r3]
(module->status == STATUS_BUSY) &&
7c0: 2b00 cmp r3, #0
7c2: d000 beq.n 7c6 <_i2c_master_interrupt_handler+0x126>
7c4: e78c b.n 6e0 <_i2c_master_interrupt_handler+0x40>
i2c_module->INTENCLR.reg =
7c6: 3303 adds r3, #3
7c8: 752b strb r3, [r5, #20]
module->buffer_length = 0;
7ca: 2300 movs r3, #0
7cc: 8363 strh r3, [r4, #26]
module->status = STATUS_OK;
7ce: 3325 adds r3, #37 ; 0x25
7d0: 2200 movs r2, #0
7d2: 54e2 strb r2, [r4, r3]
if (module->send_stop) {
7d4: 7aa3 ldrb r3, [r4, #10]
7d6: 2b00 cmp r3, #0
7d8: d107 bne.n 7ea <_i2c_master_interrupt_handler+0x14a>
i2c_module->INTFLAG.reg = SERCOM_I2CM_INTFLAG_MB;
7da: 2301 movs r3, #1
7dc: 762b strb r3, [r5, #24]
if (callback_mask & (1 << I2C_MASTER_CALLBACK_WRITE_COMPLETE)) {
7de: 07f3 lsls r3, r6, #31
7e0: d5a7 bpl.n 732 <_i2c_master_interrupt_handler+0x92>
module->callbacks[I2C_MASTER_CALLBACK_WRITE_COMPLETE](module);
7e2: 68e3 ldr r3, [r4, #12]
7e4: 0020 movs r0, r4
7e6: 4798 blx r3
7e8: e7a3 b.n 732 <_i2c_master_interrupt_handler+0x92>
_i2c_master_wait_for_sync(module);
7ea: 0020 movs r0, r4
7ec: 4b24 ldr r3, [pc, #144] ; (880 <_i2c_master_interrupt_handler+0x1e0>)
7ee: 4798 blx r3
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
7f0: 686a ldr r2, [r5, #4]
7f2: 23c0 movs r3, #192 ; 0xc0
7f4: 029b lsls r3, r3, #10
7f6: 4313 orrs r3, r2
7f8: 606b str r3, [r5, #4]
7fa: e7f0 b.n 7de <_i2c_master_interrupt_handler+0x13e>
} else if (module->transfer_direction == I2C_TRANSFER_WRITE) {
7fc: 2324 movs r3, #36 ; 0x24
7fe: 5ce3 ldrb r3, [r4, r3]
800: 2b00 cmp r3, #0
802: d103 bne.n 80c <_i2c_master_interrupt_handler+0x16c>
_i2c_master_write(module);
804: 0020 movs r0, r4
806: 4b20 ldr r3, [pc, #128] ; (888 <_i2c_master_interrupt_handler+0x1e8>)
808: 4798 blx r3
80a: e792 b.n 732 <_i2c_master_interrupt_handler+0x92>
_i2c_master_read(module);
80c: 0020 movs r0, r4
80e: 4b1d ldr r3, [pc, #116] ; (884 <_i2c_master_interrupt_handler+0x1e4>)
810: 4798 blx r3
812: e78e b.n 732 <_i2c_master_interrupt_handler+0x92>
(module->transfer_direction == I2C_TRANSFER_READ)) {
814: 331f adds r3, #31
816: 5ce3 ldrb r3, [r4, r3]
(module->status == STATUS_BUSY) &&
818: 2b01 cmp r3, #1
81a: d196 bne.n 74a <_i2c_master_interrupt_handler+0xaa>
if (i2c_module->INTFLAG.reg & SERCOM_I2CM_INTFLAG_SB) {
81c: 7e2b ldrb r3, [r5, #24]
81e: 079b lsls r3, r3, #30
820: d501 bpl.n 826 <_i2c_master_interrupt_handler+0x186>
i2c_module->INTFLAG.reg = SERCOM_I2CM_INTFLAG_SB;
822: 2302 movs r3, #2
824: 762b strb r3, [r5, #24]
i2c_module->INTENCLR.reg =
826: 2303 movs r3, #3
828: 752b strb r3, [r5, #20]
module->buffer_length = 0;
82a: 2300 movs r3, #0
82c: 8363 strh r3, [r4, #26]
module->status = STATUS_OK;
82e: 3325 adds r3, #37 ; 0x25
830: 2200 movs r2, #0
832: 54e2 strb r2, [r4, r3]
if ((callback_mask & (1 << I2C_MASTER_CALLBACK_READ_COMPLETE))
834: 07b3 lsls r3, r6, #30
836: d503 bpl.n 840 <_i2c_master_interrupt_handler+0x1a0>
&& (module->transfer_direction == I2C_TRANSFER_READ)) {
838: 2324 movs r3, #36 ; 0x24
83a: 5ce3 ldrb r3, [r4, r3]
83c: 2b01 cmp r3, #1
83e: d00b beq.n 858 <_i2c_master_interrupt_handler+0x1b8>
} else if ((callback_mask & (1 << I2C_MASTER_CALLBACK_WRITE_COMPLETE))
840: 07f3 lsls r3, r6, #31
842: d400 bmi.n 846 <_i2c_master_interrupt_handler+0x1a6>
844: e781 b.n 74a <_i2c_master_interrupt_handler+0xaa>
&& (module->transfer_direction == I2C_TRANSFER_WRITE)) {
846: 2324 movs r3, #36 ; 0x24
848: 5ce3 ldrb r3, [r4, r3]
84a: 2b00 cmp r3, #0
84c: d000 beq.n 850 <_i2c_master_interrupt_handler+0x1b0>
84e: e77c b.n 74a <_i2c_master_interrupt_handler+0xaa>
module->callbacks[I2C_MASTER_CALLBACK_WRITE_COMPLETE](module);
850: 68e3 ldr r3, [r4, #12]
852: 0020 movs r0, r4
854: 4798 blx r3
856: e778 b.n 74a <_i2c_master_interrupt_handler+0xaa>
module->callbacks[I2C_MASTER_CALLBACK_READ_COMPLETE](module);
858: 6923 ldr r3, [r4, #16]
85a: 0020 movs r0, r4
85c: 4798 blx r3
85e: e774 b.n 74a <_i2c_master_interrupt_handler+0xaa>
_i2c_master_wait_for_sync(module);
860: 0020 movs r0, r4
862: 4b07 ldr r3, [pc, #28] ; (880 <_i2c_master_interrupt_handler+0x1e0>)
864: 4798 blx r3
i2c_module->CTRLB.reg |= SERCOM_I2CM_CTRLB_ACKACT |
866: 686a ldr r2, [r5, #4]
868: 23e0 movs r3, #224 ; 0xe0
86a: 02db lsls r3, r3, #11
86c: 4313 orrs r3, r2
86e: 606b str r3, [r5, #4]
870: e780 b.n 774 <_i2c_master_interrupt_handler+0xd4>
module->callbacks[I2C_MASTER_CALLBACK_ERROR](module);
872: 6963 ldr r3, [r4, #20]
874: 0020 movs r0, r4
876: 4798 blx r3
}
878: e77f b.n 77a <_i2c_master_interrupt_handler+0xda>
87a: 46c0 nop ; (mov r8, r8)
87c: 20000244 .word 0x20000244
880: 000005d1 .word 0x000005d1
884: 000005dd .word 0x000005dd
888: 00000665 .word 0x00000665
0000088c <_read>:
int __attribute__((weak))
_read (int file, char * ptr, int len); // Remove GCC compiler warning
int __attribute__((weak))
_read (int file, char * ptr, int len)
{
88c: b5f0 push {r4, r5, r6, r7, lr}
88e: 46c6 mov lr, r8
890: b500 push {lr}
892: 000c movs r4, r1
894: 4690 mov r8, r2
int nChars = 0;
if (file != 0) {
896: 2800 cmp r0, #0
898: d10f bne.n 8ba <_read+0x2e>
return -1;
}
for (; len > 0; --len) {
89a: 2a00 cmp r2, #0
89c: dd11 ble.n 8c2 <_read+0x36>
89e: 188f adds r7, r1, r2
ptr_get(stdio_base, ptr);
8a0: 4e09 ldr r6, [pc, #36] ; (8c8 <_read+0x3c>)
8a2: 4d0a ldr r5, [pc, #40] ; (8cc <_read+0x40>)
8a4: 6830 ldr r0, [r6, #0]
8a6: 0021 movs r1, r4
8a8: 682b ldr r3, [r5, #0]
8aa: 4798 blx r3
ptr++;
8ac: 3401 adds r4, #1
for (; len > 0; --len) {
8ae: 42bc cmp r4, r7
8b0: d1f8 bne.n 8a4 <_read+0x18>
nChars++;
}
return nChars;
}
8b2: 4640 mov r0, r8
8b4: bc04 pop {r2}
8b6: 4690 mov r8, r2
8b8: bdf0 pop {r4, r5, r6, r7, pc}
return -1;
8ba: 2301 movs r3, #1
8bc: 425b negs r3, r3
8be: 4698 mov r8, r3
8c0: e7f7 b.n 8b2 <_read+0x26>
for (; len > 0; --len) {
8c2: 4680 mov r8, r0
8c4: e7f5 b.n 8b2 <_read+0x26>
8c6: 46c0 nop ; (mov r8, r8)
8c8: 200000d8 .word 0x200000d8
8cc: 200000d0 .word 0x200000d0
000008d0 <_write>:
int __attribute__((weak))
_write (int file, char * ptr, int len);
int __attribute__((weak))
_write (int file, char * ptr, int len)
{
8d0: b5f0 push {r4, r5, r6, r7, lr}
8d2: 46c6 mov lr, r8
8d4: b500 push {lr}
8d6: 000e movs r6, r1
8d8: 0015 movs r5, r2
int nChars = 0;
if ((file != 1) && (file != 2) && (file!=3)) {
8da: 3801 subs r0, #1
8dc: 2802 cmp r0, #2
8de: d810 bhi.n 902 <_write+0x32>
return -1;
}
for (; len != 0; --len) {
8e0: 2a00 cmp r2, #0
8e2: d011 beq.n 908 <_write+0x38>
8e4: 2400 movs r4, #0
if (ptr_put(stdio_base, *ptr++) < 0) {
8e6: 4b0c ldr r3, [pc, #48] ; (918 <_write+0x48>)
8e8: 4698 mov r8, r3
8ea: 4f0c ldr r7, [pc, #48] ; (91c <_write+0x4c>)
8ec: 4643 mov r3, r8
8ee: 6818 ldr r0, [r3, #0]
8f0: 5d31 ldrb r1, [r6, r4]
8f2: 683b ldr r3, [r7, #0]
8f4: 4798 blx r3
8f6: 2800 cmp r0, #0
8f8: db08 blt.n 90c <_write+0x3c>
return -1;
}
++nChars;
8fa: 3401 adds r4, #1
for (; len != 0; --len) {
8fc: 42a5 cmp r5, r4
8fe: d1f5 bne.n 8ec <_write+0x1c>
900: e006 b.n 910 <_write+0x40>
return -1;
902: 2401 movs r4, #1
904: 4264 negs r4, r4
906: e003 b.n 910 <_write+0x40>
for (; len != 0; --len) {
908: 0014 movs r4, r2
90a: e001 b.n 910 <_write+0x40>
return -1;
90c: 2401 movs r4, #1
90e: 4264 negs r4, r4
}
return nChars;
}
910: 0020 movs r0, r4
912: bc04 pop {r2}
914: 4690 mov r8, r2
916: bdf0 pop {r4, r5, r6, r7, pc}
918: 200000d8 .word 0x200000d8
91c: 200000d4 .word 0x200000d4
00000920 <p_i2c_write_byte>:
volatile uint8_t i2c_master_buff[P_I2C_BUFFER_SIZE];
int ctr = 0;
int p_i2c_write_byte(i2c_device* dev, uint8_t byte, _Bool bShouldStop)
{
920: b570 push {r4, r5, r6, lr}
p_i2c_pkt.data[0] = 0x0;
922: 4b1b ldr r3, [pc, #108] ; (990 <p_i2c_write_byte+0x70>)
924: 2400 movs r4, #0
926: 685d ldr r5, [r3, #4]
928: 702c strb r4, [r5, #0]
p_i2c_pkt.data[0] = byte;
92a: 685c ldr r4, [r3, #4]
92c: 7021 strb r1, [r4, #0]
p_i2c_pkt.address = dev->addr;
92e: 7801 ldrb r1, [r0, #0]
930: 8019 strh r1, [r3, #0]
p_i2c_pkt.data_length = 1;
932: 2101 movs r1, #1
934: 8059 strh r1, [r3, #2]
if(bShouldStop)
936: 2a00 cmp r2, #0
938: d114 bne.n 964 <p_i2c_write_byte+0x44>
}
else
{
#warning add timeout handling
while(i2c_master_write_packet_wait_no_stop(&p_i2c_mod, &p_i2c_pkt) != STATUS_OK)
93a: 001d movs r5, r3
93c: 4c15 ldr r4, [pc, #84] ; (994 <p_i2c_write_byte+0x74>)
93e: 4e16 ldr r6, [pc, #88] ; (998 <p_i2c_write_byte+0x78>)
940: 0029 movs r1, r5
942: 0020 movs r0, r4
944: 47b0 blx r6
946: 2800 cmp r0, #0
948: d020 beq.n 98c <p_i2c_write_byte+0x6c>
{
if(ctr++ >= 2000)
94a: 4a14 ldr r2, [pc, #80] ; (99c <p_i2c_write_byte+0x7c>)
94c: 6813 ldr r3, [r2, #0]
94e: 1c59 adds r1, r3, #1
950: 6011 str r1, [r2, #0]
952: 4a13 ldr r2, [pc, #76] ; (9a0 <p_i2c_write_byte+0x80>)
954: 4293 cmp r3, r2
956: ddf3 ble.n 940 <p_i2c_write_byte+0x20>
{
ctr = 0;
958: 2200 movs r2, #0
95a: 4b10 ldr r3, [pc, #64] ; (99c <p_i2c_write_byte+0x7c>)
95c: 601a str r2, [r3, #0]
return -1;
95e: 2001 movs r0, #1
960: 4240 negs r0, r0
962: e013 b.n 98c <p_i2c_write_byte+0x6c>
while(i2c_master_write_packet_wait(&p_i2c_mod, &p_i2c_pkt) != STATUS_OK)
964: 4d0a ldr r5, [pc, #40] ; (990 <p_i2c_write_byte+0x70>)
966: 4c0b ldr r4, [pc, #44] ; (994 <p_i2c_write_byte+0x74>)
968: 4e0e ldr r6, [pc, #56] ; (9a4 <p_i2c_write_byte+0x84>)
96a: 0029 movs r1, r5
96c: 0020 movs r0, r4
96e: 47b0 blx r6
970: 2800 cmp r0, #0
972: d00b beq.n 98c <p_i2c_write_byte+0x6c>
if(ctr++ >= 2000)
974: 4a09 ldr r2, [pc, #36] ; (99c <p_i2c_write_byte+0x7c>)
976: 6813 ldr r3, [r2, #0]
978: 1c59 adds r1, r3, #1
97a: 6011 str r1, [r2, #0]
97c: 4a08 ldr r2, [pc, #32] ; (9a0 <p_i2c_write_byte+0x80>)
97e: 4293 cmp r3, r2
980: ddf3 ble.n 96a <p_i2c_write_byte+0x4a>
ctr = 0;
982: 2200 movs r2, #0
984: 4b05 ldr r3, [pc, #20] ; (99c <p_i2c_write_byte+0x7c>)
986: 601a str r2, [r3, #0]
return -1;
988: 2001 movs r0, #1
98a: 4240 negs r0, r0
}
}
}
return 0;
}
98c: bd70 pop {r4, r5, r6, pc}
98e: 46c0 nop ; (mov r8, r8)
990: 20000204 .word 0x20000204
994: 200001dc .word 0x200001dc
998: 000005ad .word 0x000005ad
99c: 20000084 .word 0x20000084
9a0: 000007cf .word 0x000007cf
9a4: 00000589 .word 0x00000589
000009a8 <p_i2c_master_bus_init>:
memcpy(dev->buffer, i2c_master_buff, numBytes);
}
void p_i2c_master_bus_init(void)
{
9a8: b530 push {r4, r5, lr}
9aa: b08f sub sp, #60 ; 0x3c
/*Sanity check argument */
Assert(config);
config->baud_rate = I2C_MASTER_BAUD_RATE_100KHZ;
#ifdef FEATURE_I2C_FAST_MODE_PLUS_AND_HIGH_SPEED
config->baud_rate_high_speed = I2C_MASTER_BAUD_RATE_3400KHZ;
config->transfer_speed = I2C_MASTER_SPEED_STANDARD_AND_FAST;
9ac: ab01 add r3, sp, #4
9ae: 2200 movs r2, #0
9b0: 9203 str r2, [sp, #12]
#endif
config->generator_source = GCLK_GENERATOR_0;
9b2: 731a strb r2, [r3, #12]
config->run_in_standby = false;
9b4: 761a strb r2, [r3, #24]
config->start_hold_time = I2C_MASTER_START_HOLD_TIME_300NS_600NS;
9b6: 2180 movs r1, #128 ; 0x80
9b8: 0389 lsls r1, r1, #14
9ba: 9105 str r1, [sp, #20]
config->buffer_timeout = 65535;
9bc: 2101 movs r1, #1
9be: 4249 negs r1, r1
9c0: 82d9 strh r1, [r3, #22]
config->unknown_bus_state_timeout = 65535;
9c2: 8299 strh r1, [r3, #20]
config->pinmux_pad0 = PINMUX_DEFAULT;
config->pinmux_pad1 = PINMUX_DEFAULT;
config->scl_low_timeout = false;
9c4: 3125 adds r1, #37 ; 0x25
9c6: 545a strb r2, [r3, r1]
config->inactive_timeout = I2C_MASTER_INACTIVE_TIMEOUT_DISABLED;
9c8: 920b str r2, [sp, #44] ; 0x2c
#ifdef FEATURE_I2C_SCL_STRETCH_MODE
config->scl_stretch_only_after_ack_bit = false;
9ca: 3108 adds r1, #8
9cc: 545a strb r2, [r3, r1]
#endif
#ifdef FEATURE_I2C_SCL_EXTEND_TIMEOUT
config->slave_scl_low_extend_timeout = false;
9ce: 3101 adds r1, #1
9d0: 545a strb r2, [r3, r1]
config->master_scl_low_extend_timeout = false;
9d2: 3101 adds r1, #1
9d4: 545a strb r2, [r3, r1]
#endif
/* The typical value is 215ns */
config->sda_scl_rise_time_ns = 215;
9d6: 31a9 adds r1, #169 ; 0xa9
9d8: 8619 strh r1, [r3, #48] ; 0x30
struct i2c_master_config i2c_conf;
i2c_master_get_config_defaults(&i2c_conf);
i2c_conf.pinmux_pad0 = P_I2C_PINMUX_PAD0;
9da: 491b ldr r1, [pc, #108] ; (a48 <p_i2c_master_bus_init+0xa0>)
9dc: 9108 str r1, [sp, #32]
i2c_conf.pinmux_pad1 = P_I2C_PINMUX_PAD1;
9de: 491b ldr r1, [pc, #108] ; (a4c <p_i2c_master_bus_init+0xa4>)
9e0: 9109 str r1, [sp, #36] ; 0x24
i2c_conf.baud_rate = P_I2C_CLOCK_SPEED;
9e2: 21c8 movs r1, #200 ; 0xc8
9e4: 0049 lsls r1, r1, #1
9e6: 9101 str r1, [sp, #4]
i2c_conf.baud_rate_high_speed = false;
9e8: 9202 str r2, [sp, #8]
i2c_conf.run_in_standby = false;
i2c_conf.generator_source = GCLK_GENERATOR_0;
// packet init
p_i2c_pkt.data = i2c_master_buff;
9ea: 4b19 ldr r3, [pc, #100] ; (a50 <p_i2c_master_bus_init+0xa8>)
9ec: 4919 ldr r1, [pc, #100] ; (a54 <p_i2c_master_bus_init+0xac>)
9ee: 6059 str r1, [r3, #4]
p_i2c_pkt.data_length = 1;
9f0: 2101 movs r1, #1
9f2: 8059 strh r1, [r3, #2]
p_i2c_pkt.ten_bit_address = false;
9f4: 721a strb r2, [r3, #8]
while(i2c_master_init(&p_i2c_mod, P_I2C_SERCOM, &i2c_conf) != STATUS_OK);
9f6: 4d18 ldr r5, [pc, #96] ; (a58 <p_i2c_master_bus_init+0xb0>)
9f8: 4c18 ldr r4, [pc, #96] ; (a5c <p_i2c_master_bus_init+0xb4>)
9fa: aa01 add r2, sp, #4
9fc: 4918 ldr r1, [pc, #96] ; (a60 <p_i2c_master_bus_init+0xb8>)
9fe: 0028 movs r0, r5
a00: 47a0 blx r4
a02: 2800 cmp r0, #0
a04: d1f9 bne.n 9fa <p_i2c_master_bus_init+0x52>
{
/* Sanity check of arguments */
Assert(module);
Assert(module->hw);
SercomI2cm *const i2c_module = &(module->hw->I2CM);
a06: 4b14 ldr r3, [pc, #80] ; (a58 <p_i2c_master_bus_init+0xb0>)
a08: 681c ldr r4, [r3, #0]
return (i2c_hw->SYNCBUSY.reg & SERCOM_I2CM_SYNCBUSY_MASK);
a0a: 2207 movs r2, #7
a0c: 69e3 ldr r3, [r4, #28]
while (i2c_master_is_syncing(module)) {
a0e: 421a tst r2, r3
a10: d1fc bne.n a0c <p_i2c_master_bus_init+0x64>
/* Wait for module to sync */
_i2c_master_wait_for_sync(module);
/* Enable module */
i2c_module->CTRLA.reg |= SERCOM_I2CM_CTRLA_ENABLE;
a12: 6823 ldr r3, [r4, #0]
a14: 2202 movs r2, #2
a16: 4313 orrs r3, r2
a18: 6023 str r3, [r4, #0]
#if I2C_MASTER_CALLBACK_MODE == true
/* Enable module interrupts */
system_interrupt_enable(_sercom_get_interrupt_vector(module->hw));
a1a: 4d0f ldr r5, [pc, #60] ; (a58 <p_i2c_master_bus_init+0xb0>)
a1c: 6828 ldr r0, [r5, #0]
a1e: 4b11 ldr r3, [pc, #68] ; (a64 <p_i2c_master_bus_init+0xbc>)
a20: 4798 blx r3
* \param[in] vector Interrupt vector to enable
*/
static inline void system_interrupt_enable(
const enum system_interrupt_vector vector)
{
NVIC->ISER[0] = (uint32_t)(1 << ((uint32_t)vector & 0x0000001f));
a22: 231f movs r3, #31
a24: 4018 ands r0, r3
a26: 3b1e subs r3, #30
a28: 4083 lsls r3, r0
a2a: 4a0f ldr r2, [pc, #60] ; (a68 <p_i2c_master_bus_init+0xc0>)
a2c: 6013 str r3, [r2, #0]
#endif
/* Start timeout if bus state is unknown */
while (!(i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(1))) {
timeout_counter++;
if(timeout_counter >= (module->unknown_bus_state_timeout)) {
a2e: 88e8 ldrh r0, [r5, #6]
uint32_t timeout_counter = 0;
a30: 2300 movs r3, #0
while (!(i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(1))) {
a32: 2110 movs r1, #16
a34: 8b62 ldrh r2, [r4, #26]
a36: 420a tst r2, r1
a38: d104 bne.n a44 <p_i2c_master_bus_init+0x9c>
timeout_counter++;
a3a: 3301 adds r3, #1
if(timeout_counter >= (module->unknown_bus_state_timeout)) {
a3c: 4283 cmp r3, r0
a3e: d3f9 bcc.n a34 <p_i2c_master_bus_init+0x8c>
/* Timeout, force bus state to idle */
i2c_module->STATUS.reg = SERCOM_I2CM_STATUS_BUSSTATE(1);
a40: 2310 movs r3, #16
a42: 8363 strh r3, [r4, #26]
i2c_master_enable(&p_i2c_mod);
}
a44: b00f add sp, #60 ; 0x3c
a46: bd30 pop {r4, r5, pc}
a48: 00080003 .word 0x00080003
a4c: 00090003 .word 0x00090003
a50: 20000204 .word 0x20000204
a54: 200000dc .word 0x200000dc
a58: 200001dc .word 0x200001dc
a5c: 00000121 .word 0x00000121
a60: 42001000 .word 0x42001000
a64: 000014c9 .word 0x000014c9
a68: e000e100 .word 0xe000e100
00000a6c <usart_serial_getchar>:
* \param[out] c Destination for the read character.
*/
static inline void usart_serial_getchar(
struct usart_module *const module,
uint8_t *c)
{
a6c: b570 push {r4, r5, r6, lr}
a6e: b082 sub sp, #8
a70: 0005 movs r5, r0
a72: 000e movs r6, r1
uint16_t temp = 0;
a74: 2200 movs r2, #0
a76: 466b mov r3, sp
a78: 80da strh r2, [r3, #6]
while(STATUS_OK != usart_read_wait(module, &temp));
a7a: 4c06 ldr r4, [pc, #24] ; (a94 <usart_serial_getchar+0x28>)
a7c: 466b mov r3, sp
a7e: 1d99 adds r1, r3, #6
a80: 0028 movs r0, r5
a82: 47a0 blx r4
a84: 2800 cmp r0, #0
a86: d1f9 bne.n a7c <usart_serial_getchar+0x10>
*c = temp;
a88: 466b mov r3, sp
a8a: 3306 adds r3, #6
a8c: 881b ldrh r3, [r3, #0]
a8e: 7033 strb r3, [r6, #0]
}
a90: b002 add sp, #8
a92: bd70 pop {r4, r5, r6, pc}
a94: 00000f17 .word 0x00000f17
00000a98 <usart_serial_putchar>:
{
a98: b570 push {r4, r5, r6, lr}
a9a: 0005 movs r5, r0
while(STATUS_OK !=usart_write_wait(module, c));
a9c: b28c uxth r4, r1
a9e: 4e03 ldr r6, [pc, #12] ; (aac <usart_serial_putchar+0x14>)
aa0: 0021 movs r1, r4
aa2: 0028 movs r0, r5
aa4: 47b0 blx r6
aa6: 2800 cmp r0, #0
aa8: d1fa bne.n aa0 <usart_serial_putchar+0x8>
}
aaa: bd70 pop {r4, r5, r6, pc}
aac: 00000ef1 .word 0x00000ef1
00000ab0 <p_usart_init>:
#include "p_usart.h"
struct usart_module du_mod;
void p_usart_init(void)
{
ab0: b5f0 push {r4, r5, r6, r7, lr}
ab2: b091 sub sp, #68 ; 0x44
{
/* Sanity check arguments */
Assert(config);
/* Set default config in the config struct */
config->data_order = USART_DATAORDER_LSB;
ab4: 2380 movs r3, #128 ; 0x80
ab6: 05db lsls r3, r3, #23
ab8: 9300 str r3, [sp, #0]
config->transfer_mode = USART_TRANSFER_ASYNCHRONOUSLY;
aba: 2300 movs r3, #0
abc: 9301 str r3, [sp, #4]
config->parity = USART_PARITY_NONE;
abe: 22ff movs r2, #255 ; 0xff
ac0: 4669 mov r1, sp
ac2: 810a strh r2, [r1, #8]
config->stopbits = USART_STOPBITS_1;
ac4: 2200 movs r2, #0
ac6: 728b strb r3, [r1, #10]
config->character_size = USART_CHARACTER_SIZE_8BIT;
ac8: 72cb strb r3, [r1, #11]
config->baudrate = 9600;
config->receiver_enable = true;
aca: 2401 movs r4, #1
acc: 2124 movs r1, #36 ; 0x24
ace: 4668 mov r0, sp
ad0: 5444 strb r4, [r0, r1]
config->transmitter_enable = true;
ad2: 3101 adds r1, #1
ad4: 5444 strb r4, [r0, r1]
config->clock_polarity_inverted = false;
ad6: 3101 adds r1, #1
ad8: 5443 strb r3, [r0, r1]
config->use_external_clock = false;
ada: 3101 adds r1, #1
adc: 5443 strb r3, [r0, r1]
config->ext_clock_freq = 0;
ade: 930a str r3, [sp, #40] ; 0x28
config->mux_setting = USART_RX_1_TX_2_XCK_3;
config->run_in_standby = false;
ae0: 3105 adds r1, #5
ae2: 5443 strb r3, [r0, r1]
config->generator_source = GCLK_GENERATOR_0;
ae4: 3101 adds r1, #1
ae6: 5443 strb r3, [r0, r1]
config->pinmux_pad0 = PINMUX_DEFAULT;
config->pinmux_pad1 = PINMUX_DEFAULT;
config->pinmux_pad2 = PINMUX_DEFAULT;
config->pinmux_pad3 = PINMUX_DEFAULT;
#ifdef FEATURE_USART_OVER_SAMPLE
config->sample_adjustment = USART_SAMPLE_ADJUSTMENT_7_8_9;
ae8: 9305 str r3, [sp, #20]
config->sample_rate = USART_SAMPLE_RATE_16X_ARITHMETIC;
aea: 8203 strh r3, [r0, #16]
#endif
#ifdef FEATURE_USART_LIN_SLAVE
config->lin_slave_enable = false;
aec: 76c3 strb r3, [r0, #27]
config->lin_header_delay = LIN_MASTER_HEADER_DELAY_0;
config->lin_break_length = LIN_MASTER_BREAK_LENGTH_13_BIT;
#endif
#ifdef FEATURE_USART_IMMEDIATE_BUFFER_OVERFLOW_NOTIFICATION
config->immediate_buffer_overflow_notification = false;
aee: 7602 strb r2, [r0, #24]
#endif
#ifdef FEATURE_USART_START_FRAME_DECTION
config->start_frame_detection_enable = false;
af0: 7702 strb r2, [r0, #28]
#endif
#ifdef FEATURE_USART_IRDA
config->encoding_format_enable = false;
af2: 7642 strb r2, [r0, #25]
config->receive_pulse_length = 19;
af4: 2313 movs r3, #19
af6: 7683 strb r3, [r0, #26]
config->iso7816_config.inhibit_nack = ISO7816_INHIBIT_NACK_DISABLE;
config->iso7816_config.successive_recv_nack = ISO7816_SUCCESSIVE_RECV_NACK_DISABLE;
config->iso7816_config.max_iterations = 7;
#endif
#ifdef FEATURE_USART_COLLISION_DECTION
config->collision_detection_enable = false;
af8: 7742 strb r2, [r0, #29]
struct usart_config uconf;
usart_get_config_defaults(&uconf);
uconf.pinmux_pad0 = DEBUG_USART_PINMUX_PAD0;
afa: 4b1e ldr r3, [pc, #120] ; (b74 <p_usart_init+0xc4>)
afc: 930c str r3, [sp, #48] ; 0x30
uconf.pinmux_pad1 = DEBUG_USART_PINMUX_PAD1;
afe: 4b1e ldr r3, [pc, #120] ; (b78 <p_usart_init+0xc8>)
b00: 930d str r3, [sp, #52] ; 0x34
uconf.pinmux_pad2 = DEBUG_USART_PINMUX_PAD2;
b02: 2301 movs r3, #1
b04: 425b negs r3, r3
b06: 930e str r3, [sp, #56] ; 0x38
uconf.pinmux_pad3 = DEBUG_USART_PINMUX_PAD3;
b08: 930f str r3, [sp, #60] ; 0x3c
uconf.mux_setting = DEBUG_USART_MUX_SETTING;
b0a: 2380 movs r3, #128 ; 0x80
b0c: 035b lsls r3, r3, #13
b0e: 9303 str r3, [sp, #12]
uconf.baudrate = DEBUG_USART_BAUDRATE;
b10: 23e1 movs r3, #225 ; 0xe1
b12: 025b lsls r3, r3, #9
b14: 9308 str r3, [sp, #32]
static inline void stdio_serial_init(
struct usart_module *const module,
usart_inst_t const hw,
const struct usart_config *const config)
{
stdio_base = (void *)module;
b16: 4d19 ldr r5, [pc, #100] ; (b7c <p_usart_init+0xcc>)
b18: 4b19 ldr r3, [pc, #100] ; (b80 <p_usart_init+0xd0>)
b1a: 601d str r5, [r3, #0]
ptr_put = (int (*)(void volatile*,char))&usart_serial_putchar;
b1c: 4a19 ldr r2, [pc, #100] ; (b84 <p_usart_init+0xd4>)
b1e: 4b1a ldr r3, [pc, #104] ; (b88 <p_usart_init+0xd8>)
b20: 601a str r2, [r3, #0]
ptr_get = (void (*)(void volatile*,char*))&usart_serial_getchar;
b22: 4a1a ldr r2, [pc, #104] ; (b8c <p_usart_init+0xdc>)
b24: 4b1a ldr r3, [pc, #104] ; (b90 <p_usart_init+0xe0>)
b26: 601a str r2, [r3, #0]
if (usart_init(module, hw, config) == STATUS_OK) {
b28: 466a mov r2, sp
b2a: 491a ldr r1, [pc, #104] ; (b94 <p_usart_init+0xe4>)
b2c: 0028 movs r0, r5
b2e: 4b1a ldr r3, [pc, #104] ; (b98 <p_usart_init+0xe8>)
b30: 4798 blx r3
usart_serial_init(module, hw, config);
# if defined(__GNUC__)
// Specify that stdout and stdin should not be buffered.
setbuf(stdout, NULL);
b32: 4f1a ldr r7, [pc, #104] ; (b9c <p_usart_init+0xec>)
b34: 683b ldr r3, [r7, #0]
b36: 6898 ldr r0, [r3, #8]
b38: 2100 movs r1, #0
b3a: 4e19 ldr r6, [pc, #100] ; (ba0 <p_usart_init+0xf0>)
b3c: 47b0 blx r6
setbuf(stdin, NULL);
b3e: 683b ldr r3, [r7, #0]
b40: 6858 ldr r0, [r3, #4]
b42: 2100 movs r1, #0
b44: 47b0 blx r6
/* Sanity check arguments */
Assert(module);
Assert(module->hw);
/* Get a pointer to the hardware module instance */
SercomUsart *const usart_hw = &(module->hw->USART);
b46: 682e ldr r6, [r5, #0]
#if USART_CALLBACK_MODE == true
/* Enable Global interrupt for module */
system_interrupt_enable(_sercom_get_interrupt_vector(module->hw));
b48: 0030 movs r0, r6
b4a: 4b16 ldr r3, [pc, #88] ; (ba4 <p_usart_init+0xf4>)
b4c: 4798 blx r3
b4e: 231f movs r3, #31
b50: 4018 ands r0, r3
b52: 4084 lsls r4, r0
b54: 4b14 ldr r3, [pc, #80] ; (ba8 <p_usart_init+0xf8>)
b56: 601c str r4, [r3, #0]
SercomUsart *const usart_hw = &(module->hw->USART);
b58: 682a ldr r2, [r5, #0]
return (usart_hw->SYNCBUSY.reg);
b5a: 69d3 ldr r3, [r2, #28]
while (usart_is_syncing(module)) {
b5c: 2b00 cmp r3, #0
b5e: d1fc bne.n b5a <p_usart_init+0xaa>
/* Wait until synchronization is complete */
_usart_wait_for_sync(module);
/* Enable USART module */
usart_hw->CTRLA.reg |= SERCOM_USART_CTRLA_ENABLE;
b60: 6833 ldr r3, [r6, #0]
b62: 2202 movs r2, #2
b64: 4313 orrs r3, r2
b66: 6033 str r3, [r6, #0]
stdio_serial_init(&du_mod, DEBUG_USART_MODULE, &uconf);
usart_enable(&du_mod);
printf("Hello world\n");
b68: 4810 ldr r0, [pc, #64] ; (bac <p_usart_init+0xfc>)
b6a: 4b11 ldr r3, [pc, #68] ; (bb0 <p_usart_init+0x100>)
b6c: 4798 blx r3
b6e: b011 add sp, #68 ; 0x44
b70: bdf0 pop {r4, r5, r6, r7, pc}
b72: 46c0 nop ; (mov r8, r8)
b74: 00160002 .word 0x00160002
b78: 00170002 .word 0x00170002
b7c: 20000210 .word 0x20000210
b80: 200000d8 .word 0x200000d8
b84: 00000a99 .word 0x00000a99
b88: 200000d4 .word 0x200000d4
b8c: 00000a6d .word 0x00000a6d
b90: 200000d0 .word 0x200000d0
b94: 42001400 .word 0x42001400
b98: 00000bb5 .word 0x00000bb5
b9c: 20000004 .word 0x20000004
ba0: 000038d9 .word 0x000038d9
ba4: 000014c9 .word 0x000014c9
ba8: e000e100 .word 0xe000e100
bac: 00004888 .word 0x00004888
bb0: 000038c5 .word 0x000038c5
00000bb4 <usart_init>:
*/
enum status_code usart_init(
struct usart_module *const module,
Sercom *const hw,
const struct usart_config *const config)
{
bb4: b5f0 push {r4, r5, r6, r7, lr}
bb6: 46de mov lr, fp
bb8: 4657 mov r7, sl
bba: 464e mov r6, r9
bbc: 4645 mov r5, r8
bbe: b5e0 push {r5, r6, r7, lr}
bc0: b091 sub sp, #68 ; 0x44
bc2: 0005 movs r5, r0
bc4: 000c movs r4, r1
bc6: 0016 movs r6, r2
Assert(config);
enum status_code status_code = STATUS_OK;
/* Assign module pointer to software instance struct */
module->hw = hw;
bc8: 6029 str r1, [r5, #0]
/* Get a pointer to the hardware module instance */
SercomUsart *const usart_hw = &(module->hw->USART);
uint32_t sercom_index = _sercom_get_sercom_inst_index(module->hw);
bca: 0008 movs r0, r1
bcc: 4bba ldr r3, [pc, #744] ; (eb8 <usart_init+0x304>)
bce: 4798 blx r3
bd0: 0002 movs r2, r0
#else
pm_index = sercom_index + PM_APBCMASK_SERCOM0_Pos;
gclk_index = sercom_index + SERCOM0_GCLK_ID_CORE;
#endif
if (usart_hw->CTRLA.reg & SERCOM_USART_CTRLA_SWRST) {
bd2: 6823 ldr r3, [r4, #0]
/* The module is busy resetting itself */
return STATUS_BUSY;
bd4: 2005 movs r0, #5
if (usart_hw->CTRLA.reg & SERCOM_USART_CTRLA_SWRST) {
bd6: 07db lsls r3, r3, #31
bd8: d506 bpl.n be8 <usart_init+0x34>
_sercom_set_handler(instance_index, _usart_interrupt_handler);
_sercom_instances[instance_index] = module;
#endif
return status_code;
}
bda: b011 add sp, #68 ; 0x44
bdc: bc3c pop {r2, r3, r4, r5}
bde: 4690 mov r8, r2
be0: 4699 mov r9, r3
be2: 46a2 mov sl, r4
be4: 46ab mov fp, r5
be6: bdf0 pop {r4, r5, r6, r7, pc}
if (usart_hw->CTRLA.reg & SERCOM_USART_CTRLA_ENABLE) {
be8: 6823 ldr r3, [r4, #0]
return STATUS_ERR_DENIED;
bea: 3017 adds r0, #23
if (usart_hw->CTRLA.reg & SERCOM_USART_CTRLA_ENABLE) {
bec: 079b lsls r3, r3, #30
bee: d4f4 bmi.n bda <usart_init+0x26>
case SYSTEM_CLOCK_APB_APBB:
PM->APBBMASK.reg |= mask;
break;
case SYSTEM_CLOCK_APB_APBC:
PM->APBCMASK.reg |= mask;
bf0: 49b2 ldr r1, [pc, #712] ; (ebc <usart_init+0x308>)
bf2: 6a08 ldr r0, [r1, #32]
pm_index = sercom_index + PM_APBCMASK_SERCOM0_Pos;
bf4: 1c97 adds r7, r2, #2
system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC, 1 << pm_index);
bf6: 2301 movs r3, #1
bf8: 40bb lsls r3, r7
bfa: 4303 orrs r3, r0
bfc: 620b str r3, [r1, #32]
gclk_chan_conf.source_generator = config->generator_source;
bfe: a90f add r1, sp, #60 ; 0x3c
c00: 272d movs r7, #45 ; 0x2d
c02: 5df3 ldrb r3, [r6, r7]
c04: 700b strb r3, [r1, #0]
gclk_index = sercom_index + SERCOM0_GCLK_ID_CORE;
c06: 3214 adds r2, #20
system_gclk_chan_set_config(gclk_index, &gclk_chan_conf);
c08: b2d3 uxtb r3, r2
c0a: 9302 str r3, [sp, #8]
c0c: 0018 movs r0, r3
c0e: 4bac ldr r3, [pc, #688] ; (ec0 <usart_init+0x30c>)
c10: 4798 blx r3
system_gclk_chan_enable(gclk_index);
c12: 9802 ldr r0, [sp, #8]
c14: 4bab ldr r3, [pc, #684] ; (ec4 <usart_init+0x310>)
c16: 4798 blx r3
sercom_set_gclk_generator(config->generator_source, false);
c18: 5df0 ldrb r0, [r6, r7]
c1a: 2100 movs r1, #0
c1c: 4baa ldr r3, [pc, #680] ; (ec8 <usart_init+0x314>)
c1e: 4798 blx r3
module->character_size = config->character_size;
c20: 7af3 ldrb r3, [r6, #11]
c22: 716b strb r3, [r5, #5]
module->receiver_enabled = config->receiver_enable;
c24: 2324 movs r3, #36 ; 0x24
c26: 5cf3 ldrb r3, [r6, r3]
c28: 71ab strb r3, [r5, #6]
module->transmitter_enabled = config->transmitter_enable;
c2a: 2325 movs r3, #37 ; 0x25
c2c: 5cf3 ldrb r3, [r6, r3]
c2e: 71eb strb r3, [r5, #7]
module->lin_slave_enabled = config->lin_slave_enable;
c30: 7ef3 ldrb r3, [r6, #27]
c32: 722b strb r3, [r5, #8]
module->start_frame_detection_enabled = config->start_frame_detection_enable;
c34: 7f33 ldrb r3, [r6, #28]
c36: 726b strb r3, [r5, #9]
SercomUsart *const usart_hw = &(module->hw->USART);
c38: 682b ldr r3, [r5, #0]
c3a: 4698 mov r8, r3
uint32_t sercom_index = _sercom_get_sercom_inst_index(module->hw);
c3c: 0018 movs r0, r3
c3e: 4b9e ldr r3, [pc, #632] ; (eb8 <usart_init+0x304>)
c40: 4798 blx r3
gclk_index = sercom_index + SERCOM0_GCLK_ID_CORE;
c42: 3014 adds r0, #20
uint16_t baud = 0;
c44: 2200 movs r2, #0
c46: 230e movs r3, #14
c48: a906 add r1, sp, #24
c4a: 468c mov ip, r1
c4c: 4463 add r3, ip
c4e: 801a strh r2, [r3, #0]
switch (config->sample_rate) {
c50: 8a32 ldrh r2, [r6, #16]
c52: 9202 str r2, [sp, #8]
c54: 2380 movs r3, #128 ; 0x80
c56: 01db lsls r3, r3, #7
c58: 429a cmp r2, r3
c5a: d100 bne.n c5e <usart_init+0xaa>
c5c: e09a b.n d94 <usart_init+0x1e0>
c5e: d90f bls.n c80 <usart_init+0xcc>
c60: 23c0 movs r3, #192 ; 0xc0
c62: 01db lsls r3, r3, #7
c64: 9a02 ldr r2, [sp, #8]
c66: 429a cmp r2, r3
c68: d100 bne.n c6c <usart_init+0xb8>
c6a: e08e b.n d8a <usart_init+0x1d6>
c6c: 2380 movs r3, #128 ; 0x80
c6e: 021b lsls r3, r3, #8
c70: 429a cmp r2, r3
c72: d000 beq.n c76 <usart_init+0xc2>
c74: e11b b.n eae <usart_init+0x2fa>
sample_num = SERCOM_ASYNC_SAMPLE_NUM_3;
c76: 2303 movs r3, #3
c78: 9306 str r3, [sp, #24]
mode = SERCOM_ASYNC_OPERATION_MODE_ARITHMETIC;
c7a: 2300 movs r3, #0
c7c: 9307 str r3, [sp, #28]
c7e: e008 b.n c92 <usart_init+0xde>
switch (config->sample_rate) {
c80: 2380 movs r3, #128 ; 0x80
c82: 019b lsls r3, r3, #6
c84: 429a cmp r2, r3
c86: d000 beq.n c8a <usart_init+0xd6>
c88: e111 b.n eae <usart_init+0x2fa>
sample_num = SERCOM_ASYNC_SAMPLE_NUM_16;
c8a: 2310 movs r3, #16
c8c: 9306 str r3, [sp, #24]
mode = SERCOM_ASYNC_OPERATION_MODE_FRACTIONAL;
c8e: 3b0f subs r3, #15
c90: 9307 str r3, [sp, #28]
ctrla = (uint32_t)config->data_order |
c92: 6833 ldr r3, [r6, #0]
c94: 9305 str r3, [sp, #20]
(uint32_t)config->mux_setting |
c96: 68f3 ldr r3, [r6, #12]
c98: 469b mov fp, r3
config->sample_adjustment |
c9a: 6973 ldr r3, [r6, #20]
c9c: 9303 str r3, [sp, #12]
(config->immediate_buffer_overflow_notification << SERCOM_USART_CTRLA_IBON_Pos) |
c9e: 7e33 ldrb r3, [r6, #24]
ca0: 9304 str r3, [sp, #16]
(config->clock_polarity_inverted << SERCOM_USART_CTRLA_CPOL_Pos);
ca2: 2326 movs r3, #38 ; 0x26
ca4: 5cf3 ldrb r3, [r6, r3]
ca6: 469a mov sl, r3
transfer_mode = (uint32_t)config->transfer_mode;
ca8: 6873 ldr r3, [r6, #4]
caa: 4699 mov r9, r3
switch (transfer_mode)
cac: 2b00 cmp r3, #0
cae: d100 bne.n cb2 <usart_init+0xfe>
cb0: e09c b.n dec <usart_init+0x238>
cb2: 2380 movs r3, #128 ; 0x80
cb4: 055b lsls r3, r3, #21
cb6: 4599 cmp r9, r3
cb8: d100 bne.n cbc <usart_init+0x108>
cba: e080 b.n dbe <usart_init+0x20a>
if(config->encoding_format_enable) {
cbc: 7e73 ldrb r3, [r6, #25]
cbe: 2b00 cmp r3, #0
cc0: d002 beq.n cc8 <usart_init+0x114>
usart_hw->RXPL.reg = config->receive_pulse_length;
cc2: 7eb3 ldrb r3, [r6, #26]
cc4: 4642 mov r2, r8
cc6: 7393 strb r3, [r2, #14]
usart_hw->BAUD.reg = baud;
cc8: 230e movs r3, #14
cca: aa06 add r2, sp, #24
ccc: 4694 mov ip, r2
cce: 4463 add r3, ip
cd0: 881b ldrh r3, [r3, #0]
cd2: 4642 mov r2, r8
cd4: 8193 strh r3, [r2, #12]
ctrla |= transfer_mode;
cd6: 9b05 ldr r3, [sp, #20]
cd8: 465a mov r2, fp
cda: 4313 orrs r3, r2
cdc: 9a03 ldr r2, [sp, #12]
cde: 4313 orrs r3, r2
ce0: 464a mov r2, r9
ce2: 4313 orrs r3, r2
ce4: 9f02 ldr r7, [sp, #8]
ce6: 431f orrs r7, r3
(config->immediate_buffer_overflow_notification << SERCOM_USART_CTRLA_IBON_Pos) |
ce8: 9b04 ldr r3, [sp, #16]
cea: 021b lsls r3, r3, #8
ctrla |= transfer_mode;
cec: 431f orrs r7, r3
(config->clock_polarity_inverted << SERCOM_USART_CTRLA_CPOL_Pos);
cee: 4653 mov r3, sl
cf0: 075b lsls r3, r3, #29
ctrla |= transfer_mode;
cf2: 431f orrs r7, r3
if (config->use_external_clock == false) {
cf4: 2327 movs r3, #39 ; 0x27
cf6: 5cf3 ldrb r3, [r6, r3]
cf8: 2b00 cmp r3, #0
cfa: d101 bne.n d00 <usart_init+0x14c>
ctrla |= SERCOM_USART_CTRLA_MODE(0x1);
cfc: 3304 adds r3, #4
cfe: 431f orrs r7, r3
(config->encoding_format_enable << SERCOM_USART_CTRLB_ENC_Pos) |
d00: 7e73 ldrb r3, [r6, #25]
d02: 029b lsls r3, r3, #10
(config->start_frame_detection_enable << SERCOM_USART_CTRLB_SFDE_Pos) |
d04: 7f32 ldrb r2, [r6, #28]
d06: 0252 lsls r2, r2, #9
(config->encoding_format_enable << SERCOM_USART_CTRLB_ENC_Pos) |
d08: 4313 orrs r3, r2
(config->collision_detection_enable << SERCOM_USART_CTRLB_COLDEN_Pos) |
d0a: 7f72 ldrb r2, [r6, #29]
d0c: 0212 lsls r2, r2, #8
(config->start_frame_detection_enable << SERCOM_USART_CTRLB_SFDE_Pos) |
d0e: 4313 orrs r3, r2
(config->receiver_enable << SERCOM_USART_CTRLB_RXEN_Pos) |
d10: 2224 movs r2, #36 ; 0x24
d12: 5cb2 ldrb r2, [r6, r2]
d14: 0452 lsls r2, r2, #17
(config->collision_detection_enable << SERCOM_USART_CTRLB_COLDEN_Pos) |
d16: 4313 orrs r3, r2
(config->transmitter_enable << SERCOM_USART_CTRLB_TXEN_Pos);
d18: 2225 movs r2, #37 ; 0x25
d1a: 5cb2 ldrb r2, [r6, r2]
d1c: 0412 lsls r2, r2, #16
(config->receiver_enable << SERCOM_USART_CTRLB_RXEN_Pos) |
d1e: 4313 orrs r3, r2
ctrlb |= (uint32_t)config->character_size;
d20: 7ab1 ldrb r1, [r6, #10]
d22: 7af2 ldrb r2, [r6, #11]
d24: 4311 orrs r1, r2
d26: 4319 orrs r1, r3
if (config->parity != USART_PARITY_NONE) {
d28: 8933 ldrh r3, [r6, #8]
d2a: 2bff cmp r3, #255 ; 0xff
d2c: d100 bne.n d30 <usart_init+0x17c>
d2e: e081 b.n e34 <usart_init+0x280>
ctrla |= SERCOM_USART_CTRLA_FORM(1);
d30: 2280 movs r2, #128 ; 0x80
d32: 0452 lsls r2, r2, #17
d34: 4317 orrs r7, r2
ctrlb |= config->parity;
d36: 4319 orrs r1, r3
if (config->run_in_standby || system_is_debugger_present()) {
d38: 232c movs r3, #44 ; 0x2c
d3a: 5cf3 ldrb r3, [r6, r3]
d3c: 2b00 cmp r3, #0
d3e: d103 bne.n d48 <usart_init+0x194>
d40: 4b62 ldr r3, [pc, #392] ; (ecc <usart_init+0x318>)
d42: 789b ldrb r3, [r3, #2]
d44: 079b lsls r3, r3, #30
d46: d501 bpl.n d4c <usart_init+0x198>
ctrla |= SERCOM_USART_CTRLA_RUNSTDBY;
d48: 2380 movs r3, #128 ; 0x80
d4a: 431f orrs r7, r3
SercomUsart *const usart_hw = &(module->hw->USART);
d4c: 682a ldr r2, [r5, #0]
return (usart_hw->SYNCBUSY.reg);
d4e: 69d3 ldr r3, [r2, #28]
while (usart_is_syncing(module)) {
d50: 2b00 cmp r3, #0
d52: d1fc bne.n d4e <usart_init+0x19a>
usart_hw->CTRLB.reg = ctrlb;
d54: 4643 mov r3, r8
d56: 6059 str r1, [r3, #4]
SercomUsart *const usart_hw = &(module->hw->USART);
d58: 682a ldr r2, [r5, #0]
return (usart_hw->SYNCBUSY.reg);
d5a: 69d3 ldr r3, [r2, #28]
while (usart_is_syncing(module)) {
d5c: 2b00 cmp r3, #0
d5e: d1fc bne.n d5a <usart_init+0x1a6>
usart_hw->CTRLA.reg = ctrla;
d60: 4643 mov r3, r8
d62: 601f str r7, [r3, #0]
config->mux_position = SYSTEM_PINMUX_GPIO;
d64: ab0e add r3, sp, #56 ; 0x38
d66: 2280 movs r2, #128 ; 0x80
d68: 701a strb r2, [r3, #0]
config->direction = SYSTEM_PINMUX_PIN_DIR_INPUT;
d6a: 2200 movs r2, #0
d6c: 705a strb r2, [r3, #1]
config->powersave = false;
d6e: 70da strb r2, [r3, #3]
pin_conf.input_pull = SYSTEM_PINMUX_PIN_PULL_NONE;
d70: 709a strb r2, [r3, #2]
uint32_t pad_pinmuxes[] = {
d72: 6b33 ldr r3, [r6, #48] ; 0x30
d74: 930a str r3, [sp, #40] ; 0x28
d76: 6b73 ldr r3, [r6, #52] ; 0x34
d78: 930b str r3, [sp, #44] ; 0x2c
d7a: 6bb3 ldr r3, [r6, #56] ; 0x38
d7c: 930c str r3, [sp, #48] ; 0x30
d7e: 6bf3 ldr r3, [r6, #60] ; 0x3c
d80: 9302 str r3, [sp, #8]
d82: 930d str r3, [sp, #52] ; 0x34
d84: 2700 movs r7, #0
uint32_t current_pinmux = pad_pinmuxes[pad];
d86: ae0a add r6, sp, #40 ; 0x28
d88: e063 b.n e52 <usart_init+0x29e>
sample_num = SERCOM_ASYNC_SAMPLE_NUM_8;
d8a: 2308 movs r3, #8
d8c: 9306 str r3, [sp, #24]
mode = SERCOM_ASYNC_OPERATION_MODE_FRACTIONAL;
d8e: 3b07 subs r3, #7
d90: 9307 str r3, [sp, #28]
d92: e77e b.n c92 <usart_init+0xde>
ctrla = (uint32_t)config->data_order |
d94: 6833 ldr r3, [r6, #0]
d96: 9305 str r3, [sp, #20]
(uint32_t)config->mux_setting |
d98: 68f3 ldr r3, [r6, #12]
d9a: 469b mov fp, r3
config->sample_adjustment |
d9c: 6973 ldr r3, [r6, #20]
d9e: 9303 str r3, [sp, #12]
(config->immediate_buffer_overflow_notification << SERCOM_USART_CTRLA_IBON_Pos) |
da0: 7e33 ldrb r3, [r6, #24]
da2: 9304 str r3, [sp, #16]
(config->clock_polarity_inverted << SERCOM_USART_CTRLA_CPOL_Pos);
da4: 2326 movs r3, #38 ; 0x26
da6: 5cf3 ldrb r3, [r6, r3]
da8: 469a mov sl, r3
transfer_mode = (uint32_t)config->transfer_mode;
daa: 6873 ldr r3, [r6, #4]
dac: 4699 mov r9, r3
switch (transfer_mode)
dae: 2b00 cmp r3, #0
db0: d018 beq.n de4 <usart_init+0x230>
db2: 2380 movs r3, #128 ; 0x80
db4: 055b lsls r3, r3, #21
db6: 4599 cmp r9, r3
db8: d001 beq.n dbe <usart_init+0x20a>
enum status_code status_code = STATUS_OK;
dba: 2000 movs r0, #0
dbc: e025 b.n e0a <usart_init+0x256>
if (!config->use_external_clock) {
dbe: 2327 movs r3, #39 ; 0x27
dc0: 5cf3 ldrb r3, [r6, r3]
dc2: 2b00 cmp r3, #0
dc4: d000 beq.n dc8 <usart_init+0x214>
dc6: e779 b.n cbc <usart_init+0x108>
status_code = _sercom_get_sync_baud_val(config->baudrate,
dc8: 6a33 ldr r3, [r6, #32]
dca: 001f movs r7, r3
dcc: b2c0 uxtb r0, r0
dce: 4b40 ldr r3, [pc, #256] ; (ed0 <usart_init+0x31c>)
dd0: 4798 blx r3
dd2: 0001 movs r1, r0
dd4: 220e movs r2, #14
dd6: ab06 add r3, sp, #24
dd8: 469c mov ip, r3
dda: 4462 add r2, ip
ddc: 0038 movs r0, r7
dde: 4b3d ldr r3, [pc, #244] ; (ed4 <usart_init+0x320>)
de0: 4798 blx r3
de2: e012 b.n e0a <usart_init+0x256>
sample_num = SERCOM_ASYNC_SAMPLE_NUM_8;
de4: 2308 movs r3, #8
de6: 9306 str r3, [sp, #24]
mode = SERCOM_ASYNC_OPERATION_MODE_ARITHMETIC;
de8: 2300 movs r3, #0
dea: 9307 str r3, [sp, #28]
if (config->use_external_clock) {
dec: 2327 movs r3, #39 ; 0x27
dee: 5cf3 ldrb r3, [r6, r3]
df0: 2b00 cmp r3, #0
df2: d00e beq.n e12 <usart_init+0x25e>
status_code =
df4: 9b06 ldr r3, [sp, #24]
df6: 9300 str r3, [sp, #0]
df8: 9b07 ldr r3, [sp, #28]
dfa: 220e movs r2, #14
dfc: a906 add r1, sp, #24
dfe: 468c mov ip, r1
e00: 4462 add r2, ip
e02: 6ab1 ldr r1, [r6, #40] ; 0x28
e04: 6a30 ldr r0, [r6, #32]
e06: 4f34 ldr r7, [pc, #208] ; (ed8 <usart_init+0x324>)
e08: 47b8 blx r7
if (status_code != STATUS_OK) {
e0a: 2800 cmp r0, #0
e0c: d000 beq.n e10 <usart_init+0x25c>
e0e: e6e4 b.n bda <usart_init+0x26>
e10: e754 b.n cbc <usart_init+0x108>
_sercom_get_async_baud_val(config->baudrate,
e12: 6a33 ldr r3, [r6, #32]
e14: 001f movs r7, r3
e16: b2c0 uxtb r0, r0
e18: 4b2d ldr r3, [pc, #180] ; (ed0 <usart_init+0x31c>)
e1a: 4798 blx r3
e1c: 0001 movs r1, r0
status_code =
e1e: 9b06 ldr r3, [sp, #24]
e20: 9300 str r3, [sp, #0]
e22: 9b07 ldr r3, [sp, #28]
e24: 220e movs r2, #14
e26: a806 add r0, sp, #24
e28: 4684 mov ip, r0
e2a: 4462 add r2, ip
e2c: 0038 movs r0, r7
e2e: 4f2a ldr r7, [pc, #168] ; (ed8 <usart_init+0x324>)
e30: 47b8 blx r7
e32: e7ea b.n e0a <usart_init+0x256>
if(config->lin_slave_enable) {
e34: 7ef3 ldrb r3, [r6, #27]
e36: 2b00 cmp r3, #0
e38: d100 bne.n e3c <usart_init+0x288>
e3a: e77d b.n d38 <usart_init+0x184>
ctrla |= SERCOM_USART_CTRLA_FORM(0x4);
e3c: 2380 movs r3, #128 ; 0x80
e3e: 04db lsls r3, r3, #19
e40: 431f orrs r7, r3
e42: e779 b.n d38 <usart_init+0x184>
current_pinmux = _sercom_get_default_pad(hw, pad);
e44: 0020 movs r0, r4
e46: 4b25 ldr r3, [pc, #148] ; (edc <usart_init+0x328>)
e48: 4798 blx r3
e4a: e007 b.n e5c <usart_init+0x2a8>
e4c: 3701 adds r7, #1
for (uint8_t pad = 0; pad < 4; pad++) {
e4e: 2f04 cmp r7, #4
e50: d00d beq.n e6e <usart_init+0x2ba>
e52: b2f9 uxtb r1, r7
uint32_t current_pinmux = pad_pinmuxes[pad];
e54: 00bb lsls r3, r7, #2
e56: 5998 ldr r0, [r3, r6]
if (current_pinmux == PINMUX_DEFAULT) {
e58: 2800 cmp r0, #0
e5a: d0f3 beq.n e44 <usart_init+0x290>
if (current_pinmux != PINMUX_UNUSED) {
e5c: 1c43 adds r3, r0, #1
e5e: d0f5 beq.n e4c <usart_init+0x298>
pin_conf.mux_position = current_pinmux & 0xFFFF;
e60: a90e add r1, sp, #56 ; 0x38
e62: 7008 strb r0, [r1, #0]
system_pinmux_pin_set_config(current_pinmux >> 16, &pin_conf);
e64: 0c00 lsrs r0, r0, #16
e66: b2c0 uxtb r0, r0
e68: 4b1d ldr r3, [pc, #116] ; (ee0 <usart_init+0x32c>)
e6a: 4798 blx r3
e6c: e7ee b.n e4c <usart_init+0x298>
module->callback[i] = NULL;
e6e: 2300 movs r3, #0
e70: 60eb str r3, [r5, #12]
e72: 612b str r3, [r5, #16]
e74: 616b str r3, [r5, #20]
e76: 61ab str r3, [r5, #24]
e78: 61eb str r3, [r5, #28]
e7a: 622b str r3, [r5, #32]
module->tx_buffer_ptr = NULL;
e7c: 62ab str r3, [r5, #40] ; 0x28
module->rx_buffer_ptr = NULL;
e7e: 626b str r3, [r5, #36] ; 0x24
module->remaining_tx_buffer_length = 0x0000;
e80: 2200 movs r2, #0
e82: 85eb strh r3, [r5, #46] ; 0x2e
module->remaining_rx_buffer_length = 0x0000;
e84: 85ab strh r3, [r5, #44] ; 0x2c
module->callback_reg_mask = 0x00;
e86: 3330 adds r3, #48 ; 0x30
e88: 54ea strb r2, [r5, r3]
module->callback_enable_mask = 0x00;
e8a: 3301 adds r3, #1
e8c: 54ea strb r2, [r5, r3]
module->rx_status = STATUS_OK;
e8e: 3301 adds r3, #1
e90: 54ea strb r2, [r5, r3]
module->tx_status = STATUS_OK;
e92: 3301 adds r3, #1
e94: 54ea strb r2, [r5, r3]
uint8_t instance_index = _sercom_get_sercom_inst_index(module->hw);
e96: 6828 ldr r0, [r5, #0]
e98: 4b07 ldr r3, [pc, #28] ; (eb8 <usart_init+0x304>)
e9a: 4798 blx r3
e9c: 0004 movs r4, r0
_sercom_set_handler(instance_index, _usart_interrupt_handler);
e9e: 4911 ldr r1, [pc, #68] ; (ee4 <usart_init+0x330>)
ea0: 4b11 ldr r3, [pc, #68] ; (ee8 <usart_init+0x334>)
ea2: 4798 blx r3
_sercom_instances[instance_index] = module;
ea4: 00a4 lsls r4, r4, #2
ea6: 4b11 ldr r3, [pc, #68] ; (eec <usart_init+0x338>)
ea8: 50e5 str r5, [r4, r3]
return status_code;
eaa: 2000 movs r0, #0
eac: e695 b.n bda <usart_init+0x26>
enum sercom_asynchronous_sample_num sample_num = SERCOM_ASYNC_SAMPLE_NUM_16;
eae: 2310 movs r3, #16
eb0: 9306 str r3, [sp, #24]
enum sercom_asynchronous_operation_mode mode = SERCOM_ASYNC_OPERATION_MODE_ARITHMETIC;
eb2: 2300 movs r3, #0
eb4: 9307 str r3, [sp, #28]
eb6: e6ec b.n c92 <usart_init+0xde>
eb8: 00001451 .word 0x00001451
ebc: 40000400 .word 0x40000400
ec0: 00001a6d .word 0x00001a6d
ec4: 000019e1 .word 0x000019e1
ec8: 0000128d .word 0x0000128d
ecc: 41002000 .word 0x41002000
ed0: 00001a89 .word 0x00001a89
ed4: 000011cf .word 0x000011cf
ed8: 000011f9 .word 0x000011f9
edc: 000012d9 .word 0x000012d9
ee0: 00001b65 .word 0x00001b65
ee4: 00000f81 .word 0x00000f81
ee8: 0000148d .word 0x0000148d
eec: 20000244 .word 0x20000244
00000ef0 <usart_write_wait>:
/* Get a pointer to the hardware module instance */
SercomUsart *const usart_hw = &(module->hw->USART);
/* Check that the transmitter is enabled */
if (!(module->transmitter_enabled)) {
ef0: 79c2 ldrb r2, [r0, #7]
return STATUS_ERR_DENIED;
ef2: 231c movs r3, #28
if (!(module->transmitter_enabled)) {
ef4: 2a00 cmp r2, #0
ef6: d101 bne.n efc <usart_write_wait+0xc>
while (!(usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_TXC)) {
/* Wait until data is sent */
}
return STATUS_OK;
}
ef8: 0018 movs r0, r3
efa: 4770 bx lr
if (module->remaining_tx_buffer_length > 0) {
efc: 8dc2 ldrh r2, [r0, #46] ; 0x2e
efe: b292 uxth r2, r2
return STATUS_BUSY;
f00: 3b17 subs r3, #23
if (module->remaining_tx_buffer_length > 0) {
f02: 2a00 cmp r2, #0
f04: d1f8 bne.n ef8 <usart_write_wait+0x8>
SercomUsart *const usart_hw = &(module->hw->USART);
f06: 6802 ldr r2, [r0, #0]
usart_hw->DATA.reg = tx_data;
f08: 8511 strh r1, [r2, #40] ; 0x28
while (!(usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_TXC)) {
f0a: 2102 movs r1, #2
f0c: 7e13 ldrb r3, [r2, #24]
f0e: 420b tst r3, r1
f10: d0fc beq.n f0c <usart_write_wait+0x1c>
return STATUS_OK;
f12: 2300 movs r3, #0
f14: e7f0 b.n ef8 <usart_write_wait+0x8>
00000f16 <usart_read_wait>:
/* Get a pointer to the hardware module instance */
SercomUsart *const usart_hw = &(module->hw->USART);
/* Check that the receiver is enabled */
if (!(module->receiver_enabled)) {
f16: 7982 ldrb r2, [r0, #6]
return STATUS_ERR_DENIED;
f18: 231c movs r3, #28
if (!(module->receiver_enabled)) {
f1a: 2a00 cmp r2, #0
f1c: d101 bne.n f22 <usart_read_wait+0xc>
/* Read data from USART module */
*rx_data = usart_hw->DATA.reg;
return STATUS_OK;
}
f1e: 0018 movs r0, r3
f20: 4770 bx lr
if (module->remaining_rx_buffer_length > 0) {
f22: 8d82 ldrh r2, [r0, #44] ; 0x2c
f24: b292 uxth r2, r2
return STATUS_BUSY;
f26: 3b17 subs r3, #23
if (module->remaining_rx_buffer_length > 0) {
f28: 2a00 cmp r2, #0
f2a: d1f8 bne.n f1e <usart_read_wait+0x8>
SercomUsart *const usart_hw = &(module->hw->USART);
f2c: 6802 ldr r2, [r0, #0]
if (!(usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_RXC)) {
f2e: 7e10 ldrb r0, [r2, #24]
f30: 0740 lsls r0, r0, #29
f32: d5f4 bpl.n f1e <usart_read_wait+0x8>
error_code = (uint8_t)(usart_hw->STATUS.reg & SERCOM_USART_STATUS_MASK);
f34: 8b53 ldrh r3, [r2, #26]
f36: b2db uxtb r3, r3
if (error_code) {
f38: 0698 lsls r0, r3, #26
f3a: d01d beq.n f78 <usart_read_wait+0x62>
if (error_code & SERCOM_USART_STATUS_FERR) {
f3c: 0798 lsls r0, r3, #30
f3e: d503 bpl.n f48 <usart_read_wait+0x32>
usart_hw->STATUS.reg = SERCOM_USART_STATUS_FERR;
f40: 2302 movs r3, #2
f42: 8353 strh r3, [r2, #26]
return STATUS_ERR_BAD_FORMAT;
f44: 3318 adds r3, #24
f46: e7ea b.n f1e <usart_read_wait+0x8>
} else if (error_code & SERCOM_USART_STATUS_BUFOVF) {
f48: 0758 lsls r0, r3, #29
f4a: d503 bpl.n f54 <usart_read_wait+0x3e>
usart_hw->STATUS.reg = SERCOM_USART_STATUS_BUFOVF;
f4c: 2304 movs r3, #4
f4e: 8353 strh r3, [r2, #26]
return STATUS_ERR_OVERFLOW;
f50: 331a adds r3, #26
f52: e7e4 b.n f1e <usart_read_wait+0x8>
} else if (error_code & SERCOM_USART_STATUS_PERR) {
f54: 07d8 lsls r0, r3, #31
f56: d503 bpl.n f60 <usart_read_wait+0x4a>
usart_hw->STATUS.reg = SERCOM_USART_STATUS_PERR;
f58: 2301 movs r3, #1
f5a: 8353 strh r3, [r2, #26]
return STATUS_ERR_BAD_DATA;
f5c: 3312 adds r3, #18
f5e: e7de b.n f1e <usart_read_wait+0x8>
else if (error_code & SERCOM_USART_STATUS_ISF) {
f60: 06d8 lsls r0, r3, #27
f62: d503 bpl.n f6c <usart_read_wait+0x56>
usart_hw->STATUS.reg = SERCOM_USART_STATUS_ISF;
f64: 2310 movs r3, #16
f66: 8353 strh r3, [r2, #26]
return STATUS_ERR_PROTOCOL;
f68: 3332 adds r3, #50 ; 0x32
f6a: e7d8 b.n f1e <usart_read_wait+0x8>
else if (error_code & SERCOM_USART_STATUS_COLL) {
f6c: 069b lsls r3, r3, #26
f6e: d503 bpl.n f78 <usart_read_wait+0x62>
usart_hw->STATUS.reg = SERCOM_USART_STATUS_COLL;
f70: 2320 movs r3, #32
f72: 8353 strh r3, [r2, #26]
return STATUS_ERR_PACKET_COLLISION;
f74: 3321 adds r3, #33 ; 0x21
f76: e7d2 b.n f1e <usart_read_wait+0x8>
*rx_data = usart_hw->DATA.reg;
f78: 8d13 ldrh r3, [r2, #40] ; 0x28
f7a: 800b strh r3, [r1, #0]
return STATUS_OK;
f7c: 2300 movs r3, #0
f7e: e7ce b.n f1e <usart_read_wait+0x8>
00000f80 <_usart_interrupt_handler>:
* \param[in] instance ID of the SERCOM instance calling the interrupt
* handler.
*/
void _usart_interrupt_handler(
uint8_t instance)
{
f80: b5f8 push {r3, r4, r5, r6, r7, lr}
uint16_t callback_status;
uint8_t error_code;
/* Get device instance from the look-up table */
struct usart_module *module
f82: 0080 lsls r0, r0, #2
f84: 4b62 ldr r3, [pc, #392] ; (1110 <_usart_interrupt_handler+0x190>)
f86: 58c5 ldr r5, [r0, r3]
= (struct usart_module *)_sercom_instances[instance];
/* Pointer to the hardware module instance */
SercomUsart *const usart_hw
= &(module->hw->USART);
f88: 682c ldr r4, [r5, #0]
return (usart_hw->SYNCBUSY.reg);
f8a: 69e3 ldr r3, [r4, #28]
while (usart_is_syncing(module)) {
f8c: 2b00 cmp r3, #0
f8e: d1fc bne.n f8a <_usart_interrupt_handler+0xa>
/* Wait for the synchronization to complete */
_usart_wait_for_sync(module);
/* Read and mask interrupt flag register */
interrupt_status = usart_hw->INTFLAG.reg;
f90: 7e23 ldrb r3, [r4, #24]
interrupt_status &= usart_hw->INTENSET.reg;
f92: 7da6 ldrb r6, [r4, #22]
f94: 401e ands r6, r3
callback_status = module->callback_reg_mask &
f96: 2330 movs r3, #48 ; 0x30
f98: 5ceb ldrb r3, [r5, r3]
f9a: 2231 movs r2, #49 ; 0x31
f9c: 5caf ldrb r7, [r5, r2]
f9e: 401f ands r7, r3
module->callback_enable_mask;
/* Check if a DATA READY interrupt has occurred,
* and if there is more to transfer */
if (interrupt_status & SERCOM_USART_INTFLAG_DRE) {
fa0: 07f3 lsls r3, r6, #31
fa2: d522 bpl.n fea <_usart_interrupt_handler+0x6a>
if (module->remaining_tx_buffer_length) {
fa4: 8deb ldrh r3, [r5, #46] ; 0x2e
fa6: b29b uxth r3, r3
fa8: 2b00 cmp r3, #0
faa: d01c beq.n fe6 <_usart_interrupt_handler+0x66>
/* Write value will be at least 8-bits long */
uint16_t data_to_send = *(module->tx_buffer_ptr);
fac: 6aaa ldr r2, [r5, #40] ; 0x28
fae: 7813 ldrb r3, [r2, #0]
fb0: b2db uxtb r3, r3
/* Increment 8-bit pointer */
(module->tx_buffer_ptr)++;
fb2: 1c51 adds r1, r2, #1
fb4: 62a9 str r1, [r5, #40] ; 0x28
if (module->character_size == USART_CHARACTER_SIZE_9BIT) {
fb6: 7969 ldrb r1, [r5, #5]
fb8: 2901 cmp r1, #1
fba: d00e beq.n fda <_usart_interrupt_handler+0x5a>
uint16_t data_to_send = *(module->tx_buffer_ptr);
fbc: b29b uxth r3, r3
data_to_send |= (*(module->tx_buffer_ptr) << 8);
/* Increment 8-bit pointer */
(module->tx_buffer_ptr)++;
}
/* Write the data to send */
usart_hw->DATA.reg = (data_to_send & SERCOM_USART_DATA_MASK);
fbe: 05db lsls r3, r3, #23
fc0: 0ddb lsrs r3, r3, #23
fc2: 8523 strh r3, [r4, #40] ; 0x28
if (--(module->remaining_tx_buffer_length) == 0) {
fc4: 8deb ldrh r3, [r5, #46] ; 0x2e
fc6: 3b01 subs r3, #1
fc8: b29b uxth r3, r3
fca: 85eb strh r3, [r5, #46] ; 0x2e
fcc: 2b00 cmp r3, #0
fce: d10c bne.n fea <_usart_interrupt_handler+0x6a>
/* Disable the Data Register Empty Interrupt */
usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_DRE;
fd0: 3301 adds r3, #1
fd2: 7523 strb r3, [r4, #20]
/* Enable Transmission Complete interrupt */
usart_hw->INTENSET.reg = SERCOM_USART_INTFLAG_TXC;
fd4: 3301 adds r3, #1
fd6: 75a3 strb r3, [r4, #22]
fd8: e007 b.n fea <_usart_interrupt_handler+0x6a>
data_to_send |= (*(module->tx_buffer_ptr) << 8);
fda: 7851 ldrb r1, [r2, #1]
fdc: 0209 lsls r1, r1, #8
fde: 430b orrs r3, r1
(module->tx_buffer_ptr)++;
fe0: 3202 adds r2, #2
fe2: 62aa str r2, [r5, #40] ; 0x28
fe4: e7eb b.n fbe <_usart_interrupt_handler+0x3e>
}
} else {
usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_DRE;
fe6: 2301 movs r3, #1
fe8: 7523 strb r3, [r4, #20]
}
}
/* Check if the Transmission Complete interrupt has occurred and
* that the transmit buffer is empty */
if (interrupt_status & SERCOM_USART_INTFLAG_TXC) {
fea: 07b3 lsls r3, r6, #30
fec: d506 bpl.n ffc <_usart_interrupt_handler+0x7c>
/* Disable TX Complete Interrupt, and set STATUS_OK */
usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_TXC;
fee: 2302 movs r3, #2
ff0: 7523 strb r3, [r4, #20]
module->tx_status = STATUS_OK;
ff2: 2200 movs r2, #0
ff4: 3331 adds r3, #49 ; 0x31
ff6: 54ea strb r2, [r5, r3]
/* Run callback if registered and enabled */
if (callback_status & (1 << USART_CALLBACK_BUFFER_TRANSMITTED)) {
ff8: 07fb lsls r3, r7, #31
ffa: d41a bmi.n 1032 <_usart_interrupt_handler+0xb2>
}
}
/* Check if the Receive Complete interrupt has occurred, and that
* there's more data to receive */
if (interrupt_status & SERCOM_USART_INTFLAG_RXC) {
ffc: 0773 lsls r3, r6, #29
ffe: d565 bpl.n 10cc <_usart_interrupt_handler+0x14c>
if (module->remaining_rx_buffer_length) {
1000: 8dab ldrh r3, [r5, #44] ; 0x2c
1002: b29b uxth r3, r3
1004: 2b00 cmp r3, #0
1006: d05f beq.n 10c8 <_usart_interrupt_handler+0x148>
/* Read out the status code and mask away all but the 4 LSBs*/
error_code = (uint8_t)(usart_hw->STATUS.reg & SERCOM_USART_STATUS_MASK);
1008: 8b63 ldrh r3, [r4, #26]
100a: b2db uxtb r3, r3
#if !SAMD20
/* CTS status should not be considered as an error */
if(error_code & SERCOM_USART_STATUS_CTS) {
100c: 071a lsls r2, r3, #28
100e: d414 bmi.n 103a <_usart_interrupt_handler+0xba>
error_code = (uint8_t)(usart_hw->STATUS.reg & SERCOM_USART_STATUS_MASK);
1010: 223f movs r2, #63 ; 0x3f
1012: 4013 ands r3, r2
if(error_code & SERCOM_USART_STATUS_TXE) {
error_code &= ~SERCOM_USART_STATUS_TXE;
}
#endif
/* Check if an error has occurred during the receiving */
if (error_code) {
1014: 2b00 cmp r3, #0
1016: d034 beq.n 1082 <_usart_interrupt_handler+0x102>
/* Check which error occurred */
if (error_code & SERCOM_USART_STATUS_FERR) {
1018: 079a lsls r2, r3, #30
101a: d511 bpl.n 1040 <_usart_interrupt_handler+0xc0>
/* Store the error code and clear flag by writing 1 to it */
module->rx_status = STATUS_ERR_BAD_FORMAT;
101c: 221a movs r2, #26
101e: 2332 movs r3, #50 ; 0x32
1020: 54ea strb r2, [r5, r3]
usart_hw->STATUS.reg = SERCOM_USART_STATUS_FERR;
1022: 3b30 subs r3, #48 ; 0x30
1024: 8363 strh r3, [r4, #26]
usart_hw->STATUS.reg = SERCOM_USART_STATUS_COLL;
}
#endif
/* Run callback if registered and enabled */
if (callback_status
1026: 077b lsls r3, r7, #29
1028: d550 bpl.n 10cc <_usart_interrupt_handler+0x14c>
& (1 << USART_CALLBACK_ERROR)) {
(*(module->callback[USART_CALLBACK_ERROR]))(module);
102a: 0028 movs r0, r5
102c: 696b ldr r3, [r5, #20]
102e: 4798 blx r3
1030: e04c b.n 10cc <_usart_interrupt_handler+0x14c>
(*(module->callback[USART_CALLBACK_BUFFER_TRANSMITTED]))(module);
1032: 0028 movs r0, r5
1034: 68eb ldr r3, [r5, #12]
1036: 4798 blx r3
1038: e7e0 b.n ffc <_usart_interrupt_handler+0x7c>
error_code &= ~SERCOM_USART_STATUS_CTS;
103a: 2237 movs r2, #55 ; 0x37
103c: 4013 ands r3, r2
103e: e7e9 b.n 1014 <_usart_interrupt_handler+0x94>
} else if (error_code & SERCOM_USART_STATUS_BUFOVF) {
1040: 075a lsls r2, r3, #29
1042: d505 bpl.n 1050 <_usart_interrupt_handler+0xd0>
module->rx_status = STATUS_ERR_OVERFLOW;
1044: 221e movs r2, #30
1046: 2332 movs r3, #50 ; 0x32
1048: 54ea strb r2, [r5, r3]
usart_hw->STATUS.reg = SERCOM_USART_STATUS_BUFOVF;
104a: 3b2e subs r3, #46 ; 0x2e
104c: 8363 strh r3, [r4, #26]
104e: e7ea b.n 1026 <_usart_interrupt_handler+0xa6>
} else if (error_code & SERCOM_USART_STATUS_PERR) {
1050: 07da lsls r2, r3, #31
1052: d505 bpl.n 1060 <_usart_interrupt_handler+0xe0>
module->rx_status = STATUS_ERR_BAD_DATA;
1054: 2213 movs r2, #19
1056: 2332 movs r3, #50 ; 0x32
1058: 54ea strb r2, [r5, r3]
usart_hw->STATUS.reg = SERCOM_USART_STATUS_PERR;
105a: 3b31 subs r3, #49 ; 0x31
105c: 8363 strh r3, [r4, #26]
105e: e7e2 b.n 1026 <_usart_interrupt_handler+0xa6>
else if (error_code & SERCOM_USART_STATUS_ISF) {
1060: 06da lsls r2, r3, #27
1062: d505 bpl.n 1070 <_usart_interrupt_handler+0xf0>
module->rx_status = STATUS_ERR_PROTOCOL;
1064: 2242 movs r2, #66 ; 0x42
1066: 2332 movs r3, #50 ; 0x32
1068: 54ea strb r2, [r5, r3]
usart_hw->STATUS.reg = SERCOM_USART_STATUS_ISF;
106a: 3b22 subs r3, #34 ; 0x22
106c: 8363 strh r3, [r4, #26]
106e: e7da b.n 1026 <_usart_interrupt_handler+0xa6>
else if (error_code & SERCOM_USART_STATUS_COLL) {
1070: 2220 movs r2, #32
1072: 421a tst r2, r3
1074: d0d7 beq.n 1026 <_usart_interrupt_handler+0xa6>
module->rx_status = STATUS_ERR_PACKET_COLLISION;
1076: 3221 adds r2, #33 ; 0x21
1078: 2332 movs r3, #50 ; 0x32
107a: 54ea strb r2, [r5, r3]
usart_hw->STATUS.reg = SERCOM_USART_STATUS_COLL;
107c: 3b12 subs r3, #18
107e: 8363 strh r3, [r4, #26]
1080: e7d1 b.n 1026 <_usart_interrupt_handler+0xa6>
} else {
/* Read current packet from DATA register,
* increment buffer pointer and decrement buffer length */
uint16_t received_data = (usart_hw->DATA.reg & SERCOM_USART_DATA_MASK);
1082: 8d23 ldrh r3, [r4, #40] ; 0x28
1084: 05db lsls r3, r3, #23
1086: 0ddb lsrs r3, r3, #23
/* Read value will be at least 8-bits long */
*(module->rx_buffer_ptr) = received_data;
1088: b2da uxtb r2, r3
108a: 6a69 ldr r1, [r5, #36] ; 0x24
108c: 700a strb r2, [r1, #0]
/* Increment 8-bit pointer */
module->rx_buffer_ptr += 1;
108e: 6a6a ldr r2, [r5, #36] ; 0x24
1090: 1c51 adds r1, r2, #1
1092: 6269 str r1, [r5, #36] ; 0x24
if (module->character_size == USART_CHARACTER_SIZE_9BIT) {
1094: 7969 ldrb r1, [r5, #5]
1096: 2901 cmp r1, #1
1098: d010 beq.n 10bc <_usart_interrupt_handler+0x13c>
/* Increment 8-bit pointer */
module->rx_buffer_ptr += 1;
}
/* Check if the last character have been received */
if(--(module->remaining_rx_buffer_length) == 0) {
109a: 8dab ldrh r3, [r5, #44] ; 0x2c
109c: 3b01 subs r3, #1
109e: b29b uxth r3, r3
10a0: 85ab strh r3, [r5, #44] ; 0x2c
10a2: 2b00 cmp r3, #0
10a4: d112 bne.n 10cc <_usart_interrupt_handler+0x14c>
/* Disable RX Complete Interrupt,
* and set STATUS_OK */
usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_RXC;
10a6: 3304 adds r3, #4
10a8: 7523 strb r3, [r4, #20]
module->rx_status = STATUS_OK;
10aa: 2200 movs r2, #0
10ac: 332e adds r3, #46 ; 0x2e
10ae: 54ea strb r2, [r5, r3]
/* Run callback if registered and enabled */
if (callback_status
10b0: 07bb lsls r3, r7, #30
10b2: d50b bpl.n 10cc <_usart_interrupt_handler+0x14c>
& (1 << USART_CALLBACK_BUFFER_RECEIVED)) {
(*(module->callback[USART_CALLBACK_BUFFER_RECEIVED]))(module);
10b4: 0028 movs r0, r5
10b6: 692b ldr r3, [r5, #16]
10b8: 4798 blx r3
10ba: e007 b.n 10cc <_usart_interrupt_handler+0x14c>
*(module->rx_buffer_ptr) = (received_data >> 8);
10bc: 0a1b lsrs r3, r3, #8
10be: 7053 strb r3, [r2, #1]
module->rx_buffer_ptr += 1;
10c0: 6a6b ldr r3, [r5, #36] ; 0x24
10c2: 3301 adds r3, #1
10c4: 626b str r3, [r5, #36] ; 0x24
10c6: e7e8 b.n 109a <_usart_interrupt_handler+0x11a>
}
}
}
} else {
/* This should not happen. Disable Receive Complete interrupt. */
usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_RXC;
10c8: 2304 movs r3, #4
10ca: 7523 strb r3, [r4, #20]
}
}
#ifdef FEATURE_USART_HARDWARE_FLOW_CONTROL
if (interrupt_status & SERCOM_USART_INTFLAG_CTSIC) {
10cc: 06f3 lsls r3, r6, #27
10ce: d504 bpl.n 10da <_usart_interrupt_handler+0x15a>
/* Disable interrupts */
usart_hw->INTENCLR.reg = SERCOM_USART_INTENCLR_CTSIC;
10d0: 2310 movs r3, #16
10d2: 7523 strb r3, [r4, #20]
/* Clear interrupt flag */
usart_hw->INTFLAG.reg = SERCOM_USART_INTFLAG_CTSIC;
10d4: 7623 strb r3, [r4, #24]
/* Run callback if registered and enabled */
if (callback_status & (1 << USART_CALLBACK_CTS_INPUT_CHANGE)) {
10d6: 06fb lsls r3, r7, #27
10d8: d40e bmi.n 10f8 <_usart_interrupt_handler+0x178>
}
}
#endif
#ifdef FEATURE_USART_LIN_SLAVE
if (interrupt_status & SERCOM_USART_INTFLAG_RXBRK) {
10da: 06b3 lsls r3, r6, #26
10dc: d504 bpl.n 10e8 <_usart_interrupt_handler+0x168>
/* Disable interrupts */
usart_hw->INTENCLR.reg = SERCOM_USART_INTENCLR_RXBRK;
10de: 2320 movs r3, #32
10e0: 7523 strb r3, [r4, #20]
/* Clear interrupt flag */
usart_hw->INTFLAG.reg = SERCOM_USART_INTFLAG_RXBRK;
10e2: 7623 strb r3, [r4, #24]
/* Run callback if registered and enabled */
if (callback_status & (1 << USART_CALLBACK_BREAK_RECEIVED)) {
10e4: 073b lsls r3, r7, #28
10e6: d40b bmi.n 1100 <_usart_interrupt_handler+0x180>
}
}
#endif
#ifdef FEATURE_USART_START_FRAME_DECTION
if (interrupt_status & SERCOM_USART_INTFLAG_RXS) {
10e8: 0733 lsls r3, r6, #28
10ea: d504 bpl.n 10f6 <_usart_interrupt_handler+0x176>
/* Disable interrupts */
usart_hw->INTENCLR.reg = SERCOM_USART_INTENCLR_RXS;
10ec: 2308 movs r3, #8
10ee: 7523 strb r3, [r4, #20]
/* Clear interrupt flag */
usart_hw->INTFLAG.reg = SERCOM_USART_INTFLAG_RXS;
10f0: 7623 strb r3, [r4, #24]
/* Run callback if registered and enabled */
if (callback_status & (1 << USART_CALLBACK_START_RECEIVED)) {
10f2: 06bb lsls r3, r7, #26
10f4: d408 bmi.n 1108 <_usart_interrupt_handler+0x188>
(*(module->callback[USART_CALLBACK_START_RECEIVED]))(module);
}
}
#endif
}
10f6: bdf8 pop {r3, r4, r5, r6, r7, pc}
(*(module->callback[USART_CALLBACK_CTS_INPUT_CHANGE]))(module);
10f8: 0028 movs r0, r5
10fa: 69eb ldr r3, [r5, #28]
10fc: 4798 blx r3
10fe: e7ec b.n 10da <_usart_interrupt_handler+0x15a>
(*(module->callback[USART_CALLBACK_BREAK_RECEIVED]))(module);
1100: 0028 movs r0, r5
1102: 69ab ldr r3, [r5, #24]
1104: 4798 blx r3
1106: e7ef b.n 10e8 <_usart_interrupt_handler+0x168>
(*(module->callback[USART_CALLBACK_START_RECEIVED]))(module);
1108: 6a2b ldr r3, [r5, #32]
110a: 0028 movs r0, r5
110c: 4798 blx r3
}
110e: e7f2 b.n 10f6 <_usart_interrupt_handler+0x176>
1110: 20000244 .word 0x20000244
00001114 <long_division>:
/**
* \internal Calculate 64 bit division, ref can be found in
* http://en.wikipedia.org/wiki/Division_algorithm#Long_division
*/
static uint64_t long_division(uint64_t n, uint64_t d)
{
1114: b5f0 push {r4, r5, r6, r7, lr}
1116: 46de mov lr, fp
1118: 4657 mov r7, sl
111a: 464e mov r6, r9
111c: 4645 mov r5, r8
111e: b5e0 push {r5, r6, r7, lr}
1120: b087 sub sp, #28
1122: 4680 mov r8, r0
1124: 9104 str r1, [sp, #16]
1126: 0016 movs r6, r2
1128: 001f movs r7, r3
int32_t i;
uint64_t q = 0, r = 0, bit_shift;
112a: 2200 movs r2, #0
112c: 2300 movs r3, #0
112e: 2100 movs r1, #0
1130: 468b mov fp, r1
for (i = 63; i >= 0; i--) {
1132: 243f movs r4, #63 ; 0x3f
bit_shift = (uint64_t)1 << i;
1134: 2001 movs r0, #1
1136: 0021 movs r1, r4
1138: 9600 str r6, [sp, #0]
113a: 9701 str r7, [sp, #4]
113c: 465c mov r4, fp
113e: 9403 str r4, [sp, #12]
1140: 4644 mov r4, r8
1142: 9405 str r4, [sp, #20]
1144: e013 b.n 116e <long_division+0x5a>
1146: 2420 movs r4, #32
1148: 1a64 subs r4, r4, r1
114a: 0005 movs r5, r0
114c: 40e5 lsrs r5, r4
114e: 46a8 mov r8, r5
1150: e014 b.n 117c <long_division+0x68>
if (n & bit_shift) {
r |= 0x01;
}
if (r >= d) {
r = r - d;
1152: 9c00 ldr r4, [sp, #0]
1154: 9d01 ldr r5, [sp, #4]
1156: 1b12 subs r2, r2, r4
1158: 41ab sbcs r3, r5
q |= bit_shift;
115a: 465c mov r4, fp
115c: 464d mov r5, r9
115e: 432c orrs r4, r5
1160: 46a3 mov fp, r4
1162: 9c03 ldr r4, [sp, #12]
1164: 4645 mov r5, r8
1166: 432c orrs r4, r5
1168: 9403 str r4, [sp, #12]
for (i = 63; i >= 0; i--) {
116a: 3901 subs r1, #1
116c: d325 bcc.n 11ba <long_division+0xa6>
bit_shift = (uint64_t)1 << i;
116e: 2420 movs r4, #32
1170: 4264 negs r4, r4
1172: 190c adds r4, r1, r4
1174: d4e7 bmi.n 1146 <long_division+0x32>
1176: 0005 movs r5, r0
1178: 40a5 lsls r5, r4
117a: 46a8 mov r8, r5
117c: 0004 movs r4, r0
117e: 408c lsls r4, r1
1180: 46a1 mov r9, r4
r = r << 1;
1182: 1892 adds r2, r2, r2
1184: 415b adcs r3, r3
1186: 0014 movs r4, r2
1188: 001d movs r5, r3
if (n & bit_shift) {
118a: 9e05 ldr r6, [sp, #20]
118c: 464f mov r7, r9
118e: 403e ands r6, r7
1190: 46b4 mov ip, r6
1192: 9e04 ldr r6, [sp, #16]
1194: 4647 mov r7, r8
1196: 403e ands r6, r7
1198: 46b2 mov sl, r6
119a: 4666 mov r6, ip
119c: 4657 mov r7, sl
119e: 433e orrs r6, r7
11a0: d003 beq.n 11aa <long_division+0x96>
r |= 0x01;
11a2: 0006 movs r6, r0
11a4: 4326 orrs r6, r4
11a6: 0032 movs r2, r6
11a8: 002b movs r3, r5
if (r >= d) {
11aa: 9c00 ldr r4, [sp, #0]
11ac: 9d01 ldr r5, [sp, #4]
11ae: 429d cmp r5, r3
11b0: d8db bhi.n 116a <long_division+0x56>
11b2: d1ce bne.n 1152 <long_division+0x3e>
11b4: 4294 cmp r4, r2
11b6: d8d8 bhi.n 116a <long_division+0x56>
11b8: e7cb b.n 1152 <long_division+0x3e>
11ba: 9b03 ldr r3, [sp, #12]
}
}
return q;
}
11bc: 4658 mov r0, fp
11be: 0019 movs r1, r3
11c0: b007 add sp, #28
11c2: bc3c pop {r2, r3, r4, r5}
11c4: 4690 mov r8, r2
11c6: 4699 mov r9, r3
11c8: 46a2 mov sl, r4
11ca: 46ab mov fp, r5
11cc: bdf0 pop {r4, r5, r6, r7, pc}
000011ce <_sercom_get_sync_baud_val>:
*/
enum status_code _sercom_get_sync_baud_val(
const uint32_t baudrate,
const uint32_t external_clock,
uint16_t *const baudvalue)
{
11ce: b510 push {r4, lr}
uint16_t baud_calculated = 0;
uint32_t clock_value = external_clock;
/* Check if baudrate is outside of valid range */
if (baudrate > (external_clock / 2)) {
11d0: 0849 lsrs r1, r1, #1
/* Return with error code */
return STATUS_ERR_BAUDRATE_UNAVAILABLE;
11d2: 2340 movs r3, #64 ; 0x40
11d4: 2400 movs r4, #0
if (baudrate > (external_clock / 2)) {
11d6: 4281 cmp r1, r0
11d8: d202 bcs.n 11e0 <_sercom_get_sync_baud_val+0x12>
return STATUS_ERR_BAUDRATE_UNAVAILABLE;
} else {
*baudvalue = baud_calculated;
return STATUS_OK;
}
}
11da: 0018 movs r0, r3
11dc: bd10 pop {r4, pc}
baud_calculated++;
11de: 001c movs r4, r3
clock_value = clock_value - baudrate;
11e0: 1a09 subs r1, r1, r0
baud_calculated++;
11e2: 1c63 adds r3, r4, #1
11e4: b29b uxth r3, r3
while (clock_value >= baudrate) {
11e6: 4288 cmp r0, r1
11e8: d9f9 bls.n 11de <_sercom_get_sync_baud_val+0x10>
return STATUS_ERR_BAUDRATE_UNAVAILABLE;
11ea: 2340 movs r3, #64 ; 0x40
if (baud_calculated > 0xFF) {
11ec: 2cff cmp r4, #255 ; 0xff
11ee: d8f4 bhi.n 11da <_sercom_get_sync_baud_val+0xc>
*baudvalue = baud_calculated;
11f0: 8014 strh r4, [r2, #0]
return STATUS_OK;
11f2: 2300 movs r3, #0
11f4: e7f1 b.n 11da <_sercom_get_sync_baud_val+0xc>
...
000011f8 <_sercom_get_async_baud_val>:
const uint32_t baudrate,
const uint32_t peripheral_clock,
uint16_t *const baudval,
enum sercom_asynchronous_operation_mode mode,
enum sercom_asynchronous_sample_num sample_num)
{
11f8: b5f0 push {r4, r5, r6, r7, lr}
11fa: b083 sub sp, #12
11fc: 000f movs r7, r1
11fe: 0016 movs r6, r2
1200: aa08 add r2, sp, #32
1202: 7811 ldrb r1, [r2, #0]
uint8_t baud_fp;
uint32_t baud_int = 0;
uint64_t temp1;
/* Check if the baudrate is outside of valid range */
if ((baudrate * sample_num) > peripheral_clock) {
1204: 0004 movs r4, r0
1206: 434c muls r4, r1
/* Return with error code */
return STATUS_ERR_BAUDRATE_UNAVAILABLE;
1208: 2240 movs r2, #64 ; 0x40
if ((baudrate * sample_num) > peripheral_clock) {
120a: 42bc cmp r4, r7
120c: d902 bls.n 1214 <_sercom_get_async_baud_val+0x1c>
baud_calculated = baud_int | (baud_fp << 13);
}
*baudval = baud_calculated;
return STATUS_OK;
}
120e: 0010 movs r0, r2
1210: b003 add sp, #12
1212: bdf0 pop {r4, r5, r6, r7, pc}
if(mode == SERCOM_ASYNC_OPERATION_MODE_ARITHMETIC) {
1214: 2b00 cmp r3, #0
1216: d114 bne.n 1242 <_sercom_get_async_baud_val+0x4a>
temp1 = ((sample_num * (uint64_t)baudrate) << SHIFT);
1218: 0002 movs r2, r0
121a: 0008 movs r0, r1
121c: 2100 movs r1, #0
121e: 4c19 ldr r4, [pc, #100] ; (1284 <_sercom_get_async_baud_val+0x8c>)
1220: 47a0 blx r4
1222: 0001 movs r1, r0
ratio = long_division(temp1, peripheral_clock);
1224: 003a movs r2, r7
1226: 2300 movs r3, #0
1228: 2000 movs r0, #0
122a: 4c17 ldr r4, [pc, #92] ; (1288 <_sercom_get_async_baud_val+0x90>)
122c: 47a0 blx r4
scale = ((uint64_t)1 << SHIFT) - ratio;
122e: 2200 movs r2, #0
1230: 2301 movs r3, #1
1232: 1a12 subs r2, r2, r0
1234: 418b sbcs r3, r1
baud_calculated = (65536 * scale) >> SHIFT;
1236: 0c12 lsrs r2, r2, #16
1238: 041b lsls r3, r3, #16
123a: 431a orrs r2, r3
*baudval = baud_calculated;
123c: 8032 strh r2, [r6, #0]
return STATUS_OK;
123e: 2200 movs r2, #0
1240: e7e5 b.n 120e <_sercom_get_async_baud_val+0x16>
uint64_t baud_calculated = 0;
1242: 2200 movs r2, #0
} else if(mode == SERCOM_ASYNC_OPERATION_MODE_FRACTIONAL) {
1244: 2b01 cmp r3, #1
1246: d1f9 bne.n 123c <_sercom_get_async_baud_val+0x44>
temp1 = ((uint64_t)baudrate * sample_num);
1248: 000a movs r2, r1
124a: 2300 movs r3, #0
124c: 2100 movs r1, #0
124e: 4c0d ldr r4, [pc, #52] ; (1284 <_sercom_get_async_baud_val+0x8c>)
1250: 47a0 blx r4
1252: 0002 movs r2, r0
1254: 000b movs r3, r1
1256: 9200 str r2, [sp, #0]
1258: 9301 str r3, [sp, #4]
baud_int = long_division( peripheral_clock, temp1);
125a: 0038 movs r0, r7
125c: 2100 movs r1, #0
125e: 4c0a ldr r4, [pc, #40] ; (1288 <_sercom_get_async_baud_val+0x90>)
1260: 47a0 blx r4
1262: 0005 movs r5, r0
if(baud_int > BAUD_INT_MAX) {
1264: 2380 movs r3, #128 ; 0x80
1266: 019b lsls r3, r3, #6
return STATUS_ERR_BAUDRATE_UNAVAILABLE;
1268: 2240 movs r2, #64 ; 0x40
if(baud_int > BAUD_INT_MAX) {
126a: 4298 cmp r0, r3
126c: d8cf bhi.n 120e <_sercom_get_async_baud_val+0x16>
temp1 = long_division( 8 * (uint64_t)peripheral_clock, temp1);
126e: 0f79 lsrs r1, r7, #29
1270: 00f8 lsls r0, r7, #3
1272: 9a00 ldr r2, [sp, #0]
1274: 9b01 ldr r3, [sp, #4]
1276: 47a0 blx r4
baud_fp = temp1 - 8 * baud_int;
1278: 00ea lsls r2, r5, #3
127a: 1a82 subs r2, r0, r2
baud_calculated = baud_int | (baud_fp << 13);
127c: b2d2 uxtb r2, r2
127e: 0352 lsls r2, r2, #13
1280: 432a orrs r2, r5
1282: e7db b.n 123c <_sercom_get_async_baud_val+0x44>
1284: 00001e5d .word 0x00001e5d
1288: 00001115 .word 0x00001115
0000128c <sercom_set_gclk_generator>:
* forced.
*/
enum status_code sercom_set_gclk_generator(
const enum gclk_generator generator_source,
const bool force_change)
{
128c: b510 push {r4, lr}
128e: b082 sub sp, #8
1290: 0004 movs r4, r0
/* Check if valid option */
if (!_sercom_config.generator_is_set || force_change) {
1292: 4b0e ldr r3, [pc, #56] ; (12cc <sercom_set_gclk_generator+0x40>)
1294: 781b ldrb r3, [r3, #0]
1296: 2b00 cmp r3, #0
1298: d007 beq.n 12aa <sercom_set_gclk_generator+0x1e>
129a: 2900 cmp r1, #0
129c: d105 bne.n 12aa <sercom_set_gclk_generator+0x1e>
/* Save config */
_sercom_config.generator_source = generator_source;
_sercom_config.generator_is_set = true;
return STATUS_OK;
} else if (generator_source == _sercom_config.generator_source) {
129e: 4b0b ldr r3, [pc, #44] ; (12cc <sercom_set_gclk_generator+0x40>)
12a0: 785b ldrb r3, [r3, #1]
12a2: 4283 cmp r3, r0
12a4: d010 beq.n 12c8 <sercom_set_gclk_generator+0x3c>
/* Return status OK if same config */
return STATUS_OK;
}
/* Return invalid config to already initialized GCLK */
return STATUS_ERR_ALREADY_INITIALIZED;
12a6: 201d movs r0, #29
12a8: e00c b.n 12c4 <sercom_set_gclk_generator+0x38>
gclk_chan_conf.source_generator = generator_source;
12aa: a901 add r1, sp, #4
12ac: 700c strb r4, [r1, #0]
system_gclk_chan_set_config(SERCOM_GCLK_ID, &gclk_chan_conf);
12ae: 2013 movs r0, #19
12b0: 4b07 ldr r3, [pc, #28] ; (12d0 <sercom_set_gclk_generator+0x44>)
12b2: 4798 blx r3
system_gclk_chan_enable(SERCOM_GCLK_ID);
12b4: 2013 movs r0, #19
12b6: 4b07 ldr r3, [pc, #28] ; (12d4 <sercom_set_gclk_generator+0x48>)
12b8: 4798 blx r3
_sercom_config.generator_source = generator_source;
12ba: 4b04 ldr r3, [pc, #16] ; (12cc <sercom_set_gclk_generator+0x40>)
12bc: 705c strb r4, [r3, #1]
_sercom_config.generator_is_set = true;
12be: 2201 movs r2, #1
12c0: 701a strb r2, [r3, #0]
return STATUS_OK;
12c2: 2000 movs r0, #0
}
12c4: b002 add sp, #8
12c6: bd10 pop {r4, pc}
return STATUS_OK;
12c8: 2000 movs r0, #0
12ca: e7fb b.n 12c4 <sercom_set_gclk_generator+0x38>
12cc: 20000088 .word 0x20000088
12d0: 00001a6d .word 0x00001a6d
12d4: 000019e1 .word 0x000019e1
000012d8 <_sercom_get_default_pad>:
*/
uint32_t _sercom_get_default_pad(
Sercom *const sercom_module,
const uint8_t pad)
{
switch ((uintptr_t)sercom_module) {
12d8: 4b40 ldr r3, [pc, #256] ; (13dc <_sercom_get_default_pad+0x104>)
12da: 4298 cmp r0, r3
12dc: d031 beq.n 1342 <_sercom_get_default_pad+0x6a>
12de: d90a bls.n 12f6 <_sercom_get_default_pad+0x1e>
12e0: 4b3f ldr r3, [pc, #252] ; (13e0 <_sercom_get_default_pad+0x108>)
12e2: 4298 cmp r0, r3
12e4: d04d beq.n 1382 <_sercom_get_default_pad+0xaa>
12e6: 4b3f ldr r3, [pc, #252] ; (13e4 <_sercom_get_default_pad+0x10c>)
12e8: 4298 cmp r0, r3
12ea: d05a beq.n 13a2 <_sercom_get_default_pad+0xca>
12ec: 4b3e ldr r3, [pc, #248] ; (13e8 <_sercom_get_default_pad+0x110>)
12ee: 4298 cmp r0, r3
12f0: d037 beq.n 1362 <_sercom_get_default_pad+0x8a>
/* Auto-generate a lookup table for the default SERCOM pad defaults */
MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)
}
Assert(false);
return 0;
12f2: 2000 movs r0, #0
}
12f4: 4770 bx lr
switch ((uintptr_t)sercom_module) {
12f6: 4b3d ldr r3, [pc, #244] ; (13ec <_sercom_get_default_pad+0x114>)
12f8: 4298 cmp r0, r3
12fa: d00c beq.n 1316 <_sercom_get_default_pad+0x3e>
12fc: 4b3c ldr r3, [pc, #240] ; (13f0 <_sercom_get_default_pad+0x118>)
12fe: 4298 cmp r0, r3
1300: d1f7 bne.n 12f2 <_sercom_get_default_pad+0x1a>
MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)
1302: 2901 cmp r1, #1
1304: d017 beq.n 1336 <_sercom_get_default_pad+0x5e>
1306: 2900 cmp r1, #0
1308: d05d beq.n 13c6 <_sercom_get_default_pad+0xee>
130a: 2902 cmp r1, #2
130c: d015 beq.n 133a <_sercom_get_default_pad+0x62>
130e: 2903 cmp r1, #3
1310: d015 beq.n 133e <_sercom_get_default_pad+0x66>
return 0;
1312: 2000 movs r0, #0
1314: e7ee b.n 12f4 <_sercom_get_default_pad+0x1c>
MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)
1316: 2901 cmp r1, #1
1318: d007 beq.n 132a <_sercom_get_default_pad+0x52>
131a: 2900 cmp r1, #0
131c: d051 beq.n 13c2 <_sercom_get_default_pad+0xea>
131e: 2902 cmp r1, #2
1320: d005 beq.n 132e <_sercom_get_default_pad+0x56>
1322: 2903 cmp r1, #3
1324: d005 beq.n 1332 <_sercom_get_default_pad+0x5a>
return 0;
1326: 2000 movs r0, #0
1328: e7e4 b.n 12f4 <_sercom_get_default_pad+0x1c>
MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)
132a: 4832 ldr r0, [pc, #200] ; (13f4 <_sercom_get_default_pad+0x11c>)
132c: e7e2 b.n 12f4 <_sercom_get_default_pad+0x1c>
132e: 4832 ldr r0, [pc, #200] ; (13f8 <_sercom_get_default_pad+0x120>)
1330: e7e0 b.n 12f4 <_sercom_get_default_pad+0x1c>
1332: 4832 ldr r0, [pc, #200] ; (13fc <_sercom_get_default_pad+0x124>)
1334: e7de b.n 12f4 <_sercom_get_default_pad+0x1c>
1336: 4832 ldr r0, [pc, #200] ; (1400 <_sercom_get_default_pad+0x128>)
1338: e7dc b.n 12f4 <_sercom_get_default_pad+0x1c>
133a: 4832 ldr r0, [pc, #200] ; (1404 <_sercom_get_default_pad+0x12c>)
133c: e7da b.n 12f4 <_sercom_get_default_pad+0x1c>
133e: 4832 ldr r0, [pc, #200] ; (1408 <_sercom_get_default_pad+0x130>)
1340: e7d8 b.n 12f4 <_sercom_get_default_pad+0x1c>
1342: 2901 cmp r1, #1
1344: d007 beq.n 1356 <_sercom_get_default_pad+0x7e>
1346: 2900 cmp r1, #0
1348: d03f beq.n 13ca <_sercom_get_default_pad+0xf2>
134a: 2902 cmp r1, #2
134c: d005 beq.n 135a <_sercom_get_default_pad+0x82>
134e: 2903 cmp r1, #3
1350: d005 beq.n 135e <_sercom_get_default_pad+0x86>
return 0;
1352: 2000 movs r0, #0
1354: e7ce b.n 12f4 <_sercom_get_default_pad+0x1c>
MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)
1356: 482d ldr r0, [pc, #180] ; (140c <_sercom_get_default_pad+0x134>)
1358: e7cc b.n 12f4 <_sercom_get_default_pad+0x1c>
135a: 482d ldr r0, [pc, #180] ; (1410 <_sercom_get_default_pad+0x138>)
135c: e7ca b.n 12f4 <_sercom_get_default_pad+0x1c>
135e: 482d ldr r0, [pc, #180] ; (1414 <_sercom_get_default_pad+0x13c>)
1360: e7c8 b.n 12f4 <_sercom_get_default_pad+0x1c>
1362: 2901 cmp r1, #1
1364: d007 beq.n 1376 <_sercom_get_default_pad+0x9e>
1366: 2900 cmp r1, #0
1368: d031 beq.n 13ce <_sercom_get_default_pad+0xf6>
136a: 2902 cmp r1, #2
136c: d005 beq.n 137a <_sercom_get_default_pad+0xa2>
136e: 2903 cmp r1, #3
1370: d005 beq.n 137e <_sercom_get_default_pad+0xa6>
return 0;
1372: 2000 movs r0, #0
1374: e7be b.n 12f4 <_sercom_get_default_pad+0x1c>
MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)
1376: 4828 ldr r0, [pc, #160] ; (1418 <_sercom_get_default_pad+0x140>)
1378: e7bc b.n 12f4 <_sercom_get_default_pad+0x1c>
137a: 4828 ldr r0, [pc, #160] ; (141c <_sercom_get_default_pad+0x144>)
137c: e7ba b.n 12f4 <_sercom_get_default_pad+0x1c>
137e: 4828 ldr r0, [pc, #160] ; (1420 <_sercom_get_default_pad+0x148>)
1380: e7b8 b.n 12f4 <_sercom_get_default_pad+0x1c>
1382: 2901 cmp r1, #1
1384: d007 beq.n 1396 <_sercom_get_default_pad+0xbe>
1386: 2900 cmp r1, #0
1388: d023 beq.n 13d2 <_sercom_get_default_pad+0xfa>
138a: 2902 cmp r1, #2
138c: d005 beq.n 139a <_sercom_get_default_pad+0xc2>
138e: 2903 cmp r1, #3
1390: d005 beq.n 139e <_sercom_get_default_pad+0xc6>
return 0;
1392: 2000 movs r0, #0
1394: e7ae b.n 12f4 <_sercom_get_default_pad+0x1c>
MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)
1396: 4823 ldr r0, [pc, #140] ; (1424 <_sercom_get_default_pad+0x14c>)
1398: e7ac b.n 12f4 <_sercom_get_default_pad+0x1c>
139a: 4823 ldr r0, [pc, #140] ; (1428 <_sercom_get_default_pad+0x150>)
139c: e7aa b.n 12f4 <_sercom_get_default_pad+0x1c>
139e: 4823 ldr r0, [pc, #140] ; (142c <_sercom_get_default_pad+0x154>)
13a0: e7a8 b.n 12f4 <_sercom_get_default_pad+0x1c>
13a2: 2901 cmp r1, #1
13a4: d007 beq.n 13b6 <_sercom_get_default_pad+0xde>
13a6: 2900 cmp r1, #0
13a8: d015 beq.n 13d6 <_sercom_get_default_pad+0xfe>
13aa: 2902 cmp r1, #2
13ac: d005 beq.n 13ba <_sercom_get_default_pad+0xe2>
13ae: 2903 cmp r1, #3
13b0: d005 beq.n 13be <_sercom_get_default_pad+0xe6>
return 0;
13b2: 2000 movs r0, #0
13b4: e79e b.n 12f4 <_sercom_get_default_pad+0x1c>
MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)
13b6: 481e ldr r0, [pc, #120] ; (1430 <_sercom_get_default_pad+0x158>)
13b8: e79c b.n 12f4 <_sercom_get_default_pad+0x1c>
13ba: 481e ldr r0, [pc, #120] ; (1434 <_sercom_get_default_pad+0x15c>)
13bc: e79a b.n 12f4 <_sercom_get_default_pad+0x1c>
13be: 481e ldr r0, [pc, #120] ; (1438 <_sercom_get_default_pad+0x160>)
13c0: e798 b.n 12f4 <_sercom_get_default_pad+0x1c>
13c2: 481e ldr r0, [pc, #120] ; (143c <_sercom_get_default_pad+0x164>)
13c4: e796 b.n 12f4 <_sercom_get_default_pad+0x1c>
13c6: 2003 movs r0, #3
13c8: e794 b.n 12f4 <_sercom_get_default_pad+0x1c>
13ca: 481d ldr r0, [pc, #116] ; (1440 <_sercom_get_default_pad+0x168>)
13cc: e792 b.n 12f4 <_sercom_get_default_pad+0x1c>
13ce: 481d ldr r0, [pc, #116] ; (1444 <_sercom_get_default_pad+0x16c>)
13d0: e790 b.n 12f4 <_sercom_get_default_pad+0x1c>
13d2: 481d ldr r0, [pc, #116] ; (1448 <_sercom_get_default_pad+0x170>)
13d4: e78e b.n 12f4 <_sercom_get_default_pad+0x1c>
13d6: 481d ldr r0, [pc, #116] ; (144c <_sercom_get_default_pad+0x174>)
13d8: e78c b.n 12f4 <_sercom_get_default_pad+0x1c>
13da: 46c0 nop ; (mov r8, r8)
13dc: 42001000 .word 0x42001000
13e0: 42001800 .word 0x42001800
13e4: 42001c00 .word 0x42001c00
13e8: 42001400 .word 0x42001400
13ec: 42000800 .word 0x42000800
13f0: 42000c00 .word 0x42000c00
13f4: 00050003 .word 0x00050003
13f8: 00060003 .word 0x00060003
13fc: 00070003 .word 0x00070003
1400: 00010003 .word 0x00010003
1404: 001e0003 .word 0x001e0003
1408: 001f0003 .word 0x001f0003
140c: 00090003 .word 0x00090003
1410: 000a0003 .word 0x000a0003
1414: 000b0003 .word 0x000b0003
1418: 00110003 .word 0x00110003
141c: 00120003 .word 0x00120003
1420: 00130003 .word 0x00130003
1424: 000d0003 .word 0x000d0003
1428: 000e0003 .word 0x000e0003
142c: 000f0003 .word 0x000f0003
1430: 00170003 .word 0x00170003
1434: 00180003 .word 0x00180003
1438: 00190003 .word 0x00190003
143c: 00040003 .word 0x00040003
1440: 00080003 .word 0x00080003
1444: 00100003 .word 0x00100003
1448: 000c0003 .word 0x000c0003
144c: 00160003 .word 0x00160003
00001450 <_sercom_get_sercom_inst_index>:
*
* \return Index of given instance.
*/
uint8_t _sercom_get_sercom_inst_index(
Sercom *const sercom_instance)
{
1450: b530 push {r4, r5, lr}
1452: b087 sub sp, #28
/* Save all available SERCOM instances for compare */
Sercom *sercom_instances[SERCOM_INST_NUM] = SERCOM_INSTS;
1454: 4b0b ldr r3, [pc, #44] ; (1484 <_sercom_get_sercom_inst_index+0x34>)
1456: 466a mov r2, sp
1458: cb32 ldmia r3!, {r1, r4, r5}
145a: c232 stmia r2!, {r1, r4, r5}
145c: cb32 ldmia r3!, {r1, r4, r5}
145e: c232 stmia r2!, {r1, r4, r5}
/* Find index for sercom instance */
for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {
if ((uintptr_t)sercom_instance == (uintptr_t)sercom_instances[i]) {
1460: 9b00 ldr r3, [sp, #0]
1462: 4283 cmp r3, r0
1464: d00b beq.n 147e <_sercom_get_sercom_inst_index+0x2e>
1466: 2301 movs r3, #1
1468: 009a lsls r2, r3, #2
146a: 4669 mov r1, sp
146c: 5852 ldr r2, [r2, r1]
146e: 4282 cmp r2, r0
1470: d006 beq.n 1480 <_sercom_get_sercom_inst_index+0x30>
for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {
1472: 3301 adds r3, #1
1474: 2b06 cmp r3, #6
1476: d1f7 bne.n 1468 <_sercom_get_sercom_inst_index+0x18>
}
}
/* Invalid data given */
Assert(false);
return 0;
1478: 2000 movs r0, #0
}
147a: b007 add sp, #28
147c: bd30 pop {r4, r5, pc}
for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {
147e: 2300 movs r3, #0
return i;
1480: b2d8 uxtb r0, r3
1482: e7fa b.n 147a <_sercom_get_sercom_inst_index+0x2a>
1484: 00004894 .word 0x00004894
00001488 <_sercom_default_handler>:
*/
static void _sercom_default_handler(
const uint8_t instance)
{
Assert(false);
}
1488: 4770 bx lr
...
0000148c <_sercom_set_handler>:
* \param[in] interrupt_handler Pointer to instance callback handler.
*/
void _sercom_set_handler(
const uint8_t instance,
const sercom_handler_t interrupt_handler)
{
148c: b5f0 push {r4, r5, r6, r7, lr}
/* Initialize handlers with default handler and device instances with 0 */
if (_handler_table_initialized == false) {
148e: 4b0a ldr r3, [pc, #40] ; (14b8 <_sercom_set_handler+0x2c>)
1490: 781b ldrb r3, [r3, #0]
1492: 2b00 cmp r3, #0
1494: d10c bne.n 14b0 <_sercom_set_handler+0x24>
for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {
_sercom_interrupt_handlers[i] = &_sercom_default_handler;
1496: 4f09 ldr r7, [pc, #36] ; (14bc <_sercom_set_handler+0x30>)
1498: 4e09 ldr r6, [pc, #36] ; (14c0 <_sercom_set_handler+0x34>)
_sercom_instances[i] = NULL;
149a: 4d0a ldr r5, [pc, #40] ; (14c4 <_sercom_set_handler+0x38>)
149c: 2400 movs r4, #0
_sercom_interrupt_handlers[i] = &_sercom_default_handler;
149e: 51de str r6, [r3, r7]
_sercom_instances[i] = NULL;
14a0: 195a adds r2, r3, r5
14a2: 6014 str r4, [r2, #0]
14a4: 3304 adds r3, #4
for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {
14a6: 2b18 cmp r3, #24
14a8: d1f9 bne.n 149e <_sercom_set_handler+0x12>
}
_handler_table_initialized = true;
14aa: 2201 movs r2, #1
14ac: 4b02 ldr r3, [pc, #8] ; (14b8 <_sercom_set_handler+0x2c>)
14ae: 701a strb r2, [r3, #0]
}
/* Save interrupt handler */
_sercom_interrupt_handlers[instance] = interrupt_handler;
14b0: 0080 lsls r0, r0, #2
14b2: 4b02 ldr r3, [pc, #8] ; (14bc <_sercom_set_handler+0x30>)
14b4: 50c1 str r1, [r0, r3]
}
14b6: bdf0 pop {r4, r5, r6, r7, pc}
14b8: 2000008a .word 0x2000008a
14bc: 2000008c .word 0x2000008c
14c0: 00001489 .word 0x00001489
14c4: 20000244 .word 0x20000244
000014c8 <_sercom_get_interrupt_vector>:
* \retval SYSTEM_INTERRUPT_MODULE_SERCOM6
* \retval SYSTEM_INTERRUPT_MODULE_SERCOM7
*/
enum system_interrupt_vector _sercom_get_interrupt_vector(
Sercom *const sercom_instance)
{
14c8: b500 push {lr}
14ca: b083 sub sp, #12
const uint8_t sercom_int_vectors[SERCOM_INST_NUM] =
14cc: 2309 movs r3, #9
14ce: 466a mov r2, sp
14d0: 7013 strb r3, [r2, #0]
14d2: 3301 adds r3, #1
14d4: 7053 strb r3, [r2, #1]
14d6: 3301 adds r3, #1
14d8: 7093 strb r3, [r2, #2]
14da: 3301 adds r3, #1
14dc: 70d3 strb r3, [r2, #3]
14de: 3301 adds r3, #1
14e0: 7113 strb r3, [r2, #4]
14e2: 3301 adds r3, #1
14e4: 7153 strb r3, [r2, #5]
{
MREPEAT(SERCOM_INST_NUM, _SERCOM_INTERRUPT_VECT_NUM, ~)
};
/* Retrieve the index of the SERCOM being requested */
uint8_t instance_index = _sercom_get_sercom_inst_index(sercom_instance);
14e6: 4b03 ldr r3, [pc, #12] ; (14f4 <_sercom_get_interrupt_vector+0x2c>)
14e8: 4798 blx r3
/* Get the vector number from the lookup table for the requested SERCOM */
return (enum system_interrupt_vector)sercom_int_vectors[instance_index];
14ea: 466b mov r3, sp
14ec: 5618 ldrsb r0, [r3, r0]
}
14ee: b003 add sp, #12
14f0: bd00 pop {pc}
14f2: 46c0 nop ; (mov r8, r8)
14f4: 00001451 .word 0x00001451
000014f8 <SERCOM0_Handler>:
/** Auto-generate a set of interrupt handlers for each SERCOM in the device */
MREPEAT(SERCOM_INST_NUM, _SERCOM_INTERRUPT_HANDLER, ~)
14f8: b510 push {r4, lr}
14fa: 4b02 ldr r3, [pc, #8] ; (1504 <SERCOM0_Handler+0xc>)
14fc: 681b ldr r3, [r3, #0]
14fe: 2000 movs r0, #0
1500: 4798 blx r3
1502: bd10 pop {r4, pc}
1504: 2000008c .word 0x2000008c
00001508 <SERCOM1_Handler>:
1508: b510 push {r4, lr}
150a: 4b02 ldr r3, [pc, #8] ; (1514 <SERCOM1_Handler+0xc>)
150c: 685b ldr r3, [r3, #4]
150e: 2001 movs r0, #1
1510: 4798 blx r3
1512: bd10 pop {r4, pc}
1514: 2000008c .word 0x2000008c
00001518 <SERCOM2_Handler>:
1518: b510 push {r4, lr}
151a: 4b02 ldr r3, [pc, #8] ; (1524 <SERCOM2_Handler+0xc>)
151c: 689b ldr r3, [r3, #8]
151e: 2002 movs r0, #2
1520: 4798 blx r3
1522: bd10 pop {r4, pc}
1524: 2000008c .word 0x2000008c
00001528 <SERCOM3_Handler>:
1528: b510 push {r4, lr}
152a: 4b02 ldr r3, [pc, #8] ; (1534 <SERCOM3_Handler+0xc>)
152c: 68db ldr r3, [r3, #12]
152e: 2003 movs r0, #3
1530: 4798 blx r3
1532: bd10 pop {r4, pc}
1534: 2000008c .word 0x2000008c
00001538 <SERCOM4_Handler>:
1538: b510 push {r4, lr}
153a: 4b02 ldr r3, [pc, #8] ; (1544 <SERCOM4_Handler+0xc>)
153c: 691b ldr r3, [r3, #16]
153e: 2004 movs r0, #4
1540: 4798 blx r3
1542: bd10 pop {r4, pc}
1544: 2000008c .word 0x2000008c
00001548 <SERCOM5_Handler>:
1548: b510 push {r4, lr}
154a: 4b02 ldr r3, [pc, #8] ; (1554 <SERCOM5_Handler+0xc>)
154c: 695b ldr r3, [r3, #20]
154e: 2005 movs r0, #5
1550: 4798 blx r3
1552: bd10 pop {r4, pc}
1554: 2000008c .word 0x2000008c
00001558 <cpu_irq_enter_critical>:
volatile bool g_interrupt_enabled = true;
#endif
void cpu_irq_enter_critical(void)
{
if (cpu_irq_critical_section_counter == 0) {
1558: 4b0c ldr r3, [pc, #48] ; (158c <cpu_irq_enter_critical+0x34>)
155a: 681b ldr r3, [r3, #0]
155c: 2b00 cmp r3, #0
155e: d106 bne.n 156e <cpu_irq_enter_critical+0x16>
*/
__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void)
{
uint32_t result;
__ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
1560: f3ef 8310 mrs r3, PRIMASK
if (cpu_irq_is_enabled()) {
1564: 2b00 cmp r3, #0
1566: d007 beq.n 1578 <cpu_irq_enter_critical+0x20>
cpu_irq_disable();
cpu_irq_prev_interrupt_state = true;
} else {
/* Make sure the to save the prev state as false */
cpu_irq_prev_interrupt_state = false;
1568: 2200 movs r2, #0
156a: 4b09 ldr r3, [pc, #36] ; (1590 <cpu_irq_enter_critical+0x38>)
156c: 701a strb r2, [r3, #0]
}
}
cpu_irq_critical_section_counter++;
156e: 4a07 ldr r2, [pc, #28] ; (158c <cpu_irq_enter_critical+0x34>)
1570: 6813 ldr r3, [r2, #0]
1572: 3301 adds r3, #1
1574: 6013 str r3, [r2, #0]
}
1576: 4770 bx lr
__ASM volatile ("cpsid i" : : : "memory");
1578: b672 cpsid i
\details Ensures the apparent order of the explicit memory operations before
and after the instruction, without ensuring their completion.
*/
__STATIC_FORCEINLINE void __DMB(void)
{
__ASM volatile ("dmb 0xF":::"memory");
157a: f3bf 8f5f dmb sy
cpu_irq_disable();
157e: 2200 movs r2, #0
1580: 4b04 ldr r3, [pc, #16] ; (1594 <cpu_irq_enter_critical+0x3c>)
1582: 701a strb r2, [r3, #0]
cpu_irq_prev_interrupt_state = true;
1584: 3201 adds r2, #1
1586: 4b02 ldr r3, [pc, #8] ; (1590 <cpu_irq_enter_critical+0x38>)
1588: 701a strb r2, [r3, #0]
158a: e7f0 b.n 156e <cpu_irq_enter_critical+0x16>
158c: 200000a4 .word 0x200000a4
1590: 200000a8 .word 0x200000a8
1594: 20000000 .word 0x20000000
00001598 <cpu_irq_leave_critical>:
void cpu_irq_leave_critical(void)
{
/* Check if the user is trying to leave a critical section when not in a critical section */
Assert(cpu_irq_critical_section_counter > 0);
cpu_irq_critical_section_counter--;
1598: 4b08 ldr r3, [pc, #32] ; (15bc <cpu_irq_leave_critical+0x24>)
159a: 681a ldr r2, [r3, #0]
159c: 3a01 subs r2, #1
159e: 601a str r2, [r3, #0]
/* Only enable global interrupts when the counter reaches 0 and the state of the global interrupt flag
was enabled when entering critical state */
if ((cpu_irq_critical_section_counter == 0) && (cpu_irq_prev_interrupt_state)) {
15a0: 681b ldr r3, [r3, #0]
15a2: 2b00 cmp r3, #0
15a4: d109 bne.n 15ba <cpu_irq_leave_critical+0x22>
15a6: 4b06 ldr r3, [pc, #24] ; (15c0 <cpu_irq_leave_critical+0x28>)
15a8: 781b ldrb r3, [r3, #0]
15aa: 2b00 cmp r3, #0
15ac: d005 beq.n 15ba <cpu_irq_leave_critical+0x22>
cpu_irq_enable();
15ae: 2201 movs r2, #1
15b0: 4b04 ldr r3, [pc, #16] ; (15c4 <cpu_irq_leave_critical+0x2c>)
15b2: 701a strb r2, [r3, #0]
15b4: f3bf 8f5f dmb sy
__ASM volatile ("cpsie i" : : : "memory");
15b8: b662 cpsie i
}
}
15ba: 4770 bx lr
15bc: 200000a4 .word 0x200000a4
15c0: 200000a8 .word 0x200000a8
15c4: 20000000 .word 0x20000000
000015c8 <system_board_init>:
void board_init(void);
# pragma weak board_init=system_board_init
#endif
void system_board_init(void)
{
15c8: b5f0 push {r4, r5, r6, r7, lr}
15ca: b083 sub sp, #12
/* Sanity check arguments */
Assert(config);
/* Default configuration values */
config->direction = PORT_PIN_DIR_INPUT;
config->input_pull = PORT_PIN_PULL_UP;
15cc: ac01 add r4, sp, #4
15ce: 2501 movs r5, #1
15d0: 7065 strb r5, [r4, #1]
config->powersave = false;
15d2: 2700 movs r7, #0
15d4: 70a7 strb r7, [r4, #2]
struct port_config pin_conf;
port_get_config_defaults(&pin_conf);
/* Configure LEDs as outputs, turn them off */
pin_conf.direction = PORT_PIN_DIR_OUTPUT;
15d6: 7025 strb r5, [r4, #0]
port_pin_set_config(LED_0_PIN, &pin_conf);
15d8: 0021 movs r1, r4
15da: 203e movs r0, #62 ; 0x3e
15dc: 4e06 ldr r6, [pc, #24] ; (15f8 <system_board_init+0x30>)
15de: 47b0 blx r6
PortGroup *const port_base = port_get_group_from_gpio_pin(gpio_pin);
uint32_t pin_mask = (1UL << (gpio_pin % 32));
/* Set the pin to high or low atomically based on the requested level */
if (level) {
port_base->OUTSET.reg = pin_mask;
15e0: 2280 movs r2, #128 ; 0x80
15e2: 05d2 lsls r2, r2, #23
15e4: 4b05 ldr r3, [pc, #20] ; (15fc <system_board_init+0x34>)
15e6: 619a str r2, [r3, #24]
port_pin_set_output_level(LED_0_PIN, LED_0_INACTIVE);
/* Set buttons as inputs */
pin_conf.direction = PORT_PIN_DIR_INPUT;
15e8: 7027 strb r7, [r4, #0]
pin_conf.input_pull = PORT_PIN_PULL_UP;
15ea: 7065 strb r5, [r4, #1]
port_pin_set_config(BUTTON_0_PIN, &pin_conf);
15ec: 0021 movs r1, r4
15ee: 200f movs r0, #15
15f0: 47b0 blx r6
port_pin_set_output_level(AT86RFX_RST_PIN, true);
port_pin_set_output_level(AT86RFX_SLP_PIN, true);
pin_conf.direction = PORT_PIN_DIR_INPUT;
port_pin_set_config(AT86RFX_SPI_MISO, &pin_conf);
#endif
}
15f2: b003 add sp, #12
15f4: bdf0 pop {r4, r5, r6, r7, pc}
15f6: 46c0 nop ; (mov r8, r8)
15f8: 00001601 .word 0x00001601
15fc: 41004480 .word 0x41004480
00001600 <port_pin_set_config>:
* \param[in] config Configuration settings for the pin
*/
void port_pin_set_config(
const uint8_t gpio_pin,
const struct port_config *const config)
{
1600: b500 push {lr}
1602: b083 sub sp, #12
config->mux_position = SYSTEM_PINMUX_GPIO;
1604: ab01 add r3, sp, #4
1606: 2280 movs r2, #128 ; 0x80
1608: 701a strb r2, [r3, #0]
struct system_pinmux_config pinmux_config;
system_pinmux_get_config_defaults(&pinmux_config);
pinmux_config.mux_position = SYSTEM_PINMUX_GPIO;
pinmux_config.direction = (enum system_pinmux_pin_dir)config->direction;
160a: 780a ldrb r2, [r1, #0]
160c: 705a strb r2, [r3, #1]
pinmux_config.input_pull = (enum system_pinmux_pin_pull)config->input_pull;
160e: 784a ldrb r2, [r1, #1]
1610: 709a strb r2, [r3, #2]
pinmux_config.powersave = config->powersave;
1612: 788a ldrb r2, [r1, #2]
1614: 70da strb r2, [r3, #3]
system_pinmux_pin_set_config(gpio_pin, &pinmux_config);
1616: 0019 movs r1, r3
1618: 4b01 ldr r3, [pc, #4] ; (1620 <port_pin_set_config+0x20>)
161a: 4798 blx r3
}
161c: b003 add sp, #12
161e: bd00 pop {pc}
1620: 00001b65 .word 0x00001b65
00001624 <system_clock_source_get_hz>:
*
* \returns Frequency of the given clock source, in Hz.
*/
uint32_t system_clock_source_get_hz(
const enum system_clock_source clock_source)
{
1624: b510 push {r4, lr}
switch (clock_source) {
1626: 2808 cmp r0, #8
1628: d803 bhi.n 1632 <system_clock_source_get_hz+0xe>
162a: 0080 lsls r0, r0, #2
162c: 4b1c ldr r3, [pc, #112] ; (16a0 <system_clock_source_get_hz+0x7c>)
162e: 581b ldr r3, [r3, r0]
1630: 469f mov pc, r3
return _system_clock_inst.dpll.frequency;
#endif
default:
return 0;
1632: 2000 movs r0, #0
1634: e032 b.n 169c <system_clock_source_get_hz+0x78>
return _system_clock_inst.xosc.frequency;
1636: 4b1b ldr r3, [pc, #108] ; (16a4 <system_clock_source_get_hz+0x80>)
1638: 6918 ldr r0, [r3, #16]
163a: e02f b.n 169c <system_clock_source_get_hz+0x78>
return 8000000UL >> SYSCTRL->OSC8M.bit.PRESC;
163c: 4b1a ldr r3, [pc, #104] ; (16a8 <system_clock_source_get_hz+0x84>)
163e: 6a1b ldr r3, [r3, #32]
1640: 059b lsls r3, r3, #22
1642: 0f9b lsrs r3, r3, #30
1644: 4819 ldr r0, [pc, #100] ; (16ac <system_clock_source_get_hz+0x88>)
1646: 40d8 lsrs r0, r3
1648: e028 b.n 169c <system_clock_source_get_hz+0x78>
return _system_clock_inst.xosc32k.frequency;
164a: 4b16 ldr r3, [pc, #88] ; (16a4 <system_clock_source_get_hz+0x80>)
164c: 6958 ldr r0, [r3, #20]
164e: e025 b.n 169c <system_clock_source_get_hz+0x78>
if (!(_system_clock_inst.dfll.control & SYSCTRL_DFLLCTRL_ENABLE))
1650: 4b14 ldr r3, [pc, #80] ; (16a4 <system_clock_source_get_hz+0x80>)
1652: 681b ldr r3, [r3, #0]
return 0;
1654: 2000 movs r0, #0
if (!(_system_clock_inst.dfll.control & SYSCTRL_DFLLCTRL_ENABLE))
1656: 079b lsls r3, r3, #30
1658: d520 bpl.n 169c <system_clock_source_get_hz+0x78>
while (!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY)) {
165a: 4913 ldr r1, [pc, #76] ; (16a8 <system_clock_source_get_hz+0x84>)
165c: 2210 movs r2, #16
165e: 68cb ldr r3, [r1, #12]
1660: 421a tst r2, r3
1662: d0fc beq.n 165e <system_clock_source_get_hz+0x3a>
switch(_system_clock_inst.dfll.control &
1664: 4b0f ldr r3, [pc, #60] ; (16a4 <system_clock_source_get_hz+0x80>)
1666: 681a ldr r2, [r3, #0]
1668: 2324 movs r3, #36 ; 0x24
166a: 4013 ands r3, r2
166c: 2b04 cmp r3, #4
166e: d001 beq.n 1674 <system_clock_source_get_hz+0x50>
return 48000000UL;
1670: 480f ldr r0, [pc, #60] ; (16b0 <system_clock_source_get_hz+0x8c>)
1672: e013 b.n 169c <system_clock_source_get_hz+0x78>
return system_gclk_chan_get_hz(SYSCTRL_GCLK_ID_DFLL48) *
1674: 2000 movs r0, #0
1676: 4b0f ldr r3, [pc, #60] ; (16b4 <system_clock_source_get_hz+0x90>)
1678: 4798 blx r3
(_system_clock_inst.dfll.mul & 0xffff);
167a: 4b0a ldr r3, [pc, #40] ; (16a4 <system_clock_source_get_hz+0x80>)
167c: 689b ldr r3, [r3, #8]
167e: 041b lsls r3, r3, #16
1680: 0c1b lsrs r3, r3, #16
return system_gclk_chan_get_hz(SYSCTRL_GCLK_ID_DFLL48) *
1682: 4358 muls r0, r3
1684: e00a b.n 169c <system_clock_source_get_hz+0x78>
if (!(SYSCTRL->DPLLSTATUS.reg & SYSCTRL_DPLLSTATUS_ENABLE)) {
1686: 2350 movs r3, #80 ; 0x50
1688: 4a07 ldr r2, [pc, #28] ; (16a8 <system_clock_source_get_hz+0x84>)
168a: 5cd3 ldrb r3, [r2, r3]
return 0;
168c: 2000 movs r0, #0
if (!(SYSCTRL->DPLLSTATUS.reg & SYSCTRL_DPLLSTATUS_ENABLE)) {
168e: 075b lsls r3, r3, #29
1690: d504 bpl.n 169c <system_clock_source_get_hz+0x78>
return _system_clock_inst.dpll.frequency;
1692: 4b04 ldr r3, [pc, #16] ; (16a4 <system_clock_source_get_hz+0x80>)
1694: 68d8 ldr r0, [r3, #12]
1696: e001 b.n 169c <system_clock_source_get_hz+0x78>
return 32768UL;
1698: 2080 movs r0, #128 ; 0x80
169a: 0200 lsls r0, r0, #8
}
}
169c: bd10 pop {r4, pc}
169e: 46c0 nop ; (mov r8, r8)
16a0: 000048ac .word 0x000048ac
16a4: 200000ac .word 0x200000ac
16a8: 40000800 .word 0x40000800
16ac: 007a1200 .word 0x007a1200
16b0: 02dc6c00 .word 0x02dc6c00
16b4: 00001a89 .word 0x00001a89
000016b8 <system_clock_source_osc8m_set_config>:
*
* \param[in] config OSC8M configuration structure containing the new config
*/
void system_clock_source_osc8m_set_config(
struct system_clock_source_osc8m_config *const config)
{
16b8: b570 push {r4, r5, r6, lr}
SYSCTRL_OSC8M_Type temp = SYSCTRL->OSC8M;
16ba: 490c ldr r1, [pc, #48] ; (16ec <system_clock_source_osc8m_set_config+0x34>)
16bc: 6a0b ldr r3, [r1, #32]
/* Use temporary struct to reduce register access */
temp.bit.PRESC = config->prescaler;
16be: 7804 ldrb r4, [r0, #0]
temp.bit.ONDEMAND = config->on_demand;
16c0: 7885 ldrb r5, [r0, #2]
temp.bit.RUNSTDBY = config->run_in_standby;
SYSCTRL->OSC8M = temp;
16c2: 7840 ldrb r0, [r0, #1]
16c4: 2201 movs r2, #1
16c6: 4010 ands r0, r2
16c8: 0180 lsls r0, r0, #6
16ca: 2640 movs r6, #64 ; 0x40
16cc: 43b3 bics r3, r6
16ce: 4303 orrs r3, r0
16d0: 402a ands r2, r5
16d2: 01d2 lsls r2, r2, #7
16d4: 2080 movs r0, #128 ; 0x80
16d6: 4383 bics r3, r0
16d8: 4313 orrs r3, r2
16da: 2203 movs r2, #3
16dc: 4022 ands r2, r4
16de: 0212 lsls r2, r2, #8
16e0: 4803 ldr r0, [pc, #12] ; (16f0 <system_clock_source_osc8m_set_config+0x38>)
16e2: 4003 ands r3, r0
16e4: 4313 orrs r3, r2
16e6: 620b str r3, [r1, #32]
}
16e8: bd70 pop {r4, r5, r6, pc}
16ea: 46c0 nop ; (mov r8, r8)
16ec: 40000800 .word 0x40000800
16f0: fffffcff .word 0xfffffcff
000016f4 <system_clock_source_enable>:
* device
*/
enum status_code system_clock_source_enable(
const enum system_clock_source clock_source)
{
switch (clock_source) {
16f4: 2808 cmp r0, #8
16f6: d803 bhi.n 1700 <system_clock_source_enable+0xc>
16f8: 0080 lsls r0, r0, #2
16fa: 4b25 ldr r3, [pc, #148] ; (1790 <system_clock_source_enable+0x9c>)
16fc: 581b ldr r3, [r3, r0]
16fe: 469f mov pc, r3
/* Always enabled */
return STATUS_OK;
default:
Assert(false);
return STATUS_ERR_INVALID_ARG;
1700: 2017 movs r0, #23
1702: e044 b.n 178e <system_clock_source_enable+0x9a>
SYSCTRL->OSC8M.reg |= SYSCTRL_OSC8M_ENABLE;
1704: 4a23 ldr r2, [pc, #140] ; (1794 <system_clock_source_enable+0xa0>)
1706: 6a13 ldr r3, [r2, #32]
1708: 2102 movs r1, #2
170a: 430b orrs r3, r1
170c: 6213 str r3, [r2, #32]
return STATUS_OK;
170e: 2000 movs r0, #0
1710: e03d b.n 178e <system_clock_source_enable+0x9a>
SYSCTRL->OSC32K.reg |= SYSCTRL_OSC32K_ENABLE;
1712: 4a20 ldr r2, [pc, #128] ; (1794 <system_clock_source_enable+0xa0>)
1714: 6993 ldr r3, [r2, #24]
1716: 2102 movs r1, #2
1718: 430b orrs r3, r1
171a: 6193 str r3, [r2, #24]
}
return STATUS_OK;
171c: 2000 movs r0, #0
break;
171e: e036 b.n 178e <system_clock_source_enable+0x9a>
SYSCTRL->XOSC.reg |= SYSCTRL_XOSC_ENABLE;
1720: 4a1c ldr r2, [pc, #112] ; (1794 <system_clock_source_enable+0xa0>)
1722: 8a13 ldrh r3, [r2, #16]
1724: 2102 movs r1, #2
1726: 430b orrs r3, r1
1728: 8213 strh r3, [r2, #16]
return STATUS_OK;
172a: 2000 movs r0, #0
break;
172c: e02f b.n 178e <system_clock_source_enable+0x9a>
SYSCTRL->XOSC32K.reg |= SYSCTRL_XOSC32K_ENABLE;
172e: 4a19 ldr r2, [pc, #100] ; (1794 <system_clock_source_enable+0xa0>)
1730: 8a93 ldrh r3, [r2, #20]
1732: 2102 movs r1, #2
1734: 430b orrs r3, r1
1736: 8293 strh r3, [r2, #20]
return STATUS_OK;
1738: 2000 movs r0, #0
break;
173a: e028 b.n 178e <system_clock_source_enable+0x9a>
_system_clock_inst.dfll.control |= SYSCTRL_DFLLCTRL_ENABLE;
173c: 4916 ldr r1, [pc, #88] ; (1798 <system_clock_source_enable+0xa4>)
173e: 680b ldr r3, [r1, #0]
1740: 2202 movs r2, #2
1742: 4313 orrs r3, r2
1744: 600b str r3, [r1, #0]
SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_ENABLE;
1746: 4b13 ldr r3, [pc, #76] ; (1794 <system_clock_source_enable+0xa0>)
1748: 849a strh r2, [r3, #36] ; 0x24
while (!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY)) {
174a: 0019 movs r1, r3
174c: 320e adds r2, #14
174e: 68cb ldr r3, [r1, #12]
1750: 421a tst r2, r3
1752: d0fc beq.n 174e <system_clock_source_enable+0x5a>
SYSCTRL->DFLLMUL.reg = _system_clock_inst.dfll.mul;
1754: 4a10 ldr r2, [pc, #64] ; (1798 <system_clock_source_enable+0xa4>)
1756: 6891 ldr r1, [r2, #8]
1758: 4b0e ldr r3, [pc, #56] ; (1794 <system_clock_source_enable+0xa0>)
175a: 62d9 str r1, [r3, #44] ; 0x2c
SYSCTRL->DFLLVAL.reg = _system_clock_inst.dfll.val;
175c: 6852 ldr r2, [r2, #4]
175e: 629a str r2, [r3, #40] ; 0x28
SYSCTRL->DFLLCTRL.reg = 0;
1760: 2200 movs r2, #0
1762: 849a strh r2, [r3, #36] ; 0x24
while (!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY)) {
1764: 0019 movs r1, r3
1766: 3210 adds r2, #16
1768: 68cb ldr r3, [r1, #12]
176a: 421a tst r2, r3
176c: d0fc beq.n 1768 <system_clock_source_enable+0x74>
SYSCTRL->DFLLCTRL.reg = _system_clock_inst.dfll.control;
176e: 4b0a ldr r3, [pc, #40] ; (1798 <system_clock_source_enable+0xa4>)
1770: 681b ldr r3, [r3, #0]
1772: b29b uxth r3, r3
1774: 4a07 ldr r2, [pc, #28] ; (1794 <system_clock_source_enable+0xa0>)
1776: 8493 strh r3, [r2, #36] ; 0x24
return STATUS_OK;
1778: 2000 movs r0, #0
177a: e008 b.n 178e <system_clock_source_enable+0x9a>
SYSCTRL->DPLLCTRLA.reg |= SYSCTRL_DPLLCTRLA_ENABLE;
177c: 4905 ldr r1, [pc, #20] ; (1794 <system_clock_source_enable+0xa0>)
177e: 2244 movs r2, #68 ; 0x44
1780: 5c8b ldrb r3, [r1, r2]
1782: 2002 movs r0, #2
1784: 4303 orrs r3, r0
1786: 548b strb r3, [r1, r2]
return STATUS_OK;
1788: 2000 movs r0, #0
break;
178a: e000 b.n 178e <system_clock_source_enable+0x9a>
return STATUS_OK;
178c: 2000 movs r0, #0
}
178e: 4770 bx lr
1790: 000048d0 .word 0x000048d0
1794: 40000800 .word 0x40000800
1798: 200000ac .word 0x200000ac
0000179c <system_clock_init>:
* \note OSC8M is always enabled and if user selects other clocks for GCLK generators,
* the OSC8M default enable can be disabled after system_clock_init. Make sure the
* clock switch successfully before disabling OSC8M.
*/
void system_clock_init(void)
{
179c: b530 push {r4, r5, lr}
179e: b085 sub sp, #20
/* Various bits in the INTFLAG register can be set to one at startup.
This will ensure that these bits are cleared */
SYSCTRL->INTFLAG.reg = SYSCTRL_INTFLAG_BOD33RDY | SYSCTRL_INTFLAG_BOD33DET |
17a0: 22c2 movs r2, #194 ; 0xc2
17a2: 00d2 lsls r2, r2, #3
17a4: 4b1a ldr r3, [pc, #104] ; (1810 <system_clock_init+0x74>)
17a6: 609a str r2, [r3, #8]
static inline void system_flash_set_waitstates(uint8_t wait_states)
{
Assert(NVMCTRL_CTRLB_RWS((uint32_t)wait_states) ==
((uint32_t)wait_states << NVMCTRL_CTRLB_RWS_Pos));
NVMCTRL->CTRLB.bit.RWS = wait_states;
17a8: 4a1a ldr r2, [pc, #104] ; (1814 <system_clock_init+0x78>)
17aa: 6853 ldr r3, [r2, #4]
17ac: 211e movs r1, #30
17ae: 438b bics r3, r1
17b0: 6053 str r3, [r2, #4]
gclk_conf.source_generator = GCLK_GENERATOR_1;
17b2: 2301 movs r3, #1
17b4: 466a mov r2, sp
17b6: 7013 strb r3, [r2, #0]
for (gclk_id = 0; gclk_id < GCLK_NUM; gclk_id++) {
17b8: 2400 movs r4, #0
system_gclk_chan_set_config(gclk_id, &gclk_conf);
17ba: 4d17 ldr r5, [pc, #92] ; (1818 <system_clock_init+0x7c>)
17bc: b2e0 uxtb r0, r4
17be: 4669 mov r1, sp
17c0: 47a8 blx r5
for (gclk_id = 0; gclk_id < GCLK_NUM; gclk_id++) {
17c2: 3401 adds r4, #1
17c4: 2c25 cmp r4, #37 ; 0x25
17c6: d1f9 bne.n 17bc <system_clock_init+0x20>
config->run_in_standby = false;
17c8: a803 add r0, sp, #12
17ca: 2400 movs r4, #0
17cc: 7044 strb r4, [r0, #1]
config->on_demand = true;
17ce: 2501 movs r5, #1
17d0: 7085 strb r5, [r0, #2]
/* OSC8M */
struct system_clock_source_osc8m_config osc8m_conf;
system_clock_source_osc8m_get_config_defaults(&osc8m_conf);
osc8m_conf.prescaler = CONF_CLOCK_OSC8M_PRESCALER;
17d2: 7004 strb r4, [r0, #0]
osc8m_conf.on_demand = CONF_CLOCK_OSC8M_ON_DEMAND;
osc8m_conf.run_in_standby = CONF_CLOCK_OSC8M_RUN_IN_STANDBY;
system_clock_source_osc8m_set_config(&osc8m_conf);
17d4: 4b11 ldr r3, [pc, #68] ; (181c <system_clock_init+0x80>)
17d6: 4798 blx r3
system_clock_source_enable(SYSTEM_CLOCK_SOURCE_OSC8M);
17d8: 2006 movs r0, #6
17da: 4b11 ldr r3, [pc, #68] ; (1820 <system_clock_init+0x84>)
17dc: 4798 blx r3
/* GCLK */
#if CONF_CLOCK_CONFIGURE_GCLK == true
system_gclk_init();
17de: 4b11 ldr r3, [pc, #68] ; (1824 <system_clock_init+0x88>)
17e0: 4798 blx r3
PM->CPUSEL.reg = (uint32_t)divider;
17e2: 4b11 ldr r3, [pc, #68] ; (1828 <system_clock_init+0x8c>)
17e4: 721c strb r4, [r3, #8]
PM->APBASEL.reg = (uint32_t)divider;
17e6: 725c strb r4, [r3, #9]
PM->APBBSEL.reg = (uint32_t)divider;
17e8: 729c strb r4, [r3, #10]
PM->APBCSEL.reg = (uint32_t)divider;
17ea: 72dc strb r4, [r3, #11]
{
/* Sanity check arguments */
Assert(config);
/* Default configuration values */
config->division_factor = 1;
17ec: 9501 str r5, [sp, #4]
config->high_when_disabled = false;
17ee: 466b mov r3, sp
17f0: 705c strb r4, [r3, #1]
#if SAML21 || SAML22 || SAMR30 || SAMR34 || SAMR35
config->source_clock = GCLK_SOURCE_OSC16M;
#elif (SAMC20) || (SAMC21)
config->source_clock = GCLK_SOURCE_OSC48M;
#else
config->source_clock = GCLK_SOURCE_OSC8M;
17f2: 2306 movs r3, #6
17f4: 466a mov r2, sp
17f6: 7013 strb r3, [r2, #0]
#endif
config->run_in_standby = false;
17f8: 7214 strb r4, [r2, #8]
config->output_enable = false;
17fa: 7254 strb r4, [r2, #9]
system_apb_clock_set_divider(SYSTEM_CLOCK_APB_APBC, CONF_CLOCK_APBC_DIVIDER);
/* GCLK 0 */
#if CONF_CLOCK_CONFIGURE_GCLK == true
/* Configure the main GCLK last as it might depend on other generators */
_CONF_CLOCK_GCLK_CONFIG(0, ~);
17fc: 4669 mov r1, sp
17fe: 2000 movs r0, #0
1800: 4b0a ldr r3, [pc, #40] ; (182c <system_clock_init+0x90>)
1802: 4798 blx r3
1804: 2000 movs r0, #0
1806: 4b0a ldr r3, [pc, #40] ; (1830 <system_clock_init+0x94>)
1808: 4798 blx r3
#endif
}
180a: b005 add sp, #20
180c: bd30 pop {r4, r5, pc}
180e: 46c0 nop ; (mov r8, r8)
1810: 40000800 .word 0x40000800
1814: 41004000 .word 0x41004000
1818: 00001a6d .word 0x00001a6d
181c: 000016b9 .word 0x000016b9
1820: 000016f5 .word 0x000016f5
1824: 00001835 .word 0x00001835
1828: 40000400 .word 0x40000400
182c: 00001859 .word 0x00001859
1830: 00001911 .word 0x00001911
00001834 <system_gclk_init>:
PM->APBAMASK.reg |= mask;
1834: 4a06 ldr r2, [pc, #24] ; (1850 <system_gclk_init+0x1c>)
1836: 6993 ldr r3, [r2, #24]
1838: 2108 movs r1, #8
183a: 430b orrs r3, r1
183c: 6193 str r3, [r2, #24]
{
/* Turn on the digital interface clock */
system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBA, PM_APBAMASK_GCLK);
/* Software reset the module to ensure it is re-initialized correctly */
GCLK->CTRL.reg = GCLK_CTRL_SWRST;
183e: 2201 movs r2, #1
1840: 4b04 ldr r3, [pc, #16] ; (1854 <system_gclk_init+0x20>)
1842: 701a strb r2, [r3, #0]
while (GCLK->CTRL.reg & GCLK_CTRL_SWRST) {
1844: 0019 movs r1, r3
1846: 780b ldrb r3, [r1, #0]
1848: 4213 tst r3, r2
184a: d1fc bne.n 1846 <system_gclk_init+0x12>
/* Wait for reset to complete */
}
}
184c: 4770 bx lr
184e: 46c0 nop ; (mov r8, r8)
1850: 40000400 .word 0x40000400
1854: 40000c00 .word 0x40000c00
00001858 <system_gclk_gen_set_config>:
* \param[in] config Configuration settings for the generator
*/
void system_gclk_gen_set_config(
const uint8_t generator,
struct system_gclk_gen_config *const config)
{
1858: b570 push {r4, r5, r6, lr}
185a: 0006 movs r6, r0
/* Sanity check arguments */
Assert(config);
/* Cache new register configurations to minimize sync requirements. */
uint32_t new_genctrl_config = (generator << GCLK_GENCTRL_ID_Pos);
185c: 0004 movs r4, r0
uint32_t new_gendiv_config = (generator << GCLK_GENDIV_ID_Pos);
/* Select the requested source clock for the generator */
new_genctrl_config |= config->source_clock << GCLK_GENCTRL_SRC_Pos;
185e: 780d ldrb r5, [r1, #0]
1860: 022d lsls r5, r5, #8
1862: 4305 orrs r5, r0
/* Configure the clock to be either high or low when disabled */
if (config->high_when_disabled) {
1864: 784b ldrb r3, [r1, #1]
1866: 2b00 cmp r3, #0
1868: d002 beq.n 1870 <system_gclk_gen_set_config+0x18>
new_genctrl_config |= GCLK_GENCTRL_OOV;
186a: 2380 movs r3, #128 ; 0x80
186c: 02db lsls r3, r3, #11
186e: 431d orrs r5, r3
}
/* Configure if the clock output to I/O pin should be enabled. */
if (config->output_enable) {
1870: 7a4b ldrb r3, [r1, #9]
1872: 2b00 cmp r3, #0
1874: d002 beq.n 187c <system_gclk_gen_set_config+0x24>
new_genctrl_config |= GCLK_GENCTRL_OE;
1876: 2380 movs r3, #128 ; 0x80
1878: 031b lsls r3, r3, #12
187a: 431d orrs r5, r3
}
/* Set division factor */
if (config->division_factor > 1) {
187c: 6848 ldr r0, [r1, #4]
187e: 2801 cmp r0, #1
1880: d910 bls.n 18a4 <system_gclk_gen_set_config+0x4c>
/* Check if division is a power of two */
if (((config->division_factor & (config->division_factor - 1)) == 0)) {
1882: 1e43 subs r3, r0, #1
1884: 4218 tst r0, r3
1886: d134 bne.n 18f2 <system_gclk_gen_set_config+0x9a>
* register */
uint32_t div2_count = 0;
uint32_t mask;
for (mask = (1UL << 1); mask < config->division_factor;
1888: 2802 cmp r0, #2
188a: d930 bls.n 18ee <system_gclk_gen_set_config+0x96>
188c: 2302 movs r3, #2
188e: 2200 movs r2, #0
mask <<= 1) {
div2_count++;
1890: 3201 adds r2, #1
mask <<= 1) {
1892: 005b lsls r3, r3, #1
for (mask = (1UL << 1); mask < config->division_factor;
1894: 4298 cmp r0, r3
1896: d8fb bhi.n 1890 <system_gclk_gen_set_config+0x38>
}
/* Set binary divider power of 2 division factor */
new_gendiv_config |= div2_count << GCLK_GENDIV_DIV_Pos;
1898: 0212 lsls r2, r2, #8
189a: 4332 orrs r2, r6
189c: 0014 movs r4, r2
new_genctrl_config |= GCLK_GENCTRL_DIVSEL;
189e: 2380 movs r3, #128 ; 0x80
18a0: 035b lsls r3, r3, #13
18a2: 431d orrs r5, r3
}
}
/* Enable or disable the clock in standby mode */
if (config->run_in_standby) {
18a4: 7a0b ldrb r3, [r1, #8]
18a6: 2b00 cmp r3, #0
18a8: d002 beq.n 18b0 <system_gclk_gen_set_config+0x58>
new_genctrl_config |= GCLK_GENCTRL_RUNSTDBY;
18aa: 2380 movs r3, #128 ; 0x80
18ac: 039b lsls r3, r3, #14
18ae: 431d orrs r5, r3
if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY){
18b0: 4a13 ldr r2, [pc, #76] ; (1900 <system_gclk_gen_set_config+0xa8>)
18b2: 7853 ldrb r3, [r2, #1]
}
while (system_gclk_is_syncing()) {
18b4: b25b sxtb r3, r3
18b6: 2b00 cmp r3, #0
18b8: dbfb blt.n 18b2 <system_gclk_gen_set_config+0x5a>
cpu_irq_enter_critical();
18ba: 4b12 ldr r3, [pc, #72] ; (1904 <system_gclk_gen_set_config+0xac>)
18bc: 4798 blx r3
};
system_interrupt_enter_critical_section();
/* Select the correct generator */
*((uint8_t*)&GCLK->GENDIV.reg) = generator;
18be: 4b12 ldr r3, [pc, #72] ; (1908 <system_gclk_gen_set_config+0xb0>)
18c0: 701e strb r6, [r3, #0]
if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY){
18c2: 4a0f ldr r2, [pc, #60] ; (1900 <system_gclk_gen_set_config+0xa8>)
18c4: 7853 ldrb r3, [r2, #1]
/* Write the new generator configuration */
while (system_gclk_is_syncing()) {
18c6: b25b sxtb r3, r3
18c8: 2b00 cmp r3, #0
18ca: dbfb blt.n 18c4 <system_gclk_gen_set_config+0x6c>
/* Wait for synchronization */
};
GCLK->GENDIV.reg = new_gendiv_config;
18cc: 4b0c ldr r3, [pc, #48] ; (1900 <system_gclk_gen_set_config+0xa8>)
18ce: 609c str r4, [r3, #8]
if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY){
18d0: 001a movs r2, r3
18d2: 7853 ldrb r3, [r2, #1]
while (system_gclk_is_syncing()) {
18d4: b25b sxtb r3, r3
18d6: 2b00 cmp r3, #0
18d8: dbfb blt.n 18d2 <system_gclk_gen_set_config+0x7a>
/* Wait for synchronization */
};
GCLK->GENCTRL.reg = new_genctrl_config | (GCLK->GENCTRL.reg & GCLK_GENCTRL_GENEN);
18da: 4a09 ldr r2, [pc, #36] ; (1900 <system_gclk_gen_set_config+0xa8>)
18dc: 6853 ldr r3, [r2, #4]
18de: 2180 movs r1, #128 ; 0x80
18e0: 0249 lsls r1, r1, #9
18e2: 400b ands r3, r1
18e4: 431d orrs r5, r3
18e6: 6055 str r5, [r2, #4]
cpu_irq_leave_critical();
18e8: 4b08 ldr r3, [pc, #32] ; (190c <system_gclk_gen_set_config+0xb4>)
18ea: 4798 blx r3
system_interrupt_leave_critical_section();
}
18ec: bd70 pop {r4, r5, r6, pc}
for (mask = (1UL << 1); mask < config->division_factor;
18ee: 2200 movs r2, #0
18f0: e7d2 b.n 1898 <system_gclk_gen_set_config+0x40>
(config->division_factor) << GCLK_GENDIV_DIV_Pos;
18f2: 0204 lsls r4, r0, #8
new_gendiv_config |=
18f4: 4334 orrs r4, r6
new_genctrl_config |= GCLK_GENCTRL_IDC;
18f6: 2380 movs r3, #128 ; 0x80
18f8: 029b lsls r3, r3, #10
18fa: 431d orrs r5, r3
18fc: e7d2 b.n 18a4 <system_gclk_gen_set_config+0x4c>
18fe: 46c0 nop ; (mov r8, r8)
1900: 40000c00 .word 0x40000c00
1904: 00001559 .word 0x00001559
1908: 40000c08 .word 0x40000c08
190c: 00001599 .word 0x00001599
00001910 <system_gclk_gen_enable>:
*
* \param[in] generator Generic Clock Generator index to enable
*/
void system_gclk_gen_enable(
const uint8_t generator)
{
1910: b510 push {r4, lr}
1912: 0004 movs r4, r0
if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY){
1914: 4a0b ldr r2, [pc, #44] ; (1944 <system_gclk_gen_enable+0x34>)
1916: 7853 ldrb r3, [r2, #1]
while (system_gclk_is_syncing()) {
1918: b25b sxtb r3, r3
191a: 2b00 cmp r3, #0
191c: dbfb blt.n 1916 <system_gclk_gen_enable+0x6>
cpu_irq_enter_critical();
191e: 4b0a ldr r3, [pc, #40] ; (1948 <system_gclk_gen_enable+0x38>)
1920: 4798 blx r3
};
system_interrupt_enter_critical_section();
/* Select the requested generator */
*((uint8_t*)&GCLK->GENCTRL.reg) = generator;
1922: 4b0a ldr r3, [pc, #40] ; (194c <system_gclk_gen_enable+0x3c>)
1924: 701c strb r4, [r3, #0]
if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY){
1926: 4a07 ldr r2, [pc, #28] ; (1944 <system_gclk_gen_enable+0x34>)
1928: 7853 ldrb r3, [r2, #1]
while (system_gclk_is_syncing()) {
192a: b25b sxtb r3, r3
192c: 2b00 cmp r3, #0
192e: dbfb blt.n 1928 <system_gclk_gen_enable+0x18>
/* Wait for synchronization */
};
/* Enable generator */
GCLK->GENCTRL.reg |= GCLK_GENCTRL_GENEN;
1930: 4a04 ldr r2, [pc, #16] ; (1944 <system_gclk_gen_enable+0x34>)
1932: 6851 ldr r1, [r2, #4]
1934: 2380 movs r3, #128 ; 0x80
1936: 025b lsls r3, r3, #9
1938: 430b orrs r3, r1
193a: 6053 str r3, [r2, #4]
cpu_irq_leave_critical();
193c: 4b04 ldr r3, [pc, #16] ; (1950 <system_gclk_gen_enable+0x40>)
193e: 4798 blx r3
system_interrupt_leave_critical_section();
}
1940: bd10 pop {r4, pc}
1942: 46c0 nop ; (mov r8, r8)
1944: 40000c00 .word 0x40000c00
1948: 00001559 .word 0x00001559
194c: 40000c04 .word 0x40000c04
1950: 00001599 .word 0x00001599
00001954 <system_gclk_gen_get_hz>:
*
* \return The frequency of the generic clock generator, in Hz.
*/
uint32_t system_gclk_gen_get_hz(
const uint8_t generator)
{
1954: b570 push {r4, r5, r6, lr}
1956: 0004 movs r4, r0
if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY){
1958: 4a1a ldr r2, [pc, #104] ; (19c4 <system_gclk_gen_get_hz+0x70>)
195a: 7853 ldrb r3, [r2, #1]
while (system_gclk_is_syncing()) {
195c: b25b sxtb r3, r3
195e: 2b00 cmp r3, #0
1960: dbfb blt.n 195a <system_gclk_gen_get_hz+0x6>
cpu_irq_enter_critical();
1962: 4b19 ldr r3, [pc, #100] ; (19c8 <system_gclk_gen_get_hz+0x74>)
1964: 4798 blx r3
};
system_interrupt_enter_critical_section();
/* Select the appropriate generator */
*((uint8_t*)&GCLK->GENCTRL.reg) = generator;
1966: 4b19 ldr r3, [pc, #100] ; (19cc <system_gclk_gen_get_hz+0x78>)
1968: 701c strb r4, [r3, #0]
if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY){
196a: 4a16 ldr r2, [pc, #88] ; (19c4 <system_gclk_gen_get_hz+0x70>)
196c: 7853 ldrb r3, [r2, #1]
while (system_gclk_is_syncing()) {
196e: b25b sxtb r3, r3
1970: 2b00 cmp r3, #0
1972: dbfb blt.n 196c <system_gclk_gen_get_hz+0x18>
/* Wait for synchronization */
};
/* Get the frequency of the source connected to the GCLK generator */
uint32_t gen_input_hz = system_clock_source_get_hz(
(enum system_clock_source)GCLK->GENCTRL.bit.SRC);
1974: 4e13 ldr r6, [pc, #76] ; (19c4 <system_gclk_gen_get_hz+0x70>)
1976: 6870 ldr r0, [r6, #4]
1978: 04c0 lsls r0, r0, #19
197a: 0ec0 lsrs r0, r0, #27
uint32_t gen_input_hz = system_clock_source_get_hz(
197c: 4b14 ldr r3, [pc, #80] ; (19d0 <system_gclk_gen_get_hz+0x7c>)
197e: 4798 blx r3
1980: 0005 movs r5, r0
*((uint8_t*)&GCLK->GENCTRL.reg) = generator;
1982: 4b12 ldr r3, [pc, #72] ; (19cc <system_gclk_gen_get_hz+0x78>)
1984: 701c strb r4, [r3, #0]
uint8_t divsel = GCLK->GENCTRL.bit.DIVSEL;
1986: 6876 ldr r6, [r6, #4]
1988: 02f6 lsls r6, r6, #11
198a: 0ff6 lsrs r6, r6, #31
/* Select the appropriate generator division register */
*((uint8_t*)&GCLK->GENDIV.reg) = generator;
198c: 4b11 ldr r3, [pc, #68] ; (19d4 <system_gclk_gen_get_hz+0x80>)
198e: 701c strb r4, [r3, #0]
if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY){
1990: 4a0c ldr r2, [pc, #48] ; (19c4 <system_gclk_gen_get_hz+0x70>)
1992: 7853 ldrb r3, [r2, #1]
while (system_gclk_is_syncing()) {
1994: b25b sxtb r3, r3
1996: 2b00 cmp r3, #0
1998: dbfb blt.n 1992 <system_gclk_gen_get_hz+0x3e>
/* Wait for synchronization */
};
uint32_t divider = GCLK->GENDIV.bit.DIV;
199a: 4b0a ldr r3, [pc, #40] ; (19c4 <system_gclk_gen_get_hz+0x70>)
199c: 689c ldr r4, [r3, #8]
199e: 0224 lsls r4, r4, #8
19a0: 0c24 lsrs r4, r4, #16
cpu_irq_leave_critical();
19a2: 4b0d ldr r3, [pc, #52] ; (19d8 <system_gclk_gen_get_hz+0x84>)
19a4: 4798 blx r3
system_interrupt_leave_critical_section();
/* Check if the generator is using fractional or binary division */
if (!divsel && divider > 1) {
19a6: 2e00 cmp r6, #0
19a8: d107 bne.n 19ba <system_gclk_gen_get_hz+0x66>
19aa: 2c01 cmp r4, #1
19ac: d907 bls.n 19be <system_gclk_gen_get_hz+0x6a>
gen_input_hz /= divider;
19ae: 0021 movs r1, r4
19b0: 0028 movs r0, r5
19b2: 4b0a ldr r3, [pc, #40] ; (19dc <system_gclk_gen_get_hz+0x88>)
19b4: 4798 blx r3
19b6: 0005 movs r5, r0
19b8: e001 b.n 19be <system_gclk_gen_get_hz+0x6a>
} else if (divsel) {
gen_input_hz >>= (divider+1);
19ba: 3401 adds r4, #1
19bc: 40e5 lsrs r5, r4
}
return gen_input_hz;
}
19be: 0028 movs r0, r5
19c0: bd70 pop {r4, r5, r6, pc}
19c2: 46c0 nop ; (mov r8, r8)
19c4: 40000c00 .word 0x40000c00
19c8: 00001559 .word 0x00001559
19cc: 40000c04 .word 0x40000c04
19d0: 00001625 .word 0x00001625
19d4: 40000c08 .word 0x40000c08
19d8: 00001599 .word 0x00001599
19dc: 00001d45 .word 0x00001d45
000019e0 <system_gclk_chan_enable>:
*
* \param[in] channel Generic Clock channel to enable
*/
void system_gclk_chan_enable(
const uint8_t channel)
{
19e0: b510 push {r4, lr}
19e2: 0004 movs r4, r0
cpu_irq_enter_critical();
19e4: 4b06 ldr r3, [pc, #24] ; (1a00 <system_gclk_chan_enable+0x20>)
19e6: 4798 blx r3
system_interrupt_enter_critical_section();
/* Select the requested generator channel */
*((uint8_t*)&GCLK->CLKCTRL.reg) = channel;
19e8: 4b06 ldr r3, [pc, #24] ; (1a04 <system_gclk_chan_enable+0x24>)
19ea: 701c strb r4, [r3, #0]
/* Enable the generic clock */
GCLK->CLKCTRL.reg |= GCLK_CLKCTRL_CLKEN;
19ec: 4a06 ldr r2, [pc, #24] ; (1a08 <system_gclk_chan_enable+0x28>)
19ee: 8853 ldrh r3, [r2, #2]
19f0: 2180 movs r1, #128 ; 0x80
19f2: 01c9 lsls r1, r1, #7
19f4: 430b orrs r3, r1
19f6: 8053 strh r3, [r2, #2]
cpu_irq_leave_critical();
19f8: 4b04 ldr r3, [pc, #16] ; (1a0c <system_gclk_chan_enable+0x2c>)
19fa: 4798 blx r3
system_interrupt_leave_critical_section();
}
19fc: bd10 pop {r4, pc}
19fe: 46c0 nop ; (mov r8, r8)
1a00: 00001559 .word 0x00001559
1a04: 40000c02 .word 0x40000c02
1a08: 40000c00 .word 0x40000c00
1a0c: 00001599 .word 0x00001599
00001a10 <system_gclk_chan_disable>:
*
* \param[in] channel Generic Clock channel to disable
*/
void system_gclk_chan_disable(
const uint8_t channel)
{
1a10: b510 push {r4, lr}
1a12: 0004 movs r4, r0
cpu_irq_enter_critical();
1a14: 4b0f ldr r3, [pc, #60] ; (1a54 <system_gclk_chan_disable+0x44>)
1a16: 4798 blx r3
system_interrupt_enter_critical_section();
/* Select the requested generator channel */
*((uint8_t*)&GCLK->CLKCTRL.reg) = channel;
1a18: 4b0f ldr r3, [pc, #60] ; (1a58 <system_gclk_chan_disable+0x48>)
1a1a: 701c strb r4, [r3, #0]
/* Sanity check WRTLOCK */
Assert(!GCLK->CLKCTRL.bit.WRTLOCK);
/* Switch to known-working source so that the channel can be disabled */
uint32_t prev_gen_id = GCLK->CLKCTRL.bit.GEN;
1a1c: 4a0f ldr r2, [pc, #60] ; (1a5c <system_gclk_chan_disable+0x4c>)
1a1e: 8853 ldrh r3, [r2, #2]
1a20: 051b lsls r3, r3, #20
1a22: 0f18 lsrs r0, r3, #28
GCLK->CLKCTRL.bit.GEN = 0;
1a24: 8853 ldrh r3, [r2, #2]
1a26: 490e ldr r1, [pc, #56] ; (1a60 <system_gclk_chan_disable+0x50>)
1a28: 400b ands r3, r1
1a2a: 8053 strh r3, [r2, #2]
/* Disable the generic clock */
GCLK->CLKCTRL.reg &= ~GCLK_CLKCTRL_CLKEN;
1a2c: 8853 ldrh r3, [r2, #2]
1a2e: 490d ldr r1, [pc, #52] ; (1a64 <system_gclk_chan_disable+0x54>)
1a30: 400b ands r3, r1
1a32: 8053 strh r3, [r2, #2]
while (GCLK->CLKCTRL.reg & GCLK_CLKCTRL_CLKEN) {
1a34: 0011 movs r1, r2
1a36: 2280 movs r2, #128 ; 0x80
1a38: 01d2 lsls r2, r2, #7
1a3a: 884b ldrh r3, [r1, #2]
1a3c: 4213 tst r3, r2
1a3e: d1fc bne.n 1a3a <system_gclk_chan_disable+0x2a>
/* Wait for clock to become disabled */
}
/* Restore previous configured clock generator */
GCLK->CLKCTRL.bit.GEN = prev_gen_id;
1a40: 4906 ldr r1, [pc, #24] ; (1a5c <system_gclk_chan_disable+0x4c>)
1a42: 884a ldrh r2, [r1, #2]
1a44: 0203 lsls r3, r0, #8
1a46: 4806 ldr r0, [pc, #24] ; (1a60 <system_gclk_chan_disable+0x50>)
1a48: 4002 ands r2, r0
1a4a: 4313 orrs r3, r2
1a4c: 804b strh r3, [r1, #2]
cpu_irq_leave_critical();
1a4e: 4b06 ldr r3, [pc, #24] ; (1a68 <system_gclk_chan_disable+0x58>)
1a50: 4798 blx r3
system_interrupt_leave_critical_section();
}
1a52: bd10 pop {r4, pc}
1a54: 00001559 .word 0x00001559
1a58: 40000c02 .word 0x40000c02
1a5c: 40000c00 .word 0x40000c00
1a60: fffff0ff .word 0xfffff0ff
1a64: ffffbfff .word 0xffffbfff
1a68: 00001599 .word 0x00001599
00001a6c <system_gclk_chan_set_config>:
{
1a6c: b510 push {r4, lr}
new_clkctrl_config |= config->source_generator << GCLK_CLKCTRL_GEN_Pos;
1a6e: 780c ldrb r4, [r1, #0]
1a70: 0224 lsls r4, r4, #8
1a72: 4304 orrs r4, r0
system_gclk_chan_disable(channel);
1a74: 4b02 ldr r3, [pc, #8] ; (1a80 <system_gclk_chan_set_config+0x14>)
1a76: 4798 blx r3
GCLK->CLKCTRL.reg = new_clkctrl_config;
1a78: b2a4 uxth r4, r4
1a7a: 4b02 ldr r3, [pc, #8] ; (1a84 <system_gclk_chan_set_config+0x18>)
1a7c: 805c strh r4, [r3, #2]
}
1a7e: bd10 pop {r4, pc}
1a80: 00001a11 .word 0x00001a11
1a84: 40000c00 .word 0x40000c00
00001a88 <system_gclk_chan_get_hz>:
*
* \return The frequency of the generic clock channel, in Hz.
*/
uint32_t system_gclk_chan_get_hz(
const uint8_t channel)
{
1a88: b510 push {r4, lr}
1a8a: 0004 movs r4, r0
cpu_irq_enter_critical();
1a8c: 4b06 ldr r3, [pc, #24] ; (1aa8 <system_gclk_chan_get_hz+0x20>)
1a8e: 4798 blx r3
uint8_t gen_id;
system_interrupt_enter_critical_section();
/* Select the requested generic clock channel */
*((uint8_t*)&GCLK->CLKCTRL.reg) = channel;
1a90: 4b06 ldr r3, [pc, #24] ; (1aac <system_gclk_chan_get_hz+0x24>)
1a92: 701c strb r4, [r3, #0]
gen_id = GCLK->CLKCTRL.bit.GEN;
1a94: 4b06 ldr r3, [pc, #24] ; (1ab0 <system_gclk_chan_get_hz+0x28>)
1a96: 885c ldrh r4, [r3, #2]
1a98: 0524 lsls r4, r4, #20
1a9a: 0f24 lsrs r4, r4, #28
cpu_irq_leave_critical();
1a9c: 4b05 ldr r3, [pc, #20] ; (1ab4 <system_gclk_chan_get_hz+0x2c>)
1a9e: 4798 blx r3
system_interrupt_leave_critical_section();
/* Return the clock speed of the associated GCLK generator */
return system_gclk_gen_get_hz(gen_id);
1aa0: 0020 movs r0, r4
1aa2: 4b05 ldr r3, [pc, #20] ; (1ab8 <system_gclk_chan_get_hz+0x30>)
1aa4: 4798 blx r3
}
1aa6: bd10 pop {r4, pc}
1aa8: 00001559 .word 0x00001559
1aac: 40000c02 .word 0x40000c02
1ab0: 40000c00 .word 0x40000c00
1ab4: 00001599 .word 0x00001599
1ab8: 00001955 .word 0x00001955
00001abc <_system_pinmux_config>:
*/
static void _system_pinmux_config(
PortGroup *const port,
const uint32_t pin_mask,
const struct system_pinmux_config *const config)
{
1abc: b530 push {r4, r5, lr}
/* Track the configuration bits into a temporary variable before writing */
uint32_t pin_cfg = 0;
/* Enabled powersave mode, don't create configuration */
if (!config->powersave) {
1abe: 78d3 ldrb r3, [r2, #3]
1ac0: 2b00 cmp r3, #0
1ac2: d135 bne.n 1b30 <_system_pinmux_config+0x74>
/* Enable the pin peripheral MUX flag if non-GPIO selected (pinmux will
* be written later) and store the new MUX mask */
if (config->mux_position != SYSTEM_PINMUX_GPIO) {
1ac4: 7813 ldrb r3, [r2, #0]
1ac6: 2b80 cmp r3, #128 ; 0x80
1ac8: d029 beq.n 1b1e <_system_pinmux_config+0x62>
pin_cfg |= PORT_WRCONFIG_PMUXEN;
pin_cfg |= (config->mux_position << PORT_WRCONFIG_PMUX_Pos);
1aca: 061b lsls r3, r3, #24
1acc: 2480 movs r4, #128 ; 0x80
1ace: 0264 lsls r4, r4, #9
1ad0: 4323 orrs r3, r4
}
/* Check if the user has requested that the input buffer be enabled */
if ((config->direction == SYSTEM_PINMUX_PIN_DIR_INPUT) ||
1ad2: 7854 ldrb r4, [r2, #1]
1ad4: 2502 movs r5, #2
1ad6: 43ac bics r4, r5
1ad8: d106 bne.n 1ae8 <_system_pinmux_config+0x2c>
(config->direction == SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK)) {
/* Enable input buffer flag */
pin_cfg |= PORT_WRCONFIG_INEN;
/* Enable pull-up/pull-down control flag if requested */
if (config->input_pull != SYSTEM_PINMUX_PIN_PULL_NONE) {
1ada: 7894 ldrb r4, [r2, #2]
1adc: 2c00 cmp r4, #0
1ade: d120 bne.n 1b22 <_system_pinmux_config+0x66>
pin_cfg |= PORT_WRCONFIG_INEN;
1ae0: 2480 movs r4, #128 ; 0x80
1ae2: 02a4 lsls r4, r4, #10
1ae4: 4323 orrs r3, r4
pin_cfg |= PORT_WRCONFIG_PULLEN;
}
/* Clear the port DIR bits to disable the output buffer */
port->DIRCLR.reg = pin_mask;
1ae6: 6041 str r1, [r0, #4]
}
/* Check if the user has requested that the output buffer be enabled */
if ((config->direction == SYSTEM_PINMUX_PIN_DIR_OUTPUT) ||
1ae8: 7854 ldrb r4, [r2, #1]
1aea: 3c01 subs r4, #1
1aec: 2c01 cmp r4, #1
1aee: d91c bls.n 1b2a <_system_pinmux_config+0x6e>
port->DIRCLR.reg = pin_mask;
}
/* The Write Configuration register (WRCONFIG) requires the
* pins to to grouped into two 16-bit half-words - split them out here */
uint32_t lower_pin_mask = (pin_mask & 0xFFFF);
1af0: 040d lsls r5, r1, #16
1af2: 0c2d lsrs r5, r5, #16
/* Configure the lower 16-bits of the port to the desired configuration,
* including the pin peripheral multiplexer just in case it is enabled */
port->WRCONFIG.reg
= (lower_pin_mask << PORT_WRCONFIG_PINMASK_Pos) |
pin_cfg | PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_WRPINCFG;
1af4: 24a0 movs r4, #160 ; 0xa0
1af6: 05e4 lsls r4, r4, #23
1af8: 432c orrs r4, r5
1afa: 431c orrs r4, r3
= (lower_pin_mask << PORT_WRCONFIG_PINMASK_Pos) |
1afc: 6284 str r4, [r0, #40] ; 0x28
uint32_t upper_pin_mask = (pin_mask >> 16);
1afe: 0c0d lsrs r5, r1, #16
/* Configure the upper 16-bits of the port to the desired configuration,
* including the pin peripheral multiplexer just in case it is enabled */
port->WRCONFIG.reg
= (upper_pin_mask << PORT_WRCONFIG_PINMASK_Pos) |
pin_cfg | PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_WRPINCFG |
1b00: 24d0 movs r4, #208 ; 0xd0
1b02: 0624 lsls r4, r4, #24
1b04: 432c orrs r4, r5
1b06: 431c orrs r4, r3
= (upper_pin_mask << PORT_WRCONFIG_PINMASK_Pos) |
1b08: 6284 str r4, [r0, #40] ; 0x28
PORT_WRCONFIG_HWSEL;
if(!config->powersave) {
1b0a: 78d4 ldrb r4, [r2, #3]
1b0c: 2c00 cmp r4, #0
1b0e: d122 bne.n 1b56 <_system_pinmux_config+0x9a>
/* Set the pull-up state once the port pins are configured if one was
* requested and it does not violate the valid set of port
* configurations */
if (pin_cfg & PORT_WRCONFIG_PULLEN) {
1b10: 035b lsls r3, r3, #13
1b12: d51c bpl.n 1b4e <_system_pinmux_config+0x92>
/* Set the OUT register bits to enable the pull-up if requested,
* clear to enable pull-down */
if (config->input_pull == SYSTEM_PINMUX_PIN_PULL_UP) {
1b14: 7893 ldrb r3, [r2, #2]
1b16: 2b01 cmp r3, #1
1b18: d01e beq.n 1b58 <_system_pinmux_config+0x9c>
port->OUTSET.reg = pin_mask;
} else {
port->OUTCLR.reg = pin_mask;
1b1a: 6141 str r1, [r0, #20]
1b1c: e017 b.n 1b4e <_system_pinmux_config+0x92>
uint32_t pin_cfg = 0;
1b1e: 2300 movs r3, #0
1b20: e7d7 b.n 1ad2 <_system_pinmux_config+0x16>
pin_cfg |= PORT_WRCONFIG_PULLEN;
1b22: 24c0 movs r4, #192 ; 0xc0
1b24: 02e4 lsls r4, r4, #11
1b26: 4323 orrs r3, r4
1b28: e7dd b.n 1ae6 <_system_pinmux_config+0x2a>
pin_cfg &= ~PORT_WRCONFIG_PULLEN;
1b2a: 4c0d ldr r4, [pc, #52] ; (1b60 <_system_pinmux_config+0xa4>)
1b2c: 4023 ands r3, r4
1b2e: e7df b.n 1af0 <_system_pinmux_config+0x34>
port->DIRCLR.reg = pin_mask;
1b30: 6041 str r1, [r0, #4]
uint32_t lower_pin_mask = (pin_mask & 0xFFFF);
1b32: 040c lsls r4, r1, #16
1b34: 0c24 lsrs r4, r4, #16
pin_cfg | PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_WRPINCFG;
1b36: 23a0 movs r3, #160 ; 0xa0
1b38: 05db lsls r3, r3, #23
1b3a: 4323 orrs r3, r4
= (lower_pin_mask << PORT_WRCONFIG_PINMASK_Pos) |
1b3c: 6283 str r3, [r0, #40] ; 0x28
uint32_t upper_pin_mask = (pin_mask >> 16);
1b3e: 0c0c lsrs r4, r1, #16
pin_cfg | PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_WRPINCFG |
1b40: 23d0 movs r3, #208 ; 0xd0
1b42: 061b lsls r3, r3, #24
1b44: 4323 orrs r3, r4
= (upper_pin_mask << PORT_WRCONFIG_PINMASK_Pos) |
1b46: 6283 str r3, [r0, #40] ; 0x28
if(!config->powersave) {
1b48: 78d3 ldrb r3, [r2, #3]
1b4a: 2b00 cmp r3, #0
1b4c: d103 bne.n 1b56 <_system_pinmux_config+0x9a>
}
}
/* Check if the user has requested that the output buffer be enabled */
if ((config->direction == SYSTEM_PINMUX_PIN_DIR_OUTPUT) ||
1b4e: 7853 ldrb r3, [r2, #1]
1b50: 3b01 subs r3, #1
1b52: 2b01 cmp r3, #1
1b54: d902 bls.n 1b5c <_system_pinmux_config+0xa0>
(config->direction == SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK)) {
/* Set the port DIR bits to enable the output buffer */
port->DIRSET.reg = pin_mask;
}
}
}
1b56: bd30 pop {r4, r5, pc}
port->OUTSET.reg = pin_mask;
1b58: 6181 str r1, [r0, #24]
1b5a: e7f8 b.n 1b4e <_system_pinmux_config+0x92>
port->DIRSET.reg = pin_mask;
1b5c: 6081 str r1, [r0, #8]
}
1b5e: e7fa b.n 1b56 <_system_pinmux_config+0x9a>
1b60: fffbffff .word 0xfffbffff
00001b64 <system_pinmux_pin_set_config>:
* \param[in] config Configuration settings for the pin
*/
void system_pinmux_pin_set_config(
const uint8_t gpio_pin,
const struct system_pinmux_config *const config)
{
1b64: b510 push {r4, lr}
1b66: 000a movs r2, r1
uint8_t group_index = (gpio_pin / 32);
/* Array of available ports */
Port *const ports[PORT_INST_NUM] = PORT_INSTS;
if (port_index < PORT_INST_NUM) {
1b68: 09c1 lsrs r1, r0, #7
return &(ports[port_index]->Group[group_index]);
} else {
Assert(false);
return NULL;
1b6a: 2300 movs r3, #0
if (port_index < PORT_INST_NUM) {
1b6c: 2900 cmp r1, #0
1b6e: d104 bne.n 1b7a <system_pinmux_pin_set_config+0x16>
return &(ports[port_index]->Group[group_index]);
1b70: 0943 lsrs r3, r0, #5
1b72: 01db lsls r3, r3, #7
1b74: 4905 ldr r1, [pc, #20] ; (1b8c <system_pinmux_pin_set_config+0x28>)
1b76: 468c mov ip, r1
1b78: 4463 add r3, ip
PortGroup *const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);
uint32_t pin_mask = (1UL << (gpio_pin % 32));
1b7a: 241f movs r4, #31
1b7c: 4020 ands r0, r4
1b7e: 2101 movs r1, #1
1b80: 4081 lsls r1, r0
_system_pinmux_config(port, pin_mask, config);
1b82: 0018 movs r0, r3
1b84: 4b02 ldr r3, [pc, #8] ; (1b90 <system_pinmux_pin_set_config+0x2c>)
1b86: 4798 blx r3
}
1b88: bd10 pop {r4, pc}
1b8a: 46c0 nop ; (mov r8, r8)
1b8c: 41004400 .word 0x41004400
1b90: 00001abd .word 0x00001abd
00001b94 <_system_dummy_init>:
*/
void _system_dummy_init(void);
void _system_dummy_init(void)
{
return;
}
1b94: 4770 bx lr
...
00001b98 <system_init>:
* - Board hardware initialization (via the Board module)
* - Event system driver initialization (via the EVSYS module)
* - External Interrupt driver initialization (via the EXTINT module)
*/
void system_init(void)
{
1b98: b510 push {r4, lr}
/* Configure GCLK and clock sources according to conf_clocks.h */
system_clock_init();
1b9a: 4b05 ldr r3, [pc, #20] ; (1bb0 <system_init+0x18>)
1b9c: 4798 blx r3
/* Initialize board hardware */
system_board_init();
1b9e: 4b05 ldr r3, [pc, #20] ; (1bb4 <system_init+0x1c>)
1ba0: 4798 blx r3
/* Initialize EVSYS hardware */
_system_events_init();
1ba2: 4b05 ldr r3, [pc, #20] ; (1bb8 <system_init+0x20>)
1ba4: 4798 blx r3
/* Initialize External hardware */
_system_extint_init();
1ba6: 4b05 ldr r3, [pc, #20] ; (1bbc <system_init+0x24>)
1ba8: 4798 blx r3
/* Initialize DIVAS hardware */
_system_divas_init();
1baa: 4b05 ldr r3, [pc, #20] ; (1bc0 <system_init+0x28>)
1bac: 4798 blx r3
}
1bae: bd10 pop {r4, pc}
1bb0: 0000179d .word 0x0000179d
1bb4: 000015c9 .word 0x000015c9
1bb8: 00001b95 .word 0x00001b95
1bbc: 00001b95 .word 0x00001b95
1bc0: 00001b95 .word 0x00001b95
00001bc4 <Dummy_Handler>:
/**
* \brief Default interrupt handler for unused IRQs.
*/
void Dummy_Handler(void)
{
1bc4: e7fe b.n 1bc4 <Dummy_Handler>
...
00001bc8 <Reset_Handler>:
{
1bc8: b5f8 push {r3, r4, r5, r6, r7, lr}
if (pSrc != pDest) {
1bca: 4a2a ldr r2, [pc, #168] ; (1c74 <Reset_Handler+0xac>)
1bcc: 4b2a ldr r3, [pc, #168] ; (1c78 <Reset_Handler+0xb0>)
1bce: 429a cmp r2, r3
1bd0: d011 beq.n 1bf6 <Reset_Handler+0x2e>
for (; pDest < &_erelocate;) {
1bd2: 001a movs r2, r3
1bd4: 4b29 ldr r3, [pc, #164] ; (1c7c <Reset_Handler+0xb4>)
1bd6: 429a cmp r2, r3
1bd8: d20d bcs.n 1bf6 <Reset_Handler+0x2e>
1bda: 4a29 ldr r2, [pc, #164] ; (1c80 <Reset_Handler+0xb8>)
1bdc: 3303 adds r3, #3
1bde: 1a9b subs r3, r3, r2
1be0: 089b lsrs r3, r3, #2
1be2: 3301 adds r3, #1
1be4: 009b lsls r3, r3, #2
1be6: 2200 movs r2, #0
*pDest++ = *pSrc++;
1be8: 4823 ldr r0, [pc, #140] ; (1c78 <Reset_Handler+0xb0>)
1bea: 4922 ldr r1, [pc, #136] ; (1c74 <Reset_Handler+0xac>)
1bec: 588c ldr r4, [r1, r2]
1bee: 5084 str r4, [r0, r2]
1bf0: 3204 adds r2, #4
for (; pDest < &_erelocate;) {
1bf2: 429a cmp r2, r3
1bf4: d1fa bne.n 1bec <Reset_Handler+0x24>
for (pDest = &_szero; pDest < &_ezero;) {
1bf6: 4a23 ldr r2, [pc, #140] ; (1c84 <Reset_Handler+0xbc>)
1bf8: 4b23 ldr r3, [pc, #140] ; (1c88 <Reset_Handler+0xc0>)
1bfa: 429a cmp r2, r3
1bfc: d20a bcs.n 1c14 <Reset_Handler+0x4c>
1bfe: 43d3 mvns r3, r2
1c00: 4921 ldr r1, [pc, #132] ; (1c88 <Reset_Handler+0xc0>)
1c02: 185b adds r3, r3, r1
1c04: 2103 movs r1, #3
1c06: 438b bics r3, r1
1c08: 3304 adds r3, #4
1c0a: 189b adds r3, r3, r2
*pDest++ = 0;
1c0c: 2100 movs r1, #0
1c0e: c202 stmia r2!, {r1}
for (pDest = &_szero; pDest < &_ezero;) {
1c10: 4293 cmp r3, r2
1c12: d1fc bne.n 1c0e <Reset_Handler+0x46>
SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);
1c14: 4a1d ldr r2, [pc, #116] ; (1c8c <Reset_Handler+0xc4>)
1c16: 21ff movs r1, #255 ; 0xff
1c18: 4b1d ldr r3, [pc, #116] ; (1c90 <Reset_Handler+0xc8>)
1c1a: 438b bics r3, r1
1c1c: 6093 str r3, [r2, #8]
SBMATRIX->SFR[SBMATRIX_SLAVE_HMCRAMC0].reg = 2;
1c1e: 39fd subs r1, #253 ; 0xfd
1c20: 2390 movs r3, #144 ; 0x90
1c22: 005b lsls r3, r3, #1
1c24: 4a1b ldr r2, [pc, #108] ; (1c94 <Reset_Handler+0xcc>)
1c26: 50d1 str r1, [r2, r3]
USB->DEVICE.QOSCTRL.bit.CQOS = 2;
1c28: 4a1b ldr r2, [pc, #108] ; (1c98 <Reset_Handler+0xd0>)
1c2a: 78d3 ldrb r3, [r2, #3]
1c2c: 2503 movs r5, #3
1c2e: 43ab bics r3, r5
1c30: 2402 movs r4, #2
1c32: 4323 orrs r3, r4
1c34: 70d3 strb r3, [r2, #3]
USB->DEVICE.QOSCTRL.bit.DQOS = 2;
1c36: 78d3 ldrb r3, [r2, #3]
1c38: 270c movs r7, #12
1c3a: 43bb bics r3, r7
1c3c: 2608 movs r6, #8
1c3e: 4333 orrs r3, r6
1c40: 70d3 strb r3, [r2, #3]
DMAC->QOSCTRL.bit.DQOS = 2;
1c42: 4b16 ldr r3, [pc, #88] ; (1c9c <Reset_Handler+0xd4>)
1c44: 7b98 ldrb r0, [r3, #14]
1c46: 2230 movs r2, #48 ; 0x30
1c48: 4390 bics r0, r2
1c4a: 2220 movs r2, #32
1c4c: 4310 orrs r0, r2
1c4e: 7398 strb r0, [r3, #14]
DMAC->QOSCTRL.bit.FQOS = 2;
1c50: 7b99 ldrb r1, [r3, #14]
1c52: 43b9 bics r1, r7
1c54: 4331 orrs r1, r6
1c56: 7399 strb r1, [r3, #14]
DMAC->QOSCTRL.bit.WRBQOS = 2;
1c58: 7b9a ldrb r2, [r3, #14]
1c5a: 43aa bics r2, r5
1c5c: 4322 orrs r2, r4
1c5e: 739a strb r2, [r3, #14]
NVMCTRL->CTRLB.bit.MANW = 1;
1c60: 4a0f ldr r2, [pc, #60] ; (1ca0 <Reset_Handler+0xd8>)
1c62: 6853 ldr r3, [r2, #4]
1c64: 2180 movs r1, #128 ; 0x80
1c66: 430b orrs r3, r1
1c68: 6053 str r3, [r2, #4]
__libc_init_array();
1c6a: 4b0e ldr r3, [pc, #56] ; (1ca4 <Reset_Handler+0xdc>)
1c6c: 4798 blx r3
main();
1c6e: 4b0e ldr r3, [pc, #56] ; (1ca8 <Reset_Handler+0xe0>)
1c70: 4798 blx r3
1c72: e7fe b.n 1c72 <Reset_Handler+0xaa>
1c74: 00004a40 .word 0x00004a40
1c78: 20000000 .word 0x20000000
1c7c: 20000068 .word 0x20000068
1c80: 20000004 .word 0x20000004
1c84: 20000068 .word 0x20000068
1c88: 20000260 .word 0x20000260
1c8c: e000ed00 .word 0xe000ed00
1c90: 00000000 .word 0x00000000
1c94: 41007000 .word 0x41007000
1c98: 41005000 .word 0x41005000
1c9c: 41004800 .word 0x41004800
1ca0: 41004000 .word 0x41004000
1ca4: 00003779 .word 0x00003779
1ca8: 00001ce9 .word 0x00001ce9
00001cac <_sbrk>:
extern void _exit(int status);
extern void _kill(int pid, int sig);
extern int _getpid(void);
extern caddr_t _sbrk(int incr)
{
1cac: 0003 movs r3, r0
static unsigned char *heap = NULL;
unsigned char *prev_heap;
if (heap == NULL) {
1cae: 4a06 ldr r2, [pc, #24] ; (1cc8 <_sbrk+0x1c>)
1cb0: 6812 ldr r2, [r2, #0]
1cb2: 2a00 cmp r2, #0
1cb4: d004 beq.n 1cc0 <_sbrk+0x14>
heap = (unsigned char *)&_end;
}
prev_heap = heap;
1cb6: 4a04 ldr r2, [pc, #16] ; (1cc8 <_sbrk+0x1c>)
1cb8: 6810 ldr r0, [r2, #0]
heap += incr;
1cba: 18c3 adds r3, r0, r3
1cbc: 6013 str r3, [r2, #0]
return (caddr_t) prev_heap;
}
1cbe: 4770 bx lr
heap = (unsigned char *)&_end;
1cc0: 4902 ldr r1, [pc, #8] ; (1ccc <_sbrk+0x20>)
1cc2: 4a01 ldr r2, [pc, #4] ; (1cc8 <_sbrk+0x1c>)
1cc4: 6011 str r1, [r2, #0]
1cc6: e7f6 b.n 1cb6 <_sbrk+0xa>
1cc8: 200000c4 .word 0x200000c4
1ccc: 20002260 .word 0x20002260
00001cd0 <_close>:
}
extern int _close(int file)
{
return -1;
}
1cd0: 2001 movs r0, #1
1cd2: 4240 negs r0, r0
1cd4: 4770 bx lr
00001cd6 <_fstat>:
extern int _fstat(int file, struct stat *st)
{
st->st_mode = S_IFCHR;
1cd6: 2380 movs r3, #128 ; 0x80
1cd8: 019b lsls r3, r3, #6
1cda: 604b str r3, [r1, #4]
return 0;
}
1cdc: 2000 movs r0, #0
1cde: 4770 bx lr
00001ce0 <_isatty>:
extern int _isatty(int file)
{
return 1;
}
1ce0: 2001 movs r0, #1
1ce2: 4770 bx lr
00001ce4 <_lseek>:
extern int _lseek(int file, int ptr, int dir)
{
return 0;
}
1ce4: 2000 movs r0, #0
1ce6: 4770 bx lr
00001ce8 <main>:
*/
#include <asf.h>
#include "p_usart.h"
#include "p_i2c.h"
int main (void)
{
1ce8: b570 push {r4, r5, r6, lr}
1cea: b084 sub sp, #16
system_init();
1cec: 4b0f ldr r3, [pc, #60] ; (1d2c <main+0x44>)
1cee: 4798 blx r3
p_usart_init();
1cf0: 4b0f ldr r3, [pc, #60] ; (1d30 <main+0x48>)
1cf2: 4798 blx r3
p_i2c_master_bus_init();
1cf4: 4b0f ldr r3, [pc, #60] ; (1d34 <main+0x4c>)
1cf6: 4798 blx r3
/* Insert application code here, after the board has been initialized. */
uint8_t stuff = 0;
1cf8: 230f movs r3, #15
1cfa: 446b add r3, sp
1cfc: 2200 movs r2, #0
1cfe: 701a strb r2, [r3, #0]
i2c_device generic_i2c_dev;
generic_i2c_dev.addr = 0x00;
generic_i2c_dev.buffer = &stuff;
1d00: 9301 str r3, [sp, #4]
for(int ind = 0; ind < 119; ind++)
1d02: 2400 movs r4, #0
{
generic_i2c_dev.addr = ind;
if(p_i2c_write_byte(&generic_i2c_dev, 0x00, true) == 0)
1d04: 4d0c ldr r5, [pc, #48] ; (1d38 <main+0x50>)
{
printf("I2C address 0x%02x\n", ind);
1d06: 4e0d ldr r6, [pc, #52] ; (1d3c <main+0x54>)
1d08: e002 b.n 1d10 <main+0x28>
for(int ind = 0; ind < 119; ind++)
1d0a: 3401 adds r4, #1
1d0c: 2c77 cmp r4, #119 ; 0x77
1d0e: d00b beq.n 1d28 <main+0x40>
generic_i2c_dev.addr = ind;
1d10: 466b mov r3, sp
1d12: 701c strb r4, [r3, #0]
if(p_i2c_write_byte(&generic_i2c_dev, 0x00, true) == 0)
1d14: 2201 movs r2, #1
1d16: 2100 movs r1, #0
1d18: 4668 mov r0, sp
1d1a: 47a8 blx r5
1d1c: 2800 cmp r0, #0
1d1e: d1f4 bne.n 1d0a <main+0x22>
printf("I2C address 0x%02x\n", ind);
1d20: 0021 movs r1, r4
1d22: 4807 ldr r0, [pc, #28] ; (1d40 <main+0x58>)
1d24: 47b0 blx r6
1d26: e7f0 b.n 1d0a <main+0x22>
1d28: e7fe b.n 1d28 <main+0x40>
1d2a: 46c0 nop ; (mov r8, r8)
1d2c: 00001b99 .word 0x00001b99
1d30: 00000ab1 .word 0x00000ab1
1d34: 000009a9 .word 0x000009a9
1d38: 00000921 .word 0x00000921
1d3c: 000037d1 .word 0x000037d1
1d40: 000048f4 .word 0x000048f4
00001d44 <__udivsi3>:
1d44: 2200 movs r2, #0
1d46: 0843 lsrs r3, r0, #1
1d48: 428b cmp r3, r1
1d4a: d374 bcc.n 1e36 <__udivsi3+0xf2>
1d4c: 0903 lsrs r3, r0, #4
1d4e: 428b cmp r3, r1
1d50: d35f bcc.n 1e12 <__udivsi3+0xce>
1d52: 0a03 lsrs r3, r0, #8
1d54: 428b cmp r3, r1
1d56: d344 bcc.n 1de2 <__udivsi3+0x9e>
1d58: 0b03 lsrs r3, r0, #12
1d5a: 428b cmp r3, r1
1d5c: d328 bcc.n 1db0 <__udivsi3+0x6c>
1d5e: 0c03 lsrs r3, r0, #16
1d60: 428b cmp r3, r1
1d62: d30d bcc.n 1d80 <__udivsi3+0x3c>
1d64: 22ff movs r2, #255 ; 0xff
1d66: 0209 lsls r1, r1, #8
1d68: ba12 rev r2, r2
1d6a: 0c03 lsrs r3, r0, #16
1d6c: 428b cmp r3, r1
1d6e: d302 bcc.n 1d76 <__udivsi3+0x32>
1d70: 1212 asrs r2, r2, #8
1d72: 0209 lsls r1, r1, #8
1d74: d065 beq.n 1e42 <__udivsi3+0xfe>
1d76: 0b03 lsrs r3, r0, #12
1d78: 428b cmp r3, r1
1d7a: d319 bcc.n 1db0 <__udivsi3+0x6c>
1d7c: e000 b.n 1d80 <__udivsi3+0x3c>
1d7e: 0a09 lsrs r1, r1, #8
1d80: 0bc3 lsrs r3, r0, #15
1d82: 428b cmp r3, r1
1d84: d301 bcc.n 1d8a <__udivsi3+0x46>
1d86: 03cb lsls r3, r1, #15
1d88: 1ac0 subs r0, r0, r3
1d8a: 4152 adcs r2, r2
1d8c: 0b83 lsrs r3, r0, #14
1d8e: 428b cmp r3, r1
1d90: d301 bcc.n 1d96 <__udivsi3+0x52>
1d92: 038b lsls r3, r1, #14
1d94: 1ac0 subs r0, r0, r3
1d96: 4152 adcs r2, r2
1d98: 0b43 lsrs r3, r0, #13
1d9a: 428b cmp r3, r1
1d9c: d301 bcc.n 1da2 <__udivsi3+0x5e>
1d9e: 034b lsls r3, r1, #13
1da0: 1ac0 subs r0, r0, r3
1da2: 4152 adcs r2, r2
1da4: 0b03 lsrs r3, r0, #12
1da6: 428b cmp r3, r1
1da8: d301 bcc.n 1dae <__udivsi3+0x6a>
1daa: 030b lsls r3, r1, #12
1dac: 1ac0 subs r0, r0, r3
1dae: 4152 adcs r2, r2
1db0: 0ac3 lsrs r3, r0, #11
1db2: 428b cmp r3, r1
1db4: d301 bcc.n 1dba <__udivsi3+0x76>
1db6: 02cb lsls r3, r1, #11
1db8: 1ac0 subs r0, r0, r3
1dba: 4152 adcs r2, r2
1dbc: 0a83 lsrs r3, r0, #10
1dbe: 428b cmp r3, r1
1dc0: d301 bcc.n 1dc6 <__udivsi3+0x82>
1dc2: 028b lsls r3, r1, #10
1dc4: 1ac0 subs r0, r0, r3
1dc6: 4152 adcs r2, r2
1dc8: 0a43 lsrs r3, r0, #9
1dca: 428b cmp r3, r1
1dcc: d301 bcc.n 1dd2 <__udivsi3+0x8e>
1dce: 024b lsls r3, r1, #9
1dd0: 1ac0 subs r0, r0, r3
1dd2: 4152 adcs r2, r2
1dd4: 0a03 lsrs r3, r0, #8
1dd6: 428b cmp r3, r1
1dd8: d301 bcc.n 1dde <__udivsi3+0x9a>
1dda: 020b lsls r3, r1, #8
1ddc: 1ac0 subs r0, r0, r3
1dde: 4152 adcs r2, r2
1de0: d2cd bcs.n 1d7e <__udivsi3+0x3a>
1de2: 09c3 lsrs r3, r0, #7
1de4: 428b cmp r3, r1
1de6: d301 bcc.n 1dec <__udivsi3+0xa8>
1de8: 01cb lsls r3, r1, #7
1dea: 1ac0 subs r0, r0, r3
1dec: 4152 adcs r2, r2
1dee: 0983 lsrs r3, r0, #6
1df0: 428b cmp r3, r1
1df2: d301 bcc.n 1df8 <__udivsi3+0xb4>
1df4: 018b lsls r3, r1, #6
1df6: 1ac0 subs r0, r0, r3
1df8: 4152 adcs r2, r2
1dfa: 0943 lsrs r3, r0, #5
1dfc: 428b cmp r3, r1
1dfe: d301 bcc.n 1e04 <__udivsi3+0xc0>
1e00: 014b lsls r3, r1, #5
1e02: 1ac0 subs r0, r0, r3
1e04: 4152 adcs r2, r2
1e06: 0903 lsrs r3, r0, #4
1e08: 428b cmp r3, r1
1e0a: d301 bcc.n 1e10 <__udivsi3+0xcc>
1e0c: 010b lsls r3, r1, #4
1e0e: 1ac0 subs r0, r0, r3
1e10: 4152 adcs r2, r2
1e12: 08c3 lsrs r3, r0, #3
1e14: 428b cmp r3, r1
1e16: d301 bcc.n 1e1c <__udivsi3+0xd8>
1e18: 00cb lsls r3, r1, #3
1e1a: 1ac0 subs r0, r0, r3
1e1c: 4152 adcs r2, r2
1e1e: 0883 lsrs r3, r0, #2
1e20: 428b cmp r3, r1
1e22: d301 bcc.n 1e28 <__udivsi3+0xe4>
1e24: 008b lsls r3, r1, #2
1e26: 1ac0 subs r0, r0, r3
1e28: 4152 adcs r2, r2
1e2a: 0843 lsrs r3, r0, #1
1e2c: 428b cmp r3, r1
1e2e: d301 bcc.n 1e34 <__udivsi3+0xf0>
1e30: 004b lsls r3, r1, #1
1e32: 1ac0 subs r0, r0, r3
1e34: 4152 adcs r2, r2
1e36: 1a41 subs r1, r0, r1
1e38: d200 bcs.n 1e3c <__udivsi3+0xf8>
1e3a: 4601 mov r1, r0
1e3c: 4152 adcs r2, r2
1e3e: 4610 mov r0, r2
1e40: 4770 bx lr
1e42: e7ff b.n 1e44 <__udivsi3+0x100>
1e44: b501 push {r0, lr}
1e46: 2000 movs r0, #0
1e48: f000 f806 bl 1e58 <__aeabi_idiv0>
1e4c: bd02 pop {r1, pc}
1e4e: 46c0 nop ; (mov r8, r8)
00001e50 <__aeabi_uidivmod>:
1e50: 2900 cmp r1, #0
1e52: d0f7 beq.n 1e44 <__udivsi3+0x100>
1e54: e776 b.n 1d44 <__udivsi3>
1e56: 4770 bx lr
00001e58 <__aeabi_idiv0>:
1e58: 4770 bx lr
1e5a: 46c0 nop ; (mov r8, r8)
00001e5c <__aeabi_lmul>:
1e5c: b5f0 push {r4, r5, r6, r7, lr}
1e5e: 46ce mov lr, r9
1e60: 4647 mov r7, r8
1e62: 0415 lsls r5, r2, #16
1e64: 0c2d lsrs r5, r5, #16
1e66: 002e movs r6, r5
1e68: b580 push {r7, lr}
1e6a: 0407 lsls r7, r0, #16
1e6c: 0c14 lsrs r4, r2, #16
1e6e: 0c3f lsrs r7, r7, #16
1e70: 4699 mov r9, r3
1e72: 0c03 lsrs r3, r0, #16
1e74: 437e muls r6, r7
1e76: 435d muls r5, r3
1e78: 4367 muls r7, r4
1e7a: 4363 muls r3, r4
1e7c: 197f adds r7, r7, r5
1e7e: 0c34 lsrs r4, r6, #16
1e80: 19e4 adds r4, r4, r7
1e82: 469c mov ip, r3
1e84: 42a5 cmp r5, r4
1e86: d903 bls.n 1e90 <__aeabi_lmul+0x34>
1e88: 2380 movs r3, #128 ; 0x80
1e8a: 025b lsls r3, r3, #9
1e8c: 4698 mov r8, r3
1e8e: 44c4 add ip, r8
1e90: 464b mov r3, r9
1e92: 4351 muls r1, r2
1e94: 4343 muls r3, r0
1e96: 0436 lsls r6, r6, #16
1e98: 0c36 lsrs r6, r6, #16
1e9a: 0c25 lsrs r5, r4, #16
1e9c: 0424 lsls r4, r4, #16
1e9e: 4465 add r5, ip
1ea0: 19a4 adds r4, r4, r6
1ea2: 1859 adds r1, r3, r1
1ea4: 1949 adds r1, r1, r5
1ea6: 0020 movs r0, r4
1ea8: bc0c pop {r2, r3}
1eaa: 4690 mov r8, r2
1eac: 4699 mov r9, r3
1eae: bdf0 pop {r4, r5, r6, r7, pc}
00001eb0 <__aeabi_dadd>:
1eb0: b5f8 push {r3, r4, r5, r6, r7, lr}
1eb2: 4645 mov r5, r8
1eb4: 46de mov lr, fp
1eb6: 4657 mov r7, sl
1eb8: 464e mov r6, r9
1eba: 030c lsls r4, r1, #12
1ebc: b5e0 push {r5, r6, r7, lr}
1ebe: 004e lsls r6, r1, #1
1ec0: 0fc9 lsrs r1, r1, #31
1ec2: 4688 mov r8, r1
1ec4: 000d movs r5, r1
1ec6: 0a61 lsrs r1, r4, #9
1ec8: 0f44 lsrs r4, r0, #29
1eca: 430c orrs r4, r1
1ecc: 00c7 lsls r7, r0, #3
1ece: 0319 lsls r1, r3, #12
1ed0: 0058 lsls r0, r3, #1
1ed2: 0fdb lsrs r3, r3, #31
1ed4: 469b mov fp, r3
1ed6: 0a4b lsrs r3, r1, #9
1ed8: 0f51 lsrs r1, r2, #29
1eda: 430b orrs r3, r1
1edc: 0d76 lsrs r6, r6, #21
1ede: 0d40 lsrs r0, r0, #21
1ee0: 0019 movs r1, r3
1ee2: 00d2 lsls r2, r2, #3
1ee4: 45d8 cmp r8, fp
1ee6: d100 bne.n 1eea <__aeabi_dadd+0x3a>
1ee8: e0ae b.n 2048 <STACK_SIZE+0x48>
1eea: 1a35 subs r5, r6, r0
1eec: 2d00 cmp r5, #0
1eee: dc00 bgt.n 1ef2 <__aeabi_dadd+0x42>
1ef0: e0f6 b.n 20e0 <STACK_SIZE+0xe0>
1ef2: 2800 cmp r0, #0
1ef4: d10f bne.n 1f16 <__aeabi_dadd+0x66>
1ef6: 4313 orrs r3, r2
1ef8: d100 bne.n 1efc <__aeabi_dadd+0x4c>
1efa: e0db b.n 20b4 <STACK_SIZE+0xb4>
1efc: 1e6b subs r3, r5, #1
1efe: 2b00 cmp r3, #0
1f00: d000 beq.n 1f04 <__aeabi_dadd+0x54>
1f02: e137 b.n 2174 <STACK_SIZE+0x174>
1f04: 1aba subs r2, r7, r2
1f06: 4297 cmp r7, r2
1f08: 41bf sbcs r7, r7
1f0a: 1a64 subs r4, r4, r1
1f0c: 427f negs r7, r7
1f0e: 1be4 subs r4, r4, r7
1f10: 2601 movs r6, #1
1f12: 0017 movs r7, r2
1f14: e024 b.n 1f60 <__aeabi_dadd+0xb0>
1f16: 4bc6 ldr r3, [pc, #792] ; (2230 <STACK_SIZE+0x230>)
1f18: 429e cmp r6, r3
1f1a: d04d beq.n 1fb8 <__aeabi_dadd+0x108>
1f1c: 2380 movs r3, #128 ; 0x80
1f1e: 041b lsls r3, r3, #16
1f20: 4319 orrs r1, r3
1f22: 2d38 cmp r5, #56 ; 0x38
1f24: dd00 ble.n 1f28 <__aeabi_dadd+0x78>
1f26: e107 b.n 2138 <STACK_SIZE+0x138>
1f28: 2d1f cmp r5, #31
1f2a: dd00 ble.n 1f2e <__aeabi_dadd+0x7e>
1f2c: e138 b.n 21a0 <STACK_SIZE+0x1a0>
1f2e: 2020 movs r0, #32
1f30: 1b43 subs r3, r0, r5
1f32: 469a mov sl, r3
1f34: 000b movs r3, r1
1f36: 4650 mov r0, sl
1f38: 4083 lsls r3, r0
1f3a: 4699 mov r9, r3
1f3c: 0013 movs r3, r2
1f3e: 4648 mov r0, r9
1f40: 40eb lsrs r3, r5
1f42: 4318 orrs r0, r3
1f44: 0003 movs r3, r0
1f46: 4650 mov r0, sl
1f48: 4082 lsls r2, r0
1f4a: 1e50 subs r0, r2, #1
1f4c: 4182 sbcs r2, r0
1f4e: 40e9 lsrs r1, r5
1f50: 431a orrs r2, r3
1f52: 1aba subs r2, r7, r2
1f54: 1a61 subs r1, r4, r1
1f56: 4297 cmp r7, r2
1f58: 41a4 sbcs r4, r4
1f5a: 0017 movs r7, r2
1f5c: 4264 negs r4, r4
1f5e: 1b0c subs r4, r1, r4
1f60: 0223 lsls r3, r4, #8
1f62: d562 bpl.n 202a <STACK_SIZE+0x2a>
1f64: 0264 lsls r4, r4, #9
1f66: 0a65 lsrs r5, r4, #9
1f68: 2d00 cmp r5, #0
1f6a: d100 bne.n 1f6e <__aeabi_dadd+0xbe>
1f6c: e0df b.n 212e <STACK_SIZE+0x12e>
1f6e: 0028 movs r0, r5
1f70: f001 fbe4 bl 373c <__clzsi2>
1f74: 0003 movs r3, r0
1f76: 3b08 subs r3, #8
1f78: 2b1f cmp r3, #31
1f7a: dd00 ble.n 1f7e <__aeabi_dadd+0xce>
1f7c: e0d2 b.n 2124 <STACK_SIZE+0x124>
1f7e: 2220 movs r2, #32
1f80: 003c movs r4, r7
1f82: 1ad2 subs r2, r2, r3
1f84: 409d lsls r5, r3
1f86: 40d4 lsrs r4, r2
1f88: 409f lsls r7, r3
1f8a: 4325 orrs r5, r4
1f8c: 429e cmp r6, r3
1f8e: dd00 ble.n 1f92 <__aeabi_dadd+0xe2>
1f90: e0c4 b.n 211c <STACK_SIZE+0x11c>
1f92: 1b9e subs r6, r3, r6
1f94: 1c73 adds r3, r6, #1
1f96: 2b1f cmp r3, #31
1f98: dd00 ble.n 1f9c <__aeabi_dadd+0xec>
1f9a: e0f1 b.n 2180 <STACK_SIZE+0x180>
1f9c: 2220 movs r2, #32
1f9e: 0038 movs r0, r7
1fa0: 0029 movs r1, r5
1fa2: 1ad2 subs r2, r2, r3
1fa4: 40d8 lsrs r0, r3
1fa6: 4091 lsls r1, r2
1fa8: 4097 lsls r7, r2
1faa: 002c movs r4, r5
1fac: 4301 orrs r1, r0
1fae: 1e78 subs r0, r7, #1
1fb0: 4187 sbcs r7, r0
1fb2: 40dc lsrs r4, r3
1fb4: 2600 movs r6, #0
1fb6: 430f orrs r7, r1
1fb8: 077b lsls r3, r7, #29
1fba: d009 beq.n 1fd0 <__aeabi_dadd+0x120>
1fbc: 230f movs r3, #15
1fbe: 403b ands r3, r7
1fc0: 2b04 cmp r3, #4
1fc2: d005 beq.n 1fd0 <__aeabi_dadd+0x120>
1fc4: 1d3b adds r3, r7, #4
1fc6: 42bb cmp r3, r7
1fc8: 41bf sbcs r7, r7
1fca: 427f negs r7, r7
1fcc: 19e4 adds r4, r4, r7
1fce: 001f movs r7, r3
1fd0: 0223 lsls r3, r4, #8
1fd2: d52c bpl.n 202e <STACK_SIZE+0x2e>
1fd4: 4b96 ldr r3, [pc, #600] ; (2230 <STACK_SIZE+0x230>)
1fd6: 3601 adds r6, #1
1fd8: 429e cmp r6, r3
1fda: d100 bne.n 1fde <__aeabi_dadd+0x12e>
1fdc: e09a b.n 2114 <STACK_SIZE+0x114>
1fde: 4645 mov r5, r8
1fe0: 4b94 ldr r3, [pc, #592] ; (2234 <STACK_SIZE+0x234>)
1fe2: 08ff lsrs r7, r7, #3
1fe4: 401c ands r4, r3
1fe6: 0760 lsls r0, r4, #29
1fe8: 0576 lsls r6, r6, #21
1fea: 0264 lsls r4, r4, #9
1fec: 4307 orrs r7, r0
1fee: 0b24 lsrs r4, r4, #12
1ff0: 0d76 lsrs r6, r6, #21
1ff2: 2100 movs r1, #0
1ff4: 0324 lsls r4, r4, #12
1ff6: 0b23 lsrs r3, r4, #12
1ff8: 0d0c lsrs r4, r1, #20
1ffa: 4a8f ldr r2, [pc, #572] ; (2238 <STACK_SIZE+0x238>)
1ffc: 0524 lsls r4, r4, #20
1ffe: 431c orrs r4, r3
2000: 4014 ands r4, r2
2002: 0533 lsls r3, r6, #20
2004: 4323 orrs r3, r4
2006: 005b lsls r3, r3, #1
2008: 07ed lsls r5, r5, #31
200a: 085b lsrs r3, r3, #1
200c: 432b orrs r3, r5
200e: 0038 movs r0, r7
2010: 0019 movs r1, r3
2012: bc3c pop {r2, r3, r4, r5}
2014: 4690 mov r8, r2
2016: 4699 mov r9, r3
2018: 46a2 mov sl, r4
201a: 46ab mov fp, r5
201c: bdf8 pop {r3, r4, r5, r6, r7, pc}
201e: 4664 mov r4, ip
2020: 4304 orrs r4, r0
2022: d100 bne.n 2026 <STACK_SIZE+0x26>
2024: e211 b.n 244a <STACK_SIZE+0x44a>
2026: 0004 movs r4, r0
2028: 4667 mov r7, ip
202a: 077b lsls r3, r7, #29
202c: d1c6 bne.n 1fbc <__aeabi_dadd+0x10c>
202e: 4645 mov r5, r8
2030: 0760 lsls r0, r4, #29
2032: 08ff lsrs r7, r7, #3
2034: 4307 orrs r7, r0
2036: 08e4 lsrs r4, r4, #3
2038: 4b7d ldr r3, [pc, #500] ; (2230 <STACK_SIZE+0x230>)
203a: 429e cmp r6, r3
203c: d030 beq.n 20a0 <STACK_SIZE+0xa0>
203e: 0324 lsls r4, r4, #12
2040: 0576 lsls r6, r6, #21
2042: 0b24 lsrs r4, r4, #12
2044: 0d76 lsrs r6, r6, #21
2046: e7d4 b.n 1ff2 <__aeabi_dadd+0x142>
2048: 1a33 subs r3, r6, r0
204a: 469a mov sl, r3
204c: 2b00 cmp r3, #0
204e: dd78 ble.n 2142 <STACK_SIZE+0x142>
2050: 2800 cmp r0, #0
2052: d031 beq.n 20b8 <STACK_SIZE+0xb8>
2054: 4876 ldr r0, [pc, #472] ; (2230 <STACK_SIZE+0x230>)
2056: 4286 cmp r6, r0
2058: d0ae beq.n 1fb8 <__aeabi_dadd+0x108>
205a: 2080 movs r0, #128 ; 0x80
205c: 0400 lsls r0, r0, #16
205e: 4301 orrs r1, r0
2060: 4653 mov r3, sl
2062: 2b38 cmp r3, #56 ; 0x38
2064: dc00 bgt.n 2068 <STACK_SIZE+0x68>
2066: e0e9 b.n 223c <STACK_SIZE+0x23c>
2068: 430a orrs r2, r1
206a: 1e51 subs r1, r2, #1
206c: 418a sbcs r2, r1
206e: 2100 movs r1, #0
2070: 19d2 adds r2, r2, r7
2072: 42ba cmp r2, r7
2074: 41bf sbcs r7, r7
2076: 1909 adds r1, r1, r4
2078: 427c negs r4, r7
207a: 0017 movs r7, r2
207c: 190c adds r4, r1, r4
207e: 0223 lsls r3, r4, #8
2080: d5d3 bpl.n 202a <STACK_SIZE+0x2a>
2082: 4b6b ldr r3, [pc, #428] ; (2230 <STACK_SIZE+0x230>)
2084: 3601 adds r6, #1
2086: 429e cmp r6, r3
2088: d100 bne.n 208c <STACK_SIZE+0x8c>
208a: e13a b.n 2302 <STACK_SIZE+0x302>
208c: 2001 movs r0, #1
208e: 4b69 ldr r3, [pc, #420] ; (2234 <STACK_SIZE+0x234>)
2090: 401c ands r4, r3
2092: 087b lsrs r3, r7, #1
2094: 4007 ands r7, r0
2096: 431f orrs r7, r3
2098: 07e0 lsls r0, r4, #31
209a: 4307 orrs r7, r0
209c: 0864 lsrs r4, r4, #1
209e: e78b b.n 1fb8 <__aeabi_dadd+0x108>
20a0: 0023 movs r3, r4
20a2: 433b orrs r3, r7
20a4: d100 bne.n 20a8 <STACK_SIZE+0xa8>
20a6: e1cb b.n 2440 <STACK_SIZE+0x440>
20a8: 2280 movs r2, #128 ; 0x80
20aa: 0312 lsls r2, r2, #12
20ac: 4314 orrs r4, r2
20ae: 0324 lsls r4, r4, #12
20b0: 0b24 lsrs r4, r4, #12
20b2: e79e b.n 1ff2 <__aeabi_dadd+0x142>
20b4: 002e movs r6, r5
20b6: e77f b.n 1fb8 <__aeabi_dadd+0x108>
20b8: 0008 movs r0, r1
20ba: 4310 orrs r0, r2
20bc: d100 bne.n 20c0 <STACK_SIZE+0xc0>
20be: e0b4 b.n 222a <STACK_SIZE+0x22a>
20c0: 1e58 subs r0, r3, #1
20c2: 2800 cmp r0, #0
20c4: d000 beq.n 20c8 <STACK_SIZE+0xc8>
20c6: e0de b.n 2286 <STACK_SIZE+0x286>
20c8: 18ba adds r2, r7, r2
20ca: 42ba cmp r2, r7
20cc: 419b sbcs r3, r3
20ce: 1864 adds r4, r4, r1
20d0: 425b negs r3, r3
20d2: 18e4 adds r4, r4, r3
20d4: 0017 movs r7, r2
20d6: 2601 movs r6, #1
20d8: 0223 lsls r3, r4, #8
20da: d5a6 bpl.n 202a <STACK_SIZE+0x2a>
20dc: 2602 movs r6, #2
20de: e7d5 b.n 208c <STACK_SIZE+0x8c>
20e0: 2d00 cmp r5, #0
20e2: d16e bne.n 21c2 <STACK_SIZE+0x1c2>
20e4: 1c70 adds r0, r6, #1
20e6: 0540 lsls r0, r0, #21
20e8: 0d40 lsrs r0, r0, #21
20ea: 2801 cmp r0, #1
20ec: dc00 bgt.n 20f0 <STACK_SIZE+0xf0>
20ee: e0f9 b.n 22e4 <STACK_SIZE+0x2e4>
20f0: 1ab8 subs r0, r7, r2
20f2: 4684 mov ip, r0
20f4: 4287 cmp r7, r0
20f6: 4180 sbcs r0, r0
20f8: 1ae5 subs r5, r4, r3
20fa: 4240 negs r0, r0
20fc: 1a2d subs r5, r5, r0
20fe: 0228 lsls r0, r5, #8
2100: d400 bmi.n 2104 <STACK_SIZE+0x104>
2102: e089 b.n 2218 <STACK_SIZE+0x218>
2104: 1bd7 subs r7, r2, r7
2106: 42ba cmp r2, r7
2108: 4192 sbcs r2, r2
210a: 1b1c subs r4, r3, r4
210c: 4252 negs r2, r2
210e: 1aa5 subs r5, r4, r2
2110: 46d8 mov r8, fp
2112: e729 b.n 1f68 <__aeabi_dadd+0xb8>
2114: 4645 mov r5, r8
2116: 2400 movs r4, #0
2118: 2700 movs r7, #0
211a: e76a b.n 1ff2 <__aeabi_dadd+0x142>
211c: 4c45 ldr r4, [pc, #276] ; (2234 <STACK_SIZE+0x234>)
211e: 1af6 subs r6, r6, r3
2120: 402c ands r4, r5
2122: e749 b.n 1fb8 <__aeabi_dadd+0x108>
2124: 003d movs r5, r7
2126: 3828 subs r0, #40 ; 0x28
2128: 4085 lsls r5, r0
212a: 2700 movs r7, #0
212c: e72e b.n 1f8c <__aeabi_dadd+0xdc>
212e: 0038 movs r0, r7
2130: f001 fb04 bl 373c <__clzsi2>
2134: 3020 adds r0, #32
2136: e71d b.n 1f74 <__aeabi_dadd+0xc4>
2138: 430a orrs r2, r1
213a: 1e51 subs r1, r2, #1
213c: 418a sbcs r2, r1
213e: 2100 movs r1, #0
2140: e707 b.n 1f52 <__aeabi_dadd+0xa2>
2142: 2b00 cmp r3, #0
2144: d000 beq.n 2148 <STACK_SIZE+0x148>
2146: e0f3 b.n 2330 <STACK_SIZE+0x330>
2148: 1c70 adds r0, r6, #1
214a: 0543 lsls r3, r0, #21
214c: 0d5b lsrs r3, r3, #21
214e: 2b01 cmp r3, #1
2150: dc00 bgt.n 2154 <STACK_SIZE+0x154>
2152: e0ad b.n 22b0 <STACK_SIZE+0x2b0>
2154: 4b36 ldr r3, [pc, #216] ; (2230 <STACK_SIZE+0x230>)
2156: 4298 cmp r0, r3
2158: d100 bne.n 215c <STACK_SIZE+0x15c>
215a: e0d1 b.n 2300 <STACK_SIZE+0x300>
215c: 18ba adds r2, r7, r2
215e: 42ba cmp r2, r7
2160: 41bf sbcs r7, r7
2162: 1864 adds r4, r4, r1
2164: 427f negs r7, r7
2166: 19e4 adds r4, r4, r7
2168: 07e7 lsls r7, r4, #31
216a: 0852 lsrs r2, r2, #1
216c: 4317 orrs r7, r2
216e: 0864 lsrs r4, r4, #1
2170: 0006 movs r6, r0
2172: e721 b.n 1fb8 <__aeabi_dadd+0x108>
2174: 482e ldr r0, [pc, #184] ; (2230 <STACK_SIZE+0x230>)
2176: 4285 cmp r5, r0
2178: d100 bne.n 217c <STACK_SIZE+0x17c>
217a: e093 b.n 22a4 <STACK_SIZE+0x2a4>
217c: 001d movs r5, r3
217e: e6d0 b.n 1f22 <__aeabi_dadd+0x72>
2180: 0029 movs r1, r5
2182: 3e1f subs r6, #31
2184: 40f1 lsrs r1, r6
2186: 2b20 cmp r3, #32
2188: d100 bne.n 218c <STACK_SIZE+0x18c>
218a: e08d b.n 22a8 <STACK_SIZE+0x2a8>
218c: 2240 movs r2, #64 ; 0x40
218e: 1ad3 subs r3, r2, r3
2190: 409d lsls r5, r3
2192: 432f orrs r7, r5
2194: 1e7d subs r5, r7, #1
2196: 41af sbcs r7, r5
2198: 2400 movs r4, #0
219a: 430f orrs r7, r1
219c: 2600 movs r6, #0
219e: e744 b.n 202a <STACK_SIZE+0x2a>
21a0: 002b movs r3, r5
21a2: 0008 movs r0, r1
21a4: 3b20 subs r3, #32
21a6: 40d8 lsrs r0, r3
21a8: 0003 movs r3, r0
21aa: 2d20 cmp r5, #32
21ac: d100 bne.n 21b0 <STACK_SIZE+0x1b0>
21ae: e07d b.n 22ac <STACK_SIZE+0x2ac>
21b0: 2040 movs r0, #64 ; 0x40
21b2: 1b45 subs r5, r0, r5
21b4: 40a9 lsls r1, r5
21b6: 430a orrs r2, r1
21b8: 1e51 subs r1, r2, #1
21ba: 418a sbcs r2, r1
21bc: 2100 movs r1, #0
21be: 431a orrs r2, r3
21c0: e6c7 b.n 1f52 <__aeabi_dadd+0xa2>
21c2: 2e00 cmp r6, #0
21c4: d050 beq.n 2268 <STACK_SIZE+0x268>
21c6: 4e1a ldr r6, [pc, #104] ; (2230 <STACK_SIZE+0x230>)
21c8: 42b0 cmp r0, r6
21ca: d057 beq.n 227c <STACK_SIZE+0x27c>
21cc: 2680 movs r6, #128 ; 0x80
21ce: 426b negs r3, r5
21d0: 4699 mov r9, r3
21d2: 0436 lsls r6, r6, #16
21d4: 4334 orrs r4, r6
21d6: 464b mov r3, r9
21d8: 2b38 cmp r3, #56 ; 0x38
21da: dd00 ble.n 21de <STACK_SIZE+0x1de>
21dc: e0d6 b.n 238c <STACK_SIZE+0x38c>
21de: 2b1f cmp r3, #31
21e0: dd00 ble.n 21e4 <STACK_SIZE+0x1e4>
21e2: e135 b.n 2450 <STACK_SIZE+0x450>
21e4: 2620 movs r6, #32
21e6: 1af5 subs r5, r6, r3
21e8: 0026 movs r6, r4
21ea: 40ae lsls r6, r5
21ec: 46b2 mov sl, r6
21ee: 003e movs r6, r7
21f0: 40de lsrs r6, r3
21f2: 46ac mov ip, r5
21f4: 0035 movs r5, r6
21f6: 4656 mov r6, sl
21f8: 432e orrs r6, r5
21fa: 4665 mov r5, ip
21fc: 40af lsls r7, r5
21fe: 1e7d subs r5, r7, #1
2200: 41af sbcs r7, r5
2202: 40dc lsrs r4, r3
2204: 4337 orrs r7, r6
2206: 1bd7 subs r7, r2, r7
2208: 42ba cmp r2, r7
220a: 4192 sbcs r2, r2
220c: 1b0c subs r4, r1, r4
220e: 4252 negs r2, r2
2210: 1aa4 subs r4, r4, r2
2212: 0006 movs r6, r0
2214: 46d8 mov r8, fp
2216: e6a3 b.n 1f60 <__aeabi_dadd+0xb0>
2218: 4664 mov r4, ip
221a: 4667 mov r7, ip
221c: 432c orrs r4, r5
221e: d000 beq.n 2222 <STACK_SIZE+0x222>
2220: e6a2 b.n 1f68 <__aeabi_dadd+0xb8>
2222: 2500 movs r5, #0
2224: 2600 movs r6, #0
2226: 2700 movs r7, #0
2228: e706 b.n 2038 <STACK_SIZE+0x38>
222a: 001e movs r6, r3
222c: e6c4 b.n 1fb8 <__aeabi_dadd+0x108>
222e: 46c0 nop ; (mov r8, r8)
2230: 000007ff .word 0x000007ff
2234: ff7fffff .word 0xff7fffff
2238: 800fffff .word 0x800fffff
223c: 2b1f cmp r3, #31
223e: dc63 bgt.n 2308 <STACK_SIZE+0x308>
2240: 2020 movs r0, #32
2242: 1ac3 subs r3, r0, r3
2244: 0008 movs r0, r1
2246: 4098 lsls r0, r3
2248: 469c mov ip, r3
224a: 4683 mov fp, r0
224c: 4653 mov r3, sl
224e: 0010 movs r0, r2
2250: 40d8 lsrs r0, r3
2252: 0003 movs r3, r0
2254: 4658 mov r0, fp
2256: 4318 orrs r0, r3
2258: 4663 mov r3, ip
225a: 409a lsls r2, r3
225c: 1e53 subs r3, r2, #1
225e: 419a sbcs r2, r3
2260: 4653 mov r3, sl
2262: 4302 orrs r2, r0
2264: 40d9 lsrs r1, r3
2266: e703 b.n 2070 <STACK_SIZE+0x70>
2268: 0026 movs r6, r4
226a: 433e orrs r6, r7
226c: d006 beq.n 227c <STACK_SIZE+0x27c>
226e: 43eb mvns r3, r5
2270: 4699 mov r9, r3
2272: 2b00 cmp r3, #0
2274: d0c7 beq.n 2206 <STACK_SIZE+0x206>
2276: 4e94 ldr r6, [pc, #592] ; (24c8 <STACK_SIZE+0x4c8>)
2278: 42b0 cmp r0, r6
227a: d1ac bne.n 21d6 <STACK_SIZE+0x1d6>
227c: 000c movs r4, r1
227e: 0017 movs r7, r2
2280: 0006 movs r6, r0
2282: 46d8 mov r8, fp
2284: e698 b.n 1fb8 <__aeabi_dadd+0x108>
2286: 4b90 ldr r3, [pc, #576] ; (24c8 <STACK_SIZE+0x4c8>)
2288: 459a cmp sl, r3
228a: d00b beq.n 22a4 <STACK_SIZE+0x2a4>
228c: 4682 mov sl, r0
228e: e6e7 b.n 2060 <STACK_SIZE+0x60>
2290: 2800 cmp r0, #0
2292: d000 beq.n 2296 <STACK_SIZE+0x296>
2294: e09e b.n 23d4 <STACK_SIZE+0x3d4>
2296: 0018 movs r0, r3
2298: 4310 orrs r0, r2
229a: d100 bne.n 229e <STACK_SIZE+0x29e>
229c: e0e9 b.n 2472 <STACK_SIZE+0x472>
229e: 001c movs r4, r3
22a0: 0017 movs r7, r2
22a2: 46d8 mov r8, fp
22a4: 4e88 ldr r6, [pc, #544] ; (24c8 <STACK_SIZE+0x4c8>)
22a6: e687 b.n 1fb8 <__aeabi_dadd+0x108>
22a8: 2500 movs r5, #0
22aa: e772 b.n 2192 <STACK_SIZE+0x192>
22ac: 2100 movs r1, #0
22ae: e782 b.n 21b6 <STACK_SIZE+0x1b6>
22b0: 0023 movs r3, r4
22b2: 433b orrs r3, r7
22b4: 2e00 cmp r6, #0
22b6: d000 beq.n 22ba <STACK_SIZE+0x2ba>
22b8: e0ab b.n 2412 <STACK_SIZE+0x412>
22ba: 2b00 cmp r3, #0
22bc: d100 bne.n 22c0 <STACK_SIZE+0x2c0>
22be: e0e7 b.n 2490 <STACK_SIZE+0x490>
22c0: 000b movs r3, r1
22c2: 4313 orrs r3, r2
22c4: d100 bne.n 22c8 <STACK_SIZE+0x2c8>
22c6: e677 b.n 1fb8 <__aeabi_dadd+0x108>
22c8: 18ba adds r2, r7, r2
22ca: 42ba cmp r2, r7
22cc: 41bf sbcs r7, r7
22ce: 1864 adds r4, r4, r1
22d0: 427f negs r7, r7
22d2: 19e4 adds r4, r4, r7
22d4: 0223 lsls r3, r4, #8
22d6: d400 bmi.n 22da <STACK_SIZE+0x2da>
22d8: e0f2 b.n 24c0 <STACK_SIZE+0x4c0>
22da: 4b7c ldr r3, [pc, #496] ; (24cc <STACK_SIZE+0x4cc>)
22dc: 0017 movs r7, r2
22de: 401c ands r4, r3
22e0: 0006 movs r6, r0
22e2: e669 b.n 1fb8 <__aeabi_dadd+0x108>
22e4: 0020 movs r0, r4
22e6: 4338 orrs r0, r7
22e8: 2e00 cmp r6, #0
22ea: d1d1 bne.n 2290 <STACK_SIZE+0x290>
22ec: 2800 cmp r0, #0
22ee: d15b bne.n 23a8 <STACK_SIZE+0x3a8>
22f0: 001c movs r4, r3
22f2: 4314 orrs r4, r2
22f4: d100 bne.n 22f8 <STACK_SIZE+0x2f8>
22f6: e0a8 b.n 244a <STACK_SIZE+0x44a>
22f8: 001c movs r4, r3
22fa: 0017 movs r7, r2
22fc: 46d8 mov r8, fp
22fe: e65b b.n 1fb8 <__aeabi_dadd+0x108>
2300: 0006 movs r6, r0
2302: 2400 movs r4, #0
2304: 2700 movs r7, #0
2306: e697 b.n 2038 <STACK_SIZE+0x38>
2308: 4650 mov r0, sl
230a: 000b movs r3, r1
230c: 3820 subs r0, #32
230e: 40c3 lsrs r3, r0
2310: 4699 mov r9, r3
2312: 4653 mov r3, sl
2314: 2b20 cmp r3, #32
2316: d100 bne.n 231a <STACK_SIZE+0x31a>
2318: e095 b.n 2446 <STACK_SIZE+0x446>
231a: 2340 movs r3, #64 ; 0x40
231c: 4650 mov r0, sl
231e: 1a1b subs r3, r3, r0
2320: 4099 lsls r1, r3
2322: 430a orrs r2, r1
2324: 1e51 subs r1, r2, #1
2326: 418a sbcs r2, r1
2328: 464b mov r3, r9
232a: 2100 movs r1, #0
232c: 431a orrs r2, r3
232e: e69f b.n 2070 <STACK_SIZE+0x70>
2330: 2e00 cmp r6, #0
2332: d130 bne.n 2396 <STACK_SIZE+0x396>
2334: 0026 movs r6, r4
2336: 433e orrs r6, r7
2338: d067 beq.n 240a <STACK_SIZE+0x40a>
233a: 43db mvns r3, r3
233c: 469a mov sl, r3
233e: 2b00 cmp r3, #0
2340: d01c beq.n 237c <STACK_SIZE+0x37c>
2342: 4e61 ldr r6, [pc, #388] ; (24c8 <STACK_SIZE+0x4c8>)
2344: 42b0 cmp r0, r6
2346: d060 beq.n 240a <STACK_SIZE+0x40a>
2348: 4653 mov r3, sl
234a: 2b38 cmp r3, #56 ; 0x38
234c: dd00 ble.n 2350 <STACK_SIZE+0x350>
234e: e096 b.n 247e <STACK_SIZE+0x47e>
2350: 2b1f cmp r3, #31
2352: dd00 ble.n 2356 <STACK_SIZE+0x356>
2354: e09f b.n 2496 <STACK_SIZE+0x496>
2356: 2620 movs r6, #32
2358: 1af3 subs r3, r6, r3
235a: 0026 movs r6, r4
235c: 409e lsls r6, r3
235e: 469c mov ip, r3
2360: 46b3 mov fp, r6
2362: 4653 mov r3, sl
2364: 003e movs r6, r7
2366: 40de lsrs r6, r3
2368: 0033 movs r3, r6
236a: 465e mov r6, fp
236c: 431e orrs r6, r3
236e: 4663 mov r3, ip
2370: 409f lsls r7, r3
2372: 1e7b subs r3, r7, #1
2374: 419f sbcs r7, r3
2376: 4653 mov r3, sl
2378: 40dc lsrs r4, r3
237a: 4337 orrs r7, r6
237c: 18bf adds r7, r7, r2
237e: 4297 cmp r7, r2
2380: 4192 sbcs r2, r2
2382: 1864 adds r4, r4, r1
2384: 4252 negs r2, r2
2386: 18a4 adds r4, r4, r2
2388: 0006 movs r6, r0
238a: e678 b.n 207e <STACK_SIZE+0x7e>
238c: 4327 orrs r7, r4
238e: 1e7c subs r4, r7, #1
2390: 41a7 sbcs r7, r4
2392: 2400 movs r4, #0
2394: e737 b.n 2206 <STACK_SIZE+0x206>
2396: 4e4c ldr r6, [pc, #304] ; (24c8 <STACK_SIZE+0x4c8>)
2398: 42b0 cmp r0, r6
239a: d036 beq.n 240a <STACK_SIZE+0x40a>
239c: 2680 movs r6, #128 ; 0x80
239e: 425b negs r3, r3
23a0: 0436 lsls r6, r6, #16
23a2: 469a mov sl, r3
23a4: 4334 orrs r4, r6
23a6: e7cf b.n 2348 <STACK_SIZE+0x348>
23a8: 0018 movs r0, r3
23aa: 4310 orrs r0, r2
23ac: d100 bne.n 23b0 <STACK_SIZE+0x3b0>
23ae: e603 b.n 1fb8 <__aeabi_dadd+0x108>
23b0: 1ab8 subs r0, r7, r2
23b2: 4684 mov ip, r0
23b4: 4567 cmp r7, ip
23b6: 41ad sbcs r5, r5
23b8: 1ae0 subs r0, r4, r3
23ba: 426d negs r5, r5
23bc: 1b40 subs r0, r0, r5
23be: 0205 lsls r5, r0, #8
23c0: d400 bmi.n 23c4 <STACK_SIZE+0x3c4>
23c2: e62c b.n 201e <STACK_SIZE+0x1e>
23c4: 1bd7 subs r7, r2, r7
23c6: 42ba cmp r2, r7
23c8: 4192 sbcs r2, r2
23ca: 1b1c subs r4, r3, r4
23cc: 4252 negs r2, r2
23ce: 1aa4 subs r4, r4, r2
23d0: 46d8 mov r8, fp
23d2: e5f1 b.n 1fb8 <__aeabi_dadd+0x108>
23d4: 0018 movs r0, r3
23d6: 4310 orrs r0, r2
23d8: d100 bne.n 23dc <STACK_SIZE+0x3dc>
23da: e763 b.n 22a4 <STACK_SIZE+0x2a4>
23dc: 08f8 lsrs r0, r7, #3
23de: 0767 lsls r7, r4, #29
23e0: 4307 orrs r7, r0
23e2: 2080 movs r0, #128 ; 0x80
23e4: 08e4 lsrs r4, r4, #3
23e6: 0300 lsls r0, r0, #12
23e8: 4204 tst r4, r0
23ea: d008 beq.n 23fe <STACK_SIZE+0x3fe>
23ec: 08dd lsrs r5, r3, #3
23ee: 4205 tst r5, r0
23f0: d105 bne.n 23fe <STACK_SIZE+0x3fe>
23f2: 08d2 lsrs r2, r2, #3
23f4: 0759 lsls r1, r3, #29
23f6: 4311 orrs r1, r2
23f8: 000f movs r7, r1
23fa: 002c movs r4, r5
23fc: 46d8 mov r8, fp
23fe: 0f7b lsrs r3, r7, #29
2400: 00e4 lsls r4, r4, #3
2402: 431c orrs r4, r3
2404: 00ff lsls r7, r7, #3
2406: 4e30 ldr r6, [pc, #192] ; (24c8 <STACK_SIZE+0x4c8>)
2408: e5d6 b.n 1fb8 <__aeabi_dadd+0x108>
240a: 000c movs r4, r1
240c: 0017 movs r7, r2
240e: 0006 movs r6, r0
2410: e5d2 b.n 1fb8 <__aeabi_dadd+0x108>
2412: 2b00 cmp r3, #0
2414: d038 beq.n 2488 <STACK_SIZE+0x488>
2416: 000b movs r3, r1
2418: 4313 orrs r3, r2
241a: d100 bne.n 241e <STACK_SIZE+0x41e>
241c: e742 b.n 22a4 <STACK_SIZE+0x2a4>
241e: 08f8 lsrs r0, r7, #3
2420: 0767 lsls r7, r4, #29
2422: 4307 orrs r7, r0
2424: 2080 movs r0, #128 ; 0x80
2426: 08e4 lsrs r4, r4, #3
2428: 0300 lsls r0, r0, #12
242a: 4204 tst r4, r0
242c: d0e7 beq.n 23fe <STACK_SIZE+0x3fe>
242e: 08cb lsrs r3, r1, #3
2430: 4203 tst r3, r0
2432: d1e4 bne.n 23fe <STACK_SIZE+0x3fe>
2434: 08d2 lsrs r2, r2, #3
2436: 0749 lsls r1, r1, #29
2438: 4311 orrs r1, r2
243a: 000f movs r7, r1
243c: 001c movs r4, r3
243e: e7de b.n 23fe <STACK_SIZE+0x3fe>
2440: 2700 movs r7, #0
2442: 2400 movs r4, #0
2444: e5d5 b.n 1ff2 <__aeabi_dadd+0x142>
2446: 2100 movs r1, #0
2448: e76b b.n 2322 <STACK_SIZE+0x322>
244a: 2500 movs r5, #0
244c: 2700 movs r7, #0
244e: e5f3 b.n 2038 <STACK_SIZE+0x38>
2450: 464e mov r6, r9
2452: 0025 movs r5, r4
2454: 3e20 subs r6, #32
2456: 40f5 lsrs r5, r6
2458: 464b mov r3, r9
245a: 002e movs r6, r5
245c: 2b20 cmp r3, #32
245e: d02d beq.n 24bc <STACK_SIZE+0x4bc>
2460: 2540 movs r5, #64 ; 0x40
2462: 1aed subs r5, r5, r3
2464: 40ac lsls r4, r5
2466: 4327 orrs r7, r4
2468: 1e7c subs r4, r7, #1
246a: 41a7 sbcs r7, r4
246c: 2400 movs r4, #0
246e: 4337 orrs r7, r6
2470: e6c9 b.n 2206 <STACK_SIZE+0x206>
2472: 2480 movs r4, #128 ; 0x80
2474: 2500 movs r5, #0
2476: 0324 lsls r4, r4, #12
2478: 4e13 ldr r6, [pc, #76] ; (24c8 <STACK_SIZE+0x4c8>)
247a: 2700 movs r7, #0
247c: e5dc b.n 2038 <STACK_SIZE+0x38>
247e: 4327 orrs r7, r4
2480: 1e7c subs r4, r7, #1
2482: 41a7 sbcs r7, r4
2484: 2400 movs r4, #0
2486: e779 b.n 237c <STACK_SIZE+0x37c>
2488: 000c movs r4, r1
248a: 0017 movs r7, r2
248c: 4e0e ldr r6, [pc, #56] ; (24c8 <STACK_SIZE+0x4c8>)
248e: e593 b.n 1fb8 <__aeabi_dadd+0x108>
2490: 000c movs r4, r1
2492: 0017 movs r7, r2
2494: e590 b.n 1fb8 <__aeabi_dadd+0x108>
2496: 4656 mov r6, sl
2498: 0023 movs r3, r4
249a: 3e20 subs r6, #32
249c: 40f3 lsrs r3, r6
249e: 4699 mov r9, r3
24a0: 4653 mov r3, sl
24a2: 2b20 cmp r3, #32
24a4: d00e beq.n 24c4 <STACK_SIZE+0x4c4>
24a6: 2340 movs r3, #64 ; 0x40
24a8: 4656 mov r6, sl
24aa: 1b9b subs r3, r3, r6
24ac: 409c lsls r4, r3
24ae: 4327 orrs r7, r4
24b0: 1e7c subs r4, r7, #1
24b2: 41a7 sbcs r7, r4
24b4: 464b mov r3, r9
24b6: 2400 movs r4, #0
24b8: 431f orrs r7, r3
24ba: e75f b.n 237c <STACK_SIZE+0x37c>
24bc: 2400 movs r4, #0
24be: e7d2 b.n 2466 <STACK_SIZE+0x466>
24c0: 0017 movs r7, r2
24c2: e5b2 b.n 202a <STACK_SIZE+0x2a>
24c4: 2400 movs r4, #0
24c6: e7f2 b.n 24ae <STACK_SIZE+0x4ae>
24c8: 000007ff .word 0x000007ff
24cc: ff7fffff .word 0xff7fffff
000024d0 <__aeabi_ddiv>:
24d0: b5f0 push {r4, r5, r6, r7, lr}
24d2: 4657 mov r7, sl
24d4: 4645 mov r5, r8
24d6: 46de mov lr, fp
24d8: 464e mov r6, r9
24da: b5e0 push {r5, r6, r7, lr}
24dc: 004c lsls r4, r1, #1
24de: 030e lsls r6, r1, #12
24e0: b087 sub sp, #28
24e2: 4683 mov fp, r0
24e4: 4692 mov sl, r2
24e6: 001d movs r5, r3
24e8: 4680 mov r8, r0
24ea: 0b36 lsrs r6, r6, #12
24ec: 0d64 lsrs r4, r4, #21
24ee: 0fcf lsrs r7, r1, #31
24f0: 2c00 cmp r4, #0
24f2: d04f beq.n 2594 <__aeabi_ddiv+0xc4>
24f4: 4b6f ldr r3, [pc, #444] ; (26b4 <__aeabi_ddiv+0x1e4>)
24f6: 429c cmp r4, r3
24f8: d035 beq.n 2566 <__aeabi_ddiv+0x96>
24fa: 2380 movs r3, #128 ; 0x80
24fc: 0f42 lsrs r2, r0, #29
24fe: 041b lsls r3, r3, #16
2500: 00f6 lsls r6, r6, #3
2502: 4313 orrs r3, r2
2504: 4333 orrs r3, r6
2506: 4699 mov r9, r3
2508: 00c3 lsls r3, r0, #3
250a: 4698 mov r8, r3
250c: 4b6a ldr r3, [pc, #424] ; (26b8 <__aeabi_ddiv+0x1e8>)
250e: 2600 movs r6, #0
2510: 469c mov ip, r3
2512: 2300 movs r3, #0
2514: 4464 add r4, ip
2516: 9303 str r3, [sp, #12]
2518: 032b lsls r3, r5, #12
251a: 0b1b lsrs r3, r3, #12
251c: 469b mov fp, r3
251e: 006b lsls r3, r5, #1
2520: 0fed lsrs r5, r5, #31
2522: 4650 mov r0, sl
2524: 0d5b lsrs r3, r3, #21
2526: 9501 str r5, [sp, #4]
2528: d05e beq.n 25e8 <__aeabi_ddiv+0x118>
252a: 4a62 ldr r2, [pc, #392] ; (26b4 <__aeabi_ddiv+0x1e4>)
252c: 4293 cmp r3, r2
252e: d053 beq.n 25d8 <__aeabi_ddiv+0x108>
2530: 465a mov r2, fp
2532: 00d1 lsls r1, r2, #3
2534: 2280 movs r2, #128 ; 0x80
2536: 0f40 lsrs r0, r0, #29
2538: 0412 lsls r2, r2, #16
253a: 4302 orrs r2, r0
253c: 430a orrs r2, r1
253e: 4693 mov fp, r2
2540: 4652 mov r2, sl
2542: 00d1 lsls r1, r2, #3
2544: 4a5c ldr r2, [pc, #368] ; (26b8 <__aeabi_ddiv+0x1e8>)
2546: 4694 mov ip, r2
2548: 2200 movs r2, #0
254a: 4463 add r3, ip
254c: 0038 movs r0, r7
254e: 4068 eors r0, r5
2550: 4684 mov ip, r0
2552: 9002 str r0, [sp, #8]
2554: 1ae4 subs r4, r4, r3
2556: 4316 orrs r6, r2
2558: 2e0f cmp r6, #15
255a: d900 bls.n 255e <__aeabi_ddiv+0x8e>
255c: e0b4 b.n 26c8 <__aeabi_ddiv+0x1f8>
255e: 4b57 ldr r3, [pc, #348] ; (26bc <__aeabi_ddiv+0x1ec>)
2560: 00b6 lsls r6, r6, #2
2562: 599b ldr r3, [r3, r6]
2564: 469f mov pc, r3
2566: 0003 movs r3, r0
2568: 4333 orrs r3, r6
256a: 4699 mov r9, r3
256c: d16c bne.n 2648 <__aeabi_ddiv+0x178>
256e: 2300 movs r3, #0
2570: 4698 mov r8, r3
2572: 3302 adds r3, #2
2574: 2608 movs r6, #8
2576: 9303 str r3, [sp, #12]
2578: e7ce b.n 2518 <__aeabi_ddiv+0x48>
257a: 46cb mov fp, r9
257c: 4641 mov r1, r8
257e: 9a03 ldr r2, [sp, #12]
2580: 9701 str r7, [sp, #4]
2582: 2a02 cmp r2, #2
2584: d165 bne.n 2652 <__aeabi_ddiv+0x182>
2586: 9b01 ldr r3, [sp, #4]
2588: 4c4a ldr r4, [pc, #296] ; (26b4 <__aeabi_ddiv+0x1e4>)
258a: 469c mov ip, r3
258c: 2300 movs r3, #0
258e: 2200 movs r2, #0
2590: 4698 mov r8, r3
2592: e06b b.n 266c <__aeabi_ddiv+0x19c>
2594: 0003 movs r3, r0
2596: 4333 orrs r3, r6
2598: 4699 mov r9, r3
259a: d04e beq.n 263a <__aeabi_ddiv+0x16a>
259c: 2e00 cmp r6, #0
259e: d100 bne.n 25a2 <__aeabi_ddiv+0xd2>
25a0: e1bc b.n 291c <__aeabi_ddiv+0x44c>
25a2: 0030 movs r0, r6
25a4: f001 f8ca bl 373c <__clzsi2>
25a8: 0003 movs r3, r0
25aa: 3b0b subs r3, #11
25ac: 2b1c cmp r3, #28
25ae: dd00 ble.n 25b2 <__aeabi_ddiv+0xe2>
25b0: e1ac b.n 290c <__aeabi_ddiv+0x43c>
25b2: 221d movs r2, #29
25b4: 1ad3 subs r3, r2, r3
25b6: 465a mov r2, fp
25b8: 0001 movs r1, r0
25ba: 40da lsrs r2, r3
25bc: 3908 subs r1, #8
25be: 408e lsls r6, r1
25c0: 0013 movs r3, r2
25c2: 4333 orrs r3, r6
25c4: 4699 mov r9, r3
25c6: 465b mov r3, fp
25c8: 408b lsls r3, r1
25ca: 4698 mov r8, r3
25cc: 2300 movs r3, #0
25ce: 4c3c ldr r4, [pc, #240] ; (26c0 <__aeabi_ddiv+0x1f0>)
25d0: 2600 movs r6, #0
25d2: 1a24 subs r4, r4, r0
25d4: 9303 str r3, [sp, #12]
25d6: e79f b.n 2518 <__aeabi_ddiv+0x48>
25d8: 4651 mov r1, sl
25da: 465a mov r2, fp
25dc: 4311 orrs r1, r2
25de: d129 bne.n 2634 <__aeabi_ddiv+0x164>
25e0: 2200 movs r2, #0
25e2: 4693 mov fp, r2
25e4: 3202 adds r2, #2
25e6: e7b1 b.n 254c <__aeabi_ddiv+0x7c>
25e8: 4659 mov r1, fp
25ea: 4301 orrs r1, r0
25ec: d01e beq.n 262c <__aeabi_ddiv+0x15c>
25ee: 465b mov r3, fp
25f0: 2b00 cmp r3, #0
25f2: d100 bne.n 25f6 <__aeabi_ddiv+0x126>
25f4: e19e b.n 2934 <__aeabi_ddiv+0x464>
25f6: 4658 mov r0, fp
25f8: f001 f8a0 bl 373c <__clzsi2>
25fc: 0003 movs r3, r0
25fe: 3b0b subs r3, #11
2600: 2b1c cmp r3, #28
2602: dd00 ble.n 2606 <__aeabi_ddiv+0x136>
2604: e18f b.n 2926 <__aeabi_ddiv+0x456>
2606: 0002 movs r2, r0
2608: 4659 mov r1, fp
260a: 3a08 subs r2, #8
260c: 4091 lsls r1, r2
260e: 468b mov fp, r1
2610: 211d movs r1, #29
2612: 1acb subs r3, r1, r3
2614: 4651 mov r1, sl
2616: 40d9 lsrs r1, r3
2618: 000b movs r3, r1
261a: 4659 mov r1, fp
261c: 430b orrs r3, r1
261e: 4651 mov r1, sl
2620: 469b mov fp, r3
2622: 4091 lsls r1, r2
2624: 4b26 ldr r3, [pc, #152] ; (26c0 <__aeabi_ddiv+0x1f0>)
2626: 2200 movs r2, #0
2628: 1a1b subs r3, r3, r0
262a: e78f b.n 254c <__aeabi_ddiv+0x7c>
262c: 2300 movs r3, #0
262e: 2201 movs r2, #1
2630: 469b mov fp, r3
2632: e78b b.n 254c <__aeabi_ddiv+0x7c>
2634: 4651 mov r1, sl
2636: 2203 movs r2, #3
2638: e788 b.n 254c <__aeabi_ddiv+0x7c>
263a: 2300 movs r3, #0
263c: 4698 mov r8, r3
263e: 3301 adds r3, #1
2640: 2604 movs r6, #4
2642: 2400 movs r4, #0
2644: 9303 str r3, [sp, #12]
2646: e767 b.n 2518 <__aeabi_ddiv+0x48>
2648: 2303 movs r3, #3
264a: 46b1 mov r9, r6
264c: 9303 str r3, [sp, #12]
264e: 260c movs r6, #12
2650: e762 b.n 2518 <__aeabi_ddiv+0x48>
2652: 2a03 cmp r2, #3
2654: d100 bne.n 2658 <__aeabi_ddiv+0x188>
2656: e25c b.n 2b12 <__aeabi_ddiv+0x642>
2658: 9b01 ldr r3, [sp, #4]
265a: 2a01 cmp r2, #1
265c: d000 beq.n 2660 <__aeabi_ddiv+0x190>
265e: e1e4 b.n 2a2a <__aeabi_ddiv+0x55a>
2660: 4013 ands r3, r2
2662: 469c mov ip, r3
2664: 2300 movs r3, #0
2666: 2400 movs r4, #0
2668: 2200 movs r2, #0
266a: 4698 mov r8, r3
266c: 2100 movs r1, #0
266e: 0312 lsls r2, r2, #12
2670: 0b13 lsrs r3, r2, #12
2672: 0d0a lsrs r2, r1, #20
2674: 0512 lsls r2, r2, #20
2676: 431a orrs r2, r3
2678: 0523 lsls r3, r4, #20
267a: 4c12 ldr r4, [pc, #72] ; (26c4 <__aeabi_ddiv+0x1f4>)
267c: 4640 mov r0, r8
267e: 4022 ands r2, r4
2680: 4313 orrs r3, r2
2682: 4662 mov r2, ip
2684: 005b lsls r3, r3, #1
2686: 07d2 lsls r2, r2, #31
2688: 085b lsrs r3, r3, #1
268a: 4313 orrs r3, r2
268c: 0019 movs r1, r3
268e: b007 add sp, #28
2690: bc3c pop {r2, r3, r4, r5}
2692: 4690 mov r8, r2
2694: 4699 mov r9, r3
2696: 46a2 mov sl, r4
2698: 46ab mov fp, r5
269a: bdf0 pop {r4, r5, r6, r7, pc}
269c: 2300 movs r3, #0
269e: 2280 movs r2, #128 ; 0x80
26a0: 469c mov ip, r3
26a2: 0312 lsls r2, r2, #12
26a4: 4698 mov r8, r3
26a6: 4c03 ldr r4, [pc, #12] ; (26b4 <__aeabi_ddiv+0x1e4>)
26a8: e7e0 b.n 266c <__aeabi_ddiv+0x19c>
26aa: 2300 movs r3, #0
26ac: 4c01 ldr r4, [pc, #4] ; (26b4 <__aeabi_ddiv+0x1e4>)
26ae: 2200 movs r2, #0
26b0: 4698 mov r8, r3
26b2: e7db b.n 266c <__aeabi_ddiv+0x19c>
26b4: 000007ff .word 0x000007ff
26b8: fffffc01 .word 0xfffffc01
26bc: 00004908 .word 0x00004908
26c0: fffffc0d .word 0xfffffc0d
26c4: 800fffff .word 0x800fffff
26c8: 45d9 cmp r9, fp
26ca: d900 bls.n 26ce <__aeabi_ddiv+0x1fe>
26cc: e139 b.n 2942 <__aeabi_ddiv+0x472>
26ce: d100 bne.n 26d2 <__aeabi_ddiv+0x202>
26d0: e134 b.n 293c <__aeabi_ddiv+0x46c>
26d2: 2300 movs r3, #0
26d4: 4646 mov r6, r8
26d6: 464d mov r5, r9
26d8: 469a mov sl, r3
26da: 3c01 subs r4, #1
26dc: 465b mov r3, fp
26de: 0e0a lsrs r2, r1, #24
26e0: 021b lsls r3, r3, #8
26e2: 431a orrs r2, r3
26e4: 020b lsls r3, r1, #8
26e6: 0c17 lsrs r7, r2, #16
26e8: 9303 str r3, [sp, #12]
26ea: 0413 lsls r3, r2, #16
26ec: 0c1b lsrs r3, r3, #16
26ee: 0039 movs r1, r7
26f0: 0028 movs r0, r5
26f2: 4690 mov r8, r2
26f4: 9301 str r3, [sp, #4]
26f6: f7ff fb25 bl 1d44 <__udivsi3>
26fa: 0002 movs r2, r0
26fc: 9b01 ldr r3, [sp, #4]
26fe: 4683 mov fp, r0
2700: 435a muls r2, r3
2702: 0028 movs r0, r5
2704: 0039 movs r1, r7
2706: 4691 mov r9, r2
2708: f7ff fba2 bl 1e50 <__aeabi_uidivmod>
270c: 0c35 lsrs r5, r6, #16
270e: 0409 lsls r1, r1, #16
2710: 430d orrs r5, r1
2712: 45a9 cmp r9, r5
2714: d90d bls.n 2732 <__aeabi_ddiv+0x262>
2716: 465b mov r3, fp
2718: 4445 add r5, r8
271a: 3b01 subs r3, #1
271c: 45a8 cmp r8, r5
271e: d900 bls.n 2722 <__aeabi_ddiv+0x252>
2720: e13a b.n 2998 <__aeabi_ddiv+0x4c8>
2722: 45a9 cmp r9, r5
2724: d800 bhi.n 2728 <__aeabi_ddiv+0x258>
2726: e137 b.n 2998 <__aeabi_ddiv+0x4c8>
2728: 2302 movs r3, #2
272a: 425b negs r3, r3
272c: 469c mov ip, r3
272e: 4445 add r5, r8
2730: 44e3 add fp, ip
2732: 464b mov r3, r9
2734: 1aeb subs r3, r5, r3
2736: 0039 movs r1, r7
2738: 0018 movs r0, r3
273a: 9304 str r3, [sp, #16]
273c: f7ff fb02 bl 1d44 <__udivsi3>
2740: 9b01 ldr r3, [sp, #4]
2742: 0005 movs r5, r0
2744: 4343 muls r3, r0
2746: 0039 movs r1, r7
2748: 9804 ldr r0, [sp, #16]
274a: 4699 mov r9, r3
274c: f7ff fb80 bl 1e50 <__aeabi_uidivmod>
2750: 0433 lsls r3, r6, #16
2752: 0409 lsls r1, r1, #16
2754: 0c1b lsrs r3, r3, #16
2756: 430b orrs r3, r1
2758: 4599 cmp r9, r3
275a: d909 bls.n 2770 <__aeabi_ddiv+0x2a0>
275c: 4443 add r3, r8
275e: 1e6a subs r2, r5, #1
2760: 4598 cmp r8, r3
2762: d900 bls.n 2766 <__aeabi_ddiv+0x296>
2764: e11a b.n 299c <__aeabi_ddiv+0x4cc>
2766: 4599 cmp r9, r3
2768: d800 bhi.n 276c <__aeabi_ddiv+0x29c>
276a: e117 b.n 299c <__aeabi_ddiv+0x4cc>
276c: 3d02 subs r5, #2
276e: 4443 add r3, r8
2770: 464a mov r2, r9
2772: 1a9b subs r3, r3, r2
2774: 465a mov r2, fp
2776: 0412 lsls r2, r2, #16
2778: 432a orrs r2, r5
277a: 9903 ldr r1, [sp, #12]
277c: 4693 mov fp, r2
277e: 0c10 lsrs r0, r2, #16
2780: 0c0a lsrs r2, r1, #16
2782: 4691 mov r9, r2
2784: 0409 lsls r1, r1, #16
2786: 465a mov r2, fp
2788: 0c09 lsrs r1, r1, #16
278a: 464e mov r6, r9
278c: 000d movs r5, r1
278e: 0412 lsls r2, r2, #16
2790: 0c12 lsrs r2, r2, #16
2792: 4345 muls r5, r0
2794: 9105 str r1, [sp, #20]
2796: 4351 muls r1, r2
2798: 4372 muls r2, r6
279a: 4370 muls r0, r6
279c: 1952 adds r2, r2, r5
279e: 0c0e lsrs r6, r1, #16
27a0: 18b2 adds r2, r6, r2
27a2: 4295 cmp r5, r2
27a4: d903 bls.n 27ae <__aeabi_ddiv+0x2de>
27a6: 2580 movs r5, #128 ; 0x80
27a8: 026d lsls r5, r5, #9
27aa: 46ac mov ip, r5
27ac: 4460 add r0, ip
27ae: 0c15 lsrs r5, r2, #16
27b0: 0409 lsls r1, r1, #16
27b2: 0412 lsls r2, r2, #16
27b4: 0c09 lsrs r1, r1, #16
27b6: 1828 adds r0, r5, r0
27b8: 1852 adds r2, r2, r1
27ba: 4283 cmp r3, r0
27bc: d200 bcs.n 27c0 <__aeabi_ddiv+0x2f0>
27be: e0ce b.n 295e <__aeabi_ddiv+0x48e>
27c0: d100 bne.n 27c4 <__aeabi_ddiv+0x2f4>
27c2: e0c8 b.n 2956 <__aeabi_ddiv+0x486>
27c4: 1a1d subs r5, r3, r0
27c6: 4653 mov r3, sl
27c8: 1a9e subs r6, r3, r2
27ca: 45b2 cmp sl, r6
27cc: 4192 sbcs r2, r2
27ce: 4252 negs r2, r2
27d0: 1aab subs r3, r5, r2
27d2: 469a mov sl, r3
27d4: 4598 cmp r8, r3
27d6: d100 bne.n 27da <__aeabi_ddiv+0x30a>
27d8: e117 b.n 2a0a <__aeabi_ddiv+0x53a>
27da: 0039 movs r1, r7
27dc: 0018 movs r0, r3
27de: f7ff fab1 bl 1d44 <__udivsi3>
27e2: 9b01 ldr r3, [sp, #4]
27e4: 0005 movs r5, r0
27e6: 4343 muls r3, r0
27e8: 0039 movs r1, r7
27ea: 4650 mov r0, sl
27ec: 9304 str r3, [sp, #16]
27ee: f7ff fb2f bl 1e50 <__aeabi_uidivmod>
27f2: 9804 ldr r0, [sp, #16]
27f4: 040b lsls r3, r1, #16
27f6: 0c31 lsrs r1, r6, #16
27f8: 4319 orrs r1, r3
27fa: 4288 cmp r0, r1
27fc: d909 bls.n 2812 <__aeabi_ddiv+0x342>
27fe: 4441 add r1, r8
2800: 1e6b subs r3, r5, #1
2802: 4588 cmp r8, r1
2804: d900 bls.n 2808 <__aeabi_ddiv+0x338>
2806: e107 b.n 2a18 <__aeabi_ddiv+0x548>
2808: 4288 cmp r0, r1
280a: d800 bhi.n 280e <__aeabi_ddiv+0x33e>
280c: e104 b.n 2a18 <__aeabi_ddiv+0x548>
280e: 3d02 subs r5, #2
2810: 4441 add r1, r8
2812: 9b04 ldr r3, [sp, #16]
2814: 1acb subs r3, r1, r3
2816: 0018 movs r0, r3
2818: 0039 movs r1, r7
281a: 9304 str r3, [sp, #16]
281c: f7ff fa92 bl 1d44 <__udivsi3>
2820: 9b01 ldr r3, [sp, #4]
2822: 4682 mov sl, r0
2824: 4343 muls r3, r0
2826: 0039 movs r1, r7
2828: 9804 ldr r0, [sp, #16]
282a: 9301 str r3, [sp, #4]
282c: f7ff fb10 bl 1e50 <__aeabi_uidivmod>
2830: 9801 ldr r0, [sp, #4]
2832: 040b lsls r3, r1, #16
2834: 0431 lsls r1, r6, #16
2836: 0c09 lsrs r1, r1, #16
2838: 4319 orrs r1, r3
283a: 4288 cmp r0, r1
283c: d90d bls.n 285a <__aeabi_ddiv+0x38a>
283e: 4653 mov r3, sl
2840: 4441 add r1, r8
2842: 3b01 subs r3, #1
2844: 4588 cmp r8, r1
2846: d900 bls.n 284a <__aeabi_ddiv+0x37a>
2848: e0e8 b.n 2a1c <__aeabi_ddiv+0x54c>
284a: 4288 cmp r0, r1
284c: d800 bhi.n 2850 <__aeabi_ddiv+0x380>
284e: e0e5 b.n 2a1c <__aeabi_ddiv+0x54c>
2850: 2302 movs r3, #2
2852: 425b negs r3, r3
2854: 469c mov ip, r3
2856: 4441 add r1, r8
2858: 44e2 add sl, ip
285a: 9b01 ldr r3, [sp, #4]
285c: 042d lsls r5, r5, #16
285e: 1ace subs r6, r1, r3
2860: 4651 mov r1, sl
2862: 4329 orrs r1, r5
2864: 9d05 ldr r5, [sp, #20]
2866: 464f mov r7, r9
2868: 002a movs r2, r5
286a: 040b lsls r3, r1, #16
286c: 0c08 lsrs r0, r1, #16
286e: 0c1b lsrs r3, r3, #16
2870: 435a muls r2, r3
2872: 4345 muls r5, r0
2874: 437b muls r3, r7
2876: 4378 muls r0, r7
2878: 195b adds r3, r3, r5
287a: 0c17 lsrs r7, r2, #16
287c: 18fb adds r3, r7, r3
287e: 429d cmp r5, r3
2880: d903 bls.n 288a <__aeabi_ddiv+0x3ba>
2882: 2580 movs r5, #128 ; 0x80
2884: 026d lsls r5, r5, #9
2886: 46ac mov ip, r5
2888: 4460 add r0, ip
288a: 0c1d lsrs r5, r3, #16
288c: 0412 lsls r2, r2, #16
288e: 041b lsls r3, r3, #16
2890: 0c12 lsrs r2, r2, #16
2892: 1828 adds r0, r5, r0
2894: 189b adds r3, r3, r2
2896: 4286 cmp r6, r0
2898: d200 bcs.n 289c <__aeabi_ddiv+0x3cc>
289a: e093 b.n 29c4 <__aeabi_ddiv+0x4f4>
289c: d100 bne.n 28a0 <__aeabi_ddiv+0x3d0>
289e: e08e b.n 29be <__aeabi_ddiv+0x4ee>
28a0: 2301 movs r3, #1
28a2: 4319 orrs r1, r3
28a4: 4ba0 ldr r3, [pc, #640] ; (2b28 <__aeabi_ddiv+0x658>)
28a6: 18e3 adds r3, r4, r3
28a8: 2b00 cmp r3, #0
28aa: dc00 bgt.n 28ae <__aeabi_ddiv+0x3de>
28ac: e099 b.n 29e2 <__aeabi_ddiv+0x512>
28ae: 074a lsls r2, r1, #29
28b0: d000 beq.n 28b4 <__aeabi_ddiv+0x3e4>
28b2: e09e b.n 29f2 <__aeabi_ddiv+0x522>
28b4: 465a mov r2, fp
28b6: 01d2 lsls r2, r2, #7
28b8: d506 bpl.n 28c8 <__aeabi_ddiv+0x3f8>
28ba: 465a mov r2, fp
28bc: 4b9b ldr r3, [pc, #620] ; (2b2c <__aeabi_ddiv+0x65c>)
28be: 401a ands r2, r3
28c0: 2380 movs r3, #128 ; 0x80
28c2: 4693 mov fp, r2
28c4: 00db lsls r3, r3, #3
28c6: 18e3 adds r3, r4, r3
28c8: 4a99 ldr r2, [pc, #612] ; (2b30 <__aeabi_ddiv+0x660>)
28ca: 4293 cmp r3, r2
28cc: dd68 ble.n 29a0 <__aeabi_ddiv+0x4d0>
28ce: 2301 movs r3, #1
28d0: 9a02 ldr r2, [sp, #8]
28d2: 4c98 ldr r4, [pc, #608] ; (2b34 <__aeabi_ddiv+0x664>)
28d4: 401a ands r2, r3
28d6: 2300 movs r3, #0
28d8: 4694 mov ip, r2
28da: 4698 mov r8, r3
28dc: 2200 movs r2, #0
28de: e6c5 b.n 266c <__aeabi_ddiv+0x19c>
28e0: 2280 movs r2, #128 ; 0x80
28e2: 464b mov r3, r9
28e4: 0312 lsls r2, r2, #12
28e6: 4213 tst r3, r2
28e8: d00a beq.n 2900 <__aeabi_ddiv+0x430>
28ea: 465b mov r3, fp
28ec: 4213 tst r3, r2
28ee: d106 bne.n 28fe <__aeabi_ddiv+0x42e>
28f0: 431a orrs r2, r3
28f2: 0312 lsls r2, r2, #12
28f4: 0b12 lsrs r2, r2, #12
28f6: 46ac mov ip, r5
28f8: 4688 mov r8, r1
28fa: 4c8e ldr r4, [pc, #568] ; (2b34 <__aeabi_ddiv+0x664>)
28fc: e6b6 b.n 266c <__aeabi_ddiv+0x19c>
28fe: 464b mov r3, r9
2900: 431a orrs r2, r3
2902: 0312 lsls r2, r2, #12
2904: 0b12 lsrs r2, r2, #12
2906: 46bc mov ip, r7
2908: 4c8a ldr r4, [pc, #552] ; (2b34 <__aeabi_ddiv+0x664>)
290a: e6af b.n 266c <__aeabi_ddiv+0x19c>
290c: 0003 movs r3, r0
290e: 465a mov r2, fp
2910: 3b28 subs r3, #40 ; 0x28
2912: 409a lsls r2, r3
2914: 2300 movs r3, #0
2916: 4691 mov r9, r2
2918: 4698 mov r8, r3
291a: e657 b.n 25cc <__aeabi_ddiv+0xfc>
291c: 4658 mov r0, fp
291e: f000 ff0d bl 373c <__clzsi2>
2922: 3020 adds r0, #32
2924: e640 b.n 25a8 <__aeabi_ddiv+0xd8>
2926: 0003 movs r3, r0
2928: 4652 mov r2, sl
292a: 3b28 subs r3, #40 ; 0x28
292c: 409a lsls r2, r3
292e: 2100 movs r1, #0
2930: 4693 mov fp, r2
2932: e677 b.n 2624 <__aeabi_ddiv+0x154>
2934: f000 ff02 bl 373c <__clzsi2>
2938: 3020 adds r0, #32
293a: e65f b.n 25fc <__aeabi_ddiv+0x12c>
293c: 4588 cmp r8, r1
293e: d200 bcs.n 2942 <__aeabi_ddiv+0x472>
2940: e6c7 b.n 26d2 <__aeabi_ddiv+0x202>
2942: 464b mov r3, r9
2944: 07de lsls r6, r3, #31
2946: 085d lsrs r5, r3, #1
2948: 4643 mov r3, r8
294a: 085b lsrs r3, r3, #1
294c: 431e orrs r6, r3
294e: 4643 mov r3, r8
2950: 07db lsls r3, r3, #31
2952: 469a mov sl, r3
2954: e6c2 b.n 26dc <__aeabi_ddiv+0x20c>
2956: 2500 movs r5, #0
2958: 4592 cmp sl, r2
295a: d300 bcc.n 295e <__aeabi_ddiv+0x48e>
295c: e733 b.n 27c6 <__aeabi_ddiv+0x2f6>
295e: 9e03 ldr r6, [sp, #12]
2960: 4659 mov r1, fp
2962: 46b4 mov ip, r6
2964: 44e2 add sl, ip
2966: 45b2 cmp sl, r6
2968: 41ad sbcs r5, r5
296a: 426d negs r5, r5
296c: 4445 add r5, r8
296e: 18eb adds r3, r5, r3
2970: 3901 subs r1, #1
2972: 4598 cmp r8, r3
2974: d207 bcs.n 2986 <__aeabi_ddiv+0x4b6>
2976: 4298 cmp r0, r3
2978: d900 bls.n 297c <__aeabi_ddiv+0x4ac>
297a: e07f b.n 2a7c <__aeabi_ddiv+0x5ac>
297c: d100 bne.n 2980 <__aeabi_ddiv+0x4b0>
297e: e0bc b.n 2afa <__aeabi_ddiv+0x62a>
2980: 1a1d subs r5, r3, r0
2982: 468b mov fp, r1
2984: e71f b.n 27c6 <__aeabi_ddiv+0x2f6>
2986: 4598 cmp r8, r3
2988: d1fa bne.n 2980 <__aeabi_ddiv+0x4b0>
298a: 9d03 ldr r5, [sp, #12]
298c: 4555 cmp r5, sl
298e: d9f2 bls.n 2976 <__aeabi_ddiv+0x4a6>
2990: 4643 mov r3, r8
2992: 468b mov fp, r1
2994: 1a1d subs r5, r3, r0
2996: e716 b.n 27c6 <__aeabi_ddiv+0x2f6>
2998: 469b mov fp, r3
299a: e6ca b.n 2732 <__aeabi_ddiv+0x262>
299c: 0015 movs r5, r2
299e: e6e7 b.n 2770 <__aeabi_ddiv+0x2a0>
29a0: 465a mov r2, fp
29a2: 08c9 lsrs r1, r1, #3
29a4: 0752 lsls r2, r2, #29
29a6: 430a orrs r2, r1
29a8: 055b lsls r3, r3, #21
29aa: 4690 mov r8, r2
29ac: 0d5c lsrs r4, r3, #21
29ae: 465a mov r2, fp
29b0: 2301 movs r3, #1
29b2: 9902 ldr r1, [sp, #8]
29b4: 0252 lsls r2, r2, #9
29b6: 4019 ands r1, r3
29b8: 0b12 lsrs r2, r2, #12
29ba: 468c mov ip, r1
29bc: e656 b.n 266c <__aeabi_ddiv+0x19c>
29be: 2b00 cmp r3, #0
29c0: d100 bne.n 29c4 <__aeabi_ddiv+0x4f4>
29c2: e76f b.n 28a4 <__aeabi_ddiv+0x3d4>
29c4: 4446 add r6, r8
29c6: 1e4a subs r2, r1, #1
29c8: 45b0 cmp r8, r6
29ca: d929 bls.n 2a20 <__aeabi_ddiv+0x550>
29cc: 0011 movs r1, r2
29ce: 4286 cmp r6, r0
29d0: d000 beq.n 29d4 <__aeabi_ddiv+0x504>
29d2: e765 b.n 28a0 <__aeabi_ddiv+0x3d0>
29d4: 9a03 ldr r2, [sp, #12]
29d6: 4293 cmp r3, r2
29d8: d000 beq.n 29dc <__aeabi_ddiv+0x50c>
29da: e761 b.n 28a0 <__aeabi_ddiv+0x3d0>
29dc: e762 b.n 28a4 <__aeabi_ddiv+0x3d4>
29de: 2101 movs r1, #1
29e0: 4249 negs r1, r1
29e2: 2001 movs r0, #1
29e4: 1ac2 subs r2, r0, r3
29e6: 2a38 cmp r2, #56 ; 0x38
29e8: dd21 ble.n 2a2e <__aeabi_ddiv+0x55e>
29ea: 9b02 ldr r3, [sp, #8]
29ec: 4003 ands r3, r0
29ee: 469c mov ip, r3
29f0: e638 b.n 2664 <__aeabi_ddiv+0x194>
29f2: 220f movs r2, #15
29f4: 400a ands r2, r1
29f6: 2a04 cmp r2, #4
29f8: d100 bne.n 29fc <__aeabi_ddiv+0x52c>
29fa: e75b b.n 28b4 <__aeabi_ddiv+0x3e4>
29fc: 000a movs r2, r1
29fe: 1d11 adds r1, r2, #4
2a00: 4291 cmp r1, r2
2a02: 4192 sbcs r2, r2
2a04: 4252 negs r2, r2
2a06: 4493 add fp, r2
2a08: e754 b.n 28b4 <__aeabi_ddiv+0x3e4>
2a0a: 4b47 ldr r3, [pc, #284] ; (2b28 <__aeabi_ddiv+0x658>)
2a0c: 18e3 adds r3, r4, r3
2a0e: 2b00 cmp r3, #0
2a10: dde5 ble.n 29de <__aeabi_ddiv+0x50e>
2a12: 2201 movs r2, #1
2a14: 4252 negs r2, r2
2a16: e7f2 b.n 29fe <__aeabi_ddiv+0x52e>
2a18: 001d movs r5, r3
2a1a: e6fa b.n 2812 <__aeabi_ddiv+0x342>
2a1c: 469a mov sl, r3
2a1e: e71c b.n 285a <__aeabi_ddiv+0x38a>
2a20: 42b0 cmp r0, r6
2a22: d839 bhi.n 2a98 <__aeabi_ddiv+0x5c8>
2a24: d06e beq.n 2b04 <__aeabi_ddiv+0x634>
2a26: 0011 movs r1, r2
2a28: e73a b.n 28a0 <__aeabi_ddiv+0x3d0>
2a2a: 9302 str r3, [sp, #8]
2a2c: e73a b.n 28a4 <__aeabi_ddiv+0x3d4>
2a2e: 2a1f cmp r2, #31
2a30: dc3c bgt.n 2aac <__aeabi_ddiv+0x5dc>
2a32: 2320 movs r3, #32
2a34: 1a9b subs r3, r3, r2
2a36: 000c movs r4, r1
2a38: 4658 mov r0, fp
2a3a: 4099 lsls r1, r3
2a3c: 4098 lsls r0, r3
2a3e: 1e4b subs r3, r1, #1
2a40: 4199 sbcs r1, r3
2a42: 465b mov r3, fp
2a44: 40d4 lsrs r4, r2
2a46: 40d3 lsrs r3, r2
2a48: 4320 orrs r0, r4
2a4a: 4308 orrs r0, r1
2a4c: 001a movs r2, r3
2a4e: 0743 lsls r3, r0, #29
2a50: d009 beq.n 2a66 <__aeabi_ddiv+0x596>
2a52: 230f movs r3, #15
2a54: 4003 ands r3, r0
2a56: 2b04 cmp r3, #4
2a58: d005 beq.n 2a66 <__aeabi_ddiv+0x596>
2a5a: 0001 movs r1, r0
2a5c: 1d08 adds r0, r1, #4
2a5e: 4288 cmp r0, r1
2a60: 419b sbcs r3, r3
2a62: 425b negs r3, r3
2a64: 18d2 adds r2, r2, r3
2a66: 0213 lsls r3, r2, #8
2a68: d53a bpl.n 2ae0 <__aeabi_ddiv+0x610>
2a6a: 2301 movs r3, #1
2a6c: 9a02 ldr r2, [sp, #8]
2a6e: 2401 movs r4, #1
2a70: 401a ands r2, r3
2a72: 2300 movs r3, #0
2a74: 4694 mov ip, r2
2a76: 4698 mov r8, r3
2a78: 2200 movs r2, #0
2a7a: e5f7 b.n 266c <__aeabi_ddiv+0x19c>
2a7c: 2102 movs r1, #2
2a7e: 4249 negs r1, r1
2a80: 468c mov ip, r1
2a82: 9d03 ldr r5, [sp, #12]
2a84: 44e3 add fp, ip
2a86: 46ac mov ip, r5
2a88: 44e2 add sl, ip
2a8a: 45aa cmp sl, r5
2a8c: 41ad sbcs r5, r5
2a8e: 426d negs r5, r5
2a90: 4445 add r5, r8
2a92: 18ed adds r5, r5, r3
2a94: 1a2d subs r5, r5, r0
2a96: e696 b.n 27c6 <__aeabi_ddiv+0x2f6>
2a98: 1e8a subs r2, r1, #2
2a9a: 9903 ldr r1, [sp, #12]
2a9c: 004d lsls r5, r1, #1
2a9e: 428d cmp r5, r1
2aa0: 4189 sbcs r1, r1
2aa2: 4249 negs r1, r1
2aa4: 4441 add r1, r8
2aa6: 1876 adds r6, r6, r1
2aa8: 9503 str r5, [sp, #12]
2aaa: e78f b.n 29cc <__aeabi_ddiv+0x4fc>
2aac: 201f movs r0, #31
2aae: 4240 negs r0, r0
2ab0: 1ac3 subs r3, r0, r3
2ab2: 4658 mov r0, fp
2ab4: 40d8 lsrs r0, r3
2ab6: 0003 movs r3, r0
2ab8: 2a20 cmp r2, #32
2aba: d028 beq.n 2b0e <__aeabi_ddiv+0x63e>
2abc: 2040 movs r0, #64 ; 0x40
2abe: 465d mov r5, fp
2ac0: 1a82 subs r2, r0, r2
2ac2: 4095 lsls r5, r2
2ac4: 4329 orrs r1, r5
2ac6: 1e4a subs r2, r1, #1
2ac8: 4191 sbcs r1, r2
2aca: 4319 orrs r1, r3
2acc: 2307 movs r3, #7
2ace: 2200 movs r2, #0
2ad0: 400b ands r3, r1
2ad2: d009 beq.n 2ae8 <__aeabi_ddiv+0x618>
2ad4: 230f movs r3, #15
2ad6: 2200 movs r2, #0
2ad8: 400b ands r3, r1
2ada: 0008 movs r0, r1
2adc: 2b04 cmp r3, #4
2ade: d1bd bne.n 2a5c <__aeabi_ddiv+0x58c>
2ae0: 0001 movs r1, r0
2ae2: 0753 lsls r3, r2, #29
2ae4: 0252 lsls r2, r2, #9
2ae6: 0b12 lsrs r2, r2, #12
2ae8: 08c9 lsrs r1, r1, #3
2aea: 4319 orrs r1, r3
2aec: 2301 movs r3, #1
2aee: 4688 mov r8, r1
2af0: 9902 ldr r1, [sp, #8]
2af2: 2400 movs r4, #0
2af4: 4019 ands r1, r3
2af6: 468c mov ip, r1
2af8: e5b8 b.n 266c <__aeabi_ddiv+0x19c>
2afa: 4552 cmp r2, sl
2afc: d8be bhi.n 2a7c <__aeabi_ddiv+0x5ac>
2afe: 468b mov fp, r1
2b00: 2500 movs r5, #0
2b02: e660 b.n 27c6 <__aeabi_ddiv+0x2f6>
2b04: 9d03 ldr r5, [sp, #12]
2b06: 429d cmp r5, r3
2b08: d3c6 bcc.n 2a98 <__aeabi_ddiv+0x5c8>
2b0a: 0011 movs r1, r2
2b0c: e762 b.n 29d4 <__aeabi_ddiv+0x504>
2b0e: 2500 movs r5, #0
2b10: e7d8 b.n 2ac4 <__aeabi_ddiv+0x5f4>
2b12: 2280 movs r2, #128 ; 0x80
2b14: 465b mov r3, fp
2b16: 0312 lsls r2, r2, #12
2b18: 431a orrs r2, r3
2b1a: 9b01 ldr r3, [sp, #4]
2b1c: 0312 lsls r2, r2, #12
2b1e: 0b12 lsrs r2, r2, #12
2b20: 469c mov ip, r3
2b22: 4688 mov r8, r1
2b24: 4c03 ldr r4, [pc, #12] ; (2b34 <__aeabi_ddiv+0x664>)
2b26: e5a1 b.n 266c <__aeabi_ddiv+0x19c>
2b28: 000003ff .word 0x000003ff
2b2c: feffffff .word 0xfeffffff
2b30: 000007fe .word 0x000007fe
2b34: 000007ff .word 0x000007ff
00002b38 <__aeabi_dmul>:
2b38: b5f0 push {r4, r5, r6, r7, lr}
2b3a: 4657 mov r7, sl
2b3c: 4645 mov r5, r8
2b3e: 46de mov lr, fp
2b40: 464e mov r6, r9
2b42: b5e0 push {r5, r6, r7, lr}
2b44: 030c lsls r4, r1, #12
2b46: 4698 mov r8, r3
2b48: 004e lsls r6, r1, #1
2b4a: 0b23 lsrs r3, r4, #12
2b4c: b087 sub sp, #28
2b4e: 0007 movs r7, r0
2b50: 4692 mov sl, r2
2b52: 469b mov fp, r3
2b54: 0d76 lsrs r6, r6, #21
2b56: 0fcd lsrs r5, r1, #31
2b58: 2e00 cmp r6, #0
2b5a: d06b beq.n 2c34 <__aeabi_dmul+0xfc>
2b5c: 4b6d ldr r3, [pc, #436] ; (2d14 <__aeabi_dmul+0x1dc>)
2b5e: 429e cmp r6, r3
2b60: d035 beq.n 2bce <__aeabi_dmul+0x96>
2b62: 2480 movs r4, #128 ; 0x80
2b64: 465b mov r3, fp
2b66: 0f42 lsrs r2, r0, #29
2b68: 0424 lsls r4, r4, #16
2b6a: 00db lsls r3, r3, #3
2b6c: 4314 orrs r4, r2
2b6e: 431c orrs r4, r3
2b70: 00c3 lsls r3, r0, #3
2b72: 4699 mov r9, r3
2b74: 4b68 ldr r3, [pc, #416] ; (2d18 <__aeabi_dmul+0x1e0>)
2b76: 46a3 mov fp, r4
2b78: 469c mov ip, r3
2b7a: 2300 movs r3, #0
2b7c: 2700 movs r7, #0
2b7e: 4466 add r6, ip
2b80: 9302 str r3, [sp, #8]
2b82: 4643 mov r3, r8
2b84: 031c lsls r4, r3, #12
2b86: 005a lsls r2, r3, #1
2b88: 0fdb lsrs r3, r3, #31
2b8a: 4650 mov r0, sl
2b8c: 0b24 lsrs r4, r4, #12
2b8e: 0d52 lsrs r2, r2, #21
2b90: 4698 mov r8, r3
2b92: d100 bne.n 2b96 <__aeabi_dmul+0x5e>
2b94: e076 b.n 2c84 <__aeabi_dmul+0x14c>
2b96: 4b5f ldr r3, [pc, #380] ; (2d14 <__aeabi_dmul+0x1dc>)
2b98: 429a cmp r2, r3
2b9a: d06d beq.n 2c78 <__aeabi_dmul+0x140>
2b9c: 2380 movs r3, #128 ; 0x80
2b9e: 0f41 lsrs r1, r0, #29
2ba0: 041b lsls r3, r3, #16
2ba2: 430b orrs r3, r1
2ba4: 495c ldr r1, [pc, #368] ; (2d18 <__aeabi_dmul+0x1e0>)
2ba6: 00e4 lsls r4, r4, #3
2ba8: 468c mov ip, r1
2baa: 431c orrs r4, r3
2bac: 00c3 lsls r3, r0, #3
2bae: 2000 movs r0, #0
2bb0: 4462 add r2, ip
2bb2: 4641 mov r1, r8
2bb4: 18b6 adds r6, r6, r2
2bb6: 4069 eors r1, r5
2bb8: 1c72 adds r2, r6, #1
2bba: 9101 str r1, [sp, #4]
2bbc: 4694 mov ip, r2
2bbe: 4307 orrs r7, r0
2bc0: 2f0f cmp r7, #15
2bc2: d900 bls.n 2bc6 <__aeabi_dmul+0x8e>
2bc4: e0b0 b.n 2d28 <__aeabi_dmul+0x1f0>
2bc6: 4a55 ldr r2, [pc, #340] ; (2d1c <__aeabi_dmul+0x1e4>)
2bc8: 00bf lsls r7, r7, #2
2bca: 59d2 ldr r2, [r2, r7]
2bcc: 4697 mov pc, r2
2bce: 465b mov r3, fp
2bd0: 4303 orrs r3, r0
2bd2: 4699 mov r9, r3
2bd4: d000 beq.n 2bd8 <__aeabi_dmul+0xa0>
2bd6: e087 b.n 2ce8 <__aeabi_dmul+0x1b0>
2bd8: 2300 movs r3, #0
2bda: 469b mov fp, r3
2bdc: 3302 adds r3, #2
2bde: 2708 movs r7, #8
2be0: 9302 str r3, [sp, #8]
2be2: e7ce b.n 2b82 <__aeabi_dmul+0x4a>
2be4: 4642 mov r2, r8
2be6: 9201 str r2, [sp, #4]
2be8: 2802 cmp r0, #2
2bea: d067 beq.n 2cbc <__aeabi_dmul+0x184>
2bec: 2803 cmp r0, #3
2bee: d100 bne.n 2bf2 <__aeabi_dmul+0xba>
2bf0: e20e b.n 3010 <__aeabi_dmul+0x4d8>
2bf2: 2801 cmp r0, #1
2bf4: d000 beq.n 2bf8 <__aeabi_dmul+0xc0>
2bf6: e162 b.n 2ebe <__aeabi_dmul+0x386>
2bf8: 2300 movs r3, #0
2bfa: 2400 movs r4, #0
2bfc: 2200 movs r2, #0
2bfe: 4699 mov r9, r3
2c00: 9901 ldr r1, [sp, #4]
2c02: 4001 ands r1, r0
2c04: b2cd uxtb r5, r1
2c06: 2100 movs r1, #0
2c08: 0312 lsls r2, r2, #12
2c0a: 0d0b lsrs r3, r1, #20
2c0c: 0b12 lsrs r2, r2, #12
2c0e: 051b lsls r3, r3, #20
2c10: 4313 orrs r3, r2
2c12: 4a43 ldr r2, [pc, #268] ; (2d20 <__aeabi_dmul+0x1e8>)
2c14: 0524 lsls r4, r4, #20
2c16: 4013 ands r3, r2
2c18: 431c orrs r4, r3
2c1a: 0064 lsls r4, r4, #1
2c1c: 07ed lsls r5, r5, #31
2c1e: 0864 lsrs r4, r4, #1
2c20: 432c orrs r4, r5
2c22: 4648 mov r0, r9
2c24: 0021 movs r1, r4
2c26: b007 add sp, #28
2c28: bc3c pop {r2, r3, r4, r5}
2c2a: 4690 mov r8, r2
2c2c: 4699 mov r9, r3
2c2e: 46a2 mov sl, r4
2c30: 46ab mov fp, r5
2c32: bdf0 pop {r4, r5, r6, r7, pc}
2c34: 4303 orrs r3, r0
2c36: 4699 mov r9, r3
2c38: d04f beq.n 2cda <__aeabi_dmul+0x1a2>
2c3a: 465b mov r3, fp
2c3c: 2b00 cmp r3, #0
2c3e: d100 bne.n 2c42 <__aeabi_dmul+0x10a>
2c40: e189 b.n 2f56 <__aeabi_dmul+0x41e>
2c42: 4658 mov r0, fp
2c44: f000 fd7a bl 373c <__clzsi2>
2c48: 0003 movs r3, r0
2c4a: 3b0b subs r3, #11
2c4c: 2b1c cmp r3, #28
2c4e: dd00 ble.n 2c52 <__aeabi_dmul+0x11a>
2c50: e17a b.n 2f48 <__aeabi_dmul+0x410>
2c52: 221d movs r2, #29
2c54: 1ad3 subs r3, r2, r3
2c56: 003a movs r2, r7
2c58: 0001 movs r1, r0
2c5a: 465c mov r4, fp
2c5c: 40da lsrs r2, r3
2c5e: 3908 subs r1, #8
2c60: 408c lsls r4, r1
2c62: 0013 movs r3, r2
2c64: 408f lsls r7, r1
2c66: 4323 orrs r3, r4
2c68: 469b mov fp, r3
2c6a: 46b9 mov r9, r7
2c6c: 2300 movs r3, #0
2c6e: 4e2d ldr r6, [pc, #180] ; (2d24 <__aeabi_dmul+0x1ec>)
2c70: 2700 movs r7, #0
2c72: 1a36 subs r6, r6, r0
2c74: 9302 str r3, [sp, #8]
2c76: e784 b.n 2b82 <__aeabi_dmul+0x4a>
2c78: 4653 mov r3, sl
2c7a: 4323 orrs r3, r4
2c7c: d12a bne.n 2cd4 <__aeabi_dmul+0x19c>
2c7e: 2400 movs r4, #0
2c80: 2002 movs r0, #2
2c82: e796 b.n 2bb2 <__aeabi_dmul+0x7a>
2c84: 4653 mov r3, sl
2c86: 4323 orrs r3, r4
2c88: d020 beq.n 2ccc <__aeabi_dmul+0x194>
2c8a: 2c00 cmp r4, #0
2c8c: d100 bne.n 2c90 <__aeabi_dmul+0x158>
2c8e: e157 b.n 2f40 <__aeabi_dmul+0x408>
2c90: 0020 movs r0, r4
2c92: f000 fd53 bl 373c <__clzsi2>
2c96: 0003 movs r3, r0
2c98: 3b0b subs r3, #11
2c9a: 2b1c cmp r3, #28
2c9c: dd00 ble.n 2ca0 <__aeabi_dmul+0x168>
2c9e: e149 b.n 2f34 <__aeabi_dmul+0x3fc>
2ca0: 211d movs r1, #29
2ca2: 1acb subs r3, r1, r3
2ca4: 4651 mov r1, sl
2ca6: 0002 movs r2, r0
2ca8: 40d9 lsrs r1, r3
2caa: 4653 mov r3, sl
2cac: 3a08 subs r2, #8
2cae: 4094 lsls r4, r2
2cb0: 4093 lsls r3, r2
2cb2: 430c orrs r4, r1
2cb4: 4a1b ldr r2, [pc, #108] ; (2d24 <__aeabi_dmul+0x1ec>)
2cb6: 1a12 subs r2, r2, r0
2cb8: 2000 movs r0, #0
2cba: e77a b.n 2bb2 <__aeabi_dmul+0x7a>
2cbc: 2501 movs r5, #1
2cbe: 9b01 ldr r3, [sp, #4]
2cc0: 4c14 ldr r4, [pc, #80] ; (2d14 <__aeabi_dmul+0x1dc>)
2cc2: 401d ands r5, r3
2cc4: 2300 movs r3, #0
2cc6: 2200 movs r2, #0
2cc8: 4699 mov r9, r3
2cca: e79c b.n 2c06 <__aeabi_dmul+0xce>
2ccc: 2400 movs r4, #0
2cce: 2200 movs r2, #0
2cd0: 2001 movs r0, #1
2cd2: e76e b.n 2bb2 <__aeabi_dmul+0x7a>
2cd4: 4653 mov r3, sl
2cd6: 2003 movs r0, #3
2cd8: e76b b.n 2bb2 <__aeabi_dmul+0x7a>
2cda: 2300 movs r3, #0
2cdc: 469b mov fp, r3
2cde: 3301 adds r3, #1
2ce0: 2704 movs r7, #4
2ce2: 2600 movs r6, #0
2ce4: 9302 str r3, [sp, #8]
2ce6: e74c b.n 2b82 <__aeabi_dmul+0x4a>
2ce8: 2303 movs r3, #3
2cea: 4681 mov r9, r0
2cec: 270c movs r7, #12
2cee: 9302 str r3, [sp, #8]
2cf0: e747 b.n 2b82 <__aeabi_dmul+0x4a>
2cf2: 2280 movs r2, #128 ; 0x80
2cf4: 2300 movs r3, #0
2cf6: 2500 movs r5, #0
2cf8: 0312 lsls r2, r2, #12
2cfa: 4699 mov r9, r3
2cfc: 4c05 ldr r4, [pc, #20] ; (2d14 <__aeabi_dmul+0x1dc>)
2cfe: e782 b.n 2c06 <__aeabi_dmul+0xce>
2d00: 465c mov r4, fp
2d02: 464b mov r3, r9
2d04: 9802 ldr r0, [sp, #8]
2d06: e76f b.n 2be8 <__aeabi_dmul+0xb0>
2d08: 465c mov r4, fp
2d0a: 464b mov r3, r9
2d0c: 9501 str r5, [sp, #4]
2d0e: 9802 ldr r0, [sp, #8]
2d10: e76a b.n 2be8 <__aeabi_dmul+0xb0>
2d12: 46c0 nop ; (mov r8, r8)
2d14: 000007ff .word 0x000007ff
2d18: fffffc01 .word 0xfffffc01
2d1c: 00004948 .word 0x00004948
2d20: 800fffff .word 0x800fffff
2d24: fffffc0d .word 0xfffffc0d
2d28: 464a mov r2, r9
2d2a: 4649 mov r1, r9
2d2c: 0c17 lsrs r7, r2, #16
2d2e: 0c1a lsrs r2, r3, #16
2d30: 041b lsls r3, r3, #16
2d32: 0c1b lsrs r3, r3, #16
2d34: 0408 lsls r0, r1, #16
2d36: 0019 movs r1, r3
2d38: 0c00 lsrs r0, r0, #16
2d3a: 4341 muls r1, r0
2d3c: 0015 movs r5, r2
2d3e: 4688 mov r8, r1
2d40: 0019 movs r1, r3
2d42: 437d muls r5, r7
2d44: 4379 muls r1, r7
2d46: 9503 str r5, [sp, #12]
2d48: 4689 mov r9, r1
2d4a: 0029 movs r1, r5
2d4c: 0015 movs r5, r2
2d4e: 4345 muls r5, r0
2d50: 444d add r5, r9
2d52: 9502 str r5, [sp, #8]
2d54: 4645 mov r5, r8
2d56: 0c2d lsrs r5, r5, #16
2d58: 46aa mov sl, r5
2d5a: 9d02 ldr r5, [sp, #8]
2d5c: 4455 add r5, sl
2d5e: 45a9 cmp r9, r5
2d60: d906 bls.n 2d70 <__aeabi_dmul+0x238>
2d62: 468a mov sl, r1
2d64: 2180 movs r1, #128 ; 0x80
2d66: 0249 lsls r1, r1, #9
2d68: 4689 mov r9, r1
2d6a: 44ca add sl, r9
2d6c: 4651 mov r1, sl
2d6e: 9103 str r1, [sp, #12]
2d70: 0c29 lsrs r1, r5, #16
2d72: 9104 str r1, [sp, #16]
2d74: 4641 mov r1, r8
2d76: 0409 lsls r1, r1, #16
2d78: 042d lsls r5, r5, #16
2d7a: 0c09 lsrs r1, r1, #16
2d7c: 4688 mov r8, r1
2d7e: 0029 movs r1, r5
2d80: 0c25 lsrs r5, r4, #16
2d82: 0424 lsls r4, r4, #16
2d84: 4441 add r1, r8
2d86: 0c24 lsrs r4, r4, #16
2d88: 9105 str r1, [sp, #20]
2d8a: 0021 movs r1, r4
2d8c: 4341 muls r1, r0
2d8e: 4688 mov r8, r1
2d90: 0021 movs r1, r4
2d92: 4379 muls r1, r7
2d94: 468a mov sl, r1
2d96: 4368 muls r0, r5
2d98: 4641 mov r1, r8
2d9a: 4450 add r0, sl
2d9c: 4681 mov r9, r0
2d9e: 0c08 lsrs r0, r1, #16
2da0: 4448 add r0, r9
2da2: 436f muls r7, r5
2da4: 4582 cmp sl, r0
2da6: d903 bls.n 2db0 <__aeabi_dmul+0x278>
2da8: 2180 movs r1, #128 ; 0x80
2daa: 0249 lsls r1, r1, #9
2dac: 4689 mov r9, r1
2dae: 444f add r7, r9
2db0: 0c01 lsrs r1, r0, #16
2db2: 4689 mov r9, r1
2db4: 0039 movs r1, r7
2db6: 4449 add r1, r9
2db8: 9102 str r1, [sp, #8]
2dba: 4641 mov r1, r8
2dbc: 040f lsls r7, r1, #16
2dbe: 9904 ldr r1, [sp, #16]
2dc0: 0c3f lsrs r7, r7, #16
2dc2: 4688 mov r8, r1
2dc4: 0400 lsls r0, r0, #16
2dc6: 19c0 adds r0, r0, r7
2dc8: 4480 add r8, r0
2dca: 4641 mov r1, r8
2dcc: 9104 str r1, [sp, #16]
2dce: 4659 mov r1, fp
2dd0: 0c0f lsrs r7, r1, #16
2dd2: 0409 lsls r1, r1, #16
2dd4: 0c09 lsrs r1, r1, #16
2dd6: 4688 mov r8, r1
2dd8: 4359 muls r1, r3
2dda: 468a mov sl, r1
2ddc: 0039 movs r1, r7
2dde: 4351 muls r1, r2
2de0: 4689 mov r9, r1
2de2: 4641 mov r1, r8
2de4: 434a muls r2, r1
2de6: 4651 mov r1, sl
2de8: 0c09 lsrs r1, r1, #16
2dea: 468b mov fp, r1
2dec: 437b muls r3, r7
2dee: 18d2 adds r2, r2, r3
2df0: 445a add r2, fp
2df2: 4293 cmp r3, r2
2df4: d903 bls.n 2dfe <__aeabi_dmul+0x2c6>
2df6: 2380 movs r3, #128 ; 0x80
2df8: 025b lsls r3, r3, #9
2dfa: 469b mov fp, r3
2dfc: 44d9 add r9, fp
2dfe: 4651 mov r1, sl
2e00: 0409 lsls r1, r1, #16
2e02: 0c09 lsrs r1, r1, #16
2e04: 468a mov sl, r1
2e06: 4641 mov r1, r8
2e08: 4361 muls r1, r4
2e0a: 437c muls r4, r7
2e0c: 0c13 lsrs r3, r2, #16
2e0e: 0412 lsls r2, r2, #16
2e10: 444b add r3, r9
2e12: 4452 add r2, sl
2e14: 46a1 mov r9, r4
2e16: 468a mov sl, r1
2e18: 003c movs r4, r7
2e1a: 4641 mov r1, r8
2e1c: 436c muls r4, r5
2e1e: 434d muls r5, r1
2e20: 4651 mov r1, sl
2e22: 444d add r5, r9
2e24: 0c0f lsrs r7, r1, #16
2e26: 197d adds r5, r7, r5
2e28: 45a9 cmp r9, r5
2e2a: d903 bls.n 2e34 <__aeabi_dmul+0x2fc>
2e2c: 2180 movs r1, #128 ; 0x80
2e2e: 0249 lsls r1, r1, #9
2e30: 4688 mov r8, r1
2e32: 4444 add r4, r8
2e34: 9f04 ldr r7, [sp, #16]
2e36: 9903 ldr r1, [sp, #12]
2e38: 46b8 mov r8, r7
2e3a: 4441 add r1, r8
2e3c: 468b mov fp, r1
2e3e: 4583 cmp fp, r0
2e40: 4180 sbcs r0, r0
2e42: 4241 negs r1, r0
2e44: 4688 mov r8, r1
2e46: 4651 mov r1, sl
2e48: 0408 lsls r0, r1, #16
2e4a: 042f lsls r7, r5, #16
2e4c: 0c00 lsrs r0, r0, #16
2e4e: 183f adds r7, r7, r0
2e50: 4658 mov r0, fp
2e52: 9902 ldr r1, [sp, #8]
2e54: 1810 adds r0, r2, r0
2e56: 4689 mov r9, r1
2e58: 4290 cmp r0, r2
2e5a: 4192 sbcs r2, r2
2e5c: 444f add r7, r9
2e5e: 46ba mov sl, r7
2e60: 4252 negs r2, r2
2e62: 4699 mov r9, r3
2e64: 4693 mov fp, r2
2e66: 44c2 add sl, r8
2e68: 44d1 add r9, sl
2e6a: 44cb add fp, r9
2e6c: 428f cmp r7, r1
2e6e: 41bf sbcs r7, r7
2e70: 45c2 cmp sl, r8
2e72: 4189 sbcs r1, r1
2e74: 4599 cmp r9, r3
2e76: 419b sbcs r3, r3
2e78: 4593 cmp fp, r2
2e7a: 4192 sbcs r2, r2
2e7c: 427f negs r7, r7
2e7e: 4249 negs r1, r1
2e80: 0c2d lsrs r5, r5, #16
2e82: 4252 negs r2, r2
2e84: 430f orrs r7, r1
2e86: 425b negs r3, r3
2e88: 4313 orrs r3, r2
2e8a: 197f adds r7, r7, r5
2e8c: 18ff adds r7, r7, r3
2e8e: 465b mov r3, fp
2e90: 193c adds r4, r7, r4
2e92: 0ddb lsrs r3, r3, #23
2e94: 9a05 ldr r2, [sp, #20]
2e96: 0264 lsls r4, r4, #9
2e98: 431c orrs r4, r3
2e9a: 0243 lsls r3, r0, #9
2e9c: 4313 orrs r3, r2
2e9e: 1e5d subs r5, r3, #1
2ea0: 41ab sbcs r3, r5
2ea2: 465a mov r2, fp
2ea4: 0dc0 lsrs r0, r0, #23
2ea6: 4303 orrs r3, r0
2ea8: 0252 lsls r2, r2, #9
2eaa: 4313 orrs r3, r2
2eac: 01e2 lsls r2, r4, #7
2eae: d556 bpl.n 2f5e <__aeabi_dmul+0x426>
2eb0: 2001 movs r0, #1
2eb2: 085a lsrs r2, r3, #1
2eb4: 4003 ands r3, r0
2eb6: 4313 orrs r3, r2
2eb8: 07e2 lsls r2, r4, #31
2eba: 4313 orrs r3, r2
2ebc: 0864 lsrs r4, r4, #1
2ebe: 485a ldr r0, [pc, #360] ; (3028 <__aeabi_dmul+0x4f0>)
2ec0: 4460 add r0, ip
2ec2: 2800 cmp r0, #0
2ec4: dd4d ble.n 2f62 <__aeabi_dmul+0x42a>
2ec6: 075a lsls r2, r3, #29
2ec8: d009 beq.n 2ede <__aeabi_dmul+0x3a6>
2eca: 220f movs r2, #15
2ecc: 401a ands r2, r3
2ece: 2a04 cmp r2, #4
2ed0: d005 beq.n 2ede <__aeabi_dmul+0x3a6>
2ed2: 1d1a adds r2, r3, #4
2ed4: 429a cmp r2, r3
2ed6: 419b sbcs r3, r3
2ed8: 425b negs r3, r3
2eda: 18e4 adds r4, r4, r3
2edc: 0013 movs r3, r2
2ede: 01e2 lsls r2, r4, #7
2ee0: d504 bpl.n 2eec <__aeabi_dmul+0x3b4>
2ee2: 2080 movs r0, #128 ; 0x80
2ee4: 4a51 ldr r2, [pc, #324] ; (302c <__aeabi_dmul+0x4f4>)
2ee6: 00c0 lsls r0, r0, #3
2ee8: 4014 ands r4, r2
2eea: 4460 add r0, ip
2eec: 4a50 ldr r2, [pc, #320] ; (3030 <__aeabi_dmul+0x4f8>)
2eee: 4290 cmp r0, r2
2ef0: dd00 ble.n 2ef4 <__aeabi_dmul+0x3bc>
2ef2: e6e3 b.n 2cbc <__aeabi_dmul+0x184>
2ef4: 2501 movs r5, #1
2ef6: 08db lsrs r3, r3, #3
2ef8: 0762 lsls r2, r4, #29
2efa: 431a orrs r2, r3
2efc: 0264 lsls r4, r4, #9
2efe: 9b01 ldr r3, [sp, #4]
2f00: 4691 mov r9, r2
2f02: 0b22 lsrs r2, r4, #12
2f04: 0544 lsls r4, r0, #21
2f06: 0d64 lsrs r4, r4, #21
2f08: 401d ands r5, r3
2f0a: e67c b.n 2c06 <__aeabi_dmul+0xce>
2f0c: 2280 movs r2, #128 ; 0x80
2f0e: 4659 mov r1, fp
2f10: 0312 lsls r2, r2, #12
2f12: 4211 tst r1, r2
2f14: d008 beq.n 2f28 <__aeabi_dmul+0x3f0>
2f16: 4214 tst r4, r2
2f18: d106 bne.n 2f28 <__aeabi_dmul+0x3f0>
2f1a: 4322 orrs r2, r4
2f1c: 0312 lsls r2, r2, #12
2f1e: 0b12 lsrs r2, r2, #12
2f20: 4645 mov r5, r8
2f22: 4699 mov r9, r3
2f24: 4c43 ldr r4, [pc, #268] ; (3034 <__aeabi_dmul+0x4fc>)
2f26: e66e b.n 2c06 <__aeabi_dmul+0xce>
2f28: 465b mov r3, fp
2f2a: 431a orrs r2, r3
2f2c: 0312 lsls r2, r2, #12
2f2e: 0b12 lsrs r2, r2, #12
2f30: 4c40 ldr r4, [pc, #256] ; (3034 <__aeabi_dmul+0x4fc>)
2f32: e668 b.n 2c06 <__aeabi_dmul+0xce>
2f34: 0003 movs r3, r0
2f36: 4654 mov r4, sl
2f38: 3b28 subs r3, #40 ; 0x28
2f3a: 409c lsls r4, r3
2f3c: 2300 movs r3, #0
2f3e: e6b9 b.n 2cb4 <__aeabi_dmul+0x17c>
2f40: f000 fbfc bl 373c <__clzsi2>
2f44: 3020 adds r0, #32
2f46: e6a6 b.n 2c96 <__aeabi_dmul+0x15e>
2f48: 0003 movs r3, r0
2f4a: 3b28 subs r3, #40 ; 0x28
2f4c: 409f lsls r7, r3
2f4e: 2300 movs r3, #0
2f50: 46bb mov fp, r7
2f52: 4699 mov r9, r3
2f54: e68a b.n 2c6c <__aeabi_dmul+0x134>
2f56: f000 fbf1 bl 373c <__clzsi2>
2f5a: 3020 adds r0, #32
2f5c: e674 b.n 2c48 <__aeabi_dmul+0x110>
2f5e: 46b4 mov ip, r6
2f60: e7ad b.n 2ebe <__aeabi_dmul+0x386>
2f62: 2501 movs r5, #1
2f64: 1a2a subs r2, r5, r0
2f66: 2a38 cmp r2, #56 ; 0x38
2f68: dd06 ble.n 2f78 <__aeabi_dmul+0x440>
2f6a: 9b01 ldr r3, [sp, #4]
2f6c: 2400 movs r4, #0
2f6e: 401d ands r5, r3
2f70: 2300 movs r3, #0
2f72: 2200 movs r2, #0
2f74: 4699 mov r9, r3
2f76: e646 b.n 2c06 <__aeabi_dmul+0xce>
2f78: 2a1f cmp r2, #31
2f7a: dc21 bgt.n 2fc0 <__aeabi_dmul+0x488>
2f7c: 2520 movs r5, #32
2f7e: 0020 movs r0, r4
2f80: 1aad subs r5, r5, r2
2f82: 001e movs r6, r3
2f84: 40ab lsls r3, r5
2f86: 40a8 lsls r0, r5
2f88: 40d6 lsrs r6, r2
2f8a: 1e5d subs r5, r3, #1
2f8c: 41ab sbcs r3, r5
2f8e: 4330 orrs r0, r6
2f90: 4318 orrs r0, r3
2f92: 40d4 lsrs r4, r2
2f94: 0743 lsls r3, r0, #29
2f96: d009 beq.n 2fac <__aeabi_dmul+0x474>
2f98: 230f movs r3, #15
2f9a: 4003 ands r3, r0
2f9c: 2b04 cmp r3, #4
2f9e: d005 beq.n 2fac <__aeabi_dmul+0x474>
2fa0: 0003 movs r3, r0
2fa2: 1d18 adds r0, r3, #4
2fa4: 4298 cmp r0, r3
2fa6: 419b sbcs r3, r3
2fa8: 425b negs r3, r3
2faa: 18e4 adds r4, r4, r3
2fac: 0223 lsls r3, r4, #8
2fae: d521 bpl.n 2ff4 <__aeabi_dmul+0x4bc>
2fb0: 2501 movs r5, #1
2fb2: 9b01 ldr r3, [sp, #4]
2fb4: 2401 movs r4, #1
2fb6: 401d ands r5, r3
2fb8: 2300 movs r3, #0
2fba: 2200 movs r2, #0
2fbc: 4699 mov r9, r3
2fbe: e622 b.n 2c06 <__aeabi_dmul+0xce>
2fc0: 251f movs r5, #31
2fc2: 0021 movs r1, r4
2fc4: 426d negs r5, r5
2fc6: 1a28 subs r0, r5, r0
2fc8: 40c1 lsrs r1, r0
2fca: 0008 movs r0, r1
2fcc: 2a20 cmp r2, #32
2fce: d01d beq.n 300c <__aeabi_dmul+0x4d4>
2fd0: 355f adds r5, #95 ; 0x5f
2fd2: 1aaa subs r2, r5, r2
2fd4: 4094 lsls r4, r2
2fd6: 4323 orrs r3, r4
2fd8: 1e5c subs r4, r3, #1
2fda: 41a3 sbcs r3, r4
2fdc: 2507 movs r5, #7
2fde: 4303 orrs r3, r0
2fe0: 401d ands r5, r3
2fe2: 2200 movs r2, #0
2fe4: 2d00 cmp r5, #0
2fe6: d009 beq.n 2ffc <__aeabi_dmul+0x4c4>
2fe8: 220f movs r2, #15
2fea: 2400 movs r4, #0
2fec: 401a ands r2, r3
2fee: 0018 movs r0, r3
2ff0: 2a04 cmp r2, #4
2ff2: d1d6 bne.n 2fa2 <__aeabi_dmul+0x46a>
2ff4: 0003 movs r3, r0
2ff6: 0765 lsls r5, r4, #29
2ff8: 0264 lsls r4, r4, #9
2ffa: 0b22 lsrs r2, r4, #12
2ffc: 08db lsrs r3, r3, #3
2ffe: 432b orrs r3, r5
3000: 2501 movs r5, #1
3002: 4699 mov r9, r3
3004: 9b01 ldr r3, [sp, #4]
3006: 2400 movs r4, #0
3008: 401d ands r5, r3
300a: e5fc b.n 2c06 <__aeabi_dmul+0xce>
300c: 2400 movs r4, #0
300e: e7e2 b.n 2fd6 <__aeabi_dmul+0x49e>
3010: 2280 movs r2, #128 ; 0x80
3012: 2501 movs r5, #1
3014: 0312 lsls r2, r2, #12
3016: 4322 orrs r2, r4
3018: 9901 ldr r1, [sp, #4]
301a: 0312 lsls r2, r2, #12
301c: 0b12 lsrs r2, r2, #12
301e: 400d ands r5, r1
3020: 4699 mov r9, r3
3022: 4c04 ldr r4, [pc, #16] ; (3034 <__aeabi_dmul+0x4fc>)
3024: e5ef b.n 2c06 <__aeabi_dmul+0xce>
3026: 46c0 nop ; (mov r8, r8)
3028: 000003ff .word 0x000003ff
302c: feffffff .word 0xfeffffff
3030: 000007fe .word 0x000007fe
3034: 000007ff .word 0x000007ff
00003038 <__aeabi_dsub>:
3038: b5f0 push {r4, r5, r6, r7, lr}
303a: 4646 mov r6, r8
303c: 46d6 mov lr, sl
303e: 464f mov r7, r9
3040: 030c lsls r4, r1, #12
3042: b5c0 push {r6, r7, lr}
3044: 0fcd lsrs r5, r1, #31
3046: 004e lsls r6, r1, #1
3048: 0a61 lsrs r1, r4, #9
304a: 0f44 lsrs r4, r0, #29
304c: 430c orrs r4, r1
304e: 00c1 lsls r1, r0, #3
3050: 0058 lsls r0, r3, #1
3052: 0d40 lsrs r0, r0, #21
3054: 4684 mov ip, r0
3056: 468a mov sl, r1
3058: 000f movs r7, r1
305a: 0319 lsls r1, r3, #12
305c: 0f50 lsrs r0, r2, #29
305e: 0a49 lsrs r1, r1, #9
3060: 4301 orrs r1, r0
3062: 48c6 ldr r0, [pc, #792] ; (337c <__aeabi_dsub+0x344>)
3064: 0d76 lsrs r6, r6, #21
3066: 46a8 mov r8, r5
3068: 0fdb lsrs r3, r3, #31
306a: 00d2 lsls r2, r2, #3
306c: 4584 cmp ip, r0
306e: d100 bne.n 3072 <__aeabi_dsub+0x3a>
3070: e0d8 b.n 3224 <__aeabi_dsub+0x1ec>
3072: 2001 movs r0, #1
3074: 4043 eors r3, r0
3076: 42ab cmp r3, r5
3078: d100 bne.n 307c <__aeabi_dsub+0x44>
307a: e0a6 b.n 31ca <__aeabi_dsub+0x192>
307c: 4660 mov r0, ip
307e: 1a35 subs r5, r6, r0
3080: 2d00 cmp r5, #0
3082: dc00 bgt.n 3086 <__aeabi_dsub+0x4e>
3084: e105 b.n 3292 <__aeabi_dsub+0x25a>
3086: 2800 cmp r0, #0
3088: d110 bne.n 30ac <__aeabi_dsub+0x74>
308a: 000b movs r3, r1
308c: 4313 orrs r3, r2
308e: d100 bne.n 3092 <__aeabi_dsub+0x5a>
3090: e0d7 b.n 3242 <__aeabi_dsub+0x20a>
3092: 1e6b subs r3, r5, #1
3094: 2b00 cmp r3, #0
3096: d000 beq.n 309a <__aeabi_dsub+0x62>
3098: e14b b.n 3332 <__aeabi_dsub+0x2fa>
309a: 4653 mov r3, sl
309c: 1a9f subs r7, r3, r2
309e: 45ba cmp sl, r7
30a0: 4180 sbcs r0, r0
30a2: 1a64 subs r4, r4, r1
30a4: 4240 negs r0, r0
30a6: 1a24 subs r4, r4, r0
30a8: 2601 movs r6, #1
30aa: e01e b.n 30ea <__aeabi_dsub+0xb2>
30ac: 4bb3 ldr r3, [pc, #716] ; (337c <__aeabi_dsub+0x344>)
30ae: 429e cmp r6, r3
30b0: d048 beq.n 3144 <__aeabi_dsub+0x10c>
30b2: 2380 movs r3, #128 ; 0x80
30b4: 041b lsls r3, r3, #16
30b6: 4319 orrs r1, r3
30b8: 2d38 cmp r5, #56 ; 0x38
30ba: dd00 ble.n 30be <__aeabi_dsub+0x86>
30bc: e119 b.n 32f2 <__aeabi_dsub+0x2ba>
30be: 2d1f cmp r5, #31
30c0: dd00 ble.n 30c4 <__aeabi_dsub+0x8c>
30c2: e14c b.n 335e <__aeabi_dsub+0x326>
30c4: 2320 movs r3, #32
30c6: 000f movs r7, r1
30c8: 1b5b subs r3, r3, r5
30ca: 0010 movs r0, r2
30cc: 409a lsls r2, r3
30ce: 409f lsls r7, r3
30d0: 40e8 lsrs r0, r5
30d2: 1e53 subs r3, r2, #1
30d4: 419a sbcs r2, r3
30d6: 40e9 lsrs r1, r5
30d8: 4307 orrs r7, r0
30da: 4317 orrs r7, r2
30dc: 4653 mov r3, sl
30de: 1bdf subs r7, r3, r7
30e0: 1a61 subs r1, r4, r1
30e2: 45ba cmp sl, r7
30e4: 41a4 sbcs r4, r4
30e6: 4264 negs r4, r4
30e8: 1b0c subs r4, r1, r4
30ea: 0223 lsls r3, r4, #8
30ec: d400 bmi.n 30f0 <__aeabi_dsub+0xb8>
30ee: e0c5 b.n 327c <__aeabi_dsub+0x244>
30f0: 0264 lsls r4, r4, #9
30f2: 0a65 lsrs r5, r4, #9
30f4: 2d00 cmp r5, #0
30f6: d100 bne.n 30fa <__aeabi_dsub+0xc2>
30f8: e0f6 b.n 32e8 <__aeabi_dsub+0x2b0>
30fa: 0028 movs r0, r5
30fc: f000 fb1e bl 373c <__clzsi2>
3100: 0003 movs r3, r0
3102: 3b08 subs r3, #8
3104: 2b1f cmp r3, #31
3106: dd00 ble.n 310a <__aeabi_dsub+0xd2>
3108: e0e9 b.n 32de <__aeabi_dsub+0x2a6>
310a: 2220 movs r2, #32
310c: 003c movs r4, r7
310e: 1ad2 subs r2, r2, r3
3110: 409d lsls r5, r3
3112: 40d4 lsrs r4, r2
3114: 409f lsls r7, r3
3116: 4325 orrs r5, r4
3118: 429e cmp r6, r3
311a: dd00 ble.n 311e <__aeabi_dsub+0xe6>
311c: e0db b.n 32d6 <__aeabi_dsub+0x29e>
311e: 1b9e subs r6, r3, r6
3120: 1c73 adds r3, r6, #1
3122: 2b1f cmp r3, #31
3124: dd00 ble.n 3128 <__aeabi_dsub+0xf0>
3126: e10a b.n 333e <__aeabi_dsub+0x306>
3128: 2220 movs r2, #32
312a: 0038 movs r0, r7
312c: 1ad2 subs r2, r2, r3
312e: 0029 movs r1, r5
3130: 4097 lsls r7, r2
3132: 002c movs r4, r5
3134: 4091 lsls r1, r2
3136: 40d8 lsrs r0, r3
3138: 1e7a subs r2, r7, #1
313a: 4197 sbcs r7, r2
313c: 40dc lsrs r4, r3
313e: 2600 movs r6, #0
3140: 4301 orrs r1, r0
3142: 430f orrs r7, r1
3144: 077b lsls r3, r7, #29
3146: d009 beq.n 315c <__aeabi_dsub+0x124>
3148: 230f movs r3, #15
314a: 403b ands r3, r7
314c: 2b04 cmp r3, #4
314e: d005 beq.n 315c <__aeabi_dsub+0x124>
3150: 1d3b adds r3, r7, #4
3152: 42bb cmp r3, r7
3154: 41bf sbcs r7, r7
3156: 427f negs r7, r7
3158: 19e4 adds r4, r4, r7
315a: 001f movs r7, r3
315c: 0223 lsls r3, r4, #8
315e: d525 bpl.n 31ac <__aeabi_dsub+0x174>
3160: 4b86 ldr r3, [pc, #536] ; (337c <__aeabi_dsub+0x344>)
3162: 3601 adds r6, #1
3164: 429e cmp r6, r3
3166: d100 bne.n 316a <__aeabi_dsub+0x132>
3168: e0af b.n 32ca <__aeabi_dsub+0x292>
316a: 4b85 ldr r3, [pc, #532] ; (3380 <__aeabi_dsub+0x348>)
316c: 2501 movs r5, #1
316e: 401c ands r4, r3
3170: 4643 mov r3, r8
3172: 0762 lsls r2, r4, #29
3174: 08ff lsrs r7, r7, #3
3176: 0264 lsls r4, r4, #9
3178: 0576 lsls r6, r6, #21
317a: 4317 orrs r7, r2
317c: 0b24 lsrs r4, r4, #12
317e: 0d76 lsrs r6, r6, #21
3180: 401d ands r5, r3
3182: 2100 movs r1, #0
3184: 0324 lsls r4, r4, #12
3186: 0b23 lsrs r3, r4, #12
3188: 0d0c lsrs r4, r1, #20
318a: 4a7e ldr r2, [pc, #504] ; (3384 <__aeabi_dsub+0x34c>)
318c: 0524 lsls r4, r4, #20
318e: 431c orrs r4, r3
3190: 4014 ands r4, r2
3192: 0533 lsls r3, r6, #20
3194: 4323 orrs r3, r4
3196: 005b lsls r3, r3, #1
3198: 07ed lsls r5, r5, #31
319a: 085b lsrs r3, r3, #1
319c: 432b orrs r3, r5
319e: 0038 movs r0, r7
31a0: 0019 movs r1, r3
31a2: bc1c pop {r2, r3, r4}
31a4: 4690 mov r8, r2
31a6: 4699 mov r9, r3
31a8: 46a2 mov sl, r4
31aa: bdf0 pop {r4, r5, r6, r7, pc}
31ac: 2501 movs r5, #1
31ae: 4643 mov r3, r8
31b0: 0762 lsls r2, r4, #29
31b2: 08ff lsrs r7, r7, #3
31b4: 4317 orrs r7, r2
31b6: 08e4 lsrs r4, r4, #3
31b8: 401d ands r5, r3
31ba: 4b70 ldr r3, [pc, #448] ; (337c <__aeabi_dsub+0x344>)
31bc: 429e cmp r6, r3
31be: d036 beq.n 322e <__aeabi_dsub+0x1f6>
31c0: 0324 lsls r4, r4, #12
31c2: 0576 lsls r6, r6, #21
31c4: 0b24 lsrs r4, r4, #12
31c6: 0d76 lsrs r6, r6, #21
31c8: e7db b.n 3182 <__aeabi_dsub+0x14a>
31ca: 4663 mov r3, ip
31cc: 1af3 subs r3, r6, r3
31ce: 2b00 cmp r3, #0
31d0: dc00 bgt.n 31d4 <__aeabi_dsub+0x19c>
31d2: e094 b.n 32fe <__aeabi_dsub+0x2c6>
31d4: 4660 mov r0, ip
31d6: 2800 cmp r0, #0
31d8: d035 beq.n 3246 <__aeabi_dsub+0x20e>
31da: 4868 ldr r0, [pc, #416] ; (337c <__aeabi_dsub+0x344>)
31dc: 4286 cmp r6, r0
31de: d0b1 beq.n 3144 <__aeabi_dsub+0x10c>
31e0: 2780 movs r7, #128 ; 0x80
31e2: 043f lsls r7, r7, #16
31e4: 4339 orrs r1, r7
31e6: 2b38 cmp r3, #56 ; 0x38
31e8: dc00 bgt.n 31ec <__aeabi_dsub+0x1b4>
31ea: e0fd b.n 33e8 <__aeabi_dsub+0x3b0>
31ec: 430a orrs r2, r1
31ee: 0017 movs r7, r2
31f0: 2100 movs r1, #0
31f2: 1e7a subs r2, r7, #1
31f4: 4197 sbcs r7, r2
31f6: 4457 add r7, sl
31f8: 4557 cmp r7, sl
31fa: 4180 sbcs r0, r0
31fc: 1909 adds r1, r1, r4
31fe: 4244 negs r4, r0
3200: 190c adds r4, r1, r4
3202: 0223 lsls r3, r4, #8
3204: d53a bpl.n 327c <__aeabi_dsub+0x244>
3206: 4b5d ldr r3, [pc, #372] ; (337c <__aeabi_dsub+0x344>)
3208: 3601 adds r6, #1
320a: 429e cmp r6, r3
320c: d100 bne.n 3210 <__aeabi_dsub+0x1d8>
320e: e14b b.n 34a8 <__aeabi_dsub+0x470>
3210: 2201 movs r2, #1
3212: 4b5b ldr r3, [pc, #364] ; (3380 <__aeabi_dsub+0x348>)
3214: 401c ands r4, r3
3216: 087b lsrs r3, r7, #1
3218: 4017 ands r7, r2
321a: 431f orrs r7, r3
321c: 07e2 lsls r2, r4, #31
321e: 4317 orrs r7, r2
3220: 0864 lsrs r4, r4, #1
3222: e78f b.n 3144 <__aeabi_dsub+0x10c>
3224: 0008 movs r0, r1
3226: 4310 orrs r0, r2
3228: d000 beq.n 322c <__aeabi_dsub+0x1f4>
322a: e724 b.n 3076 <__aeabi_dsub+0x3e>
322c: e721 b.n 3072 <__aeabi_dsub+0x3a>
322e: 0023 movs r3, r4
3230: 433b orrs r3, r7
3232: d100 bne.n 3236 <__aeabi_dsub+0x1fe>
3234: e1b9 b.n 35aa <__aeabi_dsub+0x572>
3236: 2280 movs r2, #128 ; 0x80
3238: 0312 lsls r2, r2, #12
323a: 4314 orrs r4, r2
323c: 0324 lsls r4, r4, #12
323e: 0b24 lsrs r4, r4, #12
3240: e79f b.n 3182 <__aeabi_dsub+0x14a>
3242: 002e movs r6, r5
3244: e77e b.n 3144 <__aeabi_dsub+0x10c>
3246: 0008 movs r0, r1
3248: 4310 orrs r0, r2
324a: d100 bne.n 324e <__aeabi_dsub+0x216>
324c: e0ca b.n 33e4 <__aeabi_dsub+0x3ac>
324e: 1e58 subs r0, r3, #1
3250: 4684 mov ip, r0
3252: 2800 cmp r0, #0
3254: d000 beq.n 3258 <__aeabi_dsub+0x220>
3256: e0e7 b.n 3428 <__aeabi_dsub+0x3f0>
3258: 4452 add r2, sl
325a: 4552 cmp r2, sl
325c: 4180 sbcs r0, r0
325e: 1864 adds r4, r4, r1
3260: 4240 negs r0, r0
3262: 1824 adds r4, r4, r0
3264: 0017 movs r7, r2
3266: 2601 movs r6, #1
3268: 0223 lsls r3, r4, #8
326a: d507 bpl.n 327c <__aeabi_dsub+0x244>
326c: 2602 movs r6, #2
326e: e7cf b.n 3210 <__aeabi_dsub+0x1d8>
3270: 4664 mov r4, ip
3272: 432c orrs r4, r5
3274: d100 bne.n 3278 <__aeabi_dsub+0x240>
3276: e1b3 b.n 35e0 <__aeabi_dsub+0x5a8>
3278: 002c movs r4, r5
327a: 4667 mov r7, ip
327c: 077b lsls r3, r7, #29
327e: d000 beq.n 3282 <__aeabi_dsub+0x24a>
3280: e762 b.n 3148 <__aeabi_dsub+0x110>
3282: 0763 lsls r3, r4, #29
3284: 08ff lsrs r7, r7, #3
3286: 431f orrs r7, r3
3288: 2501 movs r5, #1
328a: 4643 mov r3, r8
328c: 08e4 lsrs r4, r4, #3
328e: 401d ands r5, r3
3290: e793 b.n 31ba <__aeabi_dsub+0x182>
3292: 2d00 cmp r5, #0
3294: d178 bne.n 3388 <__aeabi_dsub+0x350>
3296: 1c75 adds r5, r6, #1
3298: 056d lsls r5, r5, #21
329a: 0d6d lsrs r5, r5, #21
329c: 2d01 cmp r5, #1
329e: dc00 bgt.n 32a2 <__aeabi_dsub+0x26a>
32a0: e0f2 b.n 3488 <__aeabi_dsub+0x450>
32a2: 4650 mov r0, sl
32a4: 1a80 subs r0, r0, r2
32a6: 4582 cmp sl, r0
32a8: 41bf sbcs r7, r7
32aa: 1a65 subs r5, r4, r1
32ac: 427f negs r7, r7
32ae: 1bed subs r5, r5, r7
32b0: 4684 mov ip, r0
32b2: 0228 lsls r0, r5, #8
32b4: d400 bmi.n 32b8 <__aeabi_dsub+0x280>
32b6: e08c b.n 33d2 <__aeabi_dsub+0x39a>
32b8: 4650 mov r0, sl
32ba: 1a17 subs r7, r2, r0
32bc: 42ba cmp r2, r7
32be: 4192 sbcs r2, r2
32c0: 1b0c subs r4, r1, r4
32c2: 4255 negs r5, r2
32c4: 1b65 subs r5, r4, r5
32c6: 4698 mov r8, r3
32c8: e714 b.n 30f4 <__aeabi_dsub+0xbc>
32ca: 2501 movs r5, #1
32cc: 4643 mov r3, r8
32ce: 2400 movs r4, #0
32d0: 401d ands r5, r3
32d2: 2700 movs r7, #0
32d4: e755 b.n 3182 <__aeabi_dsub+0x14a>
32d6: 4c2a ldr r4, [pc, #168] ; (3380 <__aeabi_dsub+0x348>)
32d8: 1af6 subs r6, r6, r3
32da: 402c ands r4, r5
32dc: e732 b.n 3144 <__aeabi_dsub+0x10c>
32de: 003d movs r5, r7
32e0: 3828 subs r0, #40 ; 0x28
32e2: 4085 lsls r5, r0
32e4: 2700 movs r7, #0
32e6: e717 b.n 3118 <__aeabi_dsub+0xe0>
32e8: 0038 movs r0, r7
32ea: f000 fa27 bl 373c <__clzsi2>
32ee: 3020 adds r0, #32
32f0: e706 b.n 3100 <__aeabi_dsub+0xc8>
32f2: 430a orrs r2, r1
32f4: 0017 movs r7, r2
32f6: 2100 movs r1, #0
32f8: 1e7a subs r2, r7, #1
32fa: 4197 sbcs r7, r2
32fc: e6ee b.n 30dc <__aeabi_dsub+0xa4>
32fe: 2b00 cmp r3, #0
3300: d000 beq.n 3304 <__aeabi_dsub+0x2cc>
3302: e0e5 b.n 34d0 <__aeabi_dsub+0x498>
3304: 1c73 adds r3, r6, #1
3306: 469c mov ip, r3
3308: 055b lsls r3, r3, #21
330a: 0d5b lsrs r3, r3, #21
330c: 2b01 cmp r3, #1
330e: dc00 bgt.n 3312 <__aeabi_dsub+0x2da>
3310: e09f b.n 3452 <__aeabi_dsub+0x41a>
3312: 4b1a ldr r3, [pc, #104] ; (337c <__aeabi_dsub+0x344>)
3314: 459c cmp ip, r3
3316: d100 bne.n 331a <__aeabi_dsub+0x2e2>
3318: e0c5 b.n 34a6 <__aeabi_dsub+0x46e>
331a: 4452 add r2, sl
331c: 4552 cmp r2, sl
331e: 4180 sbcs r0, r0
3320: 1864 adds r4, r4, r1
3322: 4240 negs r0, r0
3324: 1824 adds r4, r4, r0
3326: 07e7 lsls r7, r4, #31
3328: 0852 lsrs r2, r2, #1
332a: 4317 orrs r7, r2
332c: 0864 lsrs r4, r4, #1
332e: 4666 mov r6, ip
3330: e708 b.n 3144 <__aeabi_dsub+0x10c>
3332: 4812 ldr r0, [pc, #72] ; (337c <__aeabi_dsub+0x344>)
3334: 4285 cmp r5, r0
3336: d100 bne.n 333a <__aeabi_dsub+0x302>
3338: e085 b.n 3446 <__aeabi_dsub+0x40e>
333a: 001d movs r5, r3
333c: e6bc b.n 30b8 <__aeabi_dsub+0x80>
333e: 0029 movs r1, r5
3340: 3e1f subs r6, #31
3342: 40f1 lsrs r1, r6
3344: 2b20 cmp r3, #32
3346: d100 bne.n 334a <__aeabi_dsub+0x312>
3348: e07f b.n 344a <__aeabi_dsub+0x412>
334a: 2240 movs r2, #64 ; 0x40
334c: 1ad3 subs r3, r2, r3
334e: 409d lsls r5, r3
3350: 432f orrs r7, r5
3352: 1e7d subs r5, r7, #1
3354: 41af sbcs r7, r5
3356: 2400 movs r4, #0
3358: 430f orrs r7, r1
335a: 2600 movs r6, #0
335c: e78e b.n 327c <__aeabi_dsub+0x244>
335e: 002b movs r3, r5
3360: 000f movs r7, r1
3362: 3b20 subs r3, #32
3364: 40df lsrs r7, r3
3366: 2d20 cmp r5, #32
3368: d071 beq.n 344e <__aeabi_dsub+0x416>
336a: 2340 movs r3, #64 ; 0x40
336c: 1b5d subs r5, r3, r5
336e: 40a9 lsls r1, r5
3370: 430a orrs r2, r1
3372: 1e51 subs r1, r2, #1
3374: 418a sbcs r2, r1
3376: 2100 movs r1, #0
3378: 4317 orrs r7, r2
337a: e6af b.n 30dc <__aeabi_dsub+0xa4>
337c: 000007ff .word 0x000007ff
3380: ff7fffff .word 0xff7fffff
3384: 800fffff .word 0x800fffff
3388: 2e00 cmp r6, #0
338a: d03e beq.n 340a <__aeabi_dsub+0x3d2>
338c: 4eb3 ldr r6, [pc, #716] ; (365c <__aeabi_dsub+0x624>)
338e: 45b4 cmp ip, r6
3390: d045 beq.n 341e <__aeabi_dsub+0x3e6>
3392: 2680 movs r6, #128 ; 0x80
3394: 0436 lsls r6, r6, #16
3396: 426d negs r5, r5
3398: 4334 orrs r4, r6
339a: 2d38 cmp r5, #56 ; 0x38
339c: dd00 ble.n 33a0 <__aeabi_dsub+0x368>
339e: e0a8 b.n 34f2 <__aeabi_dsub+0x4ba>
33a0: 2d1f cmp r5, #31
33a2: dd00 ble.n 33a6 <__aeabi_dsub+0x36e>
33a4: e11f b.n 35e6 <__aeabi_dsub+0x5ae>
33a6: 2620 movs r6, #32
33a8: 0027 movs r7, r4
33aa: 4650 mov r0, sl
33ac: 1b76 subs r6, r6, r5
33ae: 40b7 lsls r7, r6
33b0: 40e8 lsrs r0, r5
33b2: 4307 orrs r7, r0
33b4: 4650 mov r0, sl
33b6: 40b0 lsls r0, r6
33b8: 1e46 subs r6, r0, #1
33ba: 41b0 sbcs r0, r6
33bc: 40ec lsrs r4, r5
33be: 4338 orrs r0, r7
33c0: 1a17 subs r7, r2, r0
33c2: 42ba cmp r2, r7
33c4: 4192 sbcs r2, r2
33c6: 1b0c subs r4, r1, r4
33c8: 4252 negs r2, r2
33ca: 1aa4 subs r4, r4, r2
33cc: 4666 mov r6, ip
33ce: 4698 mov r8, r3
33d0: e68b b.n 30ea <__aeabi_dsub+0xb2>
33d2: 4664 mov r4, ip
33d4: 4667 mov r7, ip
33d6: 432c orrs r4, r5
33d8: d000 beq.n 33dc <__aeabi_dsub+0x3a4>
33da: e68b b.n 30f4 <__aeabi_dsub+0xbc>
33dc: 2500 movs r5, #0
33de: 2600 movs r6, #0
33e0: 2700 movs r7, #0
33e2: e6ea b.n 31ba <__aeabi_dsub+0x182>
33e4: 001e movs r6, r3
33e6: e6ad b.n 3144 <__aeabi_dsub+0x10c>
33e8: 2b1f cmp r3, #31
33ea: dc60 bgt.n 34ae <__aeabi_dsub+0x476>
33ec: 2720 movs r7, #32
33ee: 1af8 subs r0, r7, r3
33f0: 000f movs r7, r1
33f2: 4684 mov ip, r0
33f4: 4087 lsls r7, r0
33f6: 0010 movs r0, r2
33f8: 40d8 lsrs r0, r3
33fa: 4307 orrs r7, r0
33fc: 4660 mov r0, ip
33fe: 4082 lsls r2, r0
3400: 1e50 subs r0, r2, #1
3402: 4182 sbcs r2, r0
3404: 40d9 lsrs r1, r3
3406: 4317 orrs r7, r2
3408: e6f5 b.n 31f6 <__aeabi_dsub+0x1be>
340a: 0026 movs r6, r4
340c: 4650 mov r0, sl
340e: 4306 orrs r6, r0
3410: d005 beq.n 341e <__aeabi_dsub+0x3e6>
3412: 43ed mvns r5, r5
3414: 2d00 cmp r5, #0
3416: d0d3 beq.n 33c0 <__aeabi_dsub+0x388>
3418: 4e90 ldr r6, [pc, #576] ; (365c <__aeabi_dsub+0x624>)
341a: 45b4 cmp ip, r6
341c: d1bd bne.n 339a <__aeabi_dsub+0x362>
341e: 000c movs r4, r1
3420: 0017 movs r7, r2
3422: 4666 mov r6, ip
3424: 4698 mov r8, r3
3426: e68d b.n 3144 <__aeabi_dsub+0x10c>
3428: 488c ldr r0, [pc, #560] ; (365c <__aeabi_dsub+0x624>)
342a: 4283 cmp r3, r0
342c: d00b beq.n 3446 <__aeabi_dsub+0x40e>
342e: 4663 mov r3, ip
3430: e6d9 b.n 31e6 <__aeabi_dsub+0x1ae>
3432: 2d00 cmp r5, #0
3434: d000 beq.n 3438 <__aeabi_dsub+0x400>
3436: e096 b.n 3566 <__aeabi_dsub+0x52e>
3438: 0008 movs r0, r1
343a: 4310 orrs r0, r2
343c: d100 bne.n 3440 <__aeabi_dsub+0x408>
343e: e0e2 b.n 3606 <__aeabi_dsub+0x5ce>
3440: 000c movs r4, r1
3442: 0017 movs r7, r2
3444: 4698 mov r8, r3
3446: 4e85 ldr r6, [pc, #532] ; (365c <__aeabi_dsub+0x624>)
3448: e67c b.n 3144 <__aeabi_dsub+0x10c>
344a: 2500 movs r5, #0
344c: e780 b.n 3350 <__aeabi_dsub+0x318>
344e: 2100 movs r1, #0
3450: e78e b.n 3370 <__aeabi_dsub+0x338>
3452: 0023 movs r3, r4
3454: 4650 mov r0, sl
3456: 4303 orrs r3, r0
3458: 2e00 cmp r6, #0
345a: d000 beq.n 345e <__aeabi_dsub+0x426>
345c: e0a8 b.n 35b0 <__aeabi_dsub+0x578>
345e: 2b00 cmp r3, #0
3460: d100 bne.n 3464 <__aeabi_dsub+0x42c>
3462: e0de b.n 3622 <__aeabi_dsub+0x5ea>
3464: 000b movs r3, r1
3466: 4313 orrs r3, r2
3468: d100 bne.n 346c <__aeabi_dsub+0x434>
346a: e66b b.n 3144 <__aeabi_dsub+0x10c>
346c: 4452 add r2, sl
346e: 4552 cmp r2, sl
3470: 4180 sbcs r0, r0
3472: 1864 adds r4, r4, r1
3474: 4240 negs r0, r0
3476: 1824 adds r4, r4, r0
3478: 0017 movs r7, r2
347a: 0223 lsls r3, r4, #8
347c: d400 bmi.n 3480 <__aeabi_dsub+0x448>
347e: e6fd b.n 327c <__aeabi_dsub+0x244>
3480: 4b77 ldr r3, [pc, #476] ; (3660 <__aeabi_dsub+0x628>)
3482: 4666 mov r6, ip
3484: 401c ands r4, r3
3486: e65d b.n 3144 <__aeabi_dsub+0x10c>
3488: 0025 movs r5, r4
348a: 4650 mov r0, sl
348c: 4305 orrs r5, r0
348e: 2e00 cmp r6, #0
3490: d1cf bne.n 3432 <__aeabi_dsub+0x3fa>
3492: 2d00 cmp r5, #0
3494: d14f bne.n 3536 <__aeabi_dsub+0x4fe>
3496: 000c movs r4, r1
3498: 4314 orrs r4, r2
349a: d100 bne.n 349e <__aeabi_dsub+0x466>
349c: e0a0 b.n 35e0 <__aeabi_dsub+0x5a8>
349e: 000c movs r4, r1
34a0: 0017 movs r7, r2
34a2: 4698 mov r8, r3
34a4: e64e b.n 3144 <__aeabi_dsub+0x10c>
34a6: 4666 mov r6, ip
34a8: 2400 movs r4, #0
34aa: 2700 movs r7, #0
34ac: e685 b.n 31ba <__aeabi_dsub+0x182>
34ae: 001f movs r7, r3
34b0: 0008 movs r0, r1
34b2: 3f20 subs r7, #32
34b4: 40f8 lsrs r0, r7
34b6: 0007 movs r7, r0
34b8: 2b20 cmp r3, #32
34ba: d100 bne.n 34be <__aeabi_dsub+0x486>
34bc: e08e b.n 35dc <__aeabi_dsub+0x5a4>
34be: 2040 movs r0, #64 ; 0x40
34c0: 1ac3 subs r3, r0, r3
34c2: 4099 lsls r1, r3
34c4: 430a orrs r2, r1
34c6: 1e51 subs r1, r2, #1
34c8: 418a sbcs r2, r1
34ca: 2100 movs r1, #0
34cc: 4317 orrs r7, r2
34ce: e692 b.n 31f6 <__aeabi_dsub+0x1be>
34d0: 2e00 cmp r6, #0
34d2: d114 bne.n 34fe <__aeabi_dsub+0x4c6>
34d4: 0026 movs r6, r4
34d6: 4650 mov r0, sl
34d8: 4306 orrs r6, r0
34da: d062 beq.n 35a2 <__aeabi_dsub+0x56a>
34dc: 43db mvns r3, r3
34de: 2b00 cmp r3, #0
34e0: d15c bne.n 359c <__aeabi_dsub+0x564>
34e2: 1887 adds r7, r0, r2
34e4: 4297 cmp r7, r2
34e6: 4192 sbcs r2, r2
34e8: 1864 adds r4, r4, r1
34ea: 4252 negs r2, r2
34ec: 18a4 adds r4, r4, r2
34ee: 4666 mov r6, ip
34f0: e687 b.n 3202 <__aeabi_dsub+0x1ca>
34f2: 4650 mov r0, sl
34f4: 4320 orrs r0, r4
34f6: 1e44 subs r4, r0, #1
34f8: 41a0 sbcs r0, r4
34fa: 2400 movs r4, #0
34fc: e760 b.n 33c0 <__aeabi_dsub+0x388>
34fe: 4e57 ldr r6, [pc, #348] ; (365c <__aeabi_dsub+0x624>)
3500: 45b4 cmp ip, r6
3502: d04e beq.n 35a2 <__aeabi_dsub+0x56a>
3504: 2680 movs r6, #128 ; 0x80
3506: 0436 lsls r6, r6, #16
3508: 425b negs r3, r3
350a: 4334 orrs r4, r6
350c: 2b38 cmp r3, #56 ; 0x38
350e: dd00 ble.n 3512 <__aeabi_dsub+0x4da>
3510: e07f b.n 3612 <__aeabi_dsub+0x5da>
3512: 2b1f cmp r3, #31
3514: dd00 ble.n 3518 <__aeabi_dsub+0x4e0>
3516: e08b b.n 3630 <__aeabi_dsub+0x5f8>
3518: 2620 movs r6, #32
351a: 0027 movs r7, r4
351c: 4650 mov r0, sl
351e: 1af6 subs r6, r6, r3
3520: 40b7 lsls r7, r6
3522: 40d8 lsrs r0, r3
3524: 4307 orrs r7, r0
3526: 4650 mov r0, sl
3528: 40b0 lsls r0, r6
352a: 1e46 subs r6, r0, #1
352c: 41b0 sbcs r0, r6
352e: 4307 orrs r7, r0
3530: 40dc lsrs r4, r3
3532: 18bf adds r7, r7, r2
3534: e7d6 b.n 34e4 <__aeabi_dsub+0x4ac>
3536: 000d movs r5, r1
3538: 4315 orrs r5, r2
353a: d100 bne.n 353e <__aeabi_dsub+0x506>
353c: e602 b.n 3144 <__aeabi_dsub+0x10c>
353e: 4650 mov r0, sl
3540: 1a80 subs r0, r0, r2
3542: 4582 cmp sl, r0
3544: 41bf sbcs r7, r7
3546: 1a65 subs r5, r4, r1
3548: 427f negs r7, r7
354a: 1bed subs r5, r5, r7
354c: 4684 mov ip, r0
354e: 0228 lsls r0, r5, #8
3550: d400 bmi.n 3554 <__aeabi_dsub+0x51c>
3552: e68d b.n 3270 <__aeabi_dsub+0x238>
3554: 4650 mov r0, sl
3556: 1a17 subs r7, r2, r0
3558: 42ba cmp r2, r7
355a: 4192 sbcs r2, r2
355c: 1b0c subs r4, r1, r4
355e: 4252 negs r2, r2
3560: 1aa4 subs r4, r4, r2
3562: 4698 mov r8, r3
3564: e5ee b.n 3144 <__aeabi_dsub+0x10c>
3566: 000d movs r5, r1
3568: 4315 orrs r5, r2
356a: d100 bne.n 356e <__aeabi_dsub+0x536>
356c: e76b b.n 3446 <__aeabi_dsub+0x40e>
356e: 4650 mov r0, sl
3570: 0767 lsls r7, r4, #29
3572: 08c0 lsrs r0, r0, #3
3574: 4307 orrs r7, r0
3576: 2080 movs r0, #128 ; 0x80
3578: 08e4 lsrs r4, r4, #3
357a: 0300 lsls r0, r0, #12
357c: 4204 tst r4, r0
357e: d007 beq.n 3590 <__aeabi_dsub+0x558>
3580: 08cd lsrs r5, r1, #3
3582: 4205 tst r5, r0
3584: d104 bne.n 3590 <__aeabi_dsub+0x558>
3586: 002c movs r4, r5
3588: 4698 mov r8, r3
358a: 08d7 lsrs r7, r2, #3
358c: 0749 lsls r1, r1, #29
358e: 430f orrs r7, r1
3590: 0f7b lsrs r3, r7, #29
3592: 00e4 lsls r4, r4, #3
3594: 431c orrs r4, r3
3596: 00ff lsls r7, r7, #3
3598: 4e30 ldr r6, [pc, #192] ; (365c <__aeabi_dsub+0x624>)
359a: e5d3 b.n 3144 <__aeabi_dsub+0x10c>
359c: 4e2f ldr r6, [pc, #188] ; (365c <__aeabi_dsub+0x624>)
359e: 45b4 cmp ip, r6
35a0: d1b4 bne.n 350c <__aeabi_dsub+0x4d4>
35a2: 000c movs r4, r1
35a4: 0017 movs r7, r2
35a6: 4666 mov r6, ip
35a8: e5cc b.n 3144 <__aeabi_dsub+0x10c>
35aa: 2700 movs r7, #0
35ac: 2400 movs r4, #0
35ae: e5e8 b.n 3182 <__aeabi_dsub+0x14a>
35b0: 2b00 cmp r3, #0
35b2: d039 beq.n 3628 <__aeabi_dsub+0x5f0>
35b4: 000b movs r3, r1
35b6: 4313 orrs r3, r2
35b8: d100 bne.n 35bc <__aeabi_dsub+0x584>
35ba: e744 b.n 3446 <__aeabi_dsub+0x40e>
35bc: 08c0 lsrs r0, r0, #3
35be: 0767 lsls r7, r4, #29
35c0: 4307 orrs r7, r0
35c2: 2080 movs r0, #128 ; 0x80
35c4: 08e4 lsrs r4, r4, #3
35c6: 0300 lsls r0, r0, #12
35c8: 4204 tst r4, r0
35ca: d0e1 beq.n 3590 <__aeabi_dsub+0x558>
35cc: 08cb lsrs r3, r1, #3
35ce: 4203 tst r3, r0
35d0: d1de bne.n 3590 <__aeabi_dsub+0x558>
35d2: 08d7 lsrs r7, r2, #3
35d4: 0749 lsls r1, r1, #29
35d6: 430f orrs r7, r1
35d8: 001c movs r4, r3
35da: e7d9 b.n 3590 <__aeabi_dsub+0x558>
35dc: 2100 movs r1, #0
35de: e771 b.n 34c4 <__aeabi_dsub+0x48c>
35e0: 2500 movs r5, #0
35e2: 2700 movs r7, #0
35e4: e5e9 b.n 31ba <__aeabi_dsub+0x182>
35e6: 002e movs r6, r5
35e8: 0027 movs r7, r4
35ea: 3e20 subs r6, #32
35ec: 40f7 lsrs r7, r6
35ee: 2d20 cmp r5, #32
35f0: d02f beq.n 3652 <__aeabi_dsub+0x61a>
35f2: 2640 movs r6, #64 ; 0x40
35f4: 1b75 subs r5, r6, r5
35f6: 40ac lsls r4, r5
35f8: 4650 mov r0, sl
35fa: 4320 orrs r0, r4
35fc: 1e44 subs r4, r0, #1
35fe: 41a0 sbcs r0, r4
3600: 2400 movs r4, #0
3602: 4338 orrs r0, r7
3604: e6dc b.n 33c0 <__aeabi_dsub+0x388>
3606: 2480 movs r4, #128 ; 0x80
3608: 2500 movs r5, #0
360a: 0324 lsls r4, r4, #12
360c: 4e13 ldr r6, [pc, #76] ; (365c <__aeabi_dsub+0x624>)
360e: 2700 movs r7, #0
3610: e5d3 b.n 31ba <__aeabi_dsub+0x182>
3612: 4650 mov r0, sl
3614: 4320 orrs r0, r4
3616: 0007 movs r7, r0
3618: 1e78 subs r0, r7, #1
361a: 4187 sbcs r7, r0
361c: 2400 movs r4, #0
361e: 18bf adds r7, r7, r2
3620: e760 b.n 34e4 <__aeabi_dsub+0x4ac>
3622: 000c movs r4, r1
3624: 0017 movs r7, r2
3626: e58d b.n 3144 <__aeabi_dsub+0x10c>
3628: 000c movs r4, r1
362a: 0017 movs r7, r2
362c: 4e0b ldr r6, [pc, #44] ; (365c <__aeabi_dsub+0x624>)
362e: e589 b.n 3144 <__aeabi_dsub+0x10c>
3630: 001e movs r6, r3
3632: 0027 movs r7, r4
3634: 3e20 subs r6, #32
3636: 40f7 lsrs r7, r6
3638: 2b20 cmp r3, #32
363a: d00c beq.n 3656 <__aeabi_dsub+0x61e>
363c: 2640 movs r6, #64 ; 0x40
363e: 1af3 subs r3, r6, r3
3640: 409c lsls r4, r3
3642: 4650 mov r0, sl
3644: 4320 orrs r0, r4
3646: 1e44 subs r4, r0, #1
3648: 41a0 sbcs r0, r4
364a: 4307 orrs r7, r0
364c: 2400 movs r4, #0
364e: 18bf adds r7, r7, r2
3650: e748 b.n 34e4 <__aeabi_dsub+0x4ac>
3652: 2400 movs r4, #0
3654: e7d0 b.n 35f8 <__aeabi_dsub+0x5c0>
3656: 2400 movs r4, #0
3658: e7f3 b.n 3642 <__aeabi_dsub+0x60a>
365a: 46c0 nop ; (mov r8, r8)
365c: 000007ff .word 0x000007ff
3660: ff7fffff .word 0xff7fffff
00003664 <__aeabi_d2iz>:
3664: b530 push {r4, r5, lr}
3666: 4d13 ldr r5, [pc, #76] ; (36b4 <__aeabi_d2iz+0x50>)
3668: 030a lsls r2, r1, #12
366a: 004b lsls r3, r1, #1
366c: 0b12 lsrs r2, r2, #12
366e: 0d5b lsrs r3, r3, #21
3670: 0fc9 lsrs r1, r1, #31
3672: 2400 movs r4, #0
3674: 42ab cmp r3, r5
3676: dd10 ble.n 369a <__aeabi_d2iz+0x36>
3678: 4c0f ldr r4, [pc, #60] ; (36b8 <__aeabi_d2iz+0x54>)
367a: 42a3 cmp r3, r4
367c: dc0f bgt.n 369e <__aeabi_d2iz+0x3a>
367e: 2480 movs r4, #128 ; 0x80
3680: 4d0e ldr r5, [pc, #56] ; (36bc <__aeabi_d2iz+0x58>)
3682: 0364 lsls r4, r4, #13
3684: 4322 orrs r2, r4
3686: 1aed subs r5, r5, r3
3688: 2d1f cmp r5, #31
368a: dd0b ble.n 36a4 <__aeabi_d2iz+0x40>
368c: 480c ldr r0, [pc, #48] ; (36c0 <__aeabi_d2iz+0x5c>)
368e: 1ac3 subs r3, r0, r3
3690: 40da lsrs r2, r3
3692: 4254 negs r4, r2
3694: 2900 cmp r1, #0
3696: d100 bne.n 369a <__aeabi_d2iz+0x36>
3698: 0014 movs r4, r2
369a: 0020 movs r0, r4
369c: bd30 pop {r4, r5, pc}
369e: 4b09 ldr r3, [pc, #36] ; (36c4 <__aeabi_d2iz+0x60>)
36a0: 18cc adds r4, r1, r3
36a2: e7fa b.n 369a <__aeabi_d2iz+0x36>
36a4: 4c08 ldr r4, [pc, #32] ; (36c8 <__aeabi_d2iz+0x64>)
36a6: 40e8 lsrs r0, r5
36a8: 46a4 mov ip, r4
36aa: 4463 add r3, ip
36ac: 409a lsls r2, r3
36ae: 4302 orrs r2, r0
36b0: e7ef b.n 3692 <__aeabi_d2iz+0x2e>
36b2: 46c0 nop ; (mov r8, r8)
36b4: 000003fe .word 0x000003fe
36b8: 0000041d .word 0x0000041d
36bc: 00000433 .word 0x00000433
36c0: 00000413 .word 0x00000413
36c4: 7fffffff .word 0x7fffffff
36c8: fffffbed .word 0xfffffbed
000036cc <__aeabi_ui2d>:
36cc: b510 push {r4, lr}
36ce: 1e04 subs r4, r0, #0
36d0: d028 beq.n 3724 <__aeabi_ui2d+0x58>
36d2: f000 f833 bl 373c <__clzsi2>
36d6: 4b15 ldr r3, [pc, #84] ; (372c <__aeabi_ui2d+0x60>)
36d8: 4a15 ldr r2, [pc, #84] ; (3730 <__aeabi_ui2d+0x64>)
36da: 1a1b subs r3, r3, r0
36dc: 1ad2 subs r2, r2, r3
36de: 2a1f cmp r2, #31
36e0: dd15 ble.n 370e <__aeabi_ui2d+0x42>
36e2: 4a14 ldr r2, [pc, #80] ; (3734 <__aeabi_ui2d+0x68>)
36e4: 1ad2 subs r2, r2, r3
36e6: 4094 lsls r4, r2
36e8: 2200 movs r2, #0
36ea: 0324 lsls r4, r4, #12
36ec: 055b lsls r3, r3, #21
36ee: 0b24 lsrs r4, r4, #12
36f0: 0d5b lsrs r3, r3, #21
36f2: 2100 movs r1, #0
36f4: 0010 movs r0, r2
36f6: 0324 lsls r4, r4, #12
36f8: 0d0a lsrs r2, r1, #20
36fa: 0b24 lsrs r4, r4, #12
36fc: 0512 lsls r2, r2, #20
36fe: 4322 orrs r2, r4
3700: 4c0d ldr r4, [pc, #52] ; (3738 <__aeabi_ui2d+0x6c>)
3702: 051b lsls r3, r3, #20
3704: 4022 ands r2, r4
3706: 4313 orrs r3, r2
3708: 005b lsls r3, r3, #1
370a: 0859 lsrs r1, r3, #1
370c: bd10 pop {r4, pc}
370e: 0021 movs r1, r4
3710: 4091 lsls r1, r2
3712: 000a movs r2, r1
3714: 210b movs r1, #11
3716: 1a08 subs r0, r1, r0
3718: 40c4 lsrs r4, r0
371a: 055b lsls r3, r3, #21
371c: 0324 lsls r4, r4, #12
371e: 0b24 lsrs r4, r4, #12
3720: 0d5b lsrs r3, r3, #21
3722: e7e6 b.n 36f2 <__aeabi_ui2d+0x26>
3724: 2300 movs r3, #0
3726: 2400 movs r4, #0
3728: 2200 movs r2, #0
372a: e7e2 b.n 36f2 <__aeabi_ui2d+0x26>
372c: 0000041e .word 0x0000041e
3730: 00000433 .word 0x00000433
3734: 00000413 .word 0x00000413
3738: 800fffff .word 0x800fffff
0000373c <__clzsi2>:
373c: 211c movs r1, #28
373e: 2301 movs r3, #1
3740: 041b lsls r3, r3, #16
3742: 4298 cmp r0, r3
3744: d301 bcc.n 374a <__clzsi2+0xe>
3746: 0c00 lsrs r0, r0, #16
3748: 3910 subs r1, #16
374a: 0a1b lsrs r3, r3, #8
374c: 4298 cmp r0, r3
374e: d301 bcc.n 3754 <__clzsi2+0x18>
3750: 0a00 lsrs r0, r0, #8
3752: 3908 subs r1, #8
3754: 091b lsrs r3, r3, #4
3756: 4298 cmp r0, r3
3758: d301 bcc.n 375e <__clzsi2+0x22>
375a: 0900 lsrs r0, r0, #4
375c: 3904 subs r1, #4
375e: a202 add r2, pc, #8 ; (adr r2, 3768 <__clzsi2+0x2c>)
3760: 5c10 ldrb r0, [r2, r0]
3762: 1840 adds r0, r0, r1
3764: 4770 bx lr
3766: 46c0 nop ; (mov r8, r8)
3768: 02020304 .word 0x02020304
376c: 01010101 .word 0x01010101
...
00003778 <__libc_init_array>:
3778: b570 push {r4, r5, r6, lr}
377a: 2600 movs r6, #0
377c: 4d0c ldr r5, [pc, #48] ; (37b0 <__libc_init_array+0x38>)
377e: 4c0d ldr r4, [pc, #52] ; (37b4 <__libc_init_array+0x3c>)
3780: 1b64 subs r4, r4, r5
3782: 10a4 asrs r4, r4, #2
3784: 42a6 cmp r6, r4
3786: d109 bne.n 379c <__libc_init_array+0x24>
3788: 2600 movs r6, #0
378a: f001 f949 bl 4a20 <_init>
378e: 4d0a ldr r5, [pc, #40] ; (37b8 <__libc_init_array+0x40>)
3790: 4c0a ldr r4, [pc, #40] ; (37bc <__libc_init_array+0x44>)
3792: 1b64 subs r4, r4, r5
3794: 10a4 asrs r4, r4, #2
3796: 42a6 cmp r6, r4
3798: d105 bne.n 37a6 <__libc_init_array+0x2e>
379a: bd70 pop {r4, r5, r6, pc}
379c: 00b3 lsls r3, r6, #2
379e: 58eb ldr r3, [r5, r3]
37a0: 4798 blx r3
37a2: 3601 adds r6, #1
37a4: e7ee b.n 3784 <__libc_init_array+0xc>
37a6: 00b3 lsls r3, r6, #2
37a8: 58eb ldr r3, [r5, r3]
37aa: 4798 blx r3
37ac: 3601 adds r6, #1
37ae: e7f2 b.n 3796 <__libc_init_array+0x1e>
37b0: 00004a2c .word 0x00004a2c
37b4: 00004a2c .word 0x00004a2c
37b8: 00004a2c .word 0x00004a2c
37bc: 00004a30 .word 0x00004a30
000037c0 <memset>:
37c0: 0003 movs r3, r0
37c2: 1882 adds r2, r0, r2
37c4: 4293 cmp r3, r2
37c6: d100 bne.n 37ca <memset+0xa>
37c8: 4770 bx lr
37ca: 7019 strb r1, [r3, #0]
37cc: 3301 adds r3, #1
37ce: e7f9 b.n 37c4 <memset+0x4>
000037d0 <iprintf>:
37d0: b40f push {r0, r1, r2, r3}
37d2: 4b0b ldr r3, [pc, #44] ; (3800 <iprintf+0x30>)
37d4: b513 push {r0, r1, r4, lr}
37d6: 681c ldr r4, [r3, #0]
37d8: 2c00 cmp r4, #0
37da: d005 beq.n 37e8 <iprintf+0x18>
37dc: 69a3 ldr r3, [r4, #24]
37de: 2b00 cmp r3, #0
37e0: d102 bne.n 37e8 <iprintf+0x18>
37e2: 0020 movs r0, r4
37e4: f000 faf2 bl 3dcc <__sinit>
37e8: ab05 add r3, sp, #20
37ea: 9a04 ldr r2, [sp, #16]
37ec: 68a1 ldr r1, [r4, #8]
37ee: 0020 movs r0, r4
37f0: 9301 str r3, [sp, #4]
37f2: f000 fcc7 bl 4184 <_vfiprintf_r>
37f6: bc16 pop {r1, r2, r4}
37f8: bc08 pop {r3}
37fa: b004 add sp, #16
37fc: 4718 bx r3
37fe: 46c0 nop ; (mov r8, r8)
3800: 20000004 .word 0x20000004
00003804 <_puts_r>:
3804: b570 push {r4, r5, r6, lr}
3806: 0005 movs r5, r0
3808: 000e movs r6, r1
380a: 2800 cmp r0, #0
380c: d004 beq.n 3818 <_puts_r+0x14>
380e: 6983 ldr r3, [r0, #24]
3810: 2b00 cmp r3, #0
3812: d101 bne.n 3818 <_puts_r+0x14>
3814: f000 fada bl 3dcc <__sinit>
3818: 69ab ldr r3, [r5, #24]
381a: 68ac ldr r4, [r5, #8]
381c: 2b00 cmp r3, #0
381e: d102 bne.n 3826 <_puts_r+0x22>
3820: 0028 movs r0, r5
3822: f000 fad3 bl 3dcc <__sinit>
3826: 4b24 ldr r3, [pc, #144] ; (38b8 <_puts_r+0xb4>)
3828: 429c cmp r4, r3
382a: d10f bne.n 384c <_puts_r+0x48>
382c: 686c ldr r4, [r5, #4]
382e: 89a3 ldrh r3, [r4, #12]
3830: 071b lsls r3, r3, #28
3832: d502 bpl.n 383a <_puts_r+0x36>
3834: 6923 ldr r3, [r4, #16]
3836: 2b00 cmp r3, #0
3838: d120 bne.n 387c <_puts_r+0x78>
383a: 0021 movs r1, r4
383c: 0028 movs r0, r5
383e: f000 f957 bl 3af0 <__swsetup_r>
3842: 2800 cmp r0, #0
3844: d01a beq.n 387c <_puts_r+0x78>
3846: 2001 movs r0, #1
3848: 4240 negs r0, r0
384a: bd70 pop {r4, r5, r6, pc}
384c: 4b1b ldr r3, [pc, #108] ; (38bc <_puts_r+0xb8>)
384e: 429c cmp r4, r3
3850: d101 bne.n 3856 <_puts_r+0x52>
3852: 68ac ldr r4, [r5, #8]
3854: e7eb b.n 382e <_puts_r+0x2a>
3856: 4b1a ldr r3, [pc, #104] ; (38c0 <_puts_r+0xbc>)
3858: 429c cmp r4, r3
385a: d1e8 bne.n 382e <_puts_r+0x2a>
385c: 68ec ldr r4, [r5, #12]
385e: e7e6 b.n 382e <_puts_r+0x2a>
3860: 3b01 subs r3, #1
3862: 3601 adds r6, #1
3864: 60a3 str r3, [r4, #8]
3866: 2b00 cmp r3, #0
3868: da04 bge.n 3874 <_puts_r+0x70>
386a: 69a2 ldr r2, [r4, #24]
386c: 4293 cmp r3, r2
386e: db16 blt.n 389e <_puts_r+0x9a>
3870: 290a cmp r1, #10
3872: d014 beq.n 389e <_puts_r+0x9a>
3874: 6823 ldr r3, [r4, #0]
3876: 1c5a adds r2, r3, #1
3878: 6022 str r2, [r4, #0]
387a: 7019 strb r1, [r3, #0]
387c: 7831 ldrb r1, [r6, #0]
387e: 68a3 ldr r3, [r4, #8]
3880: 2900 cmp r1, #0
3882: d1ed bne.n 3860 <_puts_r+0x5c>
3884: 3b01 subs r3, #1
3886: 60a3 str r3, [r4, #8]
3888: 2b00 cmp r3, #0
388a: da0f bge.n 38ac <_puts_r+0xa8>
388c: 0022 movs r2, r4
388e: 310a adds r1, #10
3890: 0028 movs r0, r5
3892: f000 f8d7 bl 3a44 <__swbuf_r>
3896: 1c43 adds r3, r0, #1
3898: d0d5 beq.n 3846 <_puts_r+0x42>
389a: 200a movs r0, #10
389c: e7d5 b.n 384a <_puts_r+0x46>
389e: 0022 movs r2, r4
38a0: 0028 movs r0, r5
38a2: f000 f8cf bl 3a44 <__swbuf_r>
38a6: 1c43 adds r3, r0, #1
38a8: d1e8 bne.n 387c <_puts_r+0x78>
38aa: e7cc b.n 3846 <_puts_r+0x42>
38ac: 200a movs r0, #10
38ae: 6823 ldr r3, [r4, #0]
38b0: 1c5a adds r2, r3, #1
38b2: 6022 str r2, [r4, #0]
38b4: 7018 strb r0, [r3, #0]
38b6: e7c8 b.n 384a <_puts_r+0x46>
38b8: 000049ac .word 0x000049ac
38bc: 000049cc .word 0x000049cc
38c0: 0000498c .word 0x0000498c
000038c4 <puts>:
38c4: b510 push {r4, lr}
38c6: 4b03 ldr r3, [pc, #12] ; (38d4 <puts+0x10>)
38c8: 0001 movs r1, r0
38ca: 6818 ldr r0, [r3, #0]
38cc: f7ff ff9a bl 3804 <_puts_r>
38d0: bd10 pop {r4, pc}
38d2: 46c0 nop ; (mov r8, r8)
38d4: 20000004 .word 0x20000004
000038d8 <setbuf>:
38d8: 424a negs r2, r1
38da: 414a adcs r2, r1
38dc: 2380 movs r3, #128 ; 0x80
38de: b510 push {r4, lr}
38e0: 0052 lsls r2, r2, #1
38e2: 00db lsls r3, r3, #3
38e4: f000 f802 bl 38ec <setvbuf>
38e8: bd10 pop {r4, pc}
...
000038ec <setvbuf>:
38ec: b5f0 push {r4, r5, r6, r7, lr}
38ee: 001d movs r5, r3
38f0: 4b4f ldr r3, [pc, #316] ; (3a30 <setvbuf+0x144>)
38f2: b085 sub sp, #20
38f4: 681e ldr r6, [r3, #0]
38f6: 0004 movs r4, r0
38f8: 000f movs r7, r1
38fa: 9200 str r2, [sp, #0]
38fc: 2e00 cmp r6, #0
38fe: d005 beq.n 390c <setvbuf+0x20>
3900: 69b3 ldr r3, [r6, #24]
3902: 2b00 cmp r3, #0
3904: d102 bne.n 390c <setvbuf+0x20>
3906: 0030 movs r0, r6
3908: f000 fa60 bl 3dcc <__sinit>
390c: 4b49 ldr r3, [pc, #292] ; (3a34 <setvbuf+0x148>)
390e: 429c cmp r4, r3
3910: d150 bne.n 39b4 <setvbuf+0xc8>
3912: 6874 ldr r4, [r6, #4]
3914: 9b00 ldr r3, [sp, #0]
3916: 2b02 cmp r3, #2
3918: d005 beq.n 3926 <setvbuf+0x3a>
391a: 2b01 cmp r3, #1
391c: d900 bls.n 3920 <setvbuf+0x34>
391e: e084 b.n 3a2a <setvbuf+0x13e>
3920: 2d00 cmp r5, #0
3922: da00 bge.n 3926 <setvbuf+0x3a>
3924: e081 b.n 3a2a <setvbuf+0x13e>
3926: 0021 movs r1, r4
3928: 0030 movs r0, r6
392a: f000 f9e1 bl 3cf0 <_fflush_r>
392e: 6b61 ldr r1, [r4, #52] ; 0x34
3930: 2900 cmp r1, #0
3932: d008 beq.n 3946 <setvbuf+0x5a>
3934: 0023 movs r3, r4
3936: 3344 adds r3, #68 ; 0x44
3938: 4299 cmp r1, r3
393a: d002 beq.n 3942 <setvbuf+0x56>
393c: 0030 movs r0, r6
393e: f000 fb51 bl 3fe4 <_free_r>
3942: 2300 movs r3, #0
3944: 6363 str r3, [r4, #52] ; 0x34
3946: 2300 movs r3, #0
3948: 61a3 str r3, [r4, #24]
394a: 6063 str r3, [r4, #4]
394c: 89a3 ldrh r3, [r4, #12]
394e: 061b lsls r3, r3, #24
3950: d503 bpl.n 395a <setvbuf+0x6e>
3952: 6921 ldr r1, [r4, #16]
3954: 0030 movs r0, r6
3956: f000 fb45 bl 3fe4 <_free_r>
395a: 89a3 ldrh r3, [r4, #12]
395c: 4a36 ldr r2, [pc, #216] ; (3a38 <setvbuf+0x14c>)
395e: 4013 ands r3, r2
3960: 81a3 strh r3, [r4, #12]
3962: 9b00 ldr r3, [sp, #0]
3964: 2b02 cmp r3, #2
3966: d05a beq.n 3a1e <setvbuf+0x132>
3968: ab03 add r3, sp, #12
396a: aa02 add r2, sp, #8
396c: 0021 movs r1, r4
396e: 0030 movs r0, r6
3970: f000 fac2 bl 3ef8 <__swhatbuf_r>
3974: 89a3 ldrh r3, [r4, #12]
3976: 4318 orrs r0, r3
3978: 81a0 strh r0, [r4, #12]
397a: 2d00 cmp r5, #0
397c: d124 bne.n 39c8 <setvbuf+0xdc>
397e: 9d02 ldr r5, [sp, #8]
3980: 0028 movs r0, r5
3982: f000 fb25 bl 3fd0 <malloc>
3986: 9501 str r5, [sp, #4]
3988: 1e07 subs r7, r0, #0
398a: d142 bne.n 3a12 <setvbuf+0x126>
398c: 9b02 ldr r3, [sp, #8]
398e: 9301 str r3, [sp, #4]
3990: 42ab cmp r3, r5
3992: d139 bne.n 3a08 <setvbuf+0x11c>
3994: 2001 movs r0, #1
3996: 4240 negs r0, r0
3998: 2302 movs r3, #2
399a: 89a2 ldrh r2, [r4, #12]
399c: 4313 orrs r3, r2
399e: 81a3 strh r3, [r4, #12]
39a0: 2300 movs r3, #0
39a2: 60a3 str r3, [r4, #8]
39a4: 0023 movs r3, r4
39a6: 3347 adds r3, #71 ; 0x47
39a8: 6023 str r3, [r4, #0]
39aa: 6123 str r3, [r4, #16]
39ac: 2301 movs r3, #1
39ae: 6163 str r3, [r4, #20]
39b0: b005 add sp, #20
39b2: bdf0 pop {r4, r5, r6, r7, pc}
39b4: 4b21 ldr r3, [pc, #132] ; (3a3c <setvbuf+0x150>)
39b6: 429c cmp r4, r3
39b8: d101 bne.n 39be <setvbuf+0xd2>
39ba: 68b4 ldr r4, [r6, #8]
39bc: e7aa b.n 3914 <setvbuf+0x28>
39be: 4b20 ldr r3, [pc, #128] ; (3a40 <setvbuf+0x154>)
39c0: 429c cmp r4, r3
39c2: d1a7 bne.n 3914 <setvbuf+0x28>
39c4: 68f4 ldr r4, [r6, #12]
39c6: e7a5 b.n 3914 <setvbuf+0x28>
39c8: 2f00 cmp r7, #0
39ca: d0d9 beq.n 3980 <setvbuf+0x94>
39cc: 69b3 ldr r3, [r6, #24]
39ce: 2b00 cmp r3, #0
39d0: d102 bne.n 39d8 <setvbuf+0xec>
39d2: 0030 movs r0, r6
39d4: f000 f9fa bl 3dcc <__sinit>
39d8: 9b00 ldr r3, [sp, #0]
39da: 2b01 cmp r3, #1
39dc: d103 bne.n 39e6 <setvbuf+0xfa>
39de: 89a3 ldrh r3, [r4, #12]
39e0: 9a00 ldr r2, [sp, #0]
39e2: 431a orrs r2, r3
39e4: 81a2 strh r2, [r4, #12]
39e6: 2008 movs r0, #8
39e8: 89a3 ldrh r3, [r4, #12]
39ea: 6027 str r7, [r4, #0]
39ec: 6127 str r7, [r4, #16]
39ee: 6165 str r5, [r4, #20]
39f0: 4018 ands r0, r3
39f2: d018 beq.n 3a26 <setvbuf+0x13a>
39f4: 2001 movs r0, #1
39f6: 4018 ands r0, r3
39f8: 2300 movs r3, #0
39fa: 4298 cmp r0, r3
39fc: d011 beq.n 3a22 <setvbuf+0x136>
39fe: 426d negs r5, r5
3a00: 60a3 str r3, [r4, #8]
3a02: 61a5 str r5, [r4, #24]
3a04: 0018 movs r0, r3
3a06: e7d3 b.n 39b0 <setvbuf+0xc4>
3a08: 9801 ldr r0, [sp, #4]
3a0a: f000 fae1 bl 3fd0 <malloc>
3a0e: 1e07 subs r7, r0, #0
3a10: d0c0 beq.n 3994 <setvbuf+0xa8>
3a12: 2380 movs r3, #128 ; 0x80
3a14: 89a2 ldrh r2, [r4, #12]
3a16: 9d01 ldr r5, [sp, #4]
3a18: 4313 orrs r3, r2
3a1a: 81a3 strh r3, [r4, #12]
3a1c: e7d6 b.n 39cc <setvbuf+0xe0>
3a1e: 2000 movs r0, #0
3a20: e7ba b.n 3998 <setvbuf+0xac>
3a22: 60a5 str r5, [r4, #8]
3a24: e7c4 b.n 39b0 <setvbuf+0xc4>
3a26: 60a0 str r0, [r4, #8]
3a28: e7c2 b.n 39b0 <setvbuf+0xc4>
3a2a: 2001 movs r0, #1
3a2c: 4240 negs r0, r0
3a2e: e7bf b.n 39b0 <setvbuf+0xc4>
3a30: 20000004 .word 0x20000004
3a34: 000049ac .word 0x000049ac
3a38: fffff35c .word 0xfffff35c
3a3c: 000049cc .word 0x000049cc
3a40: 0000498c .word 0x0000498c
00003a44 <__swbuf_r>:
3a44: b5f8 push {r3, r4, r5, r6, r7, lr}
3a46: 0005 movs r5, r0
3a48: 000e movs r6, r1
3a4a: 0014 movs r4, r2
3a4c: 2800 cmp r0, #0
3a4e: d004 beq.n 3a5a <__swbuf_r+0x16>
3a50: 6983 ldr r3, [r0, #24]
3a52: 2b00 cmp r3, #0
3a54: d101 bne.n 3a5a <__swbuf_r+0x16>
3a56: f000 f9b9 bl 3dcc <__sinit>
3a5a: 4b22 ldr r3, [pc, #136] ; (3ae4 <__swbuf_r+0xa0>)
3a5c: 429c cmp r4, r3
3a5e: d12d bne.n 3abc <__swbuf_r+0x78>
3a60: 686c ldr r4, [r5, #4]
3a62: 69a3 ldr r3, [r4, #24]
3a64: 60a3 str r3, [r4, #8]
3a66: 89a3 ldrh r3, [r4, #12]
3a68: 071b lsls r3, r3, #28
3a6a: d531 bpl.n 3ad0 <__swbuf_r+0x8c>
3a6c: 6923 ldr r3, [r4, #16]
3a6e: 2b00 cmp r3, #0
3a70: d02e beq.n 3ad0 <__swbuf_r+0x8c>
3a72: 6823 ldr r3, [r4, #0]
3a74: 6922 ldr r2, [r4, #16]
3a76: b2f7 uxtb r7, r6
3a78: 1a98 subs r0, r3, r2
3a7a: 6963 ldr r3, [r4, #20]
3a7c: b2f6 uxtb r6, r6
3a7e: 4298 cmp r0, r3
3a80: db05 blt.n 3a8e <__swbuf_r+0x4a>
3a82: 0021 movs r1, r4
3a84: 0028 movs r0, r5
3a86: f000 f933 bl 3cf0 <_fflush_r>
3a8a: 2800 cmp r0, #0
3a8c: d126 bne.n 3adc <__swbuf_r+0x98>
3a8e: 68a3 ldr r3, [r4, #8]
3a90: 3001 adds r0, #1
3a92: 3b01 subs r3, #1
3a94: 60a3 str r3, [r4, #8]
3a96: 6823 ldr r3, [r4, #0]
3a98: 1c5a adds r2, r3, #1
3a9a: 6022 str r2, [r4, #0]
3a9c: 701f strb r7, [r3, #0]
3a9e: 6963 ldr r3, [r4, #20]
3aa0: 4298 cmp r0, r3
3aa2: d004 beq.n 3aae <__swbuf_r+0x6a>
3aa4: 89a3 ldrh r3, [r4, #12]
3aa6: 07db lsls r3, r3, #31
3aa8: d51a bpl.n 3ae0 <__swbuf_r+0x9c>
3aaa: 2e0a cmp r6, #10
3aac: d118 bne.n 3ae0 <__swbuf_r+0x9c>
3aae: 0021 movs r1, r4
3ab0: 0028 movs r0, r5
3ab2: f000 f91d bl 3cf0 <_fflush_r>
3ab6: 2800 cmp r0, #0
3ab8: d012 beq.n 3ae0 <__swbuf_r+0x9c>
3aba: e00f b.n 3adc <__swbuf_r+0x98>
3abc: 4b0a ldr r3, [pc, #40] ; (3ae8 <__swbuf_r+0xa4>)
3abe: 429c cmp r4, r3
3ac0: d101 bne.n 3ac6 <__swbuf_r+0x82>
3ac2: 68ac ldr r4, [r5, #8]
3ac4: e7cd b.n 3a62 <__swbuf_r+0x1e>
3ac6: 4b09 ldr r3, [pc, #36] ; (3aec <__swbuf_r+0xa8>)
3ac8: 429c cmp r4, r3
3aca: d1ca bne.n 3a62 <__swbuf_r+0x1e>
3acc: 68ec ldr r4, [r5, #12]
3ace: e7c8 b.n 3a62 <__swbuf_r+0x1e>
3ad0: 0021 movs r1, r4
3ad2: 0028 movs r0, r5
3ad4: f000 f80c bl 3af0 <__swsetup_r>
3ad8: 2800 cmp r0, #0
3ada: d0ca beq.n 3a72 <__swbuf_r+0x2e>
3adc: 2601 movs r6, #1
3ade: 4276 negs r6, r6
3ae0: 0030 movs r0, r6
3ae2: bdf8 pop {r3, r4, r5, r6, r7, pc}
3ae4: 000049ac .word 0x000049ac
3ae8: 000049cc .word 0x000049cc
3aec: 0000498c .word 0x0000498c
00003af0 <__swsetup_r>:
3af0: 4b36 ldr r3, [pc, #216] ; (3bcc <__swsetup_r+0xdc>)
3af2: b570 push {r4, r5, r6, lr}
3af4: 681d ldr r5, [r3, #0]
3af6: 0006 movs r6, r0
3af8: 000c movs r4, r1
3afa: 2d00 cmp r5, #0
3afc: d005 beq.n 3b0a <__swsetup_r+0x1a>
3afe: 69ab ldr r3, [r5, #24]
3b00: 2b00 cmp r3, #0
3b02: d102 bne.n 3b0a <__swsetup_r+0x1a>
3b04: 0028 movs r0, r5
3b06: f000 f961 bl 3dcc <__sinit>
3b0a: 4b31 ldr r3, [pc, #196] ; (3bd0 <__swsetup_r+0xe0>)
3b0c: 429c cmp r4, r3
3b0e: d10f bne.n 3b30 <__swsetup_r+0x40>
3b10: 686c ldr r4, [r5, #4]
3b12: 230c movs r3, #12
3b14: 5ee2 ldrsh r2, [r4, r3]
3b16: b293 uxth r3, r2
3b18: 0719 lsls r1, r3, #28
3b1a: d42d bmi.n 3b78 <__swsetup_r+0x88>
3b1c: 06d9 lsls r1, r3, #27
3b1e: d411 bmi.n 3b44 <__swsetup_r+0x54>
3b20: 2309 movs r3, #9
3b22: 2001 movs r0, #1
3b24: 6033 str r3, [r6, #0]
3b26: 3337 adds r3, #55 ; 0x37
3b28: 4313 orrs r3, r2
3b2a: 81a3 strh r3, [r4, #12]
3b2c: 4240 negs r0, r0
3b2e: bd70 pop {r4, r5, r6, pc}
3b30: 4b28 ldr r3, [pc, #160] ; (3bd4 <__swsetup_r+0xe4>)
3b32: 429c cmp r4, r3
3b34: d101 bne.n 3b3a <__swsetup_r+0x4a>
3b36: 68ac ldr r4, [r5, #8]
3b38: e7eb b.n 3b12 <__swsetup_r+0x22>
3b3a: 4b27 ldr r3, [pc, #156] ; (3bd8 <__swsetup_r+0xe8>)
3b3c: 429c cmp r4, r3
3b3e: d1e8 bne.n 3b12 <__swsetup_r+0x22>
3b40: 68ec ldr r4, [r5, #12]
3b42: e7e6 b.n 3b12 <__swsetup_r+0x22>
3b44: 075b lsls r3, r3, #29
3b46: d513 bpl.n 3b70 <__swsetup_r+0x80>
3b48: 6b61 ldr r1, [r4, #52] ; 0x34
3b4a: 2900 cmp r1, #0
3b4c: d008 beq.n 3b60 <__swsetup_r+0x70>
3b4e: 0023 movs r3, r4
3b50: 3344 adds r3, #68 ; 0x44
3b52: 4299 cmp r1, r3
3b54: d002 beq.n 3b5c <__swsetup_r+0x6c>
3b56: 0030 movs r0, r6
3b58: f000 fa44 bl 3fe4 <_free_r>
3b5c: 2300 movs r3, #0
3b5e: 6363 str r3, [r4, #52] ; 0x34
3b60: 2224 movs r2, #36 ; 0x24
3b62: 89a3 ldrh r3, [r4, #12]
3b64: 4393 bics r3, r2
3b66: 81a3 strh r3, [r4, #12]
3b68: 2300 movs r3, #0
3b6a: 6063 str r3, [r4, #4]
3b6c: 6923 ldr r3, [r4, #16]
3b6e: 6023 str r3, [r4, #0]
3b70: 2308 movs r3, #8
3b72: 89a2 ldrh r2, [r4, #12]
3b74: 4313 orrs r3, r2
3b76: 81a3 strh r3, [r4, #12]
3b78: 6923 ldr r3, [r4, #16]
3b7a: 2b00 cmp r3, #0
3b7c: d10b bne.n 3b96 <__swsetup_r+0xa6>
3b7e: 21a0 movs r1, #160 ; 0xa0
3b80: 2280 movs r2, #128 ; 0x80
3b82: 89a3 ldrh r3, [r4, #12]
3b84: 0089 lsls r1, r1, #2
3b86: 0092 lsls r2, r2, #2
3b88: 400b ands r3, r1
3b8a: 4293 cmp r3, r2
3b8c: d003 beq.n 3b96 <__swsetup_r+0xa6>
3b8e: 0021 movs r1, r4
3b90: 0030 movs r0, r6
3b92: f000 f9d9 bl 3f48 <__smakebuf_r>
3b96: 2301 movs r3, #1
3b98: 89a2 ldrh r2, [r4, #12]
3b9a: 4013 ands r3, r2
3b9c: d011 beq.n 3bc2 <__swsetup_r+0xd2>
3b9e: 2300 movs r3, #0
3ba0: 60a3 str r3, [r4, #8]
3ba2: 6963 ldr r3, [r4, #20]
3ba4: 425b negs r3, r3
3ba6: 61a3 str r3, [r4, #24]
3ba8: 2000 movs r0, #0
3baa: 6923 ldr r3, [r4, #16]
3bac: 4283 cmp r3, r0
3bae: d1be bne.n 3b2e <__swsetup_r+0x3e>
3bb0: 230c movs r3, #12
3bb2: 5ee2 ldrsh r2, [r4, r3]
3bb4: 0613 lsls r3, r2, #24
3bb6: d5ba bpl.n 3b2e <__swsetup_r+0x3e>
3bb8: 2340 movs r3, #64 ; 0x40
3bba: 4313 orrs r3, r2
3bbc: 81a3 strh r3, [r4, #12]
3bbe: 3801 subs r0, #1
3bc0: e7b5 b.n 3b2e <__swsetup_r+0x3e>
3bc2: 0792 lsls r2, r2, #30
3bc4: d400 bmi.n 3bc8 <__swsetup_r+0xd8>
3bc6: 6963 ldr r3, [r4, #20]
3bc8: 60a3 str r3, [r4, #8]
3bca: e7ed b.n 3ba8 <__swsetup_r+0xb8>
3bcc: 20000004 .word 0x20000004
3bd0: 000049ac .word 0x000049ac
3bd4: 000049cc .word 0x000049cc
3bd8: 0000498c .word 0x0000498c
00003bdc <__sflush_r>:
3bdc: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
3bde: 898a ldrh r2, [r1, #12]
3be0: 0005 movs r5, r0
3be2: 000c movs r4, r1
3be4: 0713 lsls r3, r2, #28
3be6: d460 bmi.n 3caa <__sflush_r+0xce>
3be8: 684b ldr r3, [r1, #4]
3bea: 2b00 cmp r3, #0
3bec: dc04 bgt.n 3bf8 <__sflush_r+0x1c>
3bee: 6c0b ldr r3, [r1, #64] ; 0x40
3bf0: 2b00 cmp r3, #0
3bf2: dc01 bgt.n 3bf8 <__sflush_r+0x1c>
3bf4: 2000 movs r0, #0
3bf6: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
3bf8: 6ae7 ldr r7, [r4, #44] ; 0x2c
3bfa: 2f00 cmp r7, #0
3bfc: d0fa beq.n 3bf4 <__sflush_r+0x18>
3bfe: 2300 movs r3, #0
3c00: 682e ldr r6, [r5, #0]
3c02: 602b str r3, [r5, #0]
3c04: 2380 movs r3, #128 ; 0x80
3c06: 015b lsls r3, r3, #5
3c08: 401a ands r2, r3
3c0a: d034 beq.n 3c76 <__sflush_r+0x9a>
3c0c: 6d60 ldr r0, [r4, #84] ; 0x54
3c0e: 89a3 ldrh r3, [r4, #12]
3c10: 075b lsls r3, r3, #29
3c12: d506 bpl.n 3c22 <__sflush_r+0x46>
3c14: 6863 ldr r3, [r4, #4]
3c16: 1ac0 subs r0, r0, r3
3c18: 6b63 ldr r3, [r4, #52] ; 0x34
3c1a: 2b00 cmp r3, #0
3c1c: d001 beq.n 3c22 <__sflush_r+0x46>
3c1e: 6c23 ldr r3, [r4, #64] ; 0x40
3c20: 1ac0 subs r0, r0, r3
3c22: 0002 movs r2, r0
3c24: 6a21 ldr r1, [r4, #32]
3c26: 2300 movs r3, #0
3c28: 0028 movs r0, r5
3c2a: 6ae7 ldr r7, [r4, #44] ; 0x2c
3c2c: 47b8 blx r7
3c2e: 89a1 ldrh r1, [r4, #12]
3c30: 1c43 adds r3, r0, #1
3c32: d106 bne.n 3c42 <__sflush_r+0x66>
3c34: 682b ldr r3, [r5, #0]
3c36: 2b1d cmp r3, #29
3c38: d831 bhi.n 3c9e <__sflush_r+0xc2>
3c3a: 4a2c ldr r2, [pc, #176] ; (3cec <__sflush_r+0x110>)
3c3c: 40da lsrs r2, r3
3c3e: 07d3 lsls r3, r2, #31
3c40: d52d bpl.n 3c9e <__sflush_r+0xc2>
3c42: 2300 movs r3, #0
3c44: 6063 str r3, [r4, #4]
3c46: 6923 ldr r3, [r4, #16]
3c48: 6023 str r3, [r4, #0]
3c4a: 04cb lsls r3, r1, #19
3c4c: d505 bpl.n 3c5a <__sflush_r+0x7e>
3c4e: 1c43 adds r3, r0, #1
3c50: d102 bne.n 3c58 <__sflush_r+0x7c>
3c52: 682b ldr r3, [r5, #0]
3c54: 2b00 cmp r3, #0
3c56: d100 bne.n 3c5a <__sflush_r+0x7e>
3c58: 6560 str r0, [r4, #84] ; 0x54
3c5a: 6b61 ldr r1, [r4, #52] ; 0x34
3c5c: 602e str r6, [r5, #0]
3c5e: 2900 cmp r1, #0
3c60: d0c8 beq.n 3bf4 <__sflush_r+0x18>
3c62: 0023 movs r3, r4
3c64: 3344 adds r3, #68 ; 0x44
3c66: 4299 cmp r1, r3
3c68: d002 beq.n 3c70 <__sflush_r+0x94>
3c6a: 0028 movs r0, r5
3c6c: f000 f9ba bl 3fe4 <_free_r>
3c70: 2000 movs r0, #0
3c72: 6360 str r0, [r4, #52] ; 0x34
3c74: e7bf b.n 3bf6 <__sflush_r+0x1a>
3c76: 2301 movs r3, #1
3c78: 6a21 ldr r1, [r4, #32]
3c7a: 0028 movs r0, r5
3c7c: 47b8 blx r7
3c7e: 1c43 adds r3, r0, #1
3c80: d1c5 bne.n 3c0e <__sflush_r+0x32>
3c82: 682b ldr r3, [r5, #0]
3c84: 2b00 cmp r3, #0
3c86: d0c2 beq.n 3c0e <__sflush_r+0x32>
3c88: 2b1d cmp r3, #29
3c8a: d001 beq.n 3c90 <__sflush_r+0xb4>
3c8c: 2b16 cmp r3, #22
3c8e: d101 bne.n 3c94 <__sflush_r+0xb8>
3c90: 602e str r6, [r5, #0]
3c92: e7af b.n 3bf4 <__sflush_r+0x18>
3c94: 2340 movs r3, #64 ; 0x40
3c96: 89a2 ldrh r2, [r4, #12]
3c98: 4313 orrs r3, r2
3c9a: 81a3 strh r3, [r4, #12]
3c9c: e7ab b.n 3bf6 <__sflush_r+0x1a>
3c9e: 2340 movs r3, #64 ; 0x40
3ca0: 430b orrs r3, r1
3ca2: 2001 movs r0, #1
3ca4: 81a3 strh r3, [r4, #12]
3ca6: 4240 negs r0, r0
3ca8: e7a5 b.n 3bf6 <__sflush_r+0x1a>
3caa: 690f ldr r7, [r1, #16]
3cac: 2f00 cmp r7, #0
3cae: d0a1 beq.n 3bf4 <__sflush_r+0x18>
3cb0: 680b ldr r3, [r1, #0]
3cb2: 600f str r7, [r1, #0]
3cb4: 1bdb subs r3, r3, r7
3cb6: 9301 str r3, [sp, #4]
3cb8: 2300 movs r3, #0
3cba: 0792 lsls r2, r2, #30
3cbc: d100 bne.n 3cc0 <__sflush_r+0xe4>
3cbe: 694b ldr r3, [r1, #20]
3cc0: 60a3 str r3, [r4, #8]
3cc2: 9b01 ldr r3, [sp, #4]
3cc4: 2b00 cmp r3, #0
3cc6: dc00 bgt.n 3cca <__sflush_r+0xee>
3cc8: e794 b.n 3bf4 <__sflush_r+0x18>
3cca: 9b01 ldr r3, [sp, #4]
3ccc: 003a movs r2, r7
3cce: 6a21 ldr r1, [r4, #32]
3cd0: 0028 movs r0, r5
3cd2: 6aa6 ldr r6, [r4, #40] ; 0x28
3cd4: 47b0 blx r6
3cd6: 2800 cmp r0, #0
3cd8: dc03 bgt.n 3ce2 <__sflush_r+0x106>
3cda: 2340 movs r3, #64 ; 0x40
3cdc: 89a2 ldrh r2, [r4, #12]
3cde: 4313 orrs r3, r2
3ce0: e7df b.n 3ca2 <__sflush_r+0xc6>
3ce2: 9b01 ldr r3, [sp, #4]
3ce4: 183f adds r7, r7, r0
3ce6: 1a1b subs r3, r3, r0
3ce8: 9301 str r3, [sp, #4]
3cea: e7ea b.n 3cc2 <__sflush_r+0xe6>
3cec: 20400001 .word 0x20400001
00003cf0 <_fflush_r>:
3cf0: 690b ldr r3, [r1, #16]
3cf2: b570 push {r4, r5, r6, lr}
3cf4: 0005 movs r5, r0
3cf6: 000c movs r4, r1
3cf8: 2b00 cmp r3, #0
3cfa: d101 bne.n 3d00 <_fflush_r+0x10>
3cfc: 2000 movs r0, #0
3cfe: bd70 pop {r4, r5, r6, pc}
3d00: 2800 cmp r0, #0
3d02: d004 beq.n 3d0e <_fflush_r+0x1e>
3d04: 6983 ldr r3, [r0, #24]
3d06: 2b00 cmp r3, #0
3d08: d101 bne.n 3d0e <_fflush_r+0x1e>
3d0a: f000 f85f bl 3dcc <__sinit>
3d0e: 4b0b ldr r3, [pc, #44] ; (3d3c <_fflush_r+0x4c>)
3d10: 429c cmp r4, r3
3d12: d109 bne.n 3d28 <_fflush_r+0x38>
3d14: 686c ldr r4, [r5, #4]
3d16: 220c movs r2, #12
3d18: 5ea3 ldrsh r3, [r4, r2]
3d1a: 2b00 cmp r3, #0
3d1c: d0ee beq.n 3cfc <_fflush_r+0xc>
3d1e: 0021 movs r1, r4
3d20: 0028 movs r0, r5
3d22: f7ff ff5b bl 3bdc <__sflush_r>
3d26: e7ea b.n 3cfe <_fflush_r+0xe>
3d28: 4b05 ldr r3, [pc, #20] ; (3d40 <_fflush_r+0x50>)
3d2a: 429c cmp r4, r3
3d2c: d101 bne.n 3d32 <_fflush_r+0x42>
3d2e: 68ac ldr r4, [r5, #8]
3d30: e7f1 b.n 3d16 <_fflush_r+0x26>
3d32: 4b04 ldr r3, [pc, #16] ; (3d44 <_fflush_r+0x54>)
3d34: 429c cmp r4, r3
3d36: d1ee bne.n 3d16 <_fflush_r+0x26>
3d38: 68ec ldr r4, [r5, #12]
3d3a: e7ec b.n 3d16 <_fflush_r+0x26>
3d3c: 000049ac .word 0x000049ac
3d40: 000049cc .word 0x000049cc
3d44: 0000498c .word 0x0000498c
00003d48 <_cleanup_r>:
3d48: b510 push {r4, lr}
3d4a: 4902 ldr r1, [pc, #8] ; (3d54 <_cleanup_r+0xc>)
3d4c: f000 f8b2 bl 3eb4 <_fwalk_reent>
3d50: bd10 pop {r4, pc}
3d52: 46c0 nop ; (mov r8, r8)
3d54: 00003cf1 .word 0x00003cf1
00003d58 <std.isra.0>:
3d58: 2300 movs r3, #0
3d5a: b510 push {r4, lr}
3d5c: 0004 movs r4, r0
3d5e: 6003 str r3, [r0, #0]
3d60: 6043 str r3, [r0, #4]
3d62: 6083 str r3, [r0, #8]
3d64: 8181 strh r1, [r0, #12]
3d66: 6643 str r3, [r0, #100] ; 0x64
3d68: 81c2 strh r2, [r0, #14]
3d6a: 6103 str r3, [r0, #16]
3d6c: 6143 str r3, [r0, #20]
3d6e: 6183 str r3, [r0, #24]
3d70: 0019 movs r1, r3
3d72: 2208 movs r2, #8
3d74: 305c adds r0, #92 ; 0x5c
3d76: f7ff fd23 bl 37c0 <memset>
3d7a: 4b05 ldr r3, [pc, #20] ; (3d90 <std.isra.0+0x38>)
3d7c: 6224 str r4, [r4, #32]
3d7e: 6263 str r3, [r4, #36] ; 0x24
3d80: 4b04 ldr r3, [pc, #16] ; (3d94 <std.isra.0+0x3c>)
3d82: 62a3 str r3, [r4, #40] ; 0x28
3d84: 4b04 ldr r3, [pc, #16] ; (3d98 <std.isra.0+0x40>)
3d86: 62e3 str r3, [r4, #44] ; 0x2c
3d88: 4b04 ldr r3, [pc, #16] ; (3d9c <std.isra.0+0x44>)
3d8a: 6323 str r3, [r4, #48] ; 0x30
3d8c: bd10 pop {r4, pc}
3d8e: 46c0 nop ; (mov r8, r8)
3d90: 000046f1 .word 0x000046f1
3d94: 00004719 .word 0x00004719
3d98: 00004751 .word 0x00004751
3d9c: 0000477d .word 0x0000477d
00003da0 <__sfmoreglue>:
3da0: b570 push {r4, r5, r6, lr}
3da2: 2568 movs r5, #104 ; 0x68
3da4: 1e4a subs r2, r1, #1
3da6: 4355 muls r5, r2
3da8: 000e movs r6, r1
3daa: 0029 movs r1, r5
3dac: 3174 adds r1, #116 ; 0x74
3dae: f000 f963 bl 4078 <_malloc_r>
3db2: 1e04 subs r4, r0, #0
3db4: d008 beq.n 3dc8 <__sfmoreglue+0x28>
3db6: 2100 movs r1, #0
3db8: 002a movs r2, r5
3dba: 6001 str r1, [r0, #0]
3dbc: 6046 str r6, [r0, #4]
3dbe: 300c adds r0, #12
3dc0: 60a0 str r0, [r4, #8]
3dc2: 3268 adds r2, #104 ; 0x68
3dc4: f7ff fcfc bl 37c0 <memset>
3dc8: 0020 movs r0, r4
3dca: bd70 pop {r4, r5, r6, pc}
00003dcc <__sinit>:
3dcc: 6983 ldr r3, [r0, #24]
3dce: b513 push {r0, r1, r4, lr}
3dd0: 0004 movs r4, r0
3dd2: 2b00 cmp r3, #0
3dd4: d128 bne.n 3e28 <__sinit+0x5c>
3dd6: 6483 str r3, [r0, #72] ; 0x48
3dd8: 64c3 str r3, [r0, #76] ; 0x4c
3dda: 6503 str r3, [r0, #80] ; 0x50
3ddc: 4b13 ldr r3, [pc, #76] ; (3e2c <__sinit+0x60>)
3dde: 4a14 ldr r2, [pc, #80] ; (3e30 <__sinit+0x64>)
3de0: 681b ldr r3, [r3, #0]
3de2: 6282 str r2, [r0, #40] ; 0x28
3de4: 9301 str r3, [sp, #4]
3de6: 4298 cmp r0, r3
3de8: d101 bne.n 3dee <__sinit+0x22>
3dea: 2301 movs r3, #1
3dec: 6183 str r3, [r0, #24]
3dee: 0020 movs r0, r4
3df0: f000 f820 bl 3e34 <__sfp>
3df4: 6060 str r0, [r4, #4]
3df6: 0020 movs r0, r4
3df8: f000 f81c bl 3e34 <__sfp>
3dfc: 60a0 str r0, [r4, #8]
3dfe: 0020 movs r0, r4
3e00: f000 f818 bl 3e34 <__sfp>
3e04: 2200 movs r2, #0
3e06: 60e0 str r0, [r4, #12]
3e08: 2104 movs r1, #4
3e0a: 6860 ldr r0, [r4, #4]
3e0c: f7ff ffa4 bl 3d58 <std.isra.0>
3e10: 2201 movs r2, #1
3e12: 2109 movs r1, #9
3e14: 68a0 ldr r0, [r4, #8]
3e16: f7ff ff9f bl 3d58 <std.isra.0>
3e1a: 2202 movs r2, #2
3e1c: 2112 movs r1, #18
3e1e: 68e0 ldr r0, [r4, #12]
3e20: f7ff ff9a bl 3d58 <std.isra.0>
3e24: 2301 movs r3, #1
3e26: 61a3 str r3, [r4, #24]
3e28: bd13 pop {r0, r1, r4, pc}
3e2a: 46c0 nop ; (mov r8, r8)
3e2c: 00004988 .word 0x00004988
3e30: 00003d49 .word 0x00003d49
00003e34 <__sfp>:
3e34: b5f8 push {r3, r4, r5, r6, r7, lr}
3e36: 4b1e ldr r3, [pc, #120] ; (3eb0 <__sfp+0x7c>)
3e38: 0007 movs r7, r0
3e3a: 681e ldr r6, [r3, #0]
3e3c: 69b3 ldr r3, [r6, #24]
3e3e: 2b00 cmp r3, #0
3e40: d102 bne.n 3e48 <__sfp+0x14>
3e42: 0030 movs r0, r6
3e44: f7ff ffc2 bl 3dcc <__sinit>
3e48: 3648 adds r6, #72 ; 0x48
3e4a: 68b4 ldr r4, [r6, #8]
3e4c: 6873 ldr r3, [r6, #4]
3e4e: 3b01 subs r3, #1
3e50: d504 bpl.n 3e5c <__sfp+0x28>
3e52: 6833 ldr r3, [r6, #0]
3e54: 2b00 cmp r3, #0
3e56: d007 beq.n 3e68 <__sfp+0x34>
3e58: 6836 ldr r6, [r6, #0]
3e5a: e7f6 b.n 3e4a <__sfp+0x16>
3e5c: 220c movs r2, #12
3e5e: 5ea5 ldrsh r5, [r4, r2]
3e60: 2d00 cmp r5, #0
3e62: d00d beq.n 3e80 <__sfp+0x4c>
3e64: 3468 adds r4, #104 ; 0x68
3e66: e7f2 b.n 3e4e <__sfp+0x1a>
3e68: 2104 movs r1, #4
3e6a: 0038 movs r0, r7
3e6c: f7ff ff98 bl 3da0 <__sfmoreglue>
3e70: 6030 str r0, [r6, #0]
3e72: 2800 cmp r0, #0
3e74: d1f0 bne.n 3e58 <__sfp+0x24>
3e76: 230c movs r3, #12
3e78: 0004 movs r4, r0
3e7a: 603b str r3, [r7, #0]
3e7c: 0020 movs r0, r4
3e7e: bdf8 pop {r3, r4, r5, r6, r7, pc}
3e80: 2301 movs r3, #1
3e82: 0020 movs r0, r4
3e84: 425b negs r3, r3
3e86: 81e3 strh r3, [r4, #14]
3e88: 3302 adds r3, #2
3e8a: 81a3 strh r3, [r4, #12]
3e8c: 6665 str r5, [r4, #100] ; 0x64
3e8e: 6025 str r5, [r4, #0]
3e90: 60a5 str r5, [r4, #8]
3e92: 6065 str r5, [r4, #4]
3e94: 6125 str r5, [r4, #16]
3e96: 6165 str r5, [r4, #20]
3e98: 61a5 str r5, [r4, #24]
3e9a: 2208 movs r2, #8
3e9c: 0029 movs r1, r5
3e9e: 305c adds r0, #92 ; 0x5c
3ea0: f7ff fc8e bl 37c0 <memset>
3ea4: 6365 str r5, [r4, #52] ; 0x34
3ea6: 63a5 str r5, [r4, #56] ; 0x38
3ea8: 64a5 str r5, [r4, #72] ; 0x48
3eaa: 64e5 str r5, [r4, #76] ; 0x4c
3eac: e7e6 b.n 3e7c <__sfp+0x48>
3eae: 46c0 nop ; (mov r8, r8)
3eb0: 00004988 .word 0x00004988
00003eb4 <_fwalk_reent>:
3eb4: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
3eb6: 0004 movs r4, r0
3eb8: 0007 movs r7, r0
3eba: 2600 movs r6, #0
3ebc: 9101 str r1, [sp, #4]
3ebe: 3448 adds r4, #72 ; 0x48
3ec0: 2c00 cmp r4, #0
3ec2: d101 bne.n 3ec8 <_fwalk_reent+0x14>
3ec4: 0030 movs r0, r6
3ec6: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
3ec8: 6863 ldr r3, [r4, #4]
3eca: 68a5 ldr r5, [r4, #8]
3ecc: 9300 str r3, [sp, #0]
3ece: 9b00 ldr r3, [sp, #0]
3ed0: 3b01 subs r3, #1
3ed2: 9300 str r3, [sp, #0]
3ed4: d501 bpl.n 3eda <_fwalk_reent+0x26>
3ed6: 6824 ldr r4, [r4, #0]
3ed8: e7f2 b.n 3ec0 <_fwalk_reent+0xc>
3eda: 89ab ldrh r3, [r5, #12]
3edc: 2b01 cmp r3, #1
3ede: d908 bls.n 3ef2 <_fwalk_reent+0x3e>
3ee0: 220e movs r2, #14
3ee2: 5eab ldrsh r3, [r5, r2]
3ee4: 3301 adds r3, #1
3ee6: d004 beq.n 3ef2 <_fwalk_reent+0x3e>
3ee8: 0029 movs r1, r5
3eea: 0038 movs r0, r7
3eec: 9b01 ldr r3, [sp, #4]
3eee: 4798 blx r3
3ef0: 4306 orrs r6, r0
3ef2: 3568 adds r5, #104 ; 0x68
3ef4: e7eb b.n 3ece <_fwalk_reent+0x1a>
...
00003ef8 <__swhatbuf_r>:
3ef8: b570 push {r4, r5, r6, lr}
3efa: 000e movs r6, r1
3efc: 001d movs r5, r3
3efe: 230e movs r3, #14
3f00: 5ec9 ldrsh r1, [r1, r3]
3f02: b090 sub sp, #64 ; 0x40
3f04: 0014 movs r4, r2
3f06: 2900 cmp r1, #0
3f08: da07 bge.n 3f1a <__swhatbuf_r+0x22>
3f0a: 2300 movs r3, #0
3f0c: 602b str r3, [r5, #0]
3f0e: 89b3 ldrh r3, [r6, #12]
3f10: 061b lsls r3, r3, #24
3f12: d411 bmi.n 3f38 <__swhatbuf_r+0x40>
3f14: 2380 movs r3, #128 ; 0x80
3f16: 00db lsls r3, r3, #3
3f18: e00f b.n 3f3a <__swhatbuf_r+0x42>
3f1a: aa01 add r2, sp, #4
3f1c: f000 fc5a bl 47d4 <_fstat_r>
3f20: 2800 cmp r0, #0
3f22: dbf2 blt.n 3f0a <__swhatbuf_r+0x12>
3f24: 22f0 movs r2, #240 ; 0xf0
3f26: 9b02 ldr r3, [sp, #8]
3f28: 0212 lsls r2, r2, #8
3f2a: 4013 ands r3, r2
3f2c: 4a05 ldr r2, [pc, #20] ; (3f44 <__swhatbuf_r+0x4c>)
3f2e: 189b adds r3, r3, r2
3f30: 425a negs r2, r3
3f32: 4153 adcs r3, r2
3f34: 602b str r3, [r5, #0]
3f36: e7ed b.n 3f14 <__swhatbuf_r+0x1c>
3f38: 2340 movs r3, #64 ; 0x40
3f3a: 2000 movs r0, #0
3f3c: 6023 str r3, [r4, #0]
3f3e: b010 add sp, #64 ; 0x40
3f40: bd70 pop {r4, r5, r6, pc}
3f42: 46c0 nop ; (mov r8, r8)
3f44: ffffe000 .word 0xffffe000
00003f48 <__smakebuf_r>:
3f48: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
3f4a: 2602 movs r6, #2
3f4c: 898b ldrh r3, [r1, #12]
3f4e: 0005 movs r5, r0
3f50: 000c movs r4, r1
3f52: 4233 tst r3, r6
3f54: d006 beq.n 3f64 <__smakebuf_r+0x1c>
3f56: 0023 movs r3, r4
3f58: 3347 adds r3, #71 ; 0x47
3f5a: 6023 str r3, [r4, #0]
3f5c: 6123 str r3, [r4, #16]
3f5e: 2301 movs r3, #1
3f60: 6163 str r3, [r4, #20]
3f62: bdf7 pop {r0, r1, r2, r4, r5, r6, r7, pc}
3f64: ab01 add r3, sp, #4
3f66: 466a mov r2, sp
3f68: f7ff ffc6 bl 3ef8 <__swhatbuf_r>
3f6c: 9900 ldr r1, [sp, #0]
3f6e: 0007 movs r7, r0
3f70: 0028 movs r0, r5
3f72: f000 f881 bl 4078 <_malloc_r>
3f76: 2800 cmp r0, #0
3f78: d108 bne.n 3f8c <__smakebuf_r+0x44>
3f7a: 220c movs r2, #12
3f7c: 5ea3 ldrsh r3, [r4, r2]
3f7e: 059a lsls r2, r3, #22
3f80: d4ef bmi.n 3f62 <__smakebuf_r+0x1a>
3f82: 2203 movs r2, #3
3f84: 4393 bics r3, r2
3f86: 431e orrs r6, r3
3f88: 81a6 strh r6, [r4, #12]
3f8a: e7e4 b.n 3f56 <__smakebuf_r+0xe>
3f8c: 4b0f ldr r3, [pc, #60] ; (3fcc <__smakebuf_r+0x84>)
3f8e: 62ab str r3, [r5, #40] ; 0x28
3f90: 2380 movs r3, #128 ; 0x80
3f92: 89a2 ldrh r2, [r4, #12]
3f94: 6020 str r0, [r4, #0]
3f96: 4313 orrs r3, r2
3f98: 81a3 strh r3, [r4, #12]
3f9a: 9b00 ldr r3, [sp, #0]
3f9c: 6120 str r0, [r4, #16]
3f9e: 6163 str r3, [r4, #20]
3fa0: 9b01 ldr r3, [sp, #4]
3fa2: 2b00 cmp r3, #0
3fa4: d00d beq.n 3fc2 <__smakebuf_r+0x7a>
3fa6: 230e movs r3, #14
3fa8: 5ee1 ldrsh r1, [r4, r3]
3faa: 0028 movs r0, r5
3fac: f000 fc24 bl 47f8 <_isatty_r>
3fb0: 2800 cmp r0, #0
3fb2: d006 beq.n 3fc2 <__smakebuf_r+0x7a>
3fb4: 2203 movs r2, #3
3fb6: 89a3 ldrh r3, [r4, #12]
3fb8: 4393 bics r3, r2
3fba: 001a movs r2, r3
3fbc: 2301 movs r3, #1
3fbe: 4313 orrs r3, r2
3fc0: 81a3 strh r3, [r4, #12]
3fc2: 89a0 ldrh r0, [r4, #12]
3fc4: 4338 orrs r0, r7
3fc6: 81a0 strh r0, [r4, #12]
3fc8: e7cb b.n 3f62 <__smakebuf_r+0x1a>
3fca: 46c0 nop ; (mov r8, r8)
3fcc: 00003d49 .word 0x00003d49
00003fd0 <malloc>:
3fd0: b510 push {r4, lr}
3fd2: 4b03 ldr r3, [pc, #12] ; (3fe0 <malloc+0x10>)
3fd4: 0001 movs r1, r0
3fd6: 6818 ldr r0, [r3, #0]
3fd8: f000 f84e bl 4078 <_malloc_r>
3fdc: bd10 pop {r4, pc}
3fde: 46c0 nop ; (mov r8, r8)
3fe0: 20000004 .word 0x20000004
00003fe4 <_free_r>:
3fe4: b570 push {r4, r5, r6, lr}
3fe6: 0005 movs r5, r0
3fe8: 2900 cmp r1, #0
3fea: d010 beq.n 400e <_free_r+0x2a>
3fec: 1f0c subs r4, r1, #4
3fee: 6823 ldr r3, [r4, #0]
3ff0: 2b00 cmp r3, #0
3ff2: da00 bge.n 3ff6 <_free_r+0x12>
3ff4: 18e4 adds r4, r4, r3
3ff6: 0028 movs r0, r5
3ff8: f000 fc2f bl 485a <__malloc_lock>
3ffc: 4a1d ldr r2, [pc, #116] ; (4074 <_free_r+0x90>)
3ffe: 6813 ldr r3, [r2, #0]
4000: 2b00 cmp r3, #0
4002: d105 bne.n 4010 <_free_r+0x2c>
4004: 6063 str r3, [r4, #4]
4006: 6014 str r4, [r2, #0]
4008: 0028 movs r0, r5
400a: f000 fc27 bl 485c <__malloc_unlock>
400e: bd70 pop {r4, r5, r6, pc}
4010: 42a3 cmp r3, r4
4012: d909 bls.n 4028 <_free_r+0x44>
4014: 6821 ldr r1, [r4, #0]
4016: 1860 adds r0, r4, r1
4018: 4283 cmp r3, r0
401a: d1f3 bne.n 4004 <_free_r+0x20>
401c: 6818 ldr r0, [r3, #0]
401e: 685b ldr r3, [r3, #4]
4020: 1841 adds r1, r0, r1
4022: 6021 str r1, [r4, #0]
4024: e7ee b.n 4004 <_free_r+0x20>
4026: 0013 movs r3, r2
4028: 685a ldr r2, [r3, #4]
402a: 2a00 cmp r2, #0
402c: d001 beq.n 4032 <_free_r+0x4e>
402e: 42a2 cmp r2, r4
4030: d9f9 bls.n 4026 <_free_r+0x42>
4032: 6819 ldr r1, [r3, #0]
4034: 1858 adds r0, r3, r1
4036: 42a0 cmp r0, r4
4038: d10b bne.n 4052 <_free_r+0x6e>
403a: 6820 ldr r0, [r4, #0]
403c: 1809 adds r1, r1, r0
403e: 1858 adds r0, r3, r1
4040: 6019 str r1, [r3, #0]
4042: 4282 cmp r2, r0
4044: d1e0 bne.n 4008 <_free_r+0x24>
4046: 6810 ldr r0, [r2, #0]
4048: 6852 ldr r2, [r2, #4]
404a: 1841 adds r1, r0, r1
404c: 6019 str r1, [r3, #0]
404e: 605a str r2, [r3, #4]
4050: e7da b.n 4008 <_free_r+0x24>
4052: 42a0 cmp r0, r4
4054: d902 bls.n 405c <_free_r+0x78>
4056: 230c movs r3, #12
4058: 602b str r3, [r5, #0]
405a: e7d5 b.n 4008 <_free_r+0x24>
405c: 6821 ldr r1, [r4, #0]
405e: 1860 adds r0, r4, r1
4060: 4282 cmp r2, r0
4062: d103 bne.n 406c <_free_r+0x88>
4064: 6810 ldr r0, [r2, #0]
4066: 6852 ldr r2, [r2, #4]
4068: 1841 adds r1, r0, r1
406a: 6021 str r1, [r4, #0]
406c: 6062 str r2, [r4, #4]
406e: 605c str r4, [r3, #4]
4070: e7ca b.n 4008 <_free_r+0x24>
4072: 46c0 nop ; (mov r8, r8)
4074: 200000c8 .word 0x200000c8
00004078 <_malloc_r>:
4078: 2303 movs r3, #3
407a: b570 push {r4, r5, r6, lr}
407c: 1ccd adds r5, r1, #3
407e: 439d bics r5, r3
4080: 3508 adds r5, #8
4082: 0006 movs r6, r0
4084: 2d0c cmp r5, #12
4086: d21e bcs.n 40c6 <_malloc_r+0x4e>
4088: 250c movs r5, #12
408a: 42a9 cmp r1, r5
408c: d81d bhi.n 40ca <_malloc_r+0x52>
408e: 0030 movs r0, r6
4090: f000 fbe3 bl 485a <__malloc_lock>
4094: 4a25 ldr r2, [pc, #148] ; (412c <_malloc_r+0xb4>)
4096: 6814 ldr r4, [r2, #0]
4098: 0021 movs r1, r4
409a: 2900 cmp r1, #0
409c: d119 bne.n 40d2 <_malloc_r+0x5a>
409e: 4c24 ldr r4, [pc, #144] ; (4130 <_malloc_r+0xb8>)
40a0: 6823 ldr r3, [r4, #0]
40a2: 2b00 cmp r3, #0
40a4: d103 bne.n 40ae <_malloc_r+0x36>
40a6: 0030 movs r0, r6
40a8: f000 fb10 bl 46cc <_sbrk_r>
40ac: 6020 str r0, [r4, #0]
40ae: 0029 movs r1, r5
40b0: 0030 movs r0, r6
40b2: f000 fb0b bl 46cc <_sbrk_r>
40b6: 1c43 adds r3, r0, #1
40b8: d12c bne.n 4114 <_malloc_r+0x9c>
40ba: 230c movs r3, #12
40bc: 0030 movs r0, r6
40be: 6033 str r3, [r6, #0]
40c0: f000 fbcc bl 485c <__malloc_unlock>
40c4: e003 b.n 40ce <_malloc_r+0x56>
40c6: 2d00 cmp r5, #0
40c8: dadf bge.n 408a <_malloc_r+0x12>
40ca: 230c movs r3, #12
40cc: 6033 str r3, [r6, #0]
40ce: 2000 movs r0, #0
40d0: bd70 pop {r4, r5, r6, pc}
40d2: 680b ldr r3, [r1, #0]
40d4: 1b5b subs r3, r3, r5
40d6: d41a bmi.n 410e <_malloc_r+0x96>
40d8: 2b0b cmp r3, #11
40da: d903 bls.n 40e4 <_malloc_r+0x6c>
40dc: 600b str r3, [r1, #0]
40de: 18cc adds r4, r1, r3
40e0: 6025 str r5, [r4, #0]
40e2: e003 b.n 40ec <_malloc_r+0x74>
40e4: 428c cmp r4, r1
40e6: d10e bne.n 4106 <_malloc_r+0x8e>
40e8: 6863 ldr r3, [r4, #4]
40ea: 6013 str r3, [r2, #0]
40ec: 0030 movs r0, r6
40ee: f000 fbb5 bl 485c <__malloc_unlock>
40f2: 0020 movs r0, r4
40f4: 2207 movs r2, #7
40f6: 300b adds r0, #11
40f8: 1d23 adds r3, r4, #4
40fa: 4390 bics r0, r2
40fc: 1ac3 subs r3, r0, r3
40fe: d0e7 beq.n 40d0 <_malloc_r+0x58>
4100: 425a negs r2, r3
4102: 50e2 str r2, [r4, r3]
4104: e7e4 b.n 40d0 <_malloc_r+0x58>
4106: 684b ldr r3, [r1, #4]
4108: 6063 str r3, [r4, #4]
410a: 000c movs r4, r1
410c: e7ee b.n 40ec <_malloc_r+0x74>
410e: 000c movs r4, r1
4110: 6849 ldr r1, [r1, #4]
4112: e7c2 b.n 409a <_malloc_r+0x22>
4114: 2303 movs r3, #3
4116: 1cc4 adds r4, r0, #3
4118: 439c bics r4, r3
411a: 42a0 cmp r0, r4
411c: d0e0 beq.n 40e0 <_malloc_r+0x68>
411e: 1a21 subs r1, r4, r0
4120: 0030 movs r0, r6
4122: f000 fad3 bl 46cc <_sbrk_r>
4126: 1c43 adds r3, r0, #1
4128: d1da bne.n 40e0 <_malloc_r+0x68>
412a: e7c6 b.n 40ba <_malloc_r+0x42>
412c: 200000c8 .word 0x200000c8
4130: 200000cc .word 0x200000cc
00004134 <__sfputc_r>:
4134: 6893 ldr r3, [r2, #8]
4136: b510 push {r4, lr}
4138: 3b01 subs r3, #1
413a: 6093 str r3, [r2, #8]
413c: 2b00 cmp r3, #0
413e: da05 bge.n 414c <__sfputc_r+0x18>
4140: 6994 ldr r4, [r2, #24]
4142: 42a3 cmp r3, r4
4144: db08 blt.n 4158 <__sfputc_r+0x24>
4146: b2cb uxtb r3, r1
4148: 2b0a cmp r3, #10
414a: d005 beq.n 4158 <__sfputc_r+0x24>
414c: 6813 ldr r3, [r2, #0]
414e: 1c58 adds r0, r3, #1
4150: 6010 str r0, [r2, #0]
4152: 7019 strb r1, [r3, #0]
4154: b2c8 uxtb r0, r1
4156: bd10 pop {r4, pc}
4158: f7ff fc74 bl 3a44 <__swbuf_r>
415c: e7fb b.n 4156 <__sfputc_r+0x22>
0000415e <__sfputs_r>:
415e: b5f8 push {r3, r4, r5, r6, r7, lr}
4160: 0006 movs r6, r0
4162: 000f movs r7, r1
4164: 0014 movs r4, r2
4166: 18d5 adds r5, r2, r3
4168: 42ac cmp r4, r5
416a: d101 bne.n 4170 <__sfputs_r+0x12>
416c: 2000 movs r0, #0
416e: e007 b.n 4180 <__sfputs_r+0x22>
4170: 7821 ldrb r1, [r4, #0]
4172: 003a movs r2, r7
4174: 0030 movs r0, r6
4176: f7ff ffdd bl 4134 <__sfputc_r>
417a: 3401 adds r4, #1
417c: 1c43 adds r3, r0, #1
417e: d1f3 bne.n 4168 <__sfputs_r+0xa>
4180: bdf8 pop {r3, r4, r5, r6, r7, pc}
...
00004184 <_vfiprintf_r>:
4184: b5f0 push {r4, r5, r6, r7, lr}
4186: b09f sub sp, #124 ; 0x7c
4188: 0006 movs r6, r0
418a: 000f movs r7, r1
418c: 0014 movs r4, r2
418e: 9305 str r3, [sp, #20]
4190: 2800 cmp r0, #0
4192: d004 beq.n 419e <_vfiprintf_r+0x1a>
4194: 6983 ldr r3, [r0, #24]
4196: 2b00 cmp r3, #0
4198: d101 bne.n 419e <_vfiprintf_r+0x1a>
419a: f7ff fe17 bl 3dcc <__sinit>
419e: 4b7f ldr r3, [pc, #508] ; (439c <_vfiprintf_r+0x218>)
41a0: 429f cmp r7, r3
41a2: d15c bne.n 425e <_vfiprintf_r+0xda>
41a4: 6877 ldr r7, [r6, #4]
41a6: 89bb ldrh r3, [r7, #12]
41a8: 071b lsls r3, r3, #28
41aa: d562 bpl.n 4272 <_vfiprintf_r+0xee>
41ac: 693b ldr r3, [r7, #16]
41ae: 2b00 cmp r3, #0
41b0: d05f beq.n 4272 <_vfiprintf_r+0xee>
41b2: 2300 movs r3, #0
41b4: ad06 add r5, sp, #24
41b6: 616b str r3, [r5, #20]
41b8: 3320 adds r3, #32
41ba: 766b strb r3, [r5, #25]
41bc: 3310 adds r3, #16
41be: 76ab strb r3, [r5, #26]
41c0: 9402 str r4, [sp, #8]
41c2: 9c02 ldr r4, [sp, #8]
41c4: 7823 ldrb r3, [r4, #0]
41c6: 2b00 cmp r3, #0
41c8: d15d bne.n 4286 <_vfiprintf_r+0x102>
41ca: 9b02 ldr r3, [sp, #8]
41cc: 1ae3 subs r3, r4, r3
41ce: 9304 str r3, [sp, #16]
41d0: d00d beq.n 41ee <_vfiprintf_r+0x6a>
41d2: 9b04 ldr r3, [sp, #16]
41d4: 9a02 ldr r2, [sp, #8]
41d6: 0039 movs r1, r7
41d8: 0030 movs r0, r6
41da: f7ff ffc0 bl 415e <__sfputs_r>
41de: 1c43 adds r3, r0, #1
41e0: d100 bne.n 41e4 <_vfiprintf_r+0x60>
41e2: e0cc b.n 437e <_vfiprintf_r+0x1fa>
41e4: 696a ldr r2, [r5, #20]
41e6: 9b04 ldr r3, [sp, #16]
41e8: 4694 mov ip, r2
41ea: 4463 add r3, ip
41ec: 616b str r3, [r5, #20]
41ee: 7823 ldrb r3, [r4, #0]
41f0: 2b00 cmp r3, #0
41f2: d100 bne.n 41f6 <_vfiprintf_r+0x72>
41f4: e0c3 b.n 437e <_vfiprintf_r+0x1fa>
41f6: 2201 movs r2, #1
41f8: 2300 movs r3, #0
41fa: 4252 negs r2, r2
41fc: 606a str r2, [r5, #4]
41fe: a902 add r1, sp, #8
4200: 3254 adds r2, #84 ; 0x54
4202: 1852 adds r2, r2, r1
4204: 3401 adds r4, #1
4206: 602b str r3, [r5, #0]
4208: 60eb str r3, [r5, #12]
420a: 60ab str r3, [r5, #8]
420c: 7013 strb r3, [r2, #0]
420e: 65ab str r3, [r5, #88] ; 0x58
4210: 7821 ldrb r1, [r4, #0]
4212: 2205 movs r2, #5
4214: 4862 ldr r0, [pc, #392] ; (43a0 <_vfiprintf_r+0x21c>)
4216: f000 fb15 bl 4844 <memchr>
421a: 1c63 adds r3, r4, #1
421c: 469c mov ip, r3
421e: 2800 cmp r0, #0
4220: d135 bne.n 428e <_vfiprintf_r+0x10a>
4222: 6829 ldr r1, [r5, #0]
4224: 06cb lsls r3, r1, #27
4226: d504 bpl.n 4232 <_vfiprintf_r+0xae>
4228: 2353 movs r3, #83 ; 0x53
422a: aa02 add r2, sp, #8
422c: 3020 adds r0, #32
422e: 189b adds r3, r3, r2
4230: 7018 strb r0, [r3, #0]
4232: 070b lsls r3, r1, #28
4234: d504 bpl.n 4240 <_vfiprintf_r+0xbc>
4236: 2353 movs r3, #83 ; 0x53
4238: 202b movs r0, #43 ; 0x2b
423a: aa02 add r2, sp, #8
423c: 189b adds r3, r3, r2
423e: 7018 strb r0, [r3, #0]
4240: 7823 ldrb r3, [r4, #0]
4242: 2b2a cmp r3, #42 ; 0x2a
4244: d02c beq.n 42a0 <_vfiprintf_r+0x11c>
4246: 2000 movs r0, #0
4248: 210a movs r1, #10
424a: 9b09 ldr r3, [sp, #36] ; 0x24
424c: 7822 ldrb r2, [r4, #0]
424e: 3a30 subs r2, #48 ; 0x30
4250: 2a09 cmp r2, #9
4252: d800 bhi.n 4256 <_vfiprintf_r+0xd2>
4254: e06b b.n 432e <_vfiprintf_r+0x1aa>
4256: 2800 cmp r0, #0
4258: d02a beq.n 42b0 <_vfiprintf_r+0x12c>
425a: 9309 str r3, [sp, #36] ; 0x24
425c: e028 b.n 42b0 <_vfiprintf_r+0x12c>
425e: 4b51 ldr r3, [pc, #324] ; (43a4 <_vfiprintf_r+0x220>)
4260: 429f cmp r7, r3
4262: d101 bne.n 4268 <_vfiprintf_r+0xe4>
4264: 68b7 ldr r7, [r6, #8]
4266: e79e b.n 41a6 <_vfiprintf_r+0x22>
4268: 4b4f ldr r3, [pc, #316] ; (43a8 <_vfiprintf_r+0x224>)
426a: 429f cmp r7, r3
426c: d19b bne.n 41a6 <_vfiprintf_r+0x22>
426e: 68f7 ldr r7, [r6, #12]
4270: e799 b.n 41a6 <_vfiprintf_r+0x22>
4272: 0039 movs r1, r7
4274: 0030 movs r0, r6
4276: f7ff fc3b bl 3af0 <__swsetup_r>
427a: 2800 cmp r0, #0
427c: d099 beq.n 41b2 <_vfiprintf_r+0x2e>
427e: 2001 movs r0, #1
4280: 4240 negs r0, r0
4282: b01f add sp, #124 ; 0x7c
4284: bdf0 pop {r4, r5, r6, r7, pc}
4286: 2b25 cmp r3, #37 ; 0x25
4288: d09f beq.n 41ca <_vfiprintf_r+0x46>
428a: 3401 adds r4, #1
428c: e79a b.n 41c4 <_vfiprintf_r+0x40>
428e: 4b44 ldr r3, [pc, #272] ; (43a0 <_vfiprintf_r+0x21c>)
4290: 6829 ldr r1, [r5, #0]
4292: 1ac0 subs r0, r0, r3
4294: 2301 movs r3, #1
4296: 4083 lsls r3, r0
4298: 430b orrs r3, r1
429a: 602b str r3, [r5, #0]
429c: 4664 mov r4, ip
429e: e7b7 b.n 4210 <_vfiprintf_r+0x8c>
42a0: 9b05 ldr r3, [sp, #20]
42a2: 1d18 adds r0, r3, #4
42a4: 681b ldr r3, [r3, #0]
42a6: 9005 str r0, [sp, #20]
42a8: 2b00 cmp r3, #0
42aa: db3a blt.n 4322 <_vfiprintf_r+0x19e>
42ac: 9309 str r3, [sp, #36] ; 0x24
42ae: 4664 mov r4, ip
42b0: 7823 ldrb r3, [r4, #0]
42b2: 2b2e cmp r3, #46 ; 0x2e
42b4: d10b bne.n 42ce <_vfiprintf_r+0x14a>
42b6: 7863 ldrb r3, [r4, #1]
42b8: 1c62 adds r2, r4, #1
42ba: 2b2a cmp r3, #42 ; 0x2a
42bc: d13f bne.n 433e <_vfiprintf_r+0x1ba>
42be: 9b05 ldr r3, [sp, #20]
42c0: 3402 adds r4, #2
42c2: 1d1a adds r2, r3, #4
42c4: 681b ldr r3, [r3, #0]
42c6: 9205 str r2, [sp, #20]
42c8: 2b00 cmp r3, #0
42ca: db35 blt.n 4338 <_vfiprintf_r+0x1b4>
42cc: 9307 str r3, [sp, #28]
42ce: 7821 ldrb r1, [r4, #0]
42d0: 2203 movs r2, #3
42d2: 4836 ldr r0, [pc, #216] ; (43ac <_vfiprintf_r+0x228>)
42d4: f000 fab6 bl 4844 <memchr>
42d8: 2800 cmp r0, #0
42da: d007 beq.n 42ec <_vfiprintf_r+0x168>
42dc: 4b33 ldr r3, [pc, #204] ; (43ac <_vfiprintf_r+0x228>)
42de: 682a ldr r2, [r5, #0]
42e0: 1ac0 subs r0, r0, r3
42e2: 2340 movs r3, #64 ; 0x40
42e4: 4083 lsls r3, r0
42e6: 4313 orrs r3, r2
42e8: 602b str r3, [r5, #0]
42ea: 3401 adds r4, #1
42ec: 7821 ldrb r1, [r4, #0]
42ee: 1c63 adds r3, r4, #1
42f0: 2206 movs r2, #6
42f2: 482f ldr r0, [pc, #188] ; (43b0 <_vfiprintf_r+0x22c>)
42f4: 9302 str r3, [sp, #8]
42f6: 7629 strb r1, [r5, #24]
42f8: f000 faa4 bl 4844 <memchr>
42fc: 2800 cmp r0, #0
42fe: d044 beq.n 438a <_vfiprintf_r+0x206>
4300: 4b2c ldr r3, [pc, #176] ; (43b4 <_vfiprintf_r+0x230>)
4302: 2b00 cmp r3, #0
4304: d12f bne.n 4366 <_vfiprintf_r+0x1e2>
4306: 6829 ldr r1, [r5, #0]
4308: 9b05 ldr r3, [sp, #20]
430a: 2207 movs r2, #7
430c: 05c9 lsls r1, r1, #23
430e: d528 bpl.n 4362 <_vfiprintf_r+0x1de>
4310: 189b adds r3, r3, r2
4312: 4393 bics r3, r2
4314: 3308 adds r3, #8
4316: 9305 str r3, [sp, #20]
4318: 696b ldr r3, [r5, #20]
431a: 9a03 ldr r2, [sp, #12]
431c: 189b adds r3, r3, r2
431e: 616b str r3, [r5, #20]
4320: e74f b.n 41c2 <_vfiprintf_r+0x3e>
4322: 425b negs r3, r3
4324: 60eb str r3, [r5, #12]
4326: 2302 movs r3, #2
4328: 430b orrs r3, r1
432a: 602b str r3, [r5, #0]
432c: e7bf b.n 42ae <_vfiprintf_r+0x12a>
432e: 434b muls r3, r1
4330: 3401 adds r4, #1
4332: 189b adds r3, r3, r2
4334: 2001 movs r0, #1
4336: e789 b.n 424c <_vfiprintf_r+0xc8>
4338: 2301 movs r3, #1
433a: 425b negs r3, r3
433c: e7c6 b.n 42cc <_vfiprintf_r+0x148>
433e: 2300 movs r3, #0
4340: 0014 movs r4, r2
4342: 200a movs r0, #10
4344: 001a movs r2, r3
4346: 606b str r3, [r5, #4]
4348: 7821 ldrb r1, [r4, #0]
434a: 3930 subs r1, #48 ; 0x30
434c: 2909 cmp r1, #9
434e: d903 bls.n 4358 <_vfiprintf_r+0x1d4>
4350: 2b00 cmp r3, #0
4352: d0bc beq.n 42ce <_vfiprintf_r+0x14a>
4354: 9207 str r2, [sp, #28]
4356: e7ba b.n 42ce <_vfiprintf_r+0x14a>
4358: 4342 muls r2, r0
435a: 3401 adds r4, #1
435c: 1852 adds r2, r2, r1
435e: 2301 movs r3, #1
4360: e7f2 b.n 4348 <_vfiprintf_r+0x1c4>
4362: 3307 adds r3, #7
4364: e7d5 b.n 4312 <_vfiprintf_r+0x18e>
4366: ab05 add r3, sp, #20
4368: 9300 str r3, [sp, #0]
436a: 003a movs r2, r7
436c: 4b12 ldr r3, [pc, #72] ; (43b8 <_vfiprintf_r+0x234>)
436e: 0029 movs r1, r5
4370: 0030 movs r0, r6
4372: e000 b.n 4376 <_vfiprintf_r+0x1f2>
4374: bf00 nop
4376: 9003 str r0, [sp, #12]
4378: 9b03 ldr r3, [sp, #12]
437a: 3301 adds r3, #1
437c: d1cc bne.n 4318 <_vfiprintf_r+0x194>
437e: 89bb ldrh r3, [r7, #12]
4380: 065b lsls r3, r3, #25
4382: d500 bpl.n 4386 <_vfiprintf_r+0x202>
4384: e77b b.n 427e <_vfiprintf_r+0xfa>
4386: 980b ldr r0, [sp, #44] ; 0x2c
4388: e77b b.n 4282 <_vfiprintf_r+0xfe>
438a: ab05 add r3, sp, #20
438c: 9300 str r3, [sp, #0]
438e: 003a movs r2, r7
4390: 4b09 ldr r3, [pc, #36] ; (43b8 <_vfiprintf_r+0x234>)
4392: 0029 movs r1, r5
4394: 0030 movs r0, r6
4396: f000 f87f bl 4498 <_printf_i>
439a: e7ec b.n 4376 <_vfiprintf_r+0x1f2>
439c: 000049ac .word 0x000049ac
43a0: 000049ec .word 0x000049ec
43a4: 000049cc .word 0x000049cc
43a8: 0000498c .word 0x0000498c
43ac: 000049f2 .word 0x000049f2
43b0: 000049f6 .word 0x000049f6
43b4: 00000000 .word 0x00000000
43b8: 0000415f .word 0x0000415f
000043bc <_printf_common>:
43bc: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
43be: 0015 movs r5, r2
43c0: 9301 str r3, [sp, #4]
43c2: 688a ldr r2, [r1, #8]
43c4: 690b ldr r3, [r1, #16]
43c6: 9000 str r0, [sp, #0]
43c8: 000c movs r4, r1
43ca: 4293 cmp r3, r2
43cc: da00 bge.n 43d0 <_printf_common+0x14>
43ce: 0013 movs r3, r2
43d0: 0022 movs r2, r4
43d2: 602b str r3, [r5, #0]
43d4: 3243 adds r2, #67 ; 0x43
43d6: 7812 ldrb r2, [r2, #0]
43d8: 2a00 cmp r2, #0
43da: d001 beq.n 43e0 <_printf_common+0x24>
43dc: 3301 adds r3, #1
43de: 602b str r3, [r5, #0]
43e0: 6823 ldr r3, [r4, #0]
43e2: 069b lsls r3, r3, #26
43e4: d502 bpl.n 43ec <_printf_common+0x30>
43e6: 682b ldr r3, [r5, #0]
43e8: 3302 adds r3, #2
43ea: 602b str r3, [r5, #0]
43ec: 2706 movs r7, #6
43ee: 6823 ldr r3, [r4, #0]
43f0: 401f ands r7, r3
43f2: d027 beq.n 4444 <_printf_common+0x88>
43f4: 0023 movs r3, r4
43f6: 3343 adds r3, #67 ; 0x43
43f8: 781b ldrb r3, [r3, #0]
43fa: 1e5a subs r2, r3, #1
43fc: 4193 sbcs r3, r2
43fe: 6822 ldr r2, [r4, #0]
4400: 0692 lsls r2, r2, #26
4402: d430 bmi.n 4466 <_printf_common+0xaa>
4404: 0022 movs r2, r4
4406: 9901 ldr r1, [sp, #4]
4408: 3243 adds r2, #67 ; 0x43
440a: 9800 ldr r0, [sp, #0]
440c: 9e08 ldr r6, [sp, #32]
440e: 47b0 blx r6
4410: 1c43 adds r3, r0, #1
4412: d025 beq.n 4460 <_printf_common+0xa4>
4414: 2306 movs r3, #6
4416: 6820 ldr r0, [r4, #0]
4418: 682a ldr r2, [r5, #0]
441a: 68e1 ldr r1, [r4, #12]
441c: 4003 ands r3, r0
441e: 2500 movs r5, #0
4420: 2b04 cmp r3, #4
4422: d103 bne.n 442c <_printf_common+0x70>
4424: 1a8d subs r5, r1, r2
4426: 43eb mvns r3, r5
4428: 17db asrs r3, r3, #31
442a: 401d ands r5, r3
442c: 68a3 ldr r3, [r4, #8]
442e: 6922 ldr r2, [r4, #16]
4430: 4293 cmp r3, r2
4432: dd01 ble.n 4438 <_printf_common+0x7c>
4434: 1a9b subs r3, r3, r2
4436: 18ed adds r5, r5, r3
4438: 2700 movs r7, #0
443a: 42bd cmp r5, r7
443c: d120 bne.n 4480 <_printf_common+0xc4>
443e: 2000 movs r0, #0
4440: e010 b.n 4464 <_printf_common+0xa8>
4442: 3701 adds r7, #1
4444: 68e3 ldr r3, [r4, #12]
4446: 682a ldr r2, [r5, #0]
4448: 1a9b subs r3, r3, r2
444a: 429f cmp r7, r3
444c: dad2 bge.n 43f4 <_printf_common+0x38>
444e: 0022 movs r2, r4
4450: 2301 movs r3, #1
4452: 3219 adds r2, #25
4454: 9901 ldr r1, [sp, #4]
4456: 9800 ldr r0, [sp, #0]
4458: 9e08 ldr r6, [sp, #32]
445a: 47b0 blx r6
445c: 1c43 adds r3, r0, #1
445e: d1f0 bne.n 4442 <_printf_common+0x86>
4460: 2001 movs r0, #1
4462: 4240 negs r0, r0
4464: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
4466: 2030 movs r0, #48 ; 0x30
4468: 18e1 adds r1, r4, r3
446a: 3143 adds r1, #67 ; 0x43
446c: 7008 strb r0, [r1, #0]
446e: 0021 movs r1, r4
4470: 1c5a adds r2, r3, #1
4472: 3145 adds r1, #69 ; 0x45
4474: 7809 ldrb r1, [r1, #0]
4476: 18a2 adds r2, r4, r2
4478: 3243 adds r2, #67 ; 0x43
447a: 3302 adds r3, #2
447c: 7011 strb r1, [r2, #0]
447e: e7c1 b.n 4404 <_printf_common+0x48>
4480: 0022 movs r2, r4
4482: 2301 movs r3, #1
4484: 321a adds r2, #26
4486: 9901 ldr r1, [sp, #4]
4488: 9800 ldr r0, [sp, #0]
448a: 9e08 ldr r6, [sp, #32]
448c: 47b0 blx r6
448e: 1c43 adds r3, r0, #1
4490: d0e6 beq.n 4460 <_printf_common+0xa4>
4492: 3701 adds r7, #1
4494: e7d1 b.n 443a <_printf_common+0x7e>
...
00004498 <_printf_i>:
4498: b5f0 push {r4, r5, r6, r7, lr}
449a: b08b sub sp, #44 ; 0x2c
449c: 9206 str r2, [sp, #24]
449e: 000a movs r2, r1
44a0: 3243 adds r2, #67 ; 0x43
44a2: 9307 str r3, [sp, #28]
44a4: 9005 str r0, [sp, #20]
44a6: 9204 str r2, [sp, #16]
44a8: 7e0a ldrb r2, [r1, #24]
44aa: 000c movs r4, r1
44ac: 9b10 ldr r3, [sp, #64] ; 0x40
44ae: 2a6e cmp r2, #110 ; 0x6e
44b0: d100 bne.n 44b4 <_printf_i+0x1c>
44b2: e08f b.n 45d4 <_printf_i+0x13c>
44b4: d817 bhi.n 44e6 <_printf_i+0x4e>
44b6: 2a63 cmp r2, #99 ; 0x63
44b8: d02c beq.n 4514 <_printf_i+0x7c>
44ba: d808 bhi.n 44ce <_printf_i+0x36>
44bc: 2a00 cmp r2, #0
44be: d100 bne.n 44c2 <_printf_i+0x2a>
44c0: e099 b.n 45f6 <_printf_i+0x15e>
44c2: 2a58 cmp r2, #88 ; 0x58
44c4: d054 beq.n 4570 <_printf_i+0xd8>
44c6: 0026 movs r6, r4
44c8: 3642 adds r6, #66 ; 0x42
44ca: 7032 strb r2, [r6, #0]
44cc: e029 b.n 4522 <_printf_i+0x8a>
44ce: 2a64 cmp r2, #100 ; 0x64
44d0: d001 beq.n 44d6 <_printf_i+0x3e>
44d2: 2a69 cmp r2, #105 ; 0x69
44d4: d1f7 bne.n 44c6 <_printf_i+0x2e>
44d6: 6821 ldr r1, [r4, #0]
44d8: 681a ldr r2, [r3, #0]
44da: 0608 lsls r0, r1, #24
44dc: d523 bpl.n 4526 <_printf_i+0x8e>
44de: 1d11 adds r1, r2, #4
44e0: 6019 str r1, [r3, #0]
44e2: 6815 ldr r5, [r2, #0]
44e4: e025 b.n 4532 <_printf_i+0x9a>
44e6: 2a73 cmp r2, #115 ; 0x73
44e8: d100 bne.n 44ec <_printf_i+0x54>
44ea: e088 b.n 45fe <_printf_i+0x166>
44ec: d808 bhi.n 4500 <_printf_i+0x68>
44ee: 2a6f cmp r2, #111 ; 0x6f
44f0: d029 beq.n 4546 <_printf_i+0xae>
44f2: 2a70 cmp r2, #112 ; 0x70
44f4: d1e7 bne.n 44c6 <_printf_i+0x2e>
44f6: 2220 movs r2, #32
44f8: 6809 ldr r1, [r1, #0]
44fa: 430a orrs r2, r1
44fc: 6022 str r2, [r4, #0]
44fe: e003 b.n 4508 <_printf_i+0x70>
4500: 2a75 cmp r2, #117 ; 0x75
4502: d020 beq.n 4546 <_printf_i+0xae>
4504: 2a78 cmp r2, #120 ; 0x78
4506: d1de bne.n 44c6 <_printf_i+0x2e>
4508: 0022 movs r2, r4
450a: 2178 movs r1, #120 ; 0x78
450c: 3245 adds r2, #69 ; 0x45
450e: 7011 strb r1, [r2, #0]
4510: 4a6c ldr r2, [pc, #432] ; (46c4 <_printf_i+0x22c>)
4512: e030 b.n 4576 <_printf_i+0xde>
4514: 000e movs r6, r1
4516: 681a ldr r2, [r3, #0]
4518: 3642 adds r6, #66 ; 0x42
451a: 1d11 adds r1, r2, #4
451c: 6019 str r1, [r3, #0]
451e: 6813 ldr r3, [r2, #0]
4520: 7033 strb r3, [r6, #0]
4522: 2301 movs r3, #1
4524: e079 b.n 461a <_printf_i+0x182>
4526: 0649 lsls r1, r1, #25
4528: d5d9 bpl.n 44de <_printf_i+0x46>
452a: 1d11 adds r1, r2, #4
452c: 6019 str r1, [r3, #0]
452e: 2300 movs r3, #0
4530: 5ed5 ldrsh r5, [r2, r3]
4532: 2d00 cmp r5, #0
4534: da03 bge.n 453e <_printf_i+0xa6>
4536: 232d movs r3, #45 ; 0x2d
4538: 9a04 ldr r2, [sp, #16]
453a: 426d negs r5, r5
453c: 7013 strb r3, [r2, #0]
453e: 4b62 ldr r3, [pc, #392] ; (46c8 <_printf_i+0x230>)
4540: 270a movs r7, #10
4542: 9303 str r3, [sp, #12]
4544: e02f b.n 45a6 <_printf_i+0x10e>
4546: 6820 ldr r0, [r4, #0]
4548: 6819 ldr r1, [r3, #0]
454a: 0605 lsls r5, r0, #24
454c: d503 bpl.n 4556 <_printf_i+0xbe>
454e: 1d08 adds r0, r1, #4
4550: 6018 str r0, [r3, #0]
4552: 680d ldr r5, [r1, #0]
4554: e005 b.n 4562 <_printf_i+0xca>
4556: 0640 lsls r0, r0, #25
4558: d5f9 bpl.n 454e <_printf_i+0xb6>
455a: 680d ldr r5, [r1, #0]
455c: 1d08 adds r0, r1, #4
455e: 6018 str r0, [r3, #0]
4560: b2ad uxth r5, r5
4562: 4b59 ldr r3, [pc, #356] ; (46c8 <_printf_i+0x230>)
4564: 2708 movs r7, #8
4566: 9303 str r3, [sp, #12]
4568: 2a6f cmp r2, #111 ; 0x6f
456a: d018 beq.n 459e <_printf_i+0x106>
456c: 270a movs r7, #10
456e: e016 b.n 459e <_printf_i+0x106>
4570: 3145 adds r1, #69 ; 0x45
4572: 700a strb r2, [r1, #0]
4574: 4a54 ldr r2, [pc, #336] ; (46c8 <_printf_i+0x230>)
4576: 9203 str r2, [sp, #12]
4578: 681a ldr r2, [r3, #0]
457a: 6821 ldr r1, [r4, #0]
457c: 1d10 adds r0, r2, #4
457e: 6018 str r0, [r3, #0]
4580: 6815 ldr r5, [r2, #0]
4582: 0608 lsls r0, r1, #24
4584: d522 bpl.n 45cc <_printf_i+0x134>
4586: 07cb lsls r3, r1, #31
4588: d502 bpl.n 4590 <_printf_i+0xf8>
458a: 2320 movs r3, #32
458c: 4319 orrs r1, r3
458e: 6021 str r1, [r4, #0]
4590: 2710 movs r7, #16
4592: 2d00 cmp r5, #0
4594: d103 bne.n 459e <_printf_i+0x106>
4596: 2320 movs r3, #32
4598: 6822 ldr r2, [r4, #0]
459a: 439a bics r2, r3
459c: 6022 str r2, [r4, #0]
459e: 0023 movs r3, r4
45a0: 2200 movs r2, #0
45a2: 3343 adds r3, #67 ; 0x43
45a4: 701a strb r2, [r3, #0]
45a6: 6863 ldr r3, [r4, #4]
45a8: 60a3 str r3, [r4, #8]
45aa: 2b00 cmp r3, #0
45ac: db5c blt.n 4668 <_printf_i+0x1d0>
45ae: 2204 movs r2, #4
45b0: 6821 ldr r1, [r4, #0]
45b2: 4391 bics r1, r2
45b4: 6021 str r1, [r4, #0]
45b6: 2d00 cmp r5, #0
45b8: d158 bne.n 466c <_printf_i+0x1d4>
45ba: 9e04 ldr r6, [sp, #16]
45bc: 2b00 cmp r3, #0
45be: d064 beq.n 468a <_printf_i+0x1f2>
45c0: 0026 movs r6, r4
45c2: 9b03 ldr r3, [sp, #12]
45c4: 3642 adds r6, #66 ; 0x42
45c6: 781b ldrb r3, [r3, #0]
45c8: 7033 strb r3, [r6, #0]
45ca: e05e b.n 468a <_printf_i+0x1f2>
45cc: 0648 lsls r0, r1, #25
45ce: d5da bpl.n 4586 <_printf_i+0xee>
45d0: b2ad uxth r5, r5
45d2: e7d8 b.n 4586 <_printf_i+0xee>
45d4: 6809 ldr r1, [r1, #0]
45d6: 681a ldr r2, [r3, #0]
45d8: 0608 lsls r0, r1, #24
45da: d505 bpl.n 45e8 <_printf_i+0x150>
45dc: 1d11 adds r1, r2, #4
45de: 6019 str r1, [r3, #0]
45e0: 6813 ldr r3, [r2, #0]
45e2: 6962 ldr r2, [r4, #20]
45e4: 601a str r2, [r3, #0]
45e6: e006 b.n 45f6 <_printf_i+0x15e>
45e8: 0649 lsls r1, r1, #25
45ea: d5f7 bpl.n 45dc <_printf_i+0x144>
45ec: 1d11 adds r1, r2, #4
45ee: 6019 str r1, [r3, #0]
45f0: 6813 ldr r3, [r2, #0]
45f2: 8aa2 ldrh r2, [r4, #20]
45f4: 801a strh r2, [r3, #0]
45f6: 2300 movs r3, #0
45f8: 9e04 ldr r6, [sp, #16]
45fa: 6123 str r3, [r4, #16]
45fc: e054 b.n 46a8 <_printf_i+0x210>
45fe: 681a ldr r2, [r3, #0]
4600: 1d11 adds r1, r2, #4
4602: 6019 str r1, [r3, #0]
4604: 6816 ldr r6, [r2, #0]
4606: 2100 movs r1, #0
4608: 6862 ldr r2, [r4, #4]
460a: 0030 movs r0, r6
460c: f000 f91a bl 4844 <memchr>
4610: 2800 cmp r0, #0
4612: d001 beq.n 4618 <_printf_i+0x180>
4614: 1b80 subs r0, r0, r6
4616: 6060 str r0, [r4, #4]
4618: 6863 ldr r3, [r4, #4]
461a: 6123 str r3, [r4, #16]
461c: 2300 movs r3, #0
461e: 9a04 ldr r2, [sp, #16]
4620: 7013 strb r3, [r2, #0]
4622: e041 b.n 46a8 <_printf_i+0x210>
4624: 6923 ldr r3, [r4, #16]
4626: 0032 movs r2, r6
4628: 9906 ldr r1, [sp, #24]
462a: 9805 ldr r0, [sp, #20]
462c: 9d07 ldr r5, [sp, #28]
462e: 47a8 blx r5
4630: 1c43 adds r3, r0, #1
4632: d043 beq.n 46bc <_printf_i+0x224>
4634: 6823 ldr r3, [r4, #0]
4636: 2500 movs r5, #0
4638: 079b lsls r3, r3, #30
463a: d40f bmi.n 465c <_printf_i+0x1c4>
463c: 9b09 ldr r3, [sp, #36] ; 0x24
463e: 68e0 ldr r0, [r4, #12]
4640: 4298 cmp r0, r3
4642: da3d bge.n 46c0 <_printf_i+0x228>
4644: 0018 movs r0, r3
4646: e03b b.n 46c0 <_printf_i+0x228>
4648: 0022 movs r2, r4
464a: 2301 movs r3, #1
464c: 3219 adds r2, #25
464e: 9906 ldr r1, [sp, #24]
4650: 9805 ldr r0, [sp, #20]
4652: 9e07 ldr r6, [sp, #28]
4654: 47b0 blx r6
4656: 1c43 adds r3, r0, #1
4658: d030 beq.n 46bc <_printf_i+0x224>
465a: 3501 adds r5, #1
465c: 68e3 ldr r3, [r4, #12]
465e: 9a09 ldr r2, [sp, #36] ; 0x24
4660: 1a9b subs r3, r3, r2
4662: 429d cmp r5, r3
4664: dbf0 blt.n 4648 <_printf_i+0x1b0>
4666: e7e9 b.n 463c <_printf_i+0x1a4>
4668: 2d00 cmp r5, #0
466a: d0a9 beq.n 45c0 <_printf_i+0x128>
466c: 9e04 ldr r6, [sp, #16]
466e: 0028 movs r0, r5
4670: 0039 movs r1, r7
4672: f7fd fbed bl 1e50 <__aeabi_uidivmod>
4676: 9b03 ldr r3, [sp, #12]
4678: 3e01 subs r6, #1
467a: 5c5b ldrb r3, [r3, r1]
467c: 0028 movs r0, r5
467e: 7033 strb r3, [r6, #0]
4680: 0039 movs r1, r7
4682: f7fd fb5f bl 1d44 <__udivsi3>
4686: 1e05 subs r5, r0, #0
4688: d1f1 bne.n 466e <_printf_i+0x1d6>
468a: 2f08 cmp r7, #8
468c: d109 bne.n 46a2 <_printf_i+0x20a>
468e: 6823 ldr r3, [r4, #0]
4690: 07db lsls r3, r3, #31
4692: d506 bpl.n 46a2 <_printf_i+0x20a>
4694: 6863 ldr r3, [r4, #4]
4696: 6922 ldr r2, [r4, #16]
4698: 4293 cmp r3, r2
469a: dc02 bgt.n 46a2 <_printf_i+0x20a>
469c: 2330 movs r3, #48 ; 0x30
469e: 3e01 subs r6, #1
46a0: 7033 strb r3, [r6, #0]
46a2: 9b04 ldr r3, [sp, #16]
46a4: 1b9b subs r3, r3, r6
46a6: 6123 str r3, [r4, #16]
46a8: 9b07 ldr r3, [sp, #28]
46aa: aa09 add r2, sp, #36 ; 0x24
46ac: 9300 str r3, [sp, #0]
46ae: 0021 movs r1, r4
46b0: 9b06 ldr r3, [sp, #24]
46b2: 9805 ldr r0, [sp, #20]
46b4: f7ff fe82 bl 43bc <_printf_common>
46b8: 1c43 adds r3, r0, #1
46ba: d1b3 bne.n 4624 <_printf_i+0x18c>
46bc: 2001 movs r0, #1
46be: 4240 negs r0, r0
46c0: b00b add sp, #44 ; 0x2c
46c2: bdf0 pop {r4, r5, r6, r7, pc}
46c4: 00004a0e .word 0x00004a0e
46c8: 000049fd .word 0x000049fd
000046cc <_sbrk_r>:
46cc: 2300 movs r3, #0
46ce: b570 push {r4, r5, r6, lr}
46d0: 4c06 ldr r4, [pc, #24] ; (46ec <_sbrk_r+0x20>)
46d2: 0005 movs r5, r0
46d4: 0008 movs r0, r1
46d6: 6023 str r3, [r4, #0]
46d8: f7fd fae8 bl 1cac <_sbrk>
46dc: 1c43 adds r3, r0, #1
46de: d103 bne.n 46e8 <_sbrk_r+0x1c>
46e0: 6823 ldr r3, [r4, #0]
46e2: 2b00 cmp r3, #0
46e4: d000 beq.n 46e8 <_sbrk_r+0x1c>
46e6: 602b str r3, [r5, #0]
46e8: bd70 pop {r4, r5, r6, pc}
46ea: 46c0 nop ; (mov r8, r8)
46ec: 2000025c .word 0x2000025c
000046f0 <__sread>:
46f0: b570 push {r4, r5, r6, lr}
46f2: 000c movs r4, r1
46f4: 250e movs r5, #14
46f6: 5f49 ldrsh r1, [r1, r5]
46f8: f000 f8b2 bl 4860 <_read_r>
46fc: 2800 cmp r0, #0
46fe: db03 blt.n 4708 <__sread+0x18>
4700: 6d63 ldr r3, [r4, #84] ; 0x54
4702: 181b adds r3, r3, r0
4704: 6563 str r3, [r4, #84] ; 0x54
4706: bd70 pop {r4, r5, r6, pc}
4708: 89a3 ldrh r3, [r4, #12]
470a: 4a02 ldr r2, [pc, #8] ; (4714 <__sread+0x24>)
470c: 4013 ands r3, r2
470e: 81a3 strh r3, [r4, #12]
4710: e7f9 b.n 4706 <__sread+0x16>
4712: 46c0 nop ; (mov r8, r8)
4714: ffffefff .word 0xffffefff
00004718 <__swrite>:
4718: b5f8 push {r3, r4, r5, r6, r7, lr}
471a: 001f movs r7, r3
471c: 898b ldrh r3, [r1, #12]
471e: 0005 movs r5, r0
4720: 000c movs r4, r1
4722: 0016 movs r6, r2
4724: 05db lsls r3, r3, #23
4726: d505 bpl.n 4734 <__swrite+0x1c>
4728: 230e movs r3, #14
472a: 5ec9 ldrsh r1, [r1, r3]
472c: 2200 movs r2, #0
472e: 2302 movs r3, #2
4730: f000 f874 bl 481c <_lseek_r>
4734: 89a3 ldrh r3, [r4, #12]
4736: 4a05 ldr r2, [pc, #20] ; (474c <__swrite+0x34>)
4738: 0028 movs r0, r5
473a: 4013 ands r3, r2
473c: 81a3 strh r3, [r4, #12]
473e: 0032 movs r2, r6
4740: 230e movs r3, #14
4742: 5ee1 ldrsh r1, [r4, r3]
4744: 003b movs r3, r7
4746: f000 f81f bl 4788 <_write_r>
474a: bdf8 pop {r3, r4, r5, r6, r7, pc}
474c: ffffefff .word 0xffffefff
00004750 <__sseek>:
4750: b570 push {r4, r5, r6, lr}
4752: 000c movs r4, r1
4754: 250e movs r5, #14
4756: 5f49 ldrsh r1, [r1, r5]
4758: f000 f860 bl 481c <_lseek_r>
475c: 89a3 ldrh r3, [r4, #12]
475e: 1c42 adds r2, r0, #1
4760: d103 bne.n 476a <__sseek+0x1a>
4762: 4a05 ldr r2, [pc, #20] ; (4778 <__sseek+0x28>)
4764: 4013 ands r3, r2
4766: 81a3 strh r3, [r4, #12]
4768: bd70 pop {r4, r5, r6, pc}
476a: 2280 movs r2, #128 ; 0x80
476c: 0152 lsls r2, r2, #5
476e: 4313 orrs r3, r2
4770: 81a3 strh r3, [r4, #12]
4772: 6560 str r0, [r4, #84] ; 0x54
4774: e7f8 b.n 4768 <__sseek+0x18>
4776: 46c0 nop ; (mov r8, r8)
4778: ffffefff .word 0xffffefff
0000477c <__sclose>:
477c: b510 push {r4, lr}
477e: 230e movs r3, #14
4780: 5ec9 ldrsh r1, [r1, r3]
4782: f000 f815 bl 47b0 <_close_r>
4786: bd10 pop {r4, pc}
00004788 <_write_r>:
4788: b570 push {r4, r5, r6, lr}
478a: 0005 movs r5, r0
478c: 0008 movs r0, r1
478e: 0011 movs r1, r2
4790: 2200 movs r2, #0
4792: 4c06 ldr r4, [pc, #24] ; (47ac <_write_r+0x24>)
4794: 6022 str r2, [r4, #0]
4796: 001a movs r2, r3
4798: f7fc f89a bl 8d0 <_write>
479c: 1c43 adds r3, r0, #1
479e: d103 bne.n 47a8 <_write_r+0x20>
47a0: 6823 ldr r3, [r4, #0]
47a2: 2b00 cmp r3, #0
47a4: d000 beq.n 47a8 <_write_r+0x20>
47a6: 602b str r3, [r5, #0]
47a8: bd70 pop {r4, r5, r6, pc}
47aa: 46c0 nop ; (mov r8, r8)
47ac: 2000025c .word 0x2000025c
000047b0 <_close_r>:
47b0: 2300 movs r3, #0
47b2: b570 push {r4, r5, r6, lr}
47b4: 4c06 ldr r4, [pc, #24] ; (47d0 <_close_r+0x20>)
47b6: 0005 movs r5, r0
47b8: 0008 movs r0, r1
47ba: 6023 str r3, [r4, #0]
47bc: f7fd fa88 bl 1cd0 <_close>
47c0: 1c43 adds r3, r0, #1
47c2: d103 bne.n 47cc <_close_r+0x1c>
47c4: 6823 ldr r3, [r4, #0]
47c6: 2b00 cmp r3, #0
47c8: d000 beq.n 47cc <_close_r+0x1c>
47ca: 602b str r3, [r5, #0]
47cc: bd70 pop {r4, r5, r6, pc}
47ce: 46c0 nop ; (mov r8, r8)
47d0: 2000025c .word 0x2000025c
000047d4 <_fstat_r>:
47d4: 2300 movs r3, #0
47d6: b570 push {r4, r5, r6, lr}
47d8: 4c06 ldr r4, [pc, #24] ; (47f4 <_fstat_r+0x20>)
47da: 0005 movs r5, r0
47dc: 0008 movs r0, r1
47de: 0011 movs r1, r2
47e0: 6023 str r3, [r4, #0]
47e2: f7fd fa78 bl 1cd6 <_fstat>
47e6: 1c43 adds r3, r0, #1
47e8: d103 bne.n 47f2 <_fstat_r+0x1e>
47ea: 6823 ldr r3, [r4, #0]
47ec: 2b00 cmp r3, #0
47ee: d000 beq.n 47f2 <_fstat_r+0x1e>
47f0: 602b str r3, [r5, #0]
47f2: bd70 pop {r4, r5, r6, pc}
47f4: 2000025c .word 0x2000025c
000047f8 <_isatty_r>:
47f8: 2300 movs r3, #0
47fa: b570 push {r4, r5, r6, lr}
47fc: 4c06 ldr r4, [pc, #24] ; (4818 <_isatty_r+0x20>)
47fe: 0005 movs r5, r0
4800: 0008 movs r0, r1
4802: 6023 str r3, [r4, #0]
4804: f7fd fa6c bl 1ce0 <_isatty>
4808: 1c43 adds r3, r0, #1
480a: d103 bne.n 4814 <_isatty_r+0x1c>
480c: 6823 ldr r3, [r4, #0]
480e: 2b00 cmp r3, #0
4810: d000 beq.n 4814 <_isatty_r+0x1c>
4812: 602b str r3, [r5, #0]
4814: bd70 pop {r4, r5, r6, pc}
4816: 46c0 nop ; (mov r8, r8)
4818: 2000025c .word 0x2000025c
0000481c <_lseek_r>:
481c: b570 push {r4, r5, r6, lr}
481e: 0005 movs r5, r0
4820: 0008 movs r0, r1
4822: 0011 movs r1, r2
4824: 2200 movs r2, #0
4826: 4c06 ldr r4, [pc, #24] ; (4840 <_lseek_r+0x24>)
4828: 6022 str r2, [r4, #0]
482a: 001a movs r2, r3
482c: f7fd fa5a bl 1ce4 <_lseek>
4830: 1c43 adds r3, r0, #1
4832: d103 bne.n 483c <_lseek_r+0x20>
4834: 6823 ldr r3, [r4, #0]
4836: 2b00 cmp r3, #0
4838: d000 beq.n 483c <_lseek_r+0x20>
483a: 602b str r3, [r5, #0]
483c: bd70 pop {r4, r5, r6, pc}
483e: 46c0 nop ; (mov r8, r8)
4840: 2000025c .word 0x2000025c
00004844 <memchr>:
4844: b2c9 uxtb r1, r1
4846: 1882 adds r2, r0, r2
4848: 4290 cmp r0, r2
484a: d101 bne.n 4850 <memchr+0xc>
484c: 2000 movs r0, #0
484e: 4770 bx lr
4850: 7803 ldrb r3, [r0, #0]
4852: 428b cmp r3, r1
4854: d0fb beq.n 484e <memchr+0xa>
4856: 3001 adds r0, #1
4858: e7f6 b.n 4848 <memchr+0x4>
0000485a <__malloc_lock>:
485a: 4770 bx lr
0000485c <__malloc_unlock>:
485c: 4770 bx lr
...
00004860 <_read_r>:
4860: b570 push {r4, r5, r6, lr}
4862: 0005 movs r5, r0
4864: 0008 movs r0, r1
4866: 0011 movs r1, r2
4868: 2200 movs r2, #0
486a: 4c06 ldr r4, [pc, #24] ; (4884 <_read_r+0x24>)
486c: 6022 str r2, [r4, #0]
486e: 001a movs r2, r3
4870: f7fc f80c bl 88c <_read>
4874: 1c43 adds r3, r0, #1
4876: d103 bne.n 4880 <_read_r+0x20>
4878: 6823 ldr r3, [r4, #0]
487a: 2b00 cmp r3, #0
487c: d000 beq.n 4880 <_read_r+0x20>
487e: 602b str r3, [r5, #0]
4880: bd70 pop {r4, r5, r6, pc}
4882: 46c0 nop ; (mov r8, r8)
4884: 2000025c .word 0x2000025c
4888: 6c6c6548 .word 0x6c6c6548
488c: 6f77206f .word 0x6f77206f
4890: 00646c72 .word 0x00646c72
4894: 42000800 .word 0x42000800
4898: 42000c00 .word 0x42000c00
489c: 42001000 .word 0x42001000
48a0: 42001400 .word 0x42001400
48a4: 42001800 .word 0x42001800
48a8: 42001c00 .word 0x42001c00
48ac: 00001636 .word 0x00001636
48b0: 00001632 .word 0x00001632
48b4: 00001632 .word 0x00001632
48b8: 00001698 .word 0x00001698
48bc: 00001698 .word 0x00001698
48c0: 0000164a .word 0x0000164a
48c4: 0000163c .word 0x0000163c
48c8: 00001650 .word 0x00001650
48cc: 00001686 .word 0x00001686
48d0: 00001720 .word 0x00001720
48d4: 00001700 .word 0x00001700
48d8: 00001700 .word 0x00001700
48dc: 0000178c .word 0x0000178c
48e0: 00001712 .word 0x00001712
48e4: 0000172e .word 0x0000172e
48e8: 00001704 .word 0x00001704
48ec: 0000173c .word 0x0000173c
48f0: 0000177c .word 0x0000177c
48f4: 20433249 .word 0x20433249
48f8: 72646461 .word 0x72646461
48fc: 20737365 .word 0x20737365
4900: 30257830 .word 0x30257830
4904: 000a7832 .word 0x000a7832
4908: 000026c8 .word 0x000026c8
490c: 000026aa .word 0x000026aa
4910: 00002664 .word 0x00002664
4914: 00002582 .word 0x00002582
4918: 00002664 .word 0x00002664
491c: 0000269c .word 0x0000269c
4920: 00002664 .word 0x00002664
4924: 00002582 .word 0x00002582
4928: 000026aa .word 0x000026aa
492c: 000026aa .word 0x000026aa
4930: 0000269c .word 0x0000269c
4934: 00002582 .word 0x00002582
4938: 0000257a .word 0x0000257a
493c: 0000257a .word 0x0000257a
4940: 0000257a .word 0x0000257a
4944: 000028e0 .word 0x000028e0
4948: 00002d28 .word 0x00002d28
494c: 00002be8 .word 0x00002be8
4950: 00002be8 .word 0x00002be8
4954: 00002be4 .word 0x00002be4
4958: 00002d00 .word 0x00002d00
495c: 00002d00 .word 0x00002d00
4960: 00002cf2 .word 0x00002cf2
4964: 00002be4 .word 0x00002be4
4968: 00002d00 .word 0x00002d00
496c: 00002cf2 .word 0x00002cf2
4970: 00002d00 .word 0x00002d00
4974: 00002be4 .word 0x00002be4
4978: 00002d08 .word 0x00002d08
497c: 00002d08 .word 0x00002d08
4980: 00002d08 .word 0x00002d08
4984: 00002f0c .word 0x00002f0c
00004988 <_global_impure_ptr>:
4988: 20000008 ...
0000498c <__sf_fake_stderr>:
...
000049ac <__sf_fake_stdin>:
...
000049cc <__sf_fake_stdout>:
...
49ec: 2b302d23 6c680020 6665004c 47464567 #-0+ .hlL.efgEFG
49fc: 32313000 36353433 41393837 45444342 .0123456789ABCDE
4a0c: 31300046 35343332 39383736 64636261 F.0123456789abcd
4a1c: 00006665 ef..
00004a20 <_init>:
4a20: b5f8 push {r3, r4, r5, r6, r7, lr}
4a22: 46c0 nop ; (mov r8, r8)
4a24: bcf8 pop {r3, r4, r5, r6, r7}
4a26: bc08 pop {r3}
4a28: 469e mov lr, r3
4a2a: 4770 bx lr
00004a2c <__init_array_start>:
4a2c: 000000dd .word 0x000000dd
00004a30 <_fini>:
4a30: b5f8 push {r3, r4, r5, r6, r7, lr}
4a32: 46c0 nop ; (mov r8, r8)
4a34: bcf8 pop {r3, r4, r5, r6, r7}
4a36: bc08 pop {r3}
4a38: 469e mov lr, r3
4a3a: 4770 bx lr
00004a3c <__fini_array_start>:
4a3c: 000000b5 .word 0x000000b5