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.

3283 lines
120 KiB
Plaintext

spi_sd_mmc_lib.elf: file format elf32-littlearm
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00001814 00000000 00000000 00010000 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .relocate 00000064 20000000 00001814 00020000 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bkupram 00000000 47000000 47000000 00020064 2**0
CONTENTS
3 .qspi 00000000 04000000 04000000 00020064 2**0
CONTENTS
4 .bss 00000074 20000064 00001878 00020064 2**2
ALLOC
5 .stack 00010000 200000d8 000018ec 00020064 2**0
ALLOC
6 .ARM.attributes 0000002e 00000000 00000000 00020064 2**0
CONTENTS, READONLY
7 .comment 0000001e 00000000 00000000 00020092 2**0
CONTENTS, READONLY
8 .debug_info 00017882 00000000 00000000 000200b0 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
9 .debug_abbrev 00002575 00000000 00000000 00037932 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
10 .debug_loc 00008376 00000000 00000000 00039ea7 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
11 .debug_aranges 00000950 00000000 00000000 0004221d 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
12 .debug_ranges 00001408 00000000 00000000 00042b6d 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
13 .debug_macro 00032644 00000000 00000000 00043f75 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
14 .debug_line 00011073 00000000 00000000 000765b9 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
15 .debug_str 00118e12 00000000 00000000 0008762c 2**0
CONTENTS, READONLY, DEBUGGING, OCTETS
16 .debug_frame 00001d94 00000000 00000000 001a0440 2**2
CONTENTS, READONLY, DEBUGGING, OCTETS
Disassembly of section .text:
00000000 <exception_table>:
* \brief Delay loop to delay n number of cycles
*/
void _delay_cycles(void *const hw, uint32_t cycles)
{
(void)hw;
uint8_t n = cycles >> 24;
0: d8 00 01 20 75 06 00 00 71 06 00 00 71 06 00 00 ... u...q...q...
uint32_t buf = cycles;
while (n--) {
10: 71 06 00 00 71 06 00 00 71 06 00 00 00 00 00 00 q...q...q.......
...
SysTick->LOAD = 0xFFFFFF;
2c: 71 06 00 00 71 06 00 00 00 00 00 00 71 06 00 00 q...q.......q...
3c: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
4c: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
5c: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
6c: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
7c: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
8c: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
9c: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
ac: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
bc: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
cc: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
dc: 71 06 00 00 71 06 00 00 71 06 00 00 00 00 00 00 q...q...q.......
...
f4: 39 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 9...q...q...q...
104: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
114: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
124: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
134: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
144: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
154: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
164: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
174: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
184: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
194: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
1a4: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
1b4: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
1c4: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
1d4: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
1e4: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
1f4: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
204: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
214: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
224: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
234: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
244: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
254: 71 06 00 00 71 06 00 00 71 06 00 00 71 06 00 00 q...q...q...q...
00000264 <__do_global_dtors_aux>:
264: b510 push {r4, lr}
266: 4c05 ldr r4, [pc, #20] ; (27c <__do_global_dtors_aux+0x18>)
268: 7823 ldrb r3, [r4, #0]
26a: b933 cbnz r3, 27a <__do_global_dtors_aux+0x16>
26c: 4b04 ldr r3, [pc, #16] ; (280 <__do_global_dtors_aux+0x1c>)
26e: b113 cbz r3, 276 <__do_global_dtors_aux+0x12>
270: 4804 ldr r0, [pc, #16] ; (284 <__do_global_dtors_aux+0x20>)
272: f3af 8000 nop.w
276: 2301 movs r3, #1
278: 7023 strb r3, [r4, #0]
27a: bd10 pop {r4, pc}
27c: 20000064 .word 0x20000064
280: 00000000 .word 0x00000000
284: 00001814 .word 0x00001814
00000288 <frame_dummy>:
288: b508 push {r3, lr}
28a: 4b03 ldr r3, [pc, #12] ; (298 <frame_dummy+0x10>)
28c: b11b cbz r3, 296 <frame_dummy+0xe>
28e: 4903 ldr r1, [pc, #12] ; (29c <frame_dummy+0x14>)
290: 4803 ldr r0, [pc, #12] ; (2a0 <frame_dummy+0x18>)
292: f3af 8000 nop.w
296: bd08 pop {r3, pc}
298: 00000000 .word 0x00000000
29c: 20000068 .word 0x20000068
2a0: 00001814 .word 0x00001814
000002a4 <io_write>:
/**
* \brief I/O write interface
*/
int32_t io_write(struct io_descriptor *const io_descr, const uint8_t *const buf, const uint16_t length)
{
2a4: b570 push {r4, r5, r6, lr}
2a6: 460d mov r5, r1
2a8: 4616 mov r6, r2
ASSERT(io_descr && buf);
2aa: 4604 mov r4, r0
2ac: b110 cbz r0, 2b4 <io_write+0x10>
2ae: 1e08 subs r0, r1, #0
2b0: bf18 it ne
2b2: 2001 movne r0, #1
2b4: 4905 ldr r1, [pc, #20] ; (2cc <io_write+0x28>)
2b6: 4b06 ldr r3, [pc, #24] ; (2d0 <io_write+0x2c>)
2b8: 2234 movs r2, #52 ; 0x34
2ba: 4798 blx r3
return io_descr->write(io_descr, buf, length);
2bc: 6823 ldr r3, [r4, #0]
2be: 4632 mov r2, r6
2c0: 4629 mov r1, r5
2c2: 4620 mov r0, r4
}
2c4: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
return io_descr->write(io_descr, buf, length);
2c8: 4718 bx r3
2ca: bf00 nop
2cc: 00001674 .word 0x00001674
2d0: 00000485 .word 0x00000485
000002d4 <_delay_init>:
2d4: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000
2d8: f06f 427f mvn.w r2, #4278190080 ; 0xff000000
2dc: 615a str r2, [r3, #20]
2de: 2205 movs r2, #5
2e0: 611a str r2, [r3, #16]
2e2: 4770 bx lr
000002e4 <_sbrk>:
extern caddr_t _sbrk(int incr)
{
static unsigned char *heap = NULL;
unsigned char * prev_heap;
if (heap == NULL) {
2e4: 4a04 ldr r2, [pc, #16] ; (2f8 <_sbrk+0x14>)
2e6: 6811 ldr r1, [r2, #0]
{
2e8: 4603 mov r3, r0
if (heap == NULL) {
2ea: b909 cbnz r1, 2f0 <_sbrk+0xc>
heap = (unsigned char *)&_end;
2ec: 4903 ldr r1, [pc, #12] ; (2fc <_sbrk+0x18>)
2ee: 6011 str r1, [r2, #0]
}
prev_heap = heap;
2f0: 6810 ldr r0, [r2, #0]
heap += incr;
2f2: 4403 add r3, r0
2f4: 6013 str r3, [r2, #0]
return (caddr_t)prev_heap;
}
2f6: 4770 bx lr
2f8: 20000080 .word 0x20000080
2fc: 200100d8 .word 0x200100d8
00000300 <spi_m_sync_init>:
ASSERT(spi);
spi->func = (struct _spi_m_sync_hpl_interface *)func;
}
int32_t spi_m_sync_init(struct spi_m_sync_descriptor *spi, void *const hw)
{
300: b538 push {r3, r4, r5, lr}
302: 460d mov r5, r1
int32_t rc = 0;
ASSERT(spi && hw);
304: 4604 mov r4, r0
306: b110 cbz r0, 30e <spi_m_sync_init+0xe>
308: 1e08 subs r0, r1, #0
30a: bf18 it ne
30c: 2001 movne r0, #1
30e: 490a ldr r1, [pc, #40] ; (338 <spi_m_sync_init+0x38>)
310: 4b0a ldr r3, [pc, #40] ; (33c <spi_m_sync_init+0x3c>)
312: 2240 movs r2, #64 ; 0x40
314: 4798 blx r3
spi->dev.prvt = (void *)hw;
316: 4620 mov r0, r4
rc = _spi_m_sync_init(&spi->dev, hw);
318: 4b09 ldr r3, [pc, #36] ; (340 <spi_m_sync_init+0x40>)
spi->dev.prvt = (void *)hw;
31a: f840 5f04 str.w r5, [r0, #4]!
rc = _spi_m_sync_init(&spi->dev, hw);
31e: 4629 mov r1, r5
320: 4798 blx r3
if (rc < 0) {
322: 2800 cmp r0, #0
324: db07 blt.n 336 <spi_m_sync_init+0x36>
return rc;
}
spi->flags = SPI_DEACTIVATE_NEXT;
326: f44f 4300 mov.w r3, #32768 ; 0x8000
32a: 82a3 strh r3, [r4, #20]
spi->io.read = _spi_m_sync_io_read;
32c: 4b05 ldr r3, [pc, #20] ; (344 <spi_m_sync_init+0x44>)
32e: 6123 str r3, [r4, #16]
spi->io.write = _spi_m_sync_io_write;
330: 4b05 ldr r3, [pc, #20] ; (348 <spi_m_sync_init+0x48>)
332: 60e3 str r3, [r4, #12]
return ERR_NONE;
334: 2000 movs r0, #0
}
336: bd38 pop {r3, r4, r5, pc}
338: 00001688 .word 0x00001688
33c: 00000485 .word 0x00000485
340: 00000a85 .word 0x00000a85
344: 000003c1 .word 0x000003c1
348: 00000389 .word 0x00000389
0000034c <spi_m_sync_transfer>:
return spi_m_sync_transfer(spi, &xfer);
}
int32_t spi_m_sync_transfer(struct spi_m_sync_descriptor *spi, const struct spi_xfer *p_xfer)
{
34c: b530 push {r4, r5, lr}
34e: 460c mov r4, r1
350: b085 sub sp, #20
struct spi_msg msg;
ASSERT(spi && p_xfer);
352: 4605 mov r5, r0
354: b110 cbz r0, 35c <spi_m_sync_transfer+0x10>
356: 1e08 subs r0, r1, #0
358: bf18 it ne
35a: 2001 movne r0, #1
35c: 22b3 movs r2, #179 ; 0xb3
35e: 4907 ldr r1, [pc, #28] ; (37c <spi_m_sync_transfer+0x30>)
360: 4b07 ldr r3, [pc, #28] ; (380 <spi_m_sync_transfer+0x34>)
362: 4798 blx r3
msg.txbuf = p_xfer->txbuf;
364: 6823 ldr r3, [r4, #0]
366: 9301 str r3, [sp, #4]
msg.rxbuf = p_xfer->rxbuf;
368: 6863 ldr r3, [r4, #4]
36a: 9302 str r3, [sp, #8]
msg.size = p_xfer->size;
36c: 68a3 ldr r3, [r4, #8]
36e: 9303 str r3, [sp, #12]
return _spi_m_sync_trans(&spi->dev, &msg);
370: a901 add r1, sp, #4
372: 4b04 ldr r3, [pc, #16] ; (384 <spi_m_sync_transfer+0x38>)
374: 1d28 adds r0, r5, #4
376: 4798 blx r3
}
378: b005 add sp, #20
37a: bd30 pop {r4, r5, pc}
37c: 00001688 .word 0x00001688
380: 00000485 .word 0x00000485
384: 00000bb9 .word 0x00000bb9
00000388 <_spi_m_sync_io_write>:
{
388: b57f push {r0, r1, r2, r3, r4, r5, r6, lr}
ASSERT(io);
38a: 4604 mov r4, r0
38c: 3800 subs r0, #0
38e: bf18 it ne
390: 2001 movne r0, #1
{
392: 460e mov r6, r1
394: 4615 mov r5, r2
ASSERT(io);
396: 4907 ldr r1, [pc, #28] ; (3b4 <_spi_m_sync_io_write+0x2c>)
398: 4b07 ldr r3, [pc, #28] ; (3b8 <_spi_m_sync_io_write+0x30>)
39a: 22a3 movs r2, #163 ; 0xa3
39c: 4798 blx r3
xfer.rxbuf = 0;
39e: 2300 movs r3, #0
xfer.txbuf = (uint8_t *)buf;
3a0: e9cd 6301 strd r6, r3, [sp, #4]
return spi_m_sync_transfer(spi, &xfer);
3a4: a901 add r1, sp, #4
3a6: 4b05 ldr r3, [pc, #20] ; (3bc <_spi_m_sync_io_write+0x34>)
xfer.size = length;
3a8: 9503 str r5, [sp, #12]
return spi_m_sync_transfer(spi, &xfer);
3aa: f1a4 000c sub.w r0, r4, #12
3ae: 4798 blx r3
}
3b0: b004 add sp, #16
3b2: bd70 pop {r4, r5, r6, pc}
3b4: 00001688 .word 0x00001688
3b8: 00000485 .word 0x00000485
3bc: 0000034d .word 0x0000034d
000003c0 <_spi_m_sync_io_read>:
{
3c0: b57f push {r0, r1, r2, r3, r4, r5, r6, lr}
ASSERT(io);
3c2: 4604 mov r4, r0
3c4: 3800 subs r0, #0
3c6: bf18 it ne
3c8: 2001 movne r0, #1
{
3ca: 460e mov r6, r1
3cc: 4615 mov r5, r2
ASSERT(io);
3ce: 4907 ldr r1, [pc, #28] ; (3ec <_spi_m_sync_io_read+0x2c>)
3d0: 4b07 ldr r3, [pc, #28] ; (3f0 <_spi_m_sync_io_read+0x30>)
3d2: 2287 movs r2, #135 ; 0x87
3d4: 4798 blx r3
xfer.txbuf = 0;
3d6: 2300 movs r3, #0
3d8: 9301 str r3, [sp, #4]
return spi_m_sync_transfer(spi, &xfer);
3da: a901 add r1, sp, #4
3dc: 4b05 ldr r3, [pc, #20] ; (3f4 <_spi_m_sync_io_read+0x34>)
xfer.rxbuf = buf;
3de: 9602 str r6, [sp, #8]
return spi_m_sync_transfer(spi, &xfer);
3e0: f1a4 000c sub.w r0, r4, #12
xfer.size = length;
3e4: 9503 str r5, [sp, #12]
return spi_m_sync_transfer(spi, &xfer);
3e6: 4798 blx r3
}
3e8: b004 add sp, #16
3ea: bd70 pop {r4, r5, r6, pc}
3ec: 00001688 .word 0x00001688
3f0: 00000485 .word 0x00000485
3f4: 0000034d .word 0x0000034d
000003f8 <delay_init>:
/**
* \brief Initialize Delay driver
*/
void delay_init(void *const hw)
{
_delay_init(hardware = hw);
3f8: 4b01 ldr r3, [pc, #4] ; (400 <delay_init+0x8>)
3fa: 6018 str r0, [r3, #0]
3fc: 4b01 ldr r3, [pc, #4] ; (404 <delay_init+0xc>)
3fe: 4718 bx r3
400: 20000084 .word 0x20000084
404: 000002d5 .word 0x000002d5
00000408 <_init_chip>:
}
static inline void hri_nvmctrl_set_CTRLA_RWS_bf(const void *const hw, hri_nvmctrl_ctrla_reg_t mask)
{
NVMCTRL_CRITICAL_SECTION_ENTER();
((Nvmctrl *)hw)->CTRLA.reg |= NVMCTRL_CTRLA_RWS(mask);
408: 4a0a ldr r2, [pc, #40] ; (434 <_init_chip+0x2c>)
40a: 8813 ldrh r3, [r2, #0]
40c: b29b uxth r3, r3
/**
* \brief Initialize the hardware abstraction layer
*/
void _init_chip(void)
{
40e: b510 push {r4, lr}
410: f443 63a0 orr.w r3, r3, #1280 ; 0x500
414: 8013 strh r3, [r2, #0]
hri_nvmctrl_set_CTRLA_RWS_bf(NVMCTRL, CONF_NVM_WAIT_STATE);
_osc32kctrl_init_sources();
416: 4b08 ldr r3, [pc, #32] ; (438 <_init_chip+0x30>)
418: 4798 blx r3
_oscctrl_init_sources();
41a: 4b08 ldr r3, [pc, #32] ; (43c <_init_chip+0x34>)
41c: 4798 blx r3
_mclk_init();
41e: 4b08 ldr r3, [pc, #32] ; (440 <_init_chip+0x38>)
420: 4798 blx r3
#if _GCLK_INIT_1ST
_gclk_init_generators_by_fref(_GCLK_INIT_1ST);
#endif
_oscctrl_init_referenced_generators();
422: 4b08 ldr r3, [pc, #32] ; (444 <_init_chip+0x3c>)
424: 4798 blx r3
#endif
#if CONF_CMCC_ENABLE
cache_init();
#endif
}
426: e8bd 4010 ldmia.w sp!, {r4, lr}
_gclk_init_generators_by_fref(_GCLK_INIT_LAST);
42a: 4b07 ldr r3, [pc, #28] ; (448 <_init_chip+0x40>)
42c: f640 70ff movw r0, #4095 ; 0xfff
430: 4718 bx r3
432: bf00 nop
434: 41004000 .word 0x41004000
438: 00000729 .word 0x00000729
43c: 0000048b .word 0x0000048b
440: 0000062d .word 0x0000062d
444: 0000048d .word 0x0000048d
448: 0000044d .word 0x0000044d
0000044c <_gclk_init_generators_by_fref>:
void _gclk_init_generators_by_fref(uint32_t bm)
{
#if CONF_GCLK_GENERATOR_0_CONFIG == 1
if (bm & (1ul << 0)) {
44c: 07c2 lsls r2, r0, #31
44e: d507 bpl.n 460 <_gclk_init_generators_by_fref+0x14>
}
static inline void hri_gclk_write_GENCTRL_reg(const void *const hw, uint8_t index, hri_gclk_genctrl_reg_t data)
{
GCLK_CRITICAL_SECTION_ENTER();
((Gclk *)hw)->GENCTRL[index].reg = data;
450: 4b09 ldr r3, [pc, #36] ; (478 <_gclk_init_generators_by_fref+0x2c>)
452: 4a0a ldr r2, [pc, #40] ; (47c <_gclk_init_generators_by_fref+0x30>)
454: 621a str r2, [r3, #32]
while (((Gclk *)hw)->SYNCBUSY.reg & reg) {
456: f643 72fd movw r2, #16381 ; 0x3ffd
45a: 6859 ldr r1, [r3, #4]
45c: 4211 tst r1, r2
45e: d1fc bne.n 45a <_gclk_init_generators_by_fref+0xe>
| (CONF_GCLK_GENERATOR_2_CONFIG << GCLK_GENCTRL_GENEN_Pos) | CONF_GCLK_GEN_2_SOURCE);
}
#endif
#if CONF_GCLK_GENERATOR_3_CONFIG == 1
if (bm & (1ul << 3)) {
460: 0703 lsls r3, r0, #28
462: d507 bpl.n 474 <_gclk_init_generators_by_fref+0x28>
((Gclk *)hw)->GENCTRL[index].reg = data;
464: 4b04 ldr r3, [pc, #16] ; (478 <_gclk_init_generators_by_fref+0x2c>)
466: 4a06 ldr r2, [pc, #24] ; (480 <_gclk_init_generators_by_fref+0x34>)
468: 62da str r2, [r3, #44] ; 0x2c
while (((Gclk *)hw)->SYNCBUSY.reg & reg) {
46a: f643 72fd movw r2, #16381 ; 0x3ffd
46e: 6859 ldr r1, [r3, #4]
470: 4211 tst r1, r2
472: d1fc bne.n 46e <_gclk_init_generators_by_fref+0x22>
| (CONF_GCLK_GEN_11_DIVSEL << GCLK_GENCTRL_DIVSEL_Pos) | (CONF_GCLK_GEN_11_OE << GCLK_GENCTRL_OE_Pos)
| (CONF_GCLK_GEN_11_OOV << GCLK_GENCTRL_OOV_Pos) | (CONF_GCLK_GEN_11_IDC << GCLK_GENCTRL_IDC_Pos)
| (CONF_GCLK_GENERATOR_11_CONFIG << GCLK_GENCTRL_GENEN_Pos) | CONF_GCLK_GEN_11_SOURCE);
}
#endif
}
474: 4770 bx lr
476: bf00 nop
478: 40001c00 .word 0x40001c00
47c: 00010107 .word 0x00010107
480: 00010105 .word 0x00010105
00000484 <assert>:
/**
* \brief Assert function
*/
void assert(const bool condition, const char *const file, const int line)
{
if (!(condition)) {
484: b900 cbnz r0, 488 <assert+0x4>
__asm("BKPT #0");
486: be00 bkpt 0x0000
}
(void)file;
(void)line;
}
488: 4770 bx lr
0000048a <_oscctrl_init_sources>:
hri_oscctrl_set_XOSCCTRL_ONDEMAND_bit(hw, 1);
#endif
#endif
(void)hw;
}
48a: 4770 bx lr
0000048c <_oscctrl_init_referenced_generators>:
static inline void hri_oscctrl_write_DPLLRATIO_reg(const void *const hw, uint8_t submodule_index,
hri_oscctrl_dpllratio_reg_t data)
{
OSCCTRL_CRITICAL_SECTION_ENTER();
((Oscctrl *)hw)->Dpll[submodule_index].DPLLRATIO.reg = data;
48c: 4b0c ldr r3, [pc, #48] ; (4c0 <_oscctrl_init_referenced_generators+0x34>)
48e: 4a0d ldr r2, [pc, #52] ; (4c4 <_oscctrl_init_referenced_generators+0x38>)
490: 635a str r2, [r3, #52] ; 0x34
while (((Oscctrl *)hw)->Dpll[submodule_index].DPLLSYNCBUSY.reg & reg) {
492: 6bda ldr r2, [r3, #60] ; 0x3c
494: f012 0f06 tst.w r2, #6
498: d1fb bne.n 492 <_oscctrl_init_referenced_generators+0x6>
static inline void hri_oscctrl_write_DPLLCTRLB_reg(const void *const hw, uint8_t submodule_index,
hri_oscctrl_dpllctrlb_reg_t data)
{
OSCCTRL_CRITICAL_SECTION_ENTER();
((Oscctrl *)hw)->Dpll[submodule_index].DPLLCTRLB.reg = data;
49a: f44f 6202 mov.w r2, #2080 ; 0x820
49e: 639a str r2, [r3, #56] ; 0x38
((Oscctrl *)hw)->Dpll[submodule_index].DPLLCTRLA.reg = data;
4a0: 2202 movs r2, #2
4a2: f883 2030 strb.w r2, [r3, #48] ; 0x30
while (((Oscctrl *)hw)->Dpll[submodule_index].DPLLSYNCBUSY.reg & reg) {
4a6: 4a06 ldr r2, [pc, #24] ; (4c0 <_oscctrl_init_referenced_generators+0x34>)
4a8: 6bd3 ldr r3, [r2, #60] ; 0x3c
4aa: 0798 lsls r0, r3, #30
4ac: d4fc bmi.n 4a8 <_oscctrl_init_referenced_generators+0x1c>
return (((Oscctrl *)hw)->Dpll[submodule_index].DPLLSTATUS.reg & OSCCTRL_DPLLSTATUS_LOCK)
4ae: 4b04 ldr r3, [pc, #16] ; (4c0 <_oscctrl_init_referenced_generators+0x34>)
4b0: 6c1a ldr r2, [r3, #64] ; 0x40
#endif
#endif
#if CONF_FDPLL0_CONFIG == 1
#if CONF_FDPLL0_ENABLE == 1
while (!(hri_oscctrl_get_DPLLSTATUS_LOCK_bit(hw, 0) || hri_oscctrl_get_DPLLSTATUS_CLKRDY_bit(hw, 0)))
4b2: 07d1 lsls r1, r2, #31
4b4: d402 bmi.n 4bc <_oscctrl_init_referenced_generators+0x30>
return (((Oscctrl *)hw)->Dpll[submodule_index].DPLLSTATUS.reg & OSCCTRL_DPLLSTATUS_CLKRDY)
4b6: 6c1a ldr r2, [r3, #64] ; 0x40
4b8: 0792 lsls r2, r2, #30
4ba: d5f9 bpl.n 4b0 <_oscctrl_init_referenced_generators+0x24>
hri_gclk_write_GENCTRL_SRC_bf(GCLK, 0, CONF_GCLK_GEN_0_SOURCE);
while (hri_gclk_get_SYNCBUSY_GENCTRL0_bit(GCLK))
;
#endif
(void)hw;
}
4bc: 4770 bx lr
4be: bf00 nop
4c0: 40001000 .word 0x40001000
4c4: 00010e4d .word 0x00010e4d
000004c8 <usart_sync_write>:
* \param[in] length The number of bytes to write
*
* \return The number of bytes written.
*/
static int32_t usart_sync_write(struct io_descriptor *const io_descr, const uint8_t *const buf, const uint16_t length)
{
4c8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
4cc: 460e mov r6, r1
4ce: 4615 mov r5, r2
uint32_t offset = 0;
struct usart_sync_descriptor *descr = CONTAINER_OF(io_descr, struct usart_sync_descriptor, io);
ASSERT(io_descr && buf && length);
4d0: 4604 mov r4, r0
4d2: b118 cbz r0, 4dc <usart_sync_write+0x14>
4d4: b329 cbz r1, 522 <usart_sync_write+0x5a>
4d6: 1e10 subs r0, r2, #0
4d8: bf18 it ne
4da: 2001 movne r0, #1
4dc: 4912 ldr r1, [pc, #72] ; (528 <usart_sync_write+0x60>)
4de: 4b13 ldr r3, [pc, #76] ; (52c <usart_sync_write+0x64>)
while (!_usart_sync_is_ready_to_send(&descr->device))
4e0: 4f13 ldr r7, [pc, #76] ; (530 <usart_sync_write+0x68>)
ASSERT(io_descr && buf && length);
4e2: 22f1 movs r2, #241 ; 0xf1
4e4: 4798 blx r3
while (!_usart_sync_is_ready_to_send(&descr->device))
4e6: 3408 adds r4, #8
4e8: 46b9 mov r9, r7
4ea: 4620 mov r0, r4
4ec: 47b8 blx r7
4ee: 2800 cmp r0, #0
4f0: d0fb beq.n 4ea <usart_sync_write+0x22>
;
do {
_usart_sync_write_byte(&descr->device, buf[offset]);
4f2: f8df 8044 ldr.w r8, [pc, #68] ; 538 <usart_sync_write+0x70>
uint32_t offset = 0;
4f6: 2700 movs r7, #0
_usart_sync_write_byte(&descr->device, buf[offset]);
4f8: 5df1 ldrb r1, [r6, r7]
4fa: 4620 mov r0, r4
4fc: 47c0 blx r8
while (!_usart_sync_is_ready_to_send(&descr->device))
4fe: 4620 mov r0, r4
500: 47c8 blx r9
502: 2800 cmp r0, #0
504: d0fb beq.n 4fe <usart_sync_write+0x36>
;
} while (++offset < length);
506: 3701 adds r7, #1
508: 42bd cmp r5, r7
50a: d8f5 bhi.n 4f8 <usart_sync_write+0x30>
50c: 2d00 cmp r5, #0
while (!_usart_sync_is_transmit_done(&descr->device))
50e: 4e09 ldr r6, [pc, #36] ; (534 <usart_sync_write+0x6c>)
} while (++offset < length);
510: bf08 it eq
512: 2501 moveq r5, #1
while (!_usart_sync_is_transmit_done(&descr->device))
514: 4620 mov r0, r4
516: 47b0 blx r6
518: 2800 cmp r0, #0
51a: d0fb beq.n 514 <usart_sync_write+0x4c>
;
return (int32_t)offset;
}
51c: 4628 mov r0, r5
51e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
ASSERT(io_descr && buf && length);
522: 4608 mov r0, r1
524: e7da b.n 4dc <usart_sync_write+0x14>
526: bf00 nop
528: 000016a4 .word 0x000016a4
52c: 00000485 .word 0x00000485
530: 00000a67 .word 0x00000a67
534: 00000a71 .word 0x00000a71
538: 00000a59 .word 0x00000a59
0000053c <usart_sync_read>:
* \param[in] length The size of a buffer
*
* \return The number of bytes read.
*/
static int32_t usart_sync_read(struct io_descriptor *const io_descr, uint8_t *const buf, const uint16_t length)
{
53c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
540: 460e mov r6, r1
542: 4615 mov r5, r2
uint32_t offset = 0;
struct usart_sync_descriptor *descr = CONTAINER_OF(io_descr, struct usart_sync_descriptor, io);
ASSERT(io_descr && buf && length);
544: 4604 mov r4, r0
546: b118 cbz r0, 550 <usart_sync_read+0x14>
548: b1e9 cbz r1, 586 <usart_sync_read+0x4a>
54a: 1e10 subs r0, r2, #0
54c: bf18 it ne
54e: 2001 movne r0, #1
550: 490e ldr r1, [pc, #56] ; (58c <usart_sync_read+0x50>)
552: 4b0f ldr r3, [pc, #60] ; (590 <usart_sync_read+0x54>)
do {
while (!_usart_sync_is_byte_received(&descr->device))
554: f8df 903c ldr.w r9, [pc, #60] ; 594 <usart_sync_read+0x58>
;
buf[offset] = _usart_sync_read_byte(&descr->device);
558: f8df 803c ldr.w r8, [pc, #60] ; 598 <usart_sync_read+0x5c>
ASSERT(io_descr && buf && length);
55c: f44f 7286 mov.w r2, #268 ; 0x10c
560: 4798 blx r3
uint32_t offset = 0;
562: 2700 movs r7, #0
while (!_usart_sync_is_byte_received(&descr->device))
564: 3408 adds r4, #8
566: 4620 mov r0, r4
568: 47c8 blx r9
56a: 2800 cmp r0, #0
56c: d0fb beq.n 566 <usart_sync_read+0x2a>
buf[offset] = _usart_sync_read_byte(&descr->device);
56e: 4620 mov r0, r4
570: 47c0 blx r8
572: 55f0 strb r0, [r6, r7]
} while (++offset < length);
574: 3701 adds r7, #1
576: 42bd cmp r5, r7
578: d8f5 bhi.n 566 <usart_sync_read+0x2a>
57a: 2d00 cmp r5, #0
return (int32_t)offset;
}
57c: bf14 ite ne
57e: 4628 movne r0, r5
580: 2001 moveq r0, #1
582: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
ASSERT(io_descr && buf && length);
586: 4608 mov r0, r1
588: e7e2 b.n 550 <usart_sync_read+0x14>
58a: bf00 nop
58c: 000016a4 .word 0x000016a4
590: 00000485 .word 0x00000485
594: 00000a7b .word 0x00000a7b
598: 00000a5f .word 0x00000a5f
0000059c <usart_sync_init>:
{
59c: b538 push {r3, r4, r5, lr}
59e: 460d mov r5, r1
ASSERT(descr && hw);
5a0: 4604 mov r4, r0
5a2: b110 cbz r0, 5aa <usart_sync_init+0xe>
5a4: 1e08 subs r0, r1, #0
5a6: bf18 it ne
5a8: 2001 movne r0, #1
5aa: 4907 ldr r1, [pc, #28] ; (5c8 <usart_sync_init+0x2c>)
5ac: 4b07 ldr r3, [pc, #28] ; (5cc <usart_sync_init+0x30>)
5ae: 2234 movs r2, #52 ; 0x34
5b0: 4798 blx r3
init_status = _usart_sync_init(&descr->device, hw);
5b2: 4b07 ldr r3, [pc, #28] ; (5d0 <usart_sync_init+0x34>)
5b4: 4629 mov r1, r5
5b6: f104 0008 add.w r0, r4, #8
5ba: 4798 blx r3
if (init_status) {
5bc: b918 cbnz r0, 5c6 <usart_sync_init+0x2a>
descr->io.read = usart_sync_read;
5be: 4b05 ldr r3, [pc, #20] ; (5d4 <usart_sync_init+0x38>)
5c0: 6063 str r3, [r4, #4]
descr->io.write = usart_sync_write;
5c2: 4b05 ldr r3, [pc, #20] ; (5d8 <usart_sync_init+0x3c>)
5c4: 6023 str r3, [r4, #0]
}
5c6: bd38 pop {r3, r4, r5, pc}
5c8: 000016a4 .word 0x000016a4
5cc: 00000485 .word 0x00000485
5d0: 00000a19 .word 0x00000a19
5d4: 0000053d .word 0x0000053d
5d8: 000004c9 .word 0x000004c9
000005dc <usart_sync_enable>:
{
5dc: b510 push {r4, lr}
ASSERT(descr);
5de: 4604 mov r4, r0
5e0: 3800 subs r0, #0
5e2: bf18 it ne
5e4: 2001 movne r0, #1
5e6: 4905 ldr r1, [pc, #20] ; (5fc <usart_sync_enable+0x20>)
5e8: 4b05 ldr r3, [pc, #20] ; (600 <usart_sync_enable+0x24>)
5ea: 2253 movs r2, #83 ; 0x53
5ec: 4798 blx r3
_usart_sync_enable(&descr->device);
5ee: f104 0008 add.w r0, r4, #8
5f2: 4b04 ldr r3, [pc, #16] ; (604 <usart_sync_enable+0x28>)
5f4: 4798 blx r3
}
5f6: 2000 movs r0, #0
5f8: bd10 pop {r4, pc}
5fa: bf00 nop
5fc: 000016a4 .word 0x000016a4
600: 00000485 .word 0x00000485
604: 00000a45 .word 0x00000a45
00000608 <usart_sync_get_io_descriptor>:
{
608: b538 push {r3, r4, r5, lr}
60a: 460d mov r5, r1
ASSERT(descr && io);
60c: 4604 mov r4, r0
60e: b110 cbz r0, 616 <usart_sync_get_io_descriptor+0xe>
610: 1e08 subs r0, r1, #0
612: bf18 it ne
614: 2001 movne r0, #1
616: 4903 ldr r1, [pc, #12] ; (624 <usart_sync_get_io_descriptor+0x1c>)
618: 4b03 ldr r3, [pc, #12] ; (628 <usart_sync_get_io_descriptor+0x20>)
61a: 2269 movs r2, #105 ; 0x69
61c: 4798 blx r3
*io = &descr->io;
61e: 602c str r4, [r5, #0]
}
620: 2000 movs r0, #0
622: bd38 pop {r3, r4, r5, pc}
624: 000016a4 .word 0x000016a4
628: 00000485 .word 0x00000485
0000062c <_mclk_init>:
}
static inline void hri_mclk_write_CPUDIV_reg(const void *const hw, hri_mclk_cpudiv_reg_t data)
{
MCLK_CRITICAL_SECTION_ENTER();
((Mclk *)hw)->CPUDIV.reg = data;
62c: 4b01 ldr r3, [pc, #4] ; (634 <_mclk_init+0x8>)
62e: 2201 movs r2, #1
630: 715a strb r2, [r3, #5]
*/
void _mclk_init(void)
{
void *hw = (void *)MCLK;
hri_mclk_write_CPUDIV_reg(hw, MCLK_CPUDIV_DIV(CONF_MCLK_CPUDIV));
}
632: 4770 bx lr
634: 40000800 .word 0x40000800
00000638 <RAMECC_Handler>:
return tmp;
}
static inline hri_ramecc_intflag_reg_t hri_ramecc_read_INTFLAG_reg(const void *const hw)
{
return ((Ramecc *)hw)->INTFLAG.reg;
638: 4a0b ldr r2, [pc, #44] ; (668 <RAMECC_Handler+0x30>)
63a: 7893 ldrb r3, [r2, #2]
/**
* \internal RAMECC interrupt handler
*/
void RAMECC_Handler(void)
{
63c: b082 sub sp, #8
63e: b2db uxtb r3, r3
struct _ramecc_device *dev = (struct _ramecc_device *)&device;
volatile uint32_t int_mask = hri_ramecc_read_INTFLAG_reg(RAMECC);
640: 9301 str r3, [sp, #4]
if (int_mask & RAMECC_INTFLAG_DUALE && dev->ramecc_cb.dual_bit_err) {
642: 9b01 ldr r3, [sp, #4]
644: 0799 lsls r1, r3, #30
646: d505 bpl.n 654 <RAMECC_Handler+0x1c>
648: 4b08 ldr r3, [pc, #32] ; (66c <RAMECC_Handler+0x34>)
64a: 681b ldr r3, [r3, #0]
64c: b113 cbz r3, 654 <RAMECC_Handler+0x1c>
return tmp;
}
static inline hri_ramecc_erraddr_reg_t hri_ramecc_read_ERRADDR_reg(const void *const hw)
{
return ((Ramecc *)hw)->ERRADDR.reg;
64e: 6850 ldr r0, [r2, #4]
} else if (int_mask & RAMECC_INTFLAG_SINGLEE && dev->ramecc_cb.single_bit_err) {
dev->ramecc_cb.single_bit_err((uint32_t)hri_ramecc_read_ERRADDR_reg(RAMECC));
} else {
return;
}
}
650: b002 add sp, #8
dev->ramecc_cb.single_bit_err((uint32_t)hri_ramecc_read_ERRADDR_reg(RAMECC));
652: 4718 bx r3
} else if (int_mask & RAMECC_INTFLAG_SINGLEE && dev->ramecc_cb.single_bit_err) {
654: 9b01 ldr r3, [sp, #4]
656: 07db lsls r3, r3, #31
658: d504 bpl.n 664 <RAMECC_Handler+0x2c>
65a: 4b04 ldr r3, [pc, #16] ; (66c <RAMECC_Handler+0x34>)
65c: 685b ldr r3, [r3, #4]
65e: b10b cbz r3, 664 <RAMECC_Handler+0x2c>
660: 4a01 ldr r2, [pc, #4] ; (668 <RAMECC_Handler+0x30>)
662: e7f4 b.n 64e <RAMECC_Handler+0x16>
}
664: b002 add sp, #8
666: 4770 bx lr
668: 41020000 .word 0x41020000
66c: 20000088 .word 0x20000088
00000670 <Dummy_Handler>:
/**
* \brief Default interrupt handler for unused IRQs.
*/
void Dummy_Handler(void)
{
while (1) {
670: e7fe b.n 670 <Dummy_Handler>
...
00000674 <Reset_Handler>:
if (pSrc != pDest) {
674: 4918 ldr r1, [pc, #96] ; (6d8 <Reset_Handler+0x64>)
676: 4819 ldr r0, [pc, #100] ; (6dc <Reset_Handler+0x68>)
678: 4281 cmp r1, r0
{
67a: b510 push {r4, lr}
if (pSrc != pDest) {
67c: d00a beq.n 694 <Reset_Handler+0x20>
*pDest++ = *pSrc++;
67e: 4b18 ldr r3, [pc, #96] ; (6e0 <Reset_Handler+0x6c>)
680: 1cda adds r2, r3, #3
682: 1a12 subs r2, r2, r0
684: f022 0203 bic.w r2, r2, #3
688: 1ec4 subs r4, r0, #3
68a: 42a3 cmp r3, r4
68c: bf38 it cc
68e: 2200 movcc r2, #0
690: 4b14 ldr r3, [pc, #80] ; (6e4 <Reset_Handler+0x70>)
692: 4798 blx r3
*pDest++ = 0;
694: 4b14 ldr r3, [pc, #80] ; (6e8 <Reset_Handler+0x74>)
696: 4815 ldr r0, [pc, #84] ; (6ec <Reset_Handler+0x78>)
698: 1cda adds r2, r3, #3
69a: 1a12 subs r2, r2, r0
69c: 1ec1 subs r1, r0, #3
69e: f022 0203 bic.w r2, r2, #3
6a2: 4299 cmp r1, r3
6a4: bf88 it hi
6a6: 2200 movhi r2, #0
6a8: 4b11 ldr r3, [pc, #68] ; (6f0 <Reset_Handler+0x7c>)
6aa: 2100 movs r1, #0
6ac: 4798 blx r3
SCB->VTOR = ((uint32_t)pSrc & SCB_VTOR_TBLOFF_Msk);
6ae: 4a11 ldr r2, [pc, #68] ; (6f4 <Reset_Handler+0x80>)
6b0: 4b11 ldr r3, [pc, #68] ; (6f8 <Reset_Handler+0x84>)
6b2: f022 027f bic.w r2, r2, #127 ; 0x7f
6b6: 609a str r2, [r3, #8]
SCB->CPACR |= (0xFu << 20);
6b8: f8d3 2088 ldr.w r2, [r3, #136] ; 0x88
6bc: f442 0270 orr.w r2, r2, #15728640 ; 0xf00000
6c0: f8c3 2088 str.w r2, [r3, #136] ; 0x88
\details Acts as a special kind of Data Memory Barrier.
It completes when all explicit memory accesses before this instruction complete.
*/
__STATIC_FORCEINLINE void __DSB(void)
{
__ASM volatile ("dsb 0xF":::"memory");
6c4: f3bf 8f4f dsb sy
__ASM volatile ("isb 0xF":::"memory");
6c8: f3bf 8f6f isb sy
__libc_init_array();
6cc: 4b0b ldr r3, [pc, #44] ; (6fc <Reset_Handler+0x88>)
6ce: 4798 blx r3
main();
6d0: 4b0b ldr r3, [pc, #44] ; (700 <Reset_Handler+0x8c>)
6d2: 4798 blx r3
while (1)
6d4: e7fe b.n 6d4 <Reset_Handler+0x60>
6d6: bf00 nop
6d8: 00001814 .word 0x00001814
6dc: 20000000 .word 0x20000000
6e0: 20000064 .word 0x20000064
6e4: 00000d5d .word 0x00000d5d
6e8: 200000d8 .word 0x200000d8
6ec: 20000064 .word 0x20000064
6f0: 00000d79 .word 0x00000d79
6f4: 00000000 .word 0x00000000
6f8: e000ed00 .word 0xe000ed00
6fc: 00000d15 .word 0x00000d15
700: 00000705 .word 0x00000705
00000704 <main>:
#include <atmel_start.h>
#include "pdebug.h"
int main(void)
{
704: b508 push {r3, lr}
/* Initializes MCU, drivers and middleware */
atmel_start_init();
706: 4b04 ldr r3, [pc, #16] ; (718 <main+0x14>)
708: 4798 blx r3
pdebug_init();
70a: 4b04 ldr r3, [pc, #16] ; (71c <main+0x18>)
70c: 4798 blx r3
printf("Hi\n");
70e: 4804 ldr r0, [pc, #16] ; (720 <main+0x1c>)
710: 4b04 ldr r3, [pc, #16] ; (724 <main+0x20>)
712: 4798 blx r3
/* Replace with your application code */
while (1) {
714: e7fe b.n 714 <main+0x10>
716: bf00 nop
718: 00000c79 .word 0x00000c79
71c: 00000ce1 .word 0x00000ce1
720: 000016c0 .word 0x000016c0
724: 00000c81 .word 0x00000c81
00000728 <_osc32kctrl_init_sources>:
}
static inline void hri_osc32kctrl_write_XOSC32K_reg(const void *const hw, hri_osc32kctrl_xosc32k_reg_t data)
{
OSC32KCTRL_CRITICAL_SECTION_ENTER();
((Osc32kctrl *)hw)->XOSC32K.reg = data;
728: 4b06 ldr r3, [pc, #24] ; (744 <_osc32kctrl_init_sources+0x1c>)
72a: f242 328e movw r2, #9102 ; 0x238e
72e: 829a strh r2, [r3, #20]
}
static inline void hri_osc32kctrl_write_CFDCTRL_reg(const void *const hw, hri_osc32kctrl_cfdctrl_reg_t data)
{
OSC32KCTRL_CRITICAL_SECTION_ENTER();
((Osc32kctrl *)hw)->CFDCTRL.reg = data;
730: 2200 movs r2, #0
732: 759a strb r2, [r3, #22]
}
static inline void hri_osc32kctrl_write_EVCTRL_reg(const void *const hw, hri_osc32kctrl_evctrl_reg_t data)
{
OSC32KCTRL_CRITICAL_SECTION_ENTER();
((Osc32kctrl *)hw)->EVCTRL.reg = data;
734: 75da strb r2, [r3, #23]
}
static inline hri_osc32kctrl_osculp32k_reg_t hri_osc32kctrl_read_OSCULP32K_CALIB_bf(const void *const hw)
{
uint32_t tmp;
tmp = ((Osc32kctrl *)hw)->OSCULP32K.reg;
736: 69da ldr r2, [r3, #28]
calib = hri_osc32kctrl_read_OSCULP32K_CALIB_bf(hw);
hri_osc32kctrl_write_OSCULP32K_reg(hw,
#if CONF_OSCULP32K_CALIB_ENABLE == 1
OSC32KCTRL_OSCULP32K_CALIB(CONF_OSCULP32K_CALIB)
#else
OSC32KCTRL_OSCULP32K_CALIB(calib)
738: f402 527c and.w r2, r2, #16128 ; 0x3f00
}
static inline void hri_osc32kctrl_write_OSCULP32K_reg(const void *const hw, hri_osc32kctrl_osculp32k_reg_t data)
{
OSC32KCTRL_CRITICAL_SECTION_ENTER();
((Osc32kctrl *)hw)->OSCULP32K.reg = data;
73c: 61da str r2, [r3, #28]
((Osc32kctrl *)hw)->RTCCTRL.reg = data;
73e: 2201 movs r2, #1
740: 741a strb r2, [r3, #16]
#endif
#endif
hri_osc32kctrl_write_RTCCTRL_reg(hw, OSC32KCTRL_RTCCTRL_RTCSEL(CONF_RTCCTRL));
(void)calib;
}
742: 4770 bx lr
744: 40001400 .word 0x40001400
00000748 <_gpio_set_pin_function>:
* \brief Set gpio pin function
*/
static inline void _gpio_set_pin_function(const uint32_t gpio, const uint32_t function)
{
uint8_t port = GPIO_PORT(gpio);
uint8_t pin = GPIO_PIN(gpio);
748: f000 031f and.w r3, r0, #31
static inline void hri_port_write_PINCFG_PMUXEN_bit(const void *const hw, uint8_t submodule_index, uint8_t index,
bool value)
{
uint8_t tmp;
PORT_CRITICAL_SECTION_ENTER();
tmp = ((Port *)hw)->Group[submodule_index].PINCFG[index].reg;
74c: f103 4182 add.w r1, r3, #1090519040 ; 0x41000000
750: f501 4100 add.w r1, r1, #32768 ; 0x8000
tmp = ((Port *)hw)->Group[submodule_index].PMUX[index].reg;
754: 085b lsrs r3, r3, #1
tmp = ((Port *)hw)->Group[submodule_index].PINCFG[index].reg;
756: f891 20c0 ldrb.w r2, [r1, #192] ; 0xc0
tmp &= ~PORT_PINCFG_PMUXEN;
75a: f103 4382 add.w r3, r3, #1090519040 ; 0x41000000
75e: f002 02fe and.w r2, r2, #254 ; 0xfe
tmp |= value << PORT_PINCFG_PMUXEN_Pos;
762: f042 0201 orr.w r2, r2, #1
((Port *)hw)->Group[submodule_index].PINCFG[index].reg = tmp;
766: f503 4300 add.w r3, r3, #32768 ; 0x8000
76a: f881 20c0 strb.w r2, [r1, #192] ; 0xc0
tmp = ((Port *)hw)->Group[submodule_index].PMUX[index].reg;
76e: f893 20b0 ldrb.w r2, [r3, #176] ; 0xb0
hri_port_write_PINCFG_PMUXEN_bit(PORT, port, pin, false);
} else {
hri_port_write_PINCFG_PMUXEN_bit(PORT, port, pin, true);
if (pin & 1) {
772: f010 0f01 tst.w r0, #1
tmp &= ~PORT_PMUX_PMUXO_Msk;
776: bf15 itete ne
778: f002 020f andne.w r2, r2, #15
tmp &= ~PORT_PMUX_PMUXE_Msk;
77c: f002 02f0 andeq.w r2, r2, #240 ; 0xf0
tmp |= PORT_PMUX_PMUXO(data);
780: f042 0230 orrne.w r2, r2, #48 ; 0x30
tmp |= PORT_PMUX_PMUXE(data);
784: f042 0203 orreq.w r2, r2, #3
((Port *)hw)->Group[submodule_index].PMUX[index].reg = tmp;
788: f883 20b0 strb.w r2, [r3, #176] ; 0xb0
} else {
// Even numbered pin
hri_port_write_PMUX_PMUXE_bf(PORT, port, pin >> 1, function & 0xffff);
}
}
}
78c: 4770 bx lr
...
00000790 <USART_DBG_PORT_init>:
struct spi_m_sync_descriptor SPI_SD_MMC;
struct usart_sync_descriptor USART_DBG;
void USART_DBG_PORT_init(void)
{
790: b510 push {r4, lr}
* found in the header files for the device
*
*/
static inline void gpio_set_pin_function(const uint32_t pin, uint32_t function)
{
_gpio_set_pin_function(pin, function);
792: 4c05 ldr r4, [pc, #20] ; (7a8 <USART_DBG_PORT_init+0x18>)
794: 4905 ldr r1, [pc, #20] ; (7ac <USART_DBG_PORT_init+0x1c>)
796: 2039 movs r0, #57 ; 0x39
798: 47a0 blx r4
79a: 4623 mov r3, r4
79c: 4904 ldr r1, [pc, #16] ; (7b0 <USART_DBG_PORT_init+0x20>)
gpio_set_pin_function(PB25, PINMUX_PB25D_SERCOM2_PAD0);
gpio_set_pin_function(PB24, PINMUX_PB24D_SERCOM2_PAD1);
}
79e: e8bd 4010 ldmia.w sp!, {r4, lr}
7a2: 2038 movs r0, #56 ; 0x38
7a4: 4718 bx r3
7a6: bf00 nop
7a8: 00000749 .word 0x00000749
7ac: 00390003 .word 0x00390003
7b0: 00380003 .word 0x00380003
000007b4 <USART_DBG_CLOCK_init>:
}
static inline void hri_gclk_write_PCHCTRL_reg(const void *const hw, uint8_t index, hri_gclk_pchctrl_reg_t data)
{
GCLK_CRITICAL_SECTION_ENTER();
((Gclk *)hw)->PCHCTRL[index].reg = data;
7b4: 4b06 ldr r3, [pc, #24] ; (7d0 <USART_DBG_CLOCK_init+0x1c>)
7b6: 2240 movs r2, #64 ; 0x40
7b8: f8c3 20dc str.w r2, [r3, #220] ; 0xdc
7bc: 2243 movs r2, #67 ; 0x43
7be: f8c3 208c str.w r2, [r3, #140] ; 0x8c
}
static inline void hri_mclk_set_APBBMASK_SERCOM2_bit(const void *const hw)
{
MCLK_CRITICAL_SECTION_ENTER();
((Mclk *)hw)->APBBMASK.reg |= MCLK_APBBMASK_SERCOM2;
7c2: 4a04 ldr r2, [pc, #16] ; (7d4 <USART_DBG_CLOCK_init+0x20>)
7c4: 6993 ldr r3, [r2, #24]
7c6: f443 7300 orr.w r3, r3, #512 ; 0x200
7ca: 6193 str r3, [r2, #24]
{
hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM2_GCLK_ID_CORE, CONF_GCLK_SERCOM2_CORE_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM2_GCLK_ID_SLOW, CONF_GCLK_SERCOM2_SLOW_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_mclk_set_APBBMASK_SERCOM2_bit(MCLK);
}
7cc: 4770 bx lr
7ce: bf00 nop
7d0: 40001c00 .word 0x40001c00
7d4: 40000800 .word 0x40000800
000007d8 <USART_DBG_init>:
void USART_DBG_init(void)
{
7d8: b510 push {r4, lr}
USART_DBG_CLOCK_init();
7da: 4b05 ldr r3, [pc, #20] ; (7f0 <USART_DBG_init+0x18>)
usart_sync_init(&USART_DBG, SERCOM2, (void *)NULL);
7dc: 4905 ldr r1, [pc, #20] ; (7f4 <USART_DBG_init+0x1c>)
7de: 4806 ldr r0, [pc, #24] ; (7f8 <USART_DBG_init+0x20>)
USART_DBG_CLOCK_init();
7e0: 4798 blx r3
usart_sync_init(&USART_DBG, SERCOM2, (void *)NULL);
7e2: 4b06 ldr r3, [pc, #24] ; (7fc <USART_DBG_init+0x24>)
7e4: 2200 movs r2, #0
7e6: 4798 blx r3
USART_DBG_PORT_init();
}
7e8: e8bd 4010 ldmia.w sp!, {r4, lr}
USART_DBG_PORT_init();
7ec: 4b04 ldr r3, [pc, #16] ; (800 <USART_DBG_init+0x28>)
7ee: 4718 bx r3
7f0: 000007b5 .word 0x000007b5
7f4: 41012000 .word 0x41012000
7f8: 20000098 .word 0x20000098
7fc: 0000059d .word 0x0000059d
800: 00000791 .word 0x00000791
00000804 <SPI_SD_MMC_PORT_init>:
void SPI_SD_MMC_PORT_init(void)
{
804: b570 push {r4, r5, r6, lr}
((Port *)hw)->Group[submodule_index].OUTCLR.reg = mask;
806: 4c1b ldr r4, [pc, #108] ; (874 <SPI_SD_MMC_PORT_init+0x70>)
808: 4d1b ldr r5, [pc, #108] ; (878 <SPI_SD_MMC_PORT_init+0x74>)
80a: 491c ldr r1, [pc, #112] ; (87c <SPI_SD_MMC_PORT_init+0x78>)
80c: f04f 6300 mov.w r3, #134217728 ; 0x8000000
810: f8c4 3094 str.w r3, [r4, #148] ; 0x94
static inline void hri_port_write_WRCONFIG_reg(const void *const hw, uint8_t submodule_index,
hri_port_wrconfig_reg_t data)
{
PORT_CRITICAL_SECTION_ENTER();
((Port *)hw)->Group[submodule_index].WRCONFIG.reg = data;
814: f04f 4680 mov.w r6, #1073741824 ; 0x40000000
((Port *)hw)->Group[submodule_index].DIRSET.reg = mask;
818: f8c4 3088 str.w r3, [r4, #136] ; 0x88
((Port *)hw)->Group[submodule_index].WRCONFIG.reg = data;
81c: 4b18 ldr r3, [pc, #96] ; (880 <SPI_SD_MMC_PORT_init+0x7c>)
81e: f8c4 60a8 str.w r6, [r4, #168] ; 0xa8
822: 203b movs r0, #59 ; 0x3b
824: f8c4 30a8 str.w r3, [r4, #168] ; 0xa8
828: 47a8 blx r5
((Port *)hw)->Group[submodule_index].OUTCLR.reg = mask;
82a: f04f 6380 mov.w r3, #67108864 ; 0x4000000
82e: f8c4 3094 str.w r3, [r4, #148] ; 0x94
((Port *)hw)->Group[submodule_index].DIRSET.reg = mask;
832: f8c4 3088 str.w r3, [r4, #136] ; 0x88
((Port *)hw)->Group[submodule_index].WRCONFIG.reg = data;
836: 4b13 ldr r3, [pc, #76] ; (884 <SPI_SD_MMC_PORT_init+0x80>)
838: f8c4 60a8 str.w r6, [r4, #168] ; 0xa8
83c: 4912 ldr r1, [pc, #72] ; (888 <SPI_SD_MMC_PORT_init+0x84>)
83e: f8c4 30a8 str.w r3, [r4, #168] ; 0xa8
842: 203a movs r0, #58 ; 0x3a
844: 47a8 blx r5
((Port *)hw)->Group[submodule_index].DIRCLR.reg = mask;
846: f04f 5300 mov.w r3, #536870912 ; 0x20000000
84a: f8c4 3084 str.w r3, [r4, #132] ; 0x84
((Port *)hw)->Group[submodule_index].WRCONFIG.reg = data;
84e: 4b0f ldr r3, [pc, #60] ; (88c <SPI_SD_MMC_PORT_init+0x88>)
850: f8c4 30a8 str.w r3, [r4, #168] ; 0xa8
854: 4b0e ldr r3, [pc, #56] ; (890 <SPI_SD_MMC_PORT_init+0x8c>)
856: f8c4 30a8 str.w r3, [r4, #168] ; 0xa8
((Port *)hw)->Group[submodule_index].PINCFG[index].reg &= ~PORT_PINCFG_PULLEN;
85a: f894 30dd ldrb.w r3, [r4, #221] ; 0xdd
85e: 490d ldr r1, [pc, #52] ; (894 <SPI_SD_MMC_PORT_init+0x90>)
860: f003 03fb and.w r3, r3, #251 ; 0xfb
864: f884 30dd strb.w r3, [r4, #221] ; 0xdd
868: 203d movs r0, #61 ; 0x3d
86a: 462b mov r3, r5
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(PB29, PINMUX_PB29D_SERCOM4_PAD3);
}
86c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
870: 4718 bx r3
872: bf00 nop
874: 41008000 .word 0x41008000
878: 00000749 .word 0x00000749
87c: 003b0003 .word 0x003b0003
880: c0000800 .word 0xc0000800
884: c0000400 .word 0xc0000400
888: 003a0003 .word 0x003a0003
88c: 40020000 .word 0x40020000
890: c0022000 .word 0xc0022000
894: 003d0003 .word 0x003d0003
00000898 <SPI_SD_MMC_CLOCK_init>:
898: 4b06 ldr r3, [pc, #24] ; (8b4 <SPI_SD_MMC_CLOCK_init+0x1c>)
89a: 2240 movs r2, #64 ; 0x40
89c: f8c3 2108 str.w r2, [r3, #264] ; 0x108
8a0: 2243 movs r2, #67 ; 0x43
8a2: f8c3 208c str.w r2, [r3, #140] ; 0x8c
}
static inline void hri_mclk_set_APBDMASK_SERCOM4_bit(const void *const hw)
{
MCLK_CRITICAL_SECTION_ENTER();
((Mclk *)hw)->APBDMASK.reg |= MCLK_APBDMASK_SERCOM4;
8a6: 4a04 ldr r2, [pc, #16] ; (8b8 <SPI_SD_MMC_CLOCK_init+0x20>)
8a8: 6a13 ldr r3, [r2, #32]
8aa: f043 0301 orr.w r3, r3, #1
8ae: 6213 str r3, [r2, #32]
{
hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM4_GCLK_ID_CORE, CONF_GCLK_SERCOM4_CORE_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM4_GCLK_ID_SLOW, CONF_GCLK_SERCOM4_SLOW_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_mclk_set_APBDMASK_SERCOM4_bit(MCLK);
}
8b0: 4770 bx lr
8b2: bf00 nop
8b4: 40001c00 .word 0x40001c00
8b8: 40000800 .word 0x40000800
000008bc <SPI_SD_MMC_init>:
void SPI_SD_MMC_init(void)
{
8bc: b510 push {r4, lr}
SPI_SD_MMC_CLOCK_init();
8be: 4b05 ldr r3, [pc, #20] ; (8d4 <SPI_SD_MMC_init+0x18>)
spi_m_sync_init(&SPI_SD_MMC, SERCOM4);
8c0: 4805 ldr r0, [pc, #20] ; (8d8 <SPI_SD_MMC_init+0x1c>)
SPI_SD_MMC_CLOCK_init();
8c2: 4798 blx r3
spi_m_sync_init(&SPI_SD_MMC, SERCOM4);
8c4: f04f 4186 mov.w r1, #1124073472 ; 0x43000000
8c8: 4b04 ldr r3, [pc, #16] ; (8dc <SPI_SD_MMC_init+0x20>)
8ca: 4798 blx r3
SPI_SD_MMC_PORT_init();
}
8cc: e8bd 4010 ldmia.w sp!, {r4, lr}
SPI_SD_MMC_PORT_init();
8d0: 4b03 ldr r3, [pc, #12] ; (8e0 <SPI_SD_MMC_init+0x24>)
8d2: 4718 bx r3
8d4: 00000899 .word 0x00000899
8d8: 200000a4 .word 0x200000a4
8dc: 00000301 .word 0x00000301
8e0: 00000805 .word 0x00000805
000008e4 <delay_driver_init>:
void delay_driver_init(void)
{
delay_init(SysTick);
8e4: 4801 ldr r0, [pc, #4] ; (8ec <delay_driver_init+0x8>)
8e6: 4b02 ldr r3, [pc, #8] ; (8f0 <delay_driver_init+0xc>)
8e8: 4718 bx r3
8ea: bf00 nop
8ec: e000e010 .word 0xe000e010
8f0: 000003f9 .word 0x000003f9
000008f4 <system_init>:
}
void system_init(void)
{
8f4: b510 push {r4, lr}
* Currently the following initialization functions are supported:
* - System clock initialization
*/
static inline void init_mcu(void)
{
_init_chip();
8f6: 4b05 ldr r3, [pc, #20] ; (90c <system_init+0x18>)
8f8: 4798 blx r3
init_mcu();
USART_DBG_init();
8fa: 4b05 ldr r3, [pc, #20] ; (910 <system_init+0x1c>)
8fc: 4798 blx r3
SPI_SD_MMC_init();
8fe: 4b05 ldr r3, [pc, #20] ; (914 <system_init+0x20>)
900: 4798 blx r3
delay_driver_init();
}
902: e8bd 4010 ldmia.w sp!, {r4, lr}
delay_driver_init();
906: 4b04 ldr r3, [pc, #16] ; (918 <system_init+0x24>)
908: 4718 bx r3
90a: bf00 nop
90c: 00000409 .word 0x00000409
910: 000007d9 .word 0x000007d9
914: 000008bd .word 0x000008bd
918: 000008e5 .word 0x000008e5
0000091c <hri_sercomspi_wait_for_sync>:
return ((Sercom *)hw)->I2CS.SYNCBUSY.reg & reg;
}
static inline void hri_sercomspi_wait_for_sync(const void *const hw, hri_sercomspi_syncbusy_reg_t reg)
{
while (((Sercom *)hw)->SPI.SYNCBUSY.reg & reg) {
91c: 69c3 ldr r3, [r0, #28]
91e: 420b tst r3, r1
920: d1fc bne.n 91c <hri_sercomspi_wait_for_sync>
};
}
922: 4770 bx lr
00000924 <hri_sercomusart_wait_for_sync>:
return ((Sercom *)hw)->SPI.SYNCBUSY.reg & reg;
}
static inline void hri_sercomusart_wait_for_sync(const void *const hw, hri_sercomusart_syncbusy_reg_t reg)
{
while (((Sercom *)hw)->USART.SYNCBUSY.reg & reg) {
924: 69c3 ldr r3, [r0, #28]
926: 420b tst r3, r1
928: d1fc bne.n 924 <hri_sercomusart_wait_for_sync>
};
}
92a: 4770 bx lr
0000092c <hri_sercomspi_clear_CTRLA_ENABLE_bit>:
}
static inline void hri_sercomspi_clear_CTRLA_ENABLE_bit(const void *const hw)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->SPI.CTRLA.reg &= ~SERCOM_SPI_CTRLA_ENABLE;
92c: 6802 ldr r2, [r0, #0]
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_SWRST | SERCOM_SPI_SYNCBUSY_ENABLE);
92e: 4b03 ldr r3, [pc, #12] ; (93c <hri_sercomspi_clear_CTRLA_ENABLE_bit+0x10>)
((Sercom *)hw)->SPI.CTRLA.reg &= ~SERCOM_SPI_CTRLA_ENABLE;
930: f022 0202 bic.w r2, r2, #2
934: 6002 str r2, [r0, #0]
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_SWRST | SERCOM_SPI_SYNCBUSY_ENABLE);
936: 2103 movs r1, #3
938: 4718 bx r3
93a: bf00 nop
93c: 0000091d .word 0x0000091d
00000940 <hri_sercomusart_clear_CTRLA_ENABLE_bit>:
}
static inline void hri_sercomusart_clear_CTRLA_ENABLE_bit(const void *const hw)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->USART.CTRLA.reg &= ~SERCOM_USART_CTRLA_ENABLE;
940: 6802 ldr r2, [r0, #0]
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
942: 4b03 ldr r3, [pc, #12] ; (950 <hri_sercomusart_clear_CTRLA_ENABLE_bit+0x10>)
((Sercom *)hw)->USART.CTRLA.reg &= ~SERCOM_USART_CTRLA_ENABLE;
944: f022 0202 bic.w r2, r2, #2
948: 6002 str r2, [r0, #0]
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
94a: 2103 movs r1, #3
94c: 4718 bx r3
94e: bf00 nop
950: 00000925 .word 0x00000925
00000954 <_sercom_get_hardware_index>:
/**
* \brief Retrieve ordinal number of the given sercom hardware instance
*/
static uint8_t _sercom_get_hardware_index(const void *const hw)
{
954: b570 push {r4, r5, r6, lr}
Sercom *const sercom_modules[] = SERCOM_INSTS;
956: 4d0c ldr r5, [pc, #48] ; (988 <_sercom_get_hardware_index+0x34>)
{
958: 4606 mov r6, r0
Sercom *const sercom_modules[] = SERCOM_INSTS;
95a: cd0f ldmia r5!, {r0, r1, r2, r3}
{
95c: b088 sub sp, #32
Sercom *const sercom_modules[] = SERCOM_INSTS;
95e: 466c mov r4, sp
960: c40f stmia r4!, {r0, r1, r2, r3}
962: e895 000f ldmia.w r5, {r0, r1, r2, r3}
966: e884 000f stmia.w r4, {r0, r1, r2, r3}
/* Find index for SERCOM instance. */
for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {
96a: 466a mov r2, sp
96c: 2300 movs r3, #0
if ((uint32_t)hw == (uint32_t)sercom_modules[i]) {
96e: f852 1b04 ldr.w r1, [r2], #4
972: 42b1 cmp r1, r6
974: d102 bne.n 97c <_sercom_get_hardware_index+0x28>
return i;
976: b2d8 uxtb r0, r3
}
}
return 0;
}
978: b008 add sp, #32
97a: bd70 pop {r4, r5, r6, pc}
for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {
97c: 3301 adds r3, #1
97e: 2b08 cmp r3, #8
980: d1f5 bne.n 96e <_sercom_get_hardware_index+0x1a>
return 0;
982: 2000 movs r0, #0
984: e7f8 b.n 978 <_sercom_get_hardware_index+0x24>
986: bf00 nop
988: 000016e0 .word 0x000016e0
0000098c <_usart_init>:
* \param[in] hw The pointer to hardware instance
*
* \return The status of initialization
*/
static int32_t _usart_init(void *const hw)
{
98c: b538 push {r3, r4, r5, lr}
uint8_t sercom_offset = _sercom_get_hardware_index(hw);
98e: 4b1b ldr r3, [pc, #108] ; (9fc <_usart_init+0x70>)
{
990: 4604 mov r4, r0
uint8_t sercom_offset = _sercom_get_hardware_index(hw);
992: 4798 blx r3
if (_usarts[i].number == sercom_offset) {
994: 2802 cmp r0, #2
996: d005 beq.n 9a4 <_usart_init+0x18>
ASSERT(false);
998: 4919 ldr r1, [pc, #100] ; (a00 <_usart_init+0x74>)
99a: 4b1a ldr r3, [pc, #104] ; (a04 <_usart_init+0x78>)
99c: f240 2247 movw r2, #583 ; 0x247
9a0: 2000 movs r0, #0
9a2: 4798 blx r3
return ((Sercom *)hw)->USART.SYNCBUSY.reg & reg;
9a4: 69e3 ldr r3, [r4, #28]
9a6: 4d18 ldr r5, [pc, #96] ; (a08 <_usart_init+0x7c>)
uint8_t i = _get_sercom_index(hw);
if (!hri_sercomusart_is_syncing(hw, SERCOM_USART_SYNCBUSY_SWRST)) {
9a8: f013 0f01 tst.w r3, #1
9ac: d10e bne.n 9cc <_usart_init+0x40>
static inline hri_sercomusart_ctrla_reg_t hri_sercomusart_get_CTRLA_reg(const void *const hw,
hri_sercomusart_ctrla_reg_t mask)
{
uint32_t tmp;
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
9ae: 2103 movs r1, #3
9b0: 4620 mov r0, r4
9b2: 47a8 blx r5
tmp = ((Sercom *)hw)->USART.CTRLA.reg;
9b4: 6823 ldr r3, [r4, #0]
uint32_t mode = _usarts[i].ctrl_a & SERCOM_USART_CTRLA_MODE_Msk;
if (hri_sercomusart_get_CTRLA_reg(hw, SERCOM_USART_CTRLA_ENABLE)) {
9b6: 079b lsls r3, r3, #30
9b8: d503 bpl.n 9c2 <_usart_init+0x36>
hri_sercomusart_clear_CTRLA_ENABLE_bit(hw);
9ba: 4b14 ldr r3, [pc, #80] ; (a0c <_usart_init+0x80>)
9bc: 4798 blx r3
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_ENABLE);
9be: 2102 movs r1, #2
9c0: 47a8 blx r5
}
static inline void hri_sercomusart_write_CTRLA_reg(const void *const hw, hri_sercomusart_ctrla_reg_t data)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->USART.CTRLA.reg = data;
9c2: 2305 movs r3, #5
9c4: 6023 str r3, [r4, #0]
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
9c6: 2103 movs r1, #3
9c8: 4620 mov r0, r4
9ca: 47a8 blx r5
}
hri_sercomusart_write_CTRLA_reg(hw, SERCOM_USART_CTRLA_SWRST | mode);
}
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST);
9cc: 4620 mov r0, r4
9ce: 2101 movs r1, #1
9d0: 47a8 blx r5
((Sercom *)hw)->USART.CTRLA.reg = data;
9d2: 4b0f ldr r3, [pc, #60] ; (a10 <_usart_init+0x84>)
9d4: 6023 str r3, [r4, #0]
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
9d6: 2103 movs r1, #3
9d8: 47a8 blx r5
}
static inline void hri_sercomusart_write_CTRLB_reg(const void *const hw, hri_sercomusart_ctrlb_reg_t data)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->USART.CTRLB.reg = data;
9da: f44f 3340 mov.w r3, #196608 ; 0x30000
9de: 6063 str r3, [r4, #4]
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_MASK);
9e0: 211f movs r1, #31
9e2: 47a8 blx r5
}
static inline void hri_sercomusart_write_CTRLC_reg(const void *const hw, hri_sercomusart_ctrlc_reg_t data)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->USART.CTRLC.reg = data;
9e4: 4b0b ldr r3, [pc, #44] ; (a14 <_usart_init+0x88>)
9e6: 60a3 str r3, [r4, #8]
}
static inline void hri_sercomusart_write_BAUD_reg(const void *const hw, hri_sercomusart_baud_reg_t data)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->USART.BAUD.reg = data;
9e8: f64f 4311 movw r3, #64529 ; 0xfc11
9ec: 81a3 strh r3, [r4, #12]
}
static inline void hri_sercomusart_write_RXPL_reg(const void *const hw, hri_sercomusart_rxpl_reg_t data)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->USART.RXPL.reg = data;
9ee: 2300 movs r3, #0
9f0: 73a3 strb r3, [r4, #14]
hri_sercomusart_write_RXPL_reg(hw, _usarts[i].rxpl);
hri_sercomusart_write_DBGCTRL_reg(hw, _usarts[i].debug_ctrl);
return ERR_NONE;
}
9f2: 4618 mov r0, r3
}
static inline void hri_sercomusart_write_DBGCTRL_reg(const void *const hw, hri_sercomusart_dbgctrl_reg_t data)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->USART.DBGCTRL.reg = data;
9f4: f884 3030 strb.w r3, [r4, #48] ; 0x30
9f8: bd38 pop {r3, r4, r5, pc}
9fa: bf00 nop
9fc: 00000955 .word 0x00000955
a00: 000016c4 .word 0x000016c4
a04: 00000485 .word 0x00000485
a08: 00000925 .word 0x00000925
a0c: 00000941 .word 0x00000941
a10: 40100004 .word 0x40100004
a14: 00700002 .word 0x00700002
00000a18 <_usart_sync_init>:
{
a18: b570 push {r4, r5, r6, lr}
ASSERT(device);
a1a: 4605 mov r5, r0
a1c: 3800 subs r0, #0
{
a1e: 460c mov r4, r1
ASSERT(device);
a20: 4b05 ldr r3, [pc, #20] ; (a38 <_usart_sync_init+0x20>)
a22: 4906 ldr r1, [pc, #24] ; (a3c <_usart_sync_init+0x24>)
a24: bf18 it ne
a26: 2001 movne r0, #1
a28: 22bb movs r2, #187 ; 0xbb
a2a: 4798 blx r3
device->hw = hw;
a2c: 602c str r4, [r5, #0]
return _usart_init(hw);
a2e: 4620 mov r0, r4
a30: 4b03 ldr r3, [pc, #12] ; (a40 <_usart_sync_init+0x28>)
}
a32: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
return _usart_init(hw);
a36: 4718 bx r3
a38: 00000485 .word 0x00000485
a3c: 000016c4 .word 0x000016c4
a40: 0000098d .word 0x0000098d
00000a44 <_usart_sync_enable>:
hri_sercomusart_set_CTRLA_ENABLE_bit(device->hw);
a44: 6800 ldr r0, [r0, #0]
((Sercom *)hw)->USART.CTRLA.reg |= SERCOM_USART_CTRLA_ENABLE;
a46: 6803 ldr r3, [r0, #0]
a48: f043 0302 orr.w r3, r3, #2
a4c: 6003 str r3, [r0, #0]
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
a4e: 2103 movs r1, #3
a50: 4b00 ldr r3, [pc, #0] ; (a54 <_usart_sync_enable+0x10>)
a52: 4718 bx r3
a54: 00000925 .word 0x00000925
00000a58 <_usart_sync_write_byte>:
hri_sercomusart_write_DATA_reg(device->hw, data);
a58: 6803 ldr r3, [r0, #0]
((Sercom *)hw)->USART.DATA.reg = data;
a5a: 6299 str r1, [r3, #40] ; 0x28
}
a5c: 4770 bx lr
00000a5e <_usart_sync_read_byte>:
return hri_sercomusart_read_DATA_reg(device->hw);
a5e: 6803 ldr r3, [r0, #0]
return ((Sercom *)hw)->USART.DATA.reg;
a60: 6a98 ldr r0, [r3, #40] ; 0x28
}
a62: b2c0 uxtb r0, r0
a64: 4770 bx lr
00000a66 <_usart_sync_is_ready_to_send>:
return hri_sercomusart_get_interrupt_DRE_bit(device->hw);
a66: 6803 ldr r3, [r0, #0]
return (((Sercom *)hw)->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_DRE) >> SERCOM_USART_INTFLAG_DRE_Pos;
a68: 7e18 ldrb r0, [r3, #24]
}
a6a: f000 0001 and.w r0, r0, #1
a6e: 4770 bx lr
00000a70 <_usart_sync_is_transmit_done>:
return hri_sercomusart_get_interrupt_TXC_bit(device->hw);
a70: 6803 ldr r3, [r0, #0]
return (((Sercom *)hw)->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_TXC) >> SERCOM_USART_INTFLAG_TXC_Pos;
a72: 7e18 ldrb r0, [r3, #24]
}
a74: f3c0 0040 ubfx r0, r0, #1, #1
a78: 4770 bx lr
00000a7a <_usart_sync_is_byte_received>:
return hri_sercomusart_get_interrupt_RXC_bit(device->hw);
a7a: 6803 ldr r3, [r0, #0]
return (((Sercom *)hw)->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_RXC) >> SERCOM_USART_INTFLAG_RXC_Pos;
a7c: 7e18 ldrb r0, [r3, #24]
}
a7e: f3c0 0080 ubfx r0, r0, #2, #1
a82: 4770 bx lr
00000a84 <_spi_m_sync_init>:
return NULL;
}
int32_t _spi_m_sync_init(struct _spi_m_sync_dev *dev, void *const hw)
{
a84: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
uint8_t n = _sercom_get_hardware_index((const void *)hw_addr);
a88: 4b44 ldr r3, [pc, #272] ; (b9c <_spi_m_sync_init+0x118>)
return NULL;
a8a: 4d45 ldr r5, [pc, #276] ; (ba0 <_spi_m_sync_init+0x11c>)
{
a8c: 4607 mov r7, r0
uint8_t n = _sercom_get_hardware_index((const void *)hw_addr);
a8e: 4608 mov r0, r1
{
a90: 460c mov r4, r1
uint8_t n = _sercom_get_hardware_index((const void *)hw_addr);
a92: 4798 blx r3
return NULL;
a94: 2804 cmp r0, #4
a96: bf18 it ne
a98: 2500 movne r5, #0
const struct sercomspi_regs_cfg *regs = _spi_get_regs((uint32_t)hw);
ASSERT(dev && hw);
a9a: 2f00 cmp r7, #0
a9c: d05d beq.n b5a <_spi_m_sync_init+0xd6>
a9e: 1e20 subs r0, r4, #0
aa0: bf18 it ne
aa2: 2001 movne r0, #1
aa4: 4e3f ldr r6, [pc, #252] ; (ba4 <_spi_m_sync_init+0x120>)
aa6: 4940 ldr r1, [pc, #256] ; (ba8 <_spi_m_sync_init+0x124>)
aa8: f640 123f movw r2, #2367 ; 0x93f
aac: 47b0 blx r6
if (regs == NULL) {
aae: 46b0 mov r8, r6
ab0: 2d00 cmp r5, #0
ab2: d070 beq.n b96 <_spi_m_sync_init+0x112>
return ((Sercom *)hw)->SPI.SYNCBUSY.reg & reg;
ab4: 69e3 ldr r3, [r4, #28]
ab6: 4e3d ldr r6, [pc, #244] ; (bac <_spi_m_sync_init+0x128>)
return ERR_INVALID_ARG;
}
if (!hri_sercomspi_is_syncing(hw, SERCOM_SPI_SYNCBUSY_SWRST)) {
ab8: f013 0f01 tst.w r3, #1
abc: d113 bne.n ae6 <_spi_m_sync_init+0x62>
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_SWRST | SERCOM_SPI_SYNCBUSY_ENABLE);
abe: 2103 movs r1, #3
ac0: 4620 mov r0, r4
uint32_t mode = regs->ctrla & SERCOM_SPI_CTRLA_MODE_Msk;
ac2: f8d5 9000 ldr.w r9, [r5]
ac6: 47b0 blx r6
tmp = ((Sercom *)hw)->SPI.CTRLA.reg;
ac8: 6823 ldr r3, [r4, #0]
if (hri_sercomspi_get_CTRLA_reg(hw, SERCOM_SPI_CTRLA_ENABLE)) {
aca: 079b lsls r3, r3, #30
uint32_t mode = regs->ctrla & SERCOM_SPI_CTRLA_MODE_Msk;
acc: f009 091c and.w r9, r9, #28
if (hri_sercomspi_get_CTRLA_reg(hw, SERCOM_SPI_CTRLA_ENABLE)) {
ad0: d503 bpl.n ada <_spi_m_sync_init+0x56>
hri_sercomspi_clear_CTRLA_ENABLE_bit(hw);
ad2: 4b37 ldr r3, [pc, #220] ; (bb0 <_spi_m_sync_init+0x12c>)
ad4: 4798 blx r3
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_ENABLE);
ad6: 2102 movs r1, #2
ad8: 47b0 blx r6
}
hri_sercomspi_write_CTRLA_reg(hw, SERCOM_SPI_CTRLA_SWRST | mode);
ada: f049 0301 orr.w r3, r9, #1
((Sercom *)hw)->SPI.CTRLA.reg = data;
ade: 6023 str r3, [r4, #0]
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_SWRST | SERCOM_SPI_SYNCBUSY_ENABLE);
ae0: 2103 movs r1, #3
ae2: 4620 mov r0, r4
ae4: 47b0 blx r6
}
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_SWRST);
ae6: 2101 movs r1, #1
ae8: 4620 mov r0, r4
aea: 47b0 blx r6
dev->prvt = hw;
if ((regs->ctrla & SERCOM_SPI_CTRLA_MODE_Msk) == SERCOM_USART_CTRLA_MODE_SPI_SLAVE) {
aec: 682b ldr r3, [r5, #0]
aee: f8df 90c4 ldr.w r9, [pc, #196] ; bb4 <_spi_m_sync_init+0x130>
dev->prvt = hw;
af2: 603c str r4, [r7, #0]
if ((regs->ctrla & SERCOM_SPI_CTRLA_MODE_Msk) == SERCOM_USART_CTRLA_MODE_SPI_SLAVE) {
af4: f003 031c and.w r3, r3, #28
af8: 2b08 cmp r3, #8
afa: d130 bne.n b5e <_spi_m_sync_init+0xda>
ASSERT(hw && regs);
afc: 492a ldr r1, [pc, #168] ; (ba8 <_spi_m_sync_init+0x124>)
afe: 2001 movs r0, #1
b00: f640 121d movw r2, #2333 ; 0x91d
b04: 47c0 blx r8
hw, regs->ctrla & ~(SERCOM_SPI_CTRLA_IBON | SERCOM_SPI_CTRLA_ENABLE | SERCOM_SPI_CTRLA_SWRST));
b06: 682b ldr r3, [r5, #0]
hri_sercomspi_write_CTRLA_reg(
b08: ea03 0309 and.w r3, r3, r9
((Sercom *)hw)->SPI.CTRLA.reg = data;
b0c: 6023 str r3, [r4, #0]
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_SWRST | SERCOM_SPI_SYNCBUSY_ENABLE);
b0e: 2103 movs r1, #3
b10: 4620 mov r0, r4
b12: 47b0 blx r6
(regs->ctrlb & ~(SERCOM_SPI_CTRLB_MSSEN))
b14: 686b ldr r3, [r5, #4]
| (SERCOM_SPI_CTRLB_RXEN | SERCOM_SPI_CTRLB_SSDE | SERCOM_SPI_CTRLB_PLOADEN));
b16: f423 3308 bic.w r3, r3, #139264 ; 0x22000
b1a: f423 7310 bic.w r3, r3, #576 ; 0x240
hri_sercomspi_write_CTRLB_reg(hw,
b1e: f443 3300 orr.w r3, r3, #131072 ; 0x20000
b22: f443 7310 orr.w r3, r3, #576 ; 0x240
((Sercom *)hw)->SPI.CTRLB.reg = data;
b26: 6063 str r3, [r4, #4]
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_MASK);
b28: 2117 movs r1, #23
b2a: 47b0 blx r6
hri_sercomspi_write_ADDR_reg(hw, regs->addr);
b2c: 68ab ldr r3, [r5, #8]
((Sercom *)hw)->SPI.ADDR.reg = data;
b2e: 6263 str r3, [r4, #36] ; 0x24
hri_sercomspi_write_DBGCTRL_reg(hw, regs->dbgctrl);
b30: 7b6b ldrb r3, [r5, #13]
((Sercom *)hw)->SPI.DBGCTRL.reg = data;
b32: f884 3030 strb.w r3, [r4, #48] ; 0x30
return ((Sercom *)hw)->SPI.SYNCBUSY.reg & reg;
b36: 69e3 ldr r3, [r4, #28]
while (hri_sercomspi_is_syncing(hw, 0xFFFFFFFF))
b38: 2b00 cmp r3, #0
b3a: d1fc bne.n b36 <_spi_m_sync_init+0xb2>
} else {
_spi_load_regs_master(hw, regs);
}
/* Load character size from default hardware configuration */
dev->char_size = ((regs->ctrlb & SERCOM_SPI_CTRLB_CHSIZE_Msk) == 0) ? 1 : 2;
b3c: 686b ldr r3, [r5, #4]
b3e: f013 0f07 tst.w r3, #7
b42: bf0c ite eq
b44: 2301 moveq r3, #1
b46: 2302 movne r3, #2
b48: 713b strb r3, [r7, #4]
dev->dummy_byte = regs->dummy_byte;
b4a: 7bab ldrb r3, [r5, #14]
b4c: 7bea ldrb r2, [r5, #15]
b4e: ea43 2302 orr.w r3, r3, r2, lsl #8
b52: 80fb strh r3, [r7, #6]
return ERR_NONE;
b54: 2000 movs r0, #0
}
b56: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
ASSERT(dev && hw);
b5a: 4638 mov r0, r7
b5c: e7a2 b.n aa4 <_spi_m_sync_init+0x20>
ASSERT(hw && regs);
b5e: 4912 ldr r1, [pc, #72] ; (ba8 <_spi_m_sync_init+0x124>)
b60: 2001 movs r0, #1
b62: f640 1209 movw r2, #2313 ; 0x909
b66: 47c0 blx r8
hw, regs->ctrla & ~(SERCOM_SPI_CTRLA_IBON | SERCOM_SPI_CTRLA_ENABLE | SERCOM_SPI_CTRLA_SWRST));
b68: 682b ldr r3, [r5, #0]
hri_sercomspi_write_CTRLA_reg(
b6a: ea03 0309 and.w r3, r3, r9
((Sercom *)hw)->SPI.CTRLA.reg = data;
b6e: 6023 str r3, [r4, #0]
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_SWRST | SERCOM_SPI_SYNCBUSY_ENABLE);
b70: 2103 movs r1, #3
b72: 4620 mov r0, r4
b74: 47b0 blx r6
(regs->ctrlb
b76: 686b ldr r3, [r5, #4]
| (SERCOM_SPI_CTRLB_RXEN));
b78: f423 3338 bic.w r3, r3, #188416 ; 0x2e000
b7c: f423 7310 bic.w r3, r3, #576 ; 0x240
hri_sercomspi_write_CTRLB_reg(
b80: f443 3300 orr.w r3, r3, #131072 ; 0x20000
((Sercom *)hw)->SPI.CTRLB.reg = data;
b84: 6063 str r3, [r4, #4]
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_MASK);
b86: 2117 movs r1, #23
b88: 47b0 blx r6
hri_sercomspi_write_BAUD_reg(hw, regs->baud);
b8a: 7b2b ldrb r3, [r5, #12]
((Sercom *)hw)->SPI.BAUD.reg = data;
b8c: 7323 strb r3, [r4, #12]
hri_sercomspi_write_DBGCTRL_reg(hw, regs->dbgctrl);
b8e: 7b6b ldrb r3, [r5, #13]
((Sercom *)hw)->SPI.DBGCTRL.reg = data;
b90: f884 3030 strb.w r3, [r4, #48] ; 0x30
}
b94: e7d2 b.n b3c <_spi_m_sync_init+0xb8>
return ERR_INVALID_ARG;
b96: f06f 000c mvn.w r0, #12
b9a: e7dc b.n b56 <_spi_m_sync_init+0xd2>
b9c: 00000955 .word 0x00000955
ba0: 00001718 .word 0x00001718
ba4: 00000485 .word 0x00000485
ba8: 000016c4 .word 0x000016c4
bac: 0000091d .word 0x0000091d
bb0: 0000092d .word 0x0000092d
bb4: fffffefc .word 0xfffffefc
00000bb8 <_spi_m_sync_trans>:
return ERR_NONE;
}
int32_t _spi_m_sync_trans(struct _spi_m_sync_dev *dev, const struct spi_msg *msg)
{
bb8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
void * hw = dev->prvt;
bbc: 6804 ldr r4, [r0, #0]
int32_t rc = 0;
struct _spi_trans_ctrl ctrl = {msg->txbuf, msg->rxbuf, 0, 0, dev->char_size};
bbe: f890 8004 ldrb.w r8, [r0, #4]
ASSERT(dev && hw);
bc2: 4b2a ldr r3, [pc, #168] ; (c6c <_spi_m_sync_trans+0xb4>)
{
bc4: 4607 mov r7, r0
ASSERT(dev && hw);
bc6: 1e20 subs r0, r4, #0
struct _spi_trans_ctrl ctrl = {msg->txbuf, msg->rxbuf, 0, 0, dev->char_size};
bc8: e9d1 6500 ldrd r6, r5, [r1]
ASSERT(dev && hw);
bcc: f640 22a3 movw r2, #2723 ; 0xaa3
bd0: bf18 it ne
bd2: 2001 movne r0, #1
{
bd4: 4689 mov r9, r1
ASSERT(dev && hw);
bd6: 4926 ldr r1, [pc, #152] ; (c70 <_spi_m_sync_trans+0xb8>)
bd8: 4798 blx r3
return ((Sercom *)hw)->SPI.SYNCBUSY.reg & reg;
bda: 69e2 ldr r2, [r4, #28]
/* If settings are not applied (pending), we can not go on */
if (hri_sercomspi_is_syncing(
bdc: f012 0207 ands.w r2, r2, #7
be0: d13e bne.n c60 <_spi_m_sync_trans+0xa8>
hri_sercomspi_wait_for_sync(hw, SERCOM_SPI_SYNCBUSY_SWRST | SERCOM_SPI_SYNCBUSY_ENABLE);
be2: 4b24 ldr r3, [pc, #144] ; (c74 <_spi_m_sync_trans+0xbc>)
be4: 2103 movs r1, #3
be6: 4620 mov r0, r4
be8: 4798 blx r3
tmp = ((Sercom *)hw)->SPI.CTRLA.reg;
bea: 6823 ldr r3, [r4, #0]
hw, (SERCOM_SPI_SYNCBUSY_SWRST | SERCOM_SPI_SYNCBUSY_ENABLE | SERCOM_SPI_SYNCBUSY_CTRLB))) {
return ERR_BUSY;
}
/* SPI must be enabled to start synchronous transfer */
if (!hri_sercomspi_get_CTRLA_ENABLE_bit(hw)) {
bec: 0799 lsls r1, r3, #30
bee: d53a bpl.n c66 <_spi_m_sync_trans+0xae>
struct _spi_trans_ctrl ctrl = {msg->txbuf, msg->rxbuf, 0, 0, dev->char_size};
bf0: 4611 mov r1, r2
return ((Sercom *)hw)->SPI.INTFLAG.reg;
bf2: 7e23 ldrb r3, [r4, #24]
bf4: b2d8 uxtb r0, r3
if (!(iflag & SERCOM_SPI_INTFLAG_RXC)) {
bf6: 075b lsls r3, r3, #29
bf8: d40f bmi.n c1a <_spi_m_sync_trans+0x62>
uint32_t iflag = hri_sercomspi_read_INTFLAG_reg(hw);
if (!_spi_rx_check_and_receive(hw, iflag, &ctrl)) {
/* In master mode, do not start next byte before previous byte received
* to make better output waveform */
if (ctrl.rxcnt >= ctrl.txcnt) {
bfa: 428a cmp r2, r1
bfc: d818 bhi.n c30 <_spi_m_sync_trans+0x78>
if (!(SERCOM_SPI_INTFLAG_DRE & iflag)) {
bfe: 07c3 lsls r3, r0, #31
c00: d516 bpl.n c30 <_spi_m_sync_trans+0x78>
_spi_tx_check_and_send(hw, iflag, &ctrl, dev->dummy_byte);
c02: 88fb ldrh r3, [r7, #6]
if (ctrl->txbuf) {
c04: b136 cbz r6, c14 <_spi_m_sync_trans+0x5c>
if (ctrl->char_size > 1) {
c06: f1b8 0f01 cmp.w r8, #1
data = *ctrl->txbuf++;
c0a: 7833 ldrb r3, [r6, #0]
data |= (*ctrl->txbuf) << 8;
c0c: bf8c ite hi
c0e: f836 3b02 ldrhhi.w r3, [r6], #2
data = *ctrl->txbuf++;
c12: 3601 addls r6, #1
ctrl->txcnt++;
c14: 3201 adds r2, #1
((Sercom *)hw)->SPI.DATA.reg = data;
c16: 62a3 str r3, [r4, #40] ; 0x28
}
c18: e00a b.n c30 <_spi_m_sync_trans+0x78>
return ((Sercom *)hw)->SPI.DATA.reg;
c1a: 6aa3 ldr r3, [r4, #40] ; 0x28
if (ctrl->rxbuf) {
c1c: b13d cbz r5, c2e <_spi_m_sync_trans+0x76>
if (ctrl->char_size > 1) {
c1e: f1b8 0f01 cmp.w r8, #1
*ctrl->rxbuf++ = (uint8_t)data;
c22: 702b strb r3, [r5, #0]
*ctrl->rxbuf++ = (uint8_t)(data >> 8);
c24: bf85 ittet hi
c26: 0a1b lsrhi r3, r3, #8
c28: 706b strbhi r3, [r5, #1]
*ctrl->rxbuf++ = (uint8_t)data;
c2a: 3501 addls r5, #1
*ctrl->rxbuf++ = (uint8_t)(data >> 8);
c2c: 3502 addhi r5, #2
ctrl->rxcnt++;
c2e: 3101 adds r1, #1
if (SERCOM_SPI_INTFLAG_ERROR & iflag) {
c30: 0600 lsls r0, r0, #24
c32: d407 bmi.n c44 <_spi_m_sync_trans+0x8c>
rc = _spi_err_check(iflag, hw);
if (rc < 0) {
break;
}
if (ctrl.txcnt >= msg->size && ctrl.rxcnt >= msg->size) {
c34: f8d9 3008 ldr.w r3, [r9, #8]
c38: 4293 cmp r3, r2
c3a: d8da bhi.n bf2 <_spi_m_sync_trans+0x3a>
c3c: 428b cmp r3, r1
c3e: d8d8 bhi.n bf2 <_spi_m_sync_trans+0x3a>
rc = ctrl.txcnt;
c40: 4610 mov r0, r2
while (!(hri_sercomspi_get_INTFLAG_reg(hw, SERCOM_SPI_INTFLAG_TXC | SERCOM_SPI_INTFLAG_DRE))) {
c42: e006 b.n c52 <_spi_m_sync_trans+0x9a>
}
static inline void hri_sercomspi_clear_STATUS_reg(const void *const hw, hri_sercomspi_status_reg_t mask)
{
SERCOM_CRITICAL_SECTION_ENTER();
((Sercom *)hw)->SPI.STATUS.reg = mask;
c44: f64f 73ff movw r3, #65535 ; 0xffff
c48: 8363 strh r3, [r4, #26]
((Sercom *)hw)->SPI.INTFLAG.reg = mask;
c4a: 2380 movs r3, #128 ; 0x80
c4c: 7623 strb r3, [r4, #24]
return ERR_OVERFLOW;
c4e: f06f 0012 mvn.w r0, #18
tmp = ((Sercom *)hw)->SPI.INTFLAG.reg;
c52: 7e23 ldrb r3, [r4, #24]
while (!(hri_sercomspi_get_INTFLAG_reg(hw, SERCOM_SPI_INTFLAG_TXC | SERCOM_SPI_INTFLAG_DRE))) {
c54: 079b lsls r3, r3, #30
c56: d0fc beq.n c52 <_spi_m_sync_trans+0x9a>
((Sercom *)hw)->SPI.INTFLAG.reg = mask;
c58: 2303 movs r3, #3
c5a: 7623 strb r3, [r4, #24]
}
/* Wait until SPI bus idle */
_spi_wait_bus_idle(hw);
return rc;
}
c5c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
return ERR_BUSY;
c60: f06f 0003 mvn.w r0, #3
c64: e7fa b.n c5c <_spi_m_sync_trans+0xa4>
return ERR_NOT_INITIALIZED;
c66: f06f 0013 mvn.w r0, #19
c6a: e7f7 b.n c5c <_spi_m_sync_trans+0xa4>
c6c: 00000485 .word 0x00000485
c70: 000016c4 .word 0x000016c4
c74: 0000091d .word 0x0000091d
00000c78 <atmel_start_init>:
/**
* Initializes MCU, drivers and middleware in the project
**/
void atmel_start_init(void)
{
system_init();
c78: 4b00 ldr r3, [pc, #0] ; (c7c <atmel_start_init+0x4>)
c7a: 4718 bx r3
c7c: 000008f5 .word 0x000008f5
00000c80 <pprintf>:
return 0;
}
int pprintf(const char* fmt, ...)
{
c80: b40f push {r0, r1, r2, r3}
c82: b530 push {r4, r5, lr}
c84: b0c3 sub sp, #268 ; 0x10c
size_t size_str = strlen(fmt);
c86: 4c11 ldr r4, [pc, #68] ; (ccc <pprintf+0x4c>)
{
c88: 9d46 ldr r5, [sp, #280] ; 0x118
size_t size_str = strlen(fmt);
c8a: 4628 mov r0, r5
c8c: 47a0 blx r4
if (size_str >= MAX_PRINTF_BUFFER)
c8e: 28ff cmp r0, #255 ; 0xff
c90: d818 bhi.n cc4 <pprintf+0x44>
{
return -1;
}
uint8_t printf_buffer[MAX_PRINTF_BUFFER];
memset(printf_buffer, '\0', MAX_PRINTF_BUFFER);
c92: 4b0f ldr r3, [pc, #60] ; (cd0 <pprintf+0x50>)
c94: f44f 7280 mov.w r2, #256 ; 0x100
c98: 2100 movs r1, #0
c9a: a802 add r0, sp, #8
c9c: 4798 blx r3
va_list args;
va_start(args, fmt);
c9e: aa47 add r2, sp, #284 ; 0x11c
vsprintf((char*)printf_buffer, fmt, args);
ca0: 4b0c ldr r3, [pc, #48] ; (cd4 <pprintf+0x54>)
va_start(args, fmt);
ca2: 9201 str r2, [sp, #4]
vsprintf((char*)printf_buffer, fmt, args);
ca4: 4629 mov r1, r5
ca6: a802 add r0, sp, #8
ca8: 4798 blx r3
va_end(args);
return io_write(debug_io, (const uint8_t*)printf_buffer, strlen((const char*)printf_buffer));
caa: a802 add r0, sp, #8
cac: 47a0 blx r4
cae: 4b0a ldr r3, [pc, #40] ; (cd8 <pprintf+0x58>)
cb0: b282 uxth r2, r0
cb2: a902 add r1, sp, #8
cb4: 6818 ldr r0, [r3, #0]
cb6: 4b09 ldr r3, [pc, #36] ; (cdc <pprintf+0x5c>)
cb8: 4798 blx r3
}
cba: b043 add sp, #268 ; 0x10c
cbc: e8bd 4030 ldmia.w sp!, {r4, r5, lr}
cc0: b004 add sp, #16
cc2: 4770 bx lr
return -1;
cc4: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
cc8: e7f7 b.n cba <pprintf+0x3a>
cca: bf00 nop
ccc: 00000d89 .word 0x00000d89
cd0: 00000d79 .word 0x00000d79
cd4: 00000dc5 .word 0x00000dc5
cd8: 200000bc .word 0x200000bc
cdc: 000002a5 .word 0x000002a5
00000ce0 <pdebug_init>:
{
ce0: b510 push {r4, lr}
usart_sync_get_io_descriptor(&USART_DBG, &debug_io);
ce2: 4c06 ldr r4, [pc, #24] ; (cfc <pdebug_init+0x1c>)
ce4: 4906 ldr r1, [pc, #24] ; (d00 <pdebug_init+0x20>)
ce6: 4b07 ldr r3, [pc, #28] ; (d04 <pdebug_init+0x24>)
ce8: 4620 mov r0, r4
cea: 4798 blx r3
usart_sync_enable(&USART_DBG);
cec: 4b06 ldr r3, [pc, #24] ; (d08 <pdebug_init+0x28>)
cee: 4620 mov r0, r4
cf0: 4798 blx r3
printf("Debug Initialized\n");
cf2: 4b06 ldr r3, [pc, #24] ; (d0c <pdebug_init+0x2c>)
cf4: 4806 ldr r0, [pc, #24] ; (d10 <pdebug_init+0x30>)
cf6: 4798 blx r3
}
cf8: 2000 movs r0, #0
cfa: bd10 pop {r4, pc}
cfc: 20000098 .word 0x20000098
d00: 200000bc .word 0x200000bc
d04: 00000609 .word 0x00000609
d08: 000005dd .word 0x000005dd
d0c: 00000c81 .word 0x00000c81
d10: 00001729 .word 0x00001729
00000d14 <__libc_init_array>:
d14: b570 push {r4, r5, r6, lr}
d16: 4d0d ldr r5, [pc, #52] ; (d4c <__libc_init_array+0x38>)
d18: 4c0d ldr r4, [pc, #52] ; (d50 <__libc_init_array+0x3c>)
d1a: 1b64 subs r4, r4, r5
d1c: 10a4 asrs r4, r4, #2
d1e: 2600 movs r6, #0
d20: 42a6 cmp r6, r4
d22: d109 bne.n d38 <__libc_init_array+0x24>
d24: 4d0b ldr r5, [pc, #44] ; (d54 <__libc_init_array+0x40>)
d26: 4c0c ldr r4, [pc, #48] ; (d58 <__libc_init_array+0x44>)
d28: f000 fd64 bl 17f4 <_init>
d2c: 1b64 subs r4, r4, r5
d2e: 10a4 asrs r4, r4, #2
d30: 2600 movs r6, #0
d32: 42a6 cmp r6, r4
d34: d105 bne.n d42 <__libc_init_array+0x2e>
d36: bd70 pop {r4, r5, r6, pc}
d38: f855 3b04 ldr.w r3, [r5], #4
d3c: 4798 blx r3
d3e: 3601 adds r6, #1
d40: e7ee b.n d20 <__libc_init_array+0xc>
d42: f855 3b04 ldr.w r3, [r5], #4
d46: 4798 blx r3
d48: 3601 adds r6, #1
d4a: e7f2 b.n d32 <__libc_init_array+0x1e>
d4c: 00001800 .word 0x00001800
d50: 00001800 .word 0x00001800
d54: 00001800 .word 0x00001800
d58: 00001804 .word 0x00001804
00000d5c <memcpy>:
d5c: 440a add r2, r1
d5e: 4291 cmp r1, r2
d60: f100 33ff add.w r3, r0, #4294967295 ; 0xffffffff
d64: d100 bne.n d68 <memcpy+0xc>
d66: 4770 bx lr
d68: b510 push {r4, lr}
d6a: f811 4b01 ldrb.w r4, [r1], #1
d6e: f803 4f01 strb.w r4, [r3, #1]!
d72: 4291 cmp r1, r2
d74: d1f9 bne.n d6a <memcpy+0xe>
d76: bd10 pop {r4, pc}
00000d78 <memset>:
d78: 4402 add r2, r0
d7a: 4603 mov r3, r0
d7c: 4293 cmp r3, r2
d7e: d100 bne.n d82 <memset+0xa>
d80: 4770 bx lr
d82: f803 1b01 strb.w r1, [r3], #1
d86: e7f9 b.n d7c <memset+0x4>
00000d88 <strlen>:
d88: 4603 mov r3, r0
d8a: f813 2b01 ldrb.w r2, [r3], #1
d8e: 2a00 cmp r2, #0
d90: d1fb bne.n d8a <strlen+0x2>
d92: 1a18 subs r0, r3, r0
d94: 3801 subs r0, #1
d96: 4770 bx lr
00000d98 <_vsiprintf_r>:
d98: b500 push {lr}
d9a: b09b sub sp, #108 ; 0x6c
d9c: 9100 str r1, [sp, #0]
d9e: 9104 str r1, [sp, #16]
da0: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000
da4: 9105 str r1, [sp, #20]
da6: 9102 str r1, [sp, #8]
da8: 4905 ldr r1, [pc, #20] ; (dc0 <_vsiprintf_r+0x28>)
daa: 9103 str r1, [sp, #12]
dac: 4669 mov r1, sp
dae: f000 f8cb bl f48 <_svfiprintf_r>
db2: 9b00 ldr r3, [sp, #0]
db4: 2200 movs r2, #0
db6: 701a strb r2, [r3, #0]
db8: b01b add sp, #108 ; 0x6c
dba: f85d fb04 ldr.w pc, [sp], #4
dbe: bf00 nop
dc0: ffff0208 .word 0xffff0208
00000dc4 <vsiprintf>:
dc4: 4613 mov r3, r2
dc6: 460a mov r2, r1
dc8: 4601 mov r1, r0
dca: 4802 ldr r0, [pc, #8] ; (dd4 <vsiprintf+0x10>)
dcc: 6800 ldr r0, [r0, #0]
dce: f7ff bfe3 b.w d98 <_vsiprintf_r>
dd2: bf00 nop
dd4: 20000000 .word 0x20000000
00000dd8 <__retarget_lock_acquire_recursive>:
dd8: 4770 bx lr
00000dda <__retarget_lock_release_recursive>:
dda: 4770 bx lr
00000ddc <_malloc_r>:
ddc: b5f8 push {r3, r4, r5, r6, r7, lr}
dde: 1ccd adds r5, r1, #3
de0: f025 0503 bic.w r5, r5, #3
de4: 3508 adds r5, #8
de6: 2d0c cmp r5, #12
de8: bf38 it cc
dea: 250c movcc r5, #12
dec: 2d00 cmp r5, #0
dee: 4606 mov r6, r0
df0: db01 blt.n df6 <_malloc_r+0x1a>
df2: 42a9 cmp r1, r5
df4: d903 bls.n dfe <_malloc_r+0x22>
df6: 230c movs r3, #12
df8: 6033 str r3, [r6, #0]
dfa: 2000 movs r0, #0
dfc: bdf8 pop {r3, r4, r5, r6, r7, pc}
dfe: f000 fbb1 bl 1564 <__malloc_lock>
e02: 4921 ldr r1, [pc, #132] ; (e88 <_malloc_r+0xac>)
e04: 680a ldr r2, [r1, #0]
e06: 4614 mov r4, r2
e08: b99c cbnz r4, e32 <_malloc_r+0x56>
e0a: 4f20 ldr r7, [pc, #128] ; (e8c <_malloc_r+0xb0>)
e0c: 683b ldr r3, [r7, #0]
e0e: b923 cbnz r3, e1a <_malloc_r+0x3e>
e10: 4621 mov r1, r4
e12: 4630 mov r0, r6
e14: f000 fb2c bl 1470 <_sbrk_r>
e18: 6038 str r0, [r7, #0]
e1a: 4629 mov r1, r5
e1c: 4630 mov r0, r6
e1e: f000 fb27 bl 1470 <_sbrk_r>
e22: 1c43 adds r3, r0, #1
e24: d123 bne.n e6e <_malloc_r+0x92>
e26: 230c movs r3, #12
e28: 6033 str r3, [r6, #0]
e2a: 4630 mov r0, r6
e2c: f000 fba0 bl 1570 <__malloc_unlock>
e30: e7e3 b.n dfa <_malloc_r+0x1e>
e32: 6823 ldr r3, [r4, #0]
e34: 1b5b subs r3, r3, r5
e36: d417 bmi.n e68 <_malloc_r+0x8c>
e38: 2b0b cmp r3, #11
e3a: d903 bls.n e44 <_malloc_r+0x68>
e3c: 6023 str r3, [r4, #0]
e3e: 441c add r4, r3
e40: 6025 str r5, [r4, #0]
e42: e004 b.n e4e <_malloc_r+0x72>
e44: 6863 ldr r3, [r4, #4]
e46: 42a2 cmp r2, r4
e48: bf0c ite eq
e4a: 600b streq r3, [r1, #0]
e4c: 6053 strne r3, [r2, #4]
e4e: 4630 mov r0, r6
e50: f000 fb8e bl 1570 <__malloc_unlock>
e54: f104 000b add.w r0, r4, #11
e58: 1d23 adds r3, r4, #4
e5a: f020 0007 bic.w r0, r0, #7
e5e: 1ac2 subs r2, r0, r3
e60: d0cc beq.n dfc <_malloc_r+0x20>
e62: 1a1b subs r3, r3, r0
e64: 50a3 str r3, [r4, r2]
e66: e7c9 b.n dfc <_malloc_r+0x20>
e68: 4622 mov r2, r4
e6a: 6864 ldr r4, [r4, #4]
e6c: e7cc b.n e08 <_malloc_r+0x2c>
e6e: 1cc4 adds r4, r0, #3
e70: f024 0403 bic.w r4, r4, #3
e74: 42a0 cmp r0, r4
e76: d0e3 beq.n e40 <_malloc_r+0x64>
e78: 1a21 subs r1, r4, r0
e7a: 4630 mov r0, r6
e7c: f000 faf8 bl 1470 <_sbrk_r>
e80: 3001 adds r0, #1
e82: d1dd bne.n e40 <_malloc_r+0x64>
e84: e7cf b.n e26 <_malloc_r+0x4a>
e86: bf00 nop
e88: 200000c0 .word 0x200000c0
e8c: 200000c4 .word 0x200000c4
00000e90 <__ssputs_r>:
e90: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
e94: 688e ldr r6, [r1, #8]
e96: 429e cmp r6, r3
e98: 4682 mov sl, r0
e9a: 460c mov r4, r1
e9c: 4690 mov r8, r2
e9e: 461f mov r7, r3
ea0: d838 bhi.n f14 <__ssputs_r+0x84>
ea2: 898a ldrh r2, [r1, #12]
ea4: f412 6f90 tst.w r2, #1152 ; 0x480
ea8: d032 beq.n f10 <__ssputs_r+0x80>
eaa: 6825 ldr r5, [r4, #0]
eac: 6909 ldr r1, [r1, #16]
eae: eba5 0901 sub.w r9, r5, r1
eb2: 6965 ldr r5, [r4, #20]
eb4: eb05 0545 add.w r5, r5, r5, lsl #1
eb8: eb05 75d5 add.w r5, r5, r5, lsr #31
ebc: 3301 adds r3, #1
ebe: 444b add r3, r9
ec0: 106d asrs r5, r5, #1
ec2: 429d cmp r5, r3
ec4: bf38 it cc
ec6: 461d movcc r5, r3
ec8: 0553 lsls r3, r2, #21
eca: d531 bpl.n f30 <__ssputs_r+0xa0>
ecc: 4629 mov r1, r5
ece: f7ff ff85 bl ddc <_malloc_r>
ed2: 4606 mov r6, r0
ed4: b950 cbnz r0, eec <__ssputs_r+0x5c>
ed6: 230c movs r3, #12
ed8: f8ca 3000 str.w r3, [sl]
edc: 89a3 ldrh r3, [r4, #12]
ede: f043 0340 orr.w r3, r3, #64 ; 0x40
ee2: 81a3 strh r3, [r4, #12]
ee4: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
ee8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
eec: 6921 ldr r1, [r4, #16]
eee: 464a mov r2, r9
ef0: f7ff ff34 bl d5c <memcpy>
ef4: 89a3 ldrh r3, [r4, #12]
ef6: f423 6390 bic.w r3, r3, #1152 ; 0x480
efa: f043 0380 orr.w r3, r3, #128 ; 0x80
efe: 81a3 strh r3, [r4, #12]
f00: 6126 str r6, [r4, #16]
f02: 6165 str r5, [r4, #20]
f04: 444e add r6, r9
f06: eba5 0509 sub.w r5, r5, r9
f0a: 6026 str r6, [r4, #0]
f0c: 60a5 str r5, [r4, #8]
f0e: 463e mov r6, r7
f10: 42be cmp r6, r7
f12: d900 bls.n f16 <__ssputs_r+0x86>
f14: 463e mov r6, r7
f16: 4632 mov r2, r6
f18: 6820 ldr r0, [r4, #0]
f1a: 4641 mov r1, r8
f1c: f000 fb08 bl 1530 <memmove>
f20: 68a3 ldr r3, [r4, #8]
f22: 6822 ldr r2, [r4, #0]
f24: 1b9b subs r3, r3, r6
f26: 4432 add r2, r6
f28: 60a3 str r3, [r4, #8]
f2a: 6022 str r2, [r4, #0]
f2c: 2000 movs r0, #0
f2e: e7db b.n ee8 <__ssputs_r+0x58>
f30: 462a mov r2, r5
f32: f000 fb71 bl 1618 <_realloc_r>
f36: 4606 mov r6, r0
f38: 2800 cmp r0, #0
f3a: d1e1 bne.n f00 <__ssputs_r+0x70>
f3c: 6921 ldr r1, [r4, #16]
f3e: 4650 mov r0, sl
f40: f000 fb1c bl 157c <_free_r>
f44: e7c7 b.n ed6 <__ssputs_r+0x46>
...
00000f48 <_svfiprintf_r>:
f48: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
f4c: 4698 mov r8, r3
f4e: 898b ldrh r3, [r1, #12]
f50: 061b lsls r3, r3, #24
f52: b09d sub sp, #116 ; 0x74
f54: 4607 mov r7, r0
f56: 460d mov r5, r1
f58: 4614 mov r4, r2
f5a: d50e bpl.n f7a <_svfiprintf_r+0x32>
f5c: 690b ldr r3, [r1, #16]
f5e: b963 cbnz r3, f7a <_svfiprintf_r+0x32>
f60: 2140 movs r1, #64 ; 0x40
f62: f7ff ff3b bl ddc <_malloc_r>
f66: 6028 str r0, [r5, #0]
f68: 6128 str r0, [r5, #16]
f6a: b920 cbnz r0, f76 <_svfiprintf_r+0x2e>
f6c: 230c movs r3, #12
f6e: 603b str r3, [r7, #0]
f70: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
f74: e0d1 b.n 111a <_svfiprintf_r+0x1d2>
f76: 2340 movs r3, #64 ; 0x40
f78: 616b str r3, [r5, #20]
f7a: 2300 movs r3, #0
f7c: 9309 str r3, [sp, #36] ; 0x24
f7e: 2320 movs r3, #32
f80: f88d 3029 strb.w r3, [sp, #41] ; 0x29
f84: f8cd 800c str.w r8, [sp, #12]
f88: 2330 movs r3, #48 ; 0x30
f8a: f8df 81a8 ldr.w r8, [pc, #424] ; 1134 <_svfiprintf_r+0x1ec>
f8e: f88d 302a strb.w r3, [sp, #42] ; 0x2a
f92: f04f 0901 mov.w r9, #1
f96: 4623 mov r3, r4
f98: 469a mov sl, r3
f9a: f813 2b01 ldrb.w r2, [r3], #1
f9e: b10a cbz r2, fa4 <_svfiprintf_r+0x5c>
fa0: 2a25 cmp r2, #37 ; 0x25
fa2: d1f9 bne.n f98 <_svfiprintf_r+0x50>
fa4: ebba 0b04 subs.w fp, sl, r4
fa8: d00b beq.n fc2 <_svfiprintf_r+0x7a>
faa: 465b mov r3, fp
fac: 4622 mov r2, r4
fae: 4629 mov r1, r5
fb0: 4638 mov r0, r7
fb2: f7ff ff6d bl e90 <__ssputs_r>
fb6: 3001 adds r0, #1
fb8: f000 80aa beq.w 1110 <_svfiprintf_r+0x1c8>
fbc: 9a09 ldr r2, [sp, #36] ; 0x24
fbe: 445a add r2, fp
fc0: 9209 str r2, [sp, #36] ; 0x24
fc2: f89a 3000 ldrb.w r3, [sl]
fc6: 2b00 cmp r3, #0
fc8: f000 80a2 beq.w 1110 <_svfiprintf_r+0x1c8>
fcc: 2300 movs r3, #0
fce: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff
fd2: e9cd 2305 strd r2, r3, [sp, #20]
fd6: f10a 0a01 add.w sl, sl, #1
fda: 9304 str r3, [sp, #16]
fdc: 9307 str r3, [sp, #28]
fde: f88d 3053 strb.w r3, [sp, #83] ; 0x53
fe2: 931a str r3, [sp, #104] ; 0x68
fe4: 4654 mov r4, sl
fe6: 2205 movs r2, #5
fe8: f814 1b01 ldrb.w r1, [r4], #1
fec: 4851 ldr r0, [pc, #324] ; (1134 <_svfiprintf_r+0x1ec>)
fee: f000 fa4f bl 1490 <memchr>
ff2: 9a04 ldr r2, [sp, #16]
ff4: b9d8 cbnz r0, 102e <_svfiprintf_r+0xe6>
ff6: 06d0 lsls r0, r2, #27
ff8: bf44 itt mi
ffa: 2320 movmi r3, #32
ffc: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53
1000: 0711 lsls r1, r2, #28
1002: bf44 itt mi
1004: 232b movmi r3, #43 ; 0x2b
1006: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53
100a: f89a 3000 ldrb.w r3, [sl]
100e: 2b2a cmp r3, #42 ; 0x2a
1010: d015 beq.n 103e <_svfiprintf_r+0xf6>
1012: 9a07 ldr r2, [sp, #28]
1014: 4654 mov r4, sl
1016: 2000 movs r0, #0
1018: f04f 0c0a mov.w ip, #10
101c: 4621 mov r1, r4
101e: f811 3b01 ldrb.w r3, [r1], #1
1022: 3b30 subs r3, #48 ; 0x30
1024: 2b09 cmp r3, #9
1026: d94e bls.n 10c6 <_svfiprintf_r+0x17e>
1028: b1b0 cbz r0, 1058 <_svfiprintf_r+0x110>
102a: 9207 str r2, [sp, #28]
102c: e014 b.n 1058 <_svfiprintf_r+0x110>
102e: eba0 0308 sub.w r3, r0, r8
1032: fa09 f303 lsl.w r3, r9, r3
1036: 4313 orrs r3, r2
1038: 9304 str r3, [sp, #16]
103a: 46a2 mov sl, r4
103c: e7d2 b.n fe4 <_svfiprintf_r+0x9c>
103e: 9b03 ldr r3, [sp, #12]
1040: 1d19 adds r1, r3, #4
1042: 681b ldr r3, [r3, #0]
1044: 9103 str r1, [sp, #12]
1046: 2b00 cmp r3, #0
1048: bfbb ittet lt
104a: 425b neglt r3, r3
104c: f042 0202 orrlt.w r2, r2, #2
1050: 9307 strge r3, [sp, #28]
1052: 9307 strlt r3, [sp, #28]
1054: bfb8 it lt
1056: 9204 strlt r2, [sp, #16]
1058: 7823 ldrb r3, [r4, #0]
105a: 2b2e cmp r3, #46 ; 0x2e
105c: d10c bne.n 1078 <_svfiprintf_r+0x130>
105e: 7863 ldrb r3, [r4, #1]
1060: 2b2a cmp r3, #42 ; 0x2a
1062: d135 bne.n 10d0 <_svfiprintf_r+0x188>
1064: 9b03 ldr r3, [sp, #12]
1066: 1d1a adds r2, r3, #4
1068: 681b ldr r3, [r3, #0]
106a: 9203 str r2, [sp, #12]
106c: 2b00 cmp r3, #0
106e: bfb8 it lt
1070: f04f 33ff movlt.w r3, #4294967295 ; 0xffffffff
1074: 3402 adds r4, #2
1076: 9305 str r3, [sp, #20]
1078: f8df a0c8 ldr.w sl, [pc, #200] ; 1144 <_svfiprintf_r+0x1fc>
107c: 7821 ldrb r1, [r4, #0]
107e: 2203 movs r2, #3
1080: 4650 mov r0, sl
1082: f000 fa05 bl 1490 <memchr>
1086: b140 cbz r0, 109a <_svfiprintf_r+0x152>
1088: 2340 movs r3, #64 ; 0x40
108a: eba0 000a sub.w r0, r0, sl
108e: fa03 f000 lsl.w r0, r3, r0
1092: 9b04 ldr r3, [sp, #16]
1094: 4303 orrs r3, r0
1096: 3401 adds r4, #1
1098: 9304 str r3, [sp, #16]
109a: f814 1b01 ldrb.w r1, [r4], #1
109e: 4826 ldr r0, [pc, #152] ; (1138 <_svfiprintf_r+0x1f0>)
10a0: f88d 1028 strb.w r1, [sp, #40] ; 0x28
10a4: 2206 movs r2, #6
10a6: f000 f9f3 bl 1490 <memchr>
10aa: 2800 cmp r0, #0
10ac: d038 beq.n 1120 <_svfiprintf_r+0x1d8>
10ae: 4b23 ldr r3, [pc, #140] ; (113c <_svfiprintf_r+0x1f4>)
10b0: bb1b cbnz r3, 10fa <_svfiprintf_r+0x1b2>
10b2: 9b03 ldr r3, [sp, #12]
10b4: 3307 adds r3, #7
10b6: f023 0307 bic.w r3, r3, #7
10ba: 3308 adds r3, #8
10bc: 9303 str r3, [sp, #12]
10be: 9b09 ldr r3, [sp, #36] ; 0x24
10c0: 4433 add r3, r6
10c2: 9309 str r3, [sp, #36] ; 0x24
10c4: e767 b.n f96 <_svfiprintf_r+0x4e>
10c6: fb0c 3202 mla r2, ip, r2, r3
10ca: 460c mov r4, r1
10cc: 2001 movs r0, #1
10ce: e7a5 b.n 101c <_svfiprintf_r+0xd4>
10d0: 2300 movs r3, #0
10d2: 3401 adds r4, #1
10d4: 9305 str r3, [sp, #20]
10d6: 4619 mov r1, r3
10d8: f04f 0c0a mov.w ip, #10
10dc: 4620 mov r0, r4
10de: f810 2b01 ldrb.w r2, [r0], #1
10e2: 3a30 subs r2, #48 ; 0x30
10e4: 2a09 cmp r2, #9
10e6: d903 bls.n 10f0 <_svfiprintf_r+0x1a8>
10e8: 2b00 cmp r3, #0
10ea: d0c5 beq.n 1078 <_svfiprintf_r+0x130>
10ec: 9105 str r1, [sp, #20]
10ee: e7c3 b.n 1078 <_svfiprintf_r+0x130>
10f0: fb0c 2101 mla r1, ip, r1, r2
10f4: 4604 mov r4, r0
10f6: 2301 movs r3, #1
10f8: e7f0 b.n 10dc <_svfiprintf_r+0x194>
10fa: ab03 add r3, sp, #12
10fc: 9300 str r3, [sp, #0]
10fe: 462a mov r2, r5
1100: 4b0f ldr r3, [pc, #60] ; (1140 <_svfiprintf_r+0x1f8>)
1102: a904 add r1, sp, #16
1104: 4638 mov r0, r7
1106: f3af 8000 nop.w
110a: 1c42 adds r2, r0, #1
110c: 4606 mov r6, r0
110e: d1d6 bne.n 10be <_svfiprintf_r+0x176>
1110: 89ab ldrh r3, [r5, #12]
1112: 065b lsls r3, r3, #25
1114: f53f af2c bmi.w f70 <_svfiprintf_r+0x28>
1118: 9809 ldr r0, [sp, #36] ; 0x24
111a: b01d add sp, #116 ; 0x74
111c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
1120: ab03 add r3, sp, #12
1122: 9300 str r3, [sp, #0]
1124: 462a mov r2, r5
1126: 4b06 ldr r3, [pc, #24] ; (1140 <_svfiprintf_r+0x1f8>)
1128: a904 add r1, sp, #16
112a: 4638 mov r0, r7
112c: f000 f87a bl 1224 <_printf_i>
1130: e7eb b.n 110a <_svfiprintf_r+0x1c2>
1132: bf00 nop
1134: 000017c0 .word 0x000017c0
1138: 000017ca .word 0x000017ca
113c: 00000000 .word 0x00000000
1140: 00000e91 .word 0x00000e91
1144: 000017c6 .word 0x000017c6
00001148 <_printf_common>:
1148: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
114c: 4616 mov r6, r2
114e: 4699 mov r9, r3
1150: 688a ldr r2, [r1, #8]
1152: 690b ldr r3, [r1, #16]
1154: f8dd 8020 ldr.w r8, [sp, #32]
1158: 4293 cmp r3, r2
115a: bfb8 it lt
115c: 4613 movlt r3, r2
115e: 6033 str r3, [r6, #0]
1160: f891 2043 ldrb.w r2, [r1, #67] ; 0x43
1164: 4607 mov r7, r0
1166: 460c mov r4, r1
1168: b10a cbz r2, 116e <_printf_common+0x26>
116a: 3301 adds r3, #1
116c: 6033 str r3, [r6, #0]
116e: 6823 ldr r3, [r4, #0]
1170: 0699 lsls r1, r3, #26
1172: bf42 ittt mi
1174: 6833 ldrmi r3, [r6, #0]
1176: 3302 addmi r3, #2
1178: 6033 strmi r3, [r6, #0]
117a: 6825 ldr r5, [r4, #0]
117c: f015 0506 ands.w r5, r5, #6
1180: d106 bne.n 1190 <_printf_common+0x48>
1182: f104 0a19 add.w sl, r4, #25
1186: 68e3 ldr r3, [r4, #12]
1188: 6832 ldr r2, [r6, #0]
118a: 1a9b subs r3, r3, r2
118c: 42ab cmp r3, r5
118e: dc26 bgt.n 11de <_printf_common+0x96>
1190: f894 2043 ldrb.w r2, [r4, #67] ; 0x43
1194: 1e13 subs r3, r2, #0
1196: 6822 ldr r2, [r4, #0]
1198: bf18 it ne
119a: 2301 movne r3, #1
119c: 0692 lsls r2, r2, #26
119e: d42b bmi.n 11f8 <_printf_common+0xb0>
11a0: f104 0243 add.w r2, r4, #67 ; 0x43
11a4: 4649 mov r1, r9
11a6: 4638 mov r0, r7
11a8: 47c0 blx r8
11aa: 3001 adds r0, #1
11ac: d01e beq.n 11ec <_printf_common+0xa4>
11ae: 6823 ldr r3, [r4, #0]
11b0: 68e5 ldr r5, [r4, #12]
11b2: 6832 ldr r2, [r6, #0]
11b4: f003 0306 and.w r3, r3, #6
11b8: 2b04 cmp r3, #4
11ba: bf08 it eq
11bc: 1aad subeq r5, r5, r2
11be: 68a3 ldr r3, [r4, #8]
11c0: 6922 ldr r2, [r4, #16]
11c2: bf0c ite eq
11c4: ea25 75e5 biceq.w r5, r5, r5, asr #31
11c8: 2500 movne r5, #0
11ca: 4293 cmp r3, r2
11cc: bfc4 itt gt
11ce: 1a9b subgt r3, r3, r2
11d0: 18ed addgt r5, r5, r3
11d2: 2600 movs r6, #0
11d4: 341a adds r4, #26
11d6: 42b5 cmp r5, r6
11d8: d11a bne.n 1210 <_printf_common+0xc8>
11da: 2000 movs r0, #0
11dc: e008 b.n 11f0 <_printf_common+0xa8>
11de: 2301 movs r3, #1
11e0: 4652 mov r2, sl
11e2: 4649 mov r1, r9
11e4: 4638 mov r0, r7
11e6: 47c0 blx r8
11e8: 3001 adds r0, #1
11ea: d103 bne.n 11f4 <_printf_common+0xac>
11ec: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
11f0: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
11f4: 3501 adds r5, #1
11f6: e7c6 b.n 1186 <_printf_common+0x3e>
11f8: 18e1 adds r1, r4, r3
11fa: 1c5a adds r2, r3, #1
11fc: 2030 movs r0, #48 ; 0x30
11fe: f881 0043 strb.w r0, [r1, #67] ; 0x43
1202: 4422 add r2, r4
1204: f894 1045 ldrb.w r1, [r4, #69] ; 0x45
1208: f882 1043 strb.w r1, [r2, #67] ; 0x43
120c: 3302 adds r3, #2
120e: e7c7 b.n 11a0 <_printf_common+0x58>
1210: 2301 movs r3, #1
1212: 4622 mov r2, r4
1214: 4649 mov r1, r9
1216: 4638 mov r0, r7
1218: 47c0 blx r8
121a: 3001 adds r0, #1
121c: d0e6 beq.n 11ec <_printf_common+0xa4>
121e: 3601 adds r6, #1
1220: e7d9 b.n 11d6 <_printf_common+0x8e>
...
00001224 <_printf_i>:
1224: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr}
1228: 460c mov r4, r1
122a: 4691 mov r9, r2
122c: 7e27 ldrb r7, [r4, #24]
122e: 990c ldr r1, [sp, #48] ; 0x30
1230: 2f78 cmp r7, #120 ; 0x78
1232: 4680 mov r8, r0
1234: 469a mov sl, r3
1236: f104 0243 add.w r2, r4, #67 ; 0x43
123a: d807 bhi.n 124c <_printf_i+0x28>
123c: 2f62 cmp r7, #98 ; 0x62
123e: d80a bhi.n 1256 <_printf_i+0x32>
1240: 2f00 cmp r7, #0
1242: f000 80d8 beq.w 13f6 <_printf_i+0x1d2>
1246: 2f58 cmp r7, #88 ; 0x58
1248: f000 80a3 beq.w 1392 <_printf_i+0x16e>
124c: f104 0642 add.w r6, r4, #66 ; 0x42
1250: f884 7042 strb.w r7, [r4, #66] ; 0x42
1254: e03a b.n 12cc <_printf_i+0xa8>
1256: f1a7 0363 sub.w r3, r7, #99 ; 0x63
125a: 2b15 cmp r3, #21
125c: d8f6 bhi.n 124c <_printf_i+0x28>
125e: a001 add r0, pc, #4 ; (adr r0, 1264 <_printf_i+0x40>)
1260: f850 f023 ldr.w pc, [r0, r3, lsl #2]
1264: 000012bd .word 0x000012bd
1268: 000012d1 .word 0x000012d1
126c: 0000124d .word 0x0000124d
1270: 0000124d .word 0x0000124d
1274: 0000124d .word 0x0000124d
1278: 0000124d .word 0x0000124d
127c: 000012d1 .word 0x000012d1
1280: 0000124d .word 0x0000124d
1284: 0000124d .word 0x0000124d
1288: 0000124d .word 0x0000124d
128c: 0000124d .word 0x0000124d
1290: 000013dd .word 0x000013dd
1294: 00001301 .word 0x00001301
1298: 000013bf .word 0x000013bf
129c: 0000124d .word 0x0000124d
12a0: 0000124d .word 0x0000124d
12a4: 000013ff .word 0x000013ff
12a8: 0000124d .word 0x0000124d
12ac: 00001301 .word 0x00001301
12b0: 0000124d .word 0x0000124d
12b4: 0000124d .word 0x0000124d
12b8: 000013c7 .word 0x000013c7
12bc: 680b ldr r3, [r1, #0]
12be: 1d1a adds r2, r3, #4
12c0: 681b ldr r3, [r3, #0]
12c2: 600a str r2, [r1, #0]
12c4: f104 0642 add.w r6, r4, #66 ; 0x42
12c8: f884 3042 strb.w r3, [r4, #66] ; 0x42
12cc: 2301 movs r3, #1
12ce: e0a3 b.n 1418 <_printf_i+0x1f4>
12d0: 6825 ldr r5, [r4, #0]
12d2: 6808 ldr r0, [r1, #0]
12d4: 062e lsls r6, r5, #24
12d6: f100 0304 add.w r3, r0, #4
12da: d50a bpl.n 12f2 <_printf_i+0xce>
12dc: 6805 ldr r5, [r0, #0]
12de: 600b str r3, [r1, #0]
12e0: 2d00 cmp r5, #0
12e2: da03 bge.n 12ec <_printf_i+0xc8>
12e4: 232d movs r3, #45 ; 0x2d
12e6: 426d negs r5, r5
12e8: f884 3043 strb.w r3, [r4, #67] ; 0x43
12ec: 485e ldr r0, [pc, #376] ; (1468 <_printf_i+0x244>)
12ee: 230a movs r3, #10
12f0: e019 b.n 1326 <_printf_i+0x102>
12f2: f015 0f40 tst.w r5, #64 ; 0x40
12f6: 6805 ldr r5, [r0, #0]
12f8: 600b str r3, [r1, #0]
12fa: bf18 it ne
12fc: b22d sxthne r5, r5
12fe: e7ef b.n 12e0 <_printf_i+0xbc>
1300: 680b ldr r3, [r1, #0]
1302: 6825 ldr r5, [r4, #0]
1304: 1d18 adds r0, r3, #4
1306: 6008 str r0, [r1, #0]
1308: 0628 lsls r0, r5, #24
130a: d501 bpl.n 1310 <_printf_i+0xec>
130c: 681d ldr r5, [r3, #0]
130e: e002 b.n 1316 <_printf_i+0xf2>
1310: 0669 lsls r1, r5, #25
1312: d5fb bpl.n 130c <_printf_i+0xe8>
1314: 881d ldrh r5, [r3, #0]
1316: 4854 ldr r0, [pc, #336] ; (1468 <_printf_i+0x244>)
1318: 2f6f cmp r7, #111 ; 0x6f
131a: bf0c ite eq
131c: 2308 moveq r3, #8
131e: 230a movne r3, #10
1320: 2100 movs r1, #0
1322: f884 1043 strb.w r1, [r4, #67] ; 0x43
1326: 6866 ldr r6, [r4, #4]
1328: 60a6 str r6, [r4, #8]
132a: 2e00 cmp r6, #0
132c: bfa2 ittt ge
132e: 6821 ldrge r1, [r4, #0]
1330: f021 0104 bicge.w r1, r1, #4
1334: 6021 strge r1, [r4, #0]
1336: b90d cbnz r5, 133c <_printf_i+0x118>
1338: 2e00 cmp r6, #0
133a: d04d beq.n 13d8 <_printf_i+0x1b4>
133c: 4616 mov r6, r2
133e: fbb5 f1f3 udiv r1, r5, r3
1342: fb03 5711 mls r7, r3, r1, r5
1346: 5dc7 ldrb r7, [r0, r7]
1348: f806 7d01 strb.w r7, [r6, #-1]!
134c: 462f mov r7, r5
134e: 42bb cmp r3, r7
1350: 460d mov r5, r1
1352: d9f4 bls.n 133e <_printf_i+0x11a>
1354: 2b08 cmp r3, #8
1356: d10b bne.n 1370 <_printf_i+0x14c>
1358: 6823 ldr r3, [r4, #0]
135a: 07df lsls r7, r3, #31
135c: d508 bpl.n 1370 <_printf_i+0x14c>
135e: 6923 ldr r3, [r4, #16]
1360: 6861 ldr r1, [r4, #4]
1362: 4299 cmp r1, r3
1364: bfde ittt le
1366: 2330 movle r3, #48 ; 0x30
1368: f806 3c01 strble.w r3, [r6, #-1]
136c: f106 36ff addle.w r6, r6, #4294967295 ; 0xffffffff
1370: 1b92 subs r2, r2, r6
1372: 6122 str r2, [r4, #16]
1374: f8cd a000 str.w sl, [sp]
1378: 464b mov r3, r9
137a: aa03 add r2, sp, #12
137c: 4621 mov r1, r4
137e: 4640 mov r0, r8
1380: f7ff fee2 bl 1148 <_printf_common>
1384: 3001 adds r0, #1
1386: d14c bne.n 1422 <_printf_i+0x1fe>
1388: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff
138c: b004 add sp, #16
138e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
1392: 4835 ldr r0, [pc, #212] ; (1468 <_printf_i+0x244>)
1394: f884 7045 strb.w r7, [r4, #69] ; 0x45
1398: 6823 ldr r3, [r4, #0]
139a: 680e ldr r6, [r1, #0]
139c: 061f lsls r7, r3, #24
139e: f856 5b04 ldr.w r5, [r6], #4
13a2: 600e str r6, [r1, #0]
13a4: d514 bpl.n 13d0 <_printf_i+0x1ac>
13a6: 07d9 lsls r1, r3, #31
13a8: bf44 itt mi
13aa: f043 0320 orrmi.w r3, r3, #32
13ae: 6023 strmi r3, [r4, #0]
13b0: b91d cbnz r5, 13ba <_printf_i+0x196>
13b2: 6823 ldr r3, [r4, #0]
13b4: f023 0320 bic.w r3, r3, #32
13b8: 6023 str r3, [r4, #0]
13ba: 2310 movs r3, #16
13bc: e7b0 b.n 1320 <_printf_i+0xfc>
13be: 6823 ldr r3, [r4, #0]
13c0: f043 0320 orr.w r3, r3, #32
13c4: 6023 str r3, [r4, #0]
13c6: 2378 movs r3, #120 ; 0x78
13c8: 4828 ldr r0, [pc, #160] ; (146c <_printf_i+0x248>)
13ca: f884 3045 strb.w r3, [r4, #69] ; 0x45
13ce: e7e3 b.n 1398 <_printf_i+0x174>
13d0: 065e lsls r6, r3, #25
13d2: bf48 it mi
13d4: b2ad uxthmi r5, r5
13d6: e7e6 b.n 13a6 <_printf_i+0x182>
13d8: 4616 mov r6, r2
13da: e7bb b.n 1354 <_printf_i+0x130>
13dc: 680b ldr r3, [r1, #0]
13de: 6826 ldr r6, [r4, #0]
13e0: 6960 ldr r0, [r4, #20]
13e2: 1d1d adds r5, r3, #4
13e4: 600d str r5, [r1, #0]
13e6: 0635 lsls r5, r6, #24
13e8: 681b ldr r3, [r3, #0]
13ea: d501 bpl.n 13f0 <_printf_i+0x1cc>
13ec: 6018 str r0, [r3, #0]
13ee: e002 b.n 13f6 <_printf_i+0x1d2>
13f0: 0671 lsls r1, r6, #25
13f2: d5fb bpl.n 13ec <_printf_i+0x1c8>
13f4: 8018 strh r0, [r3, #0]
13f6: 2300 movs r3, #0
13f8: 6123 str r3, [r4, #16]
13fa: 4616 mov r6, r2
13fc: e7ba b.n 1374 <_printf_i+0x150>
13fe: 680b ldr r3, [r1, #0]
1400: 1d1a adds r2, r3, #4
1402: 600a str r2, [r1, #0]
1404: 681e ldr r6, [r3, #0]
1406: 6862 ldr r2, [r4, #4]
1408: 2100 movs r1, #0
140a: 4630 mov r0, r6
140c: f000 f840 bl 1490 <memchr>
1410: b108 cbz r0, 1416 <_printf_i+0x1f2>
1412: 1b80 subs r0, r0, r6
1414: 6060 str r0, [r4, #4]
1416: 6863 ldr r3, [r4, #4]
1418: 6123 str r3, [r4, #16]
141a: 2300 movs r3, #0
141c: f884 3043 strb.w r3, [r4, #67] ; 0x43
1420: e7a8 b.n 1374 <_printf_i+0x150>
1422: 6923 ldr r3, [r4, #16]
1424: 4632 mov r2, r6
1426: 4649 mov r1, r9
1428: 4640 mov r0, r8
142a: 47d0 blx sl
142c: 3001 adds r0, #1
142e: d0ab beq.n 1388 <_printf_i+0x164>
1430: 6823 ldr r3, [r4, #0]
1432: 079b lsls r3, r3, #30
1434: d413 bmi.n 145e <_printf_i+0x23a>
1436: 68e0 ldr r0, [r4, #12]
1438: 9b03 ldr r3, [sp, #12]
143a: 4298 cmp r0, r3
143c: bfb8 it lt
143e: 4618 movlt r0, r3
1440: e7a4 b.n 138c <_printf_i+0x168>
1442: 2301 movs r3, #1
1444: 4632 mov r2, r6
1446: 4649 mov r1, r9
1448: 4640 mov r0, r8
144a: 47d0 blx sl
144c: 3001 adds r0, #1
144e: d09b beq.n 1388 <_printf_i+0x164>
1450: 3501 adds r5, #1
1452: 68e3 ldr r3, [r4, #12]
1454: 9903 ldr r1, [sp, #12]
1456: 1a5b subs r3, r3, r1
1458: 42ab cmp r3, r5
145a: dcf2 bgt.n 1442 <_printf_i+0x21e>
145c: e7eb b.n 1436 <_printf_i+0x212>
145e: 2500 movs r5, #0
1460: f104 0619 add.w r6, r4, #25
1464: e7f5 b.n 1452 <_printf_i+0x22e>
1466: bf00 nop
1468: 000017d1 .word 0x000017d1
146c: 000017e2 .word 0x000017e2
00001470 <_sbrk_r>:
1470: b538 push {r3, r4, r5, lr}
1472: 4d06 ldr r5, [pc, #24] ; (148c <_sbrk_r+0x1c>)
1474: 2300 movs r3, #0
1476: 4604 mov r4, r0
1478: 4608 mov r0, r1
147a: 602b str r3, [r5, #0]
147c: f7fe ff32 bl 2e4 <_sbrk>
1480: 1c43 adds r3, r0, #1
1482: d102 bne.n 148a <_sbrk_r+0x1a>
1484: 682b ldr r3, [r5, #0]
1486: b103 cbz r3, 148a <_sbrk_r+0x1a>
1488: 6023 str r3, [r4, #0]
148a: bd38 pop {r3, r4, r5, pc}
148c: 200000d4 .word 0x200000d4
00001490 <memchr>:
1490: f001 01ff and.w r1, r1, #255 ; 0xff
1494: 2a10 cmp r2, #16
1496: db2b blt.n 14f0 <memchr+0x60>
1498: f010 0f07 tst.w r0, #7
149c: d008 beq.n 14b0 <memchr+0x20>
149e: f810 3b01 ldrb.w r3, [r0], #1
14a2: 3a01 subs r2, #1
14a4: 428b cmp r3, r1
14a6: d02d beq.n 1504 <memchr+0x74>
14a8: f010 0f07 tst.w r0, #7
14ac: b342 cbz r2, 1500 <memchr+0x70>
14ae: d1f6 bne.n 149e <memchr+0xe>
14b0: b4f0 push {r4, r5, r6, r7}
14b2: ea41 2101 orr.w r1, r1, r1, lsl #8
14b6: ea41 4101 orr.w r1, r1, r1, lsl #16
14ba: f022 0407 bic.w r4, r2, #7
14be: f07f 0700 mvns.w r7, #0
14c2: 2300 movs r3, #0
14c4: e8f0 5602 ldrd r5, r6, [r0], #8
14c8: 3c08 subs r4, #8
14ca: ea85 0501 eor.w r5, r5, r1
14ce: ea86 0601 eor.w r6, r6, r1
14d2: fa85 f547 uadd8 r5, r5, r7
14d6: faa3 f587 sel r5, r3, r7
14da: fa86 f647 uadd8 r6, r6, r7
14de: faa5 f687 sel r6, r5, r7
14e2: b98e cbnz r6, 1508 <memchr+0x78>
14e4: d1ee bne.n 14c4 <memchr+0x34>
14e6: bcf0 pop {r4, r5, r6, r7}
14e8: f001 01ff and.w r1, r1, #255 ; 0xff
14ec: f002 0207 and.w r2, r2, #7
14f0: b132 cbz r2, 1500 <memchr+0x70>
14f2: f810 3b01 ldrb.w r3, [r0], #1
14f6: 3a01 subs r2, #1
14f8: ea83 0301 eor.w r3, r3, r1
14fc: b113 cbz r3, 1504 <memchr+0x74>
14fe: d1f8 bne.n 14f2 <memchr+0x62>
1500: 2000 movs r0, #0
1502: 4770 bx lr
1504: 3801 subs r0, #1
1506: 4770 bx lr
1508: 2d00 cmp r5, #0
150a: bf06 itte eq
150c: 4635 moveq r5, r6
150e: 3803 subeq r0, #3
1510: 3807 subne r0, #7
1512: f015 0f01 tst.w r5, #1
1516: d107 bne.n 1528 <memchr+0x98>
1518: 3001 adds r0, #1
151a: f415 7f80 tst.w r5, #256 ; 0x100
151e: bf02 ittt eq
1520: 3001 addeq r0, #1
1522: f415 3fc0 tsteq.w r5, #98304 ; 0x18000
1526: 3001 addeq r0, #1
1528: bcf0 pop {r4, r5, r6, r7}
152a: 3801 subs r0, #1
152c: 4770 bx lr
152e: bf00 nop
00001530 <memmove>:
1530: 4288 cmp r0, r1
1532: b510 push {r4, lr}
1534: eb01 0402 add.w r4, r1, r2
1538: d902 bls.n 1540 <memmove+0x10>
153a: 4284 cmp r4, r0
153c: 4623 mov r3, r4
153e: d807 bhi.n 1550 <memmove+0x20>
1540: 1e43 subs r3, r0, #1
1542: 42a1 cmp r1, r4
1544: d008 beq.n 1558 <memmove+0x28>
1546: f811 2b01 ldrb.w r2, [r1], #1
154a: f803 2f01 strb.w r2, [r3, #1]!
154e: e7f8 b.n 1542 <memmove+0x12>
1550: 4402 add r2, r0
1552: 4601 mov r1, r0
1554: 428a cmp r2, r1
1556: d100 bne.n 155a <memmove+0x2a>
1558: bd10 pop {r4, pc}
155a: f813 4d01 ldrb.w r4, [r3, #-1]!
155e: f802 4d01 strb.w r4, [r2, #-1]!
1562: e7f7 b.n 1554 <memmove+0x24>
00001564 <__malloc_lock>:
1564: 4801 ldr r0, [pc, #4] ; (156c <__malloc_lock+0x8>)
1566: f7ff bc37 b.w dd8 <__retarget_lock_acquire_recursive>
156a: bf00 nop
156c: 200000cc .word 0x200000cc
00001570 <__malloc_unlock>:
1570: 4801 ldr r0, [pc, #4] ; (1578 <__malloc_unlock+0x8>)
1572: f7ff bc32 b.w dda <__retarget_lock_release_recursive>
1576: bf00 nop
1578: 200000cc .word 0x200000cc
0000157c <_free_r>:
157c: b538 push {r3, r4, r5, lr}
157e: 4605 mov r5, r0
1580: 2900 cmp r1, #0
1582: d045 beq.n 1610 <_free_r+0x94>
1584: f851 3c04 ldr.w r3, [r1, #-4]
1588: 1f0c subs r4, r1, #4
158a: 2b00 cmp r3, #0
158c: bfb8 it lt
158e: 18e4 addlt r4, r4, r3
1590: f7ff ffe8 bl 1564 <__malloc_lock>
1594: 4a1f ldr r2, [pc, #124] ; (1614 <_free_r+0x98>)
1596: 6813 ldr r3, [r2, #0]
1598: 4610 mov r0, r2
159a: b933 cbnz r3, 15aa <_free_r+0x2e>
159c: 6063 str r3, [r4, #4]
159e: 6014 str r4, [r2, #0]
15a0: 4628 mov r0, r5
15a2: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
15a6: f7ff bfe3 b.w 1570 <__malloc_unlock>
15aa: 42a3 cmp r3, r4
15ac: d90b bls.n 15c6 <_free_r+0x4a>
15ae: 6821 ldr r1, [r4, #0]
15b0: 1862 adds r2, r4, r1
15b2: 4293 cmp r3, r2
15b4: bf04 itt eq
15b6: 681a ldreq r2, [r3, #0]
15b8: 685b ldreq r3, [r3, #4]
15ba: 6063 str r3, [r4, #4]
15bc: bf04 itt eq
15be: 1852 addeq r2, r2, r1
15c0: 6022 streq r2, [r4, #0]
15c2: 6004 str r4, [r0, #0]
15c4: e7ec b.n 15a0 <_free_r+0x24>
15c6: 461a mov r2, r3
15c8: 685b ldr r3, [r3, #4]
15ca: b10b cbz r3, 15d0 <_free_r+0x54>
15cc: 42a3 cmp r3, r4
15ce: d9fa bls.n 15c6 <_free_r+0x4a>
15d0: 6811 ldr r1, [r2, #0]
15d2: 1850 adds r0, r2, r1
15d4: 42a0 cmp r0, r4
15d6: d10b bne.n 15f0 <_free_r+0x74>
15d8: 6820 ldr r0, [r4, #0]
15da: 4401 add r1, r0
15dc: 1850 adds r0, r2, r1
15de: 4283 cmp r3, r0
15e0: 6011 str r1, [r2, #0]
15e2: d1dd bne.n 15a0 <_free_r+0x24>
15e4: 6818 ldr r0, [r3, #0]
15e6: 685b ldr r3, [r3, #4]
15e8: 6053 str r3, [r2, #4]
15ea: 4401 add r1, r0
15ec: 6011 str r1, [r2, #0]
15ee: e7d7 b.n 15a0 <_free_r+0x24>
15f0: d902 bls.n 15f8 <_free_r+0x7c>
15f2: 230c movs r3, #12
15f4: 602b str r3, [r5, #0]
15f6: e7d3 b.n 15a0 <_free_r+0x24>
15f8: 6820 ldr r0, [r4, #0]
15fa: 1821 adds r1, r4, r0
15fc: 428b cmp r3, r1
15fe: bf04 itt eq
1600: 6819 ldreq r1, [r3, #0]
1602: 685b ldreq r3, [r3, #4]
1604: 6063 str r3, [r4, #4]
1606: bf04 itt eq
1608: 1809 addeq r1, r1, r0
160a: 6021 streq r1, [r4, #0]
160c: 6054 str r4, [r2, #4]
160e: e7c7 b.n 15a0 <_free_r+0x24>
1610: bd38 pop {r3, r4, r5, pc}
1612: bf00 nop
1614: 200000c0 .word 0x200000c0
00001618 <_realloc_r>:
1618: b5f8 push {r3, r4, r5, r6, r7, lr}
161a: 4607 mov r7, r0
161c: 4614 mov r4, r2
161e: 460e mov r6, r1
1620: b921 cbnz r1, 162c <_realloc_r+0x14>
1622: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr}
1626: 4611 mov r1, r2
1628: f7ff bbd8 b.w ddc <_malloc_r>
162c: b922 cbnz r2, 1638 <_realloc_r+0x20>
162e: f7ff ffa5 bl 157c <_free_r>
1632: 4625 mov r5, r4
1634: 4628 mov r0, r5
1636: bdf8 pop {r3, r4, r5, r6, r7, pc}
1638: f000 f814 bl 1664 <_malloc_usable_size_r>
163c: 42a0 cmp r0, r4
163e: d20f bcs.n 1660 <_realloc_r+0x48>
1640: 4621 mov r1, r4
1642: 4638 mov r0, r7
1644: f7ff fbca bl ddc <_malloc_r>
1648: 4605 mov r5, r0
164a: 2800 cmp r0, #0
164c: d0f2 beq.n 1634 <_realloc_r+0x1c>
164e: 4631 mov r1, r6
1650: 4622 mov r2, r4
1652: f7ff fb83 bl d5c <memcpy>
1656: 4631 mov r1, r6
1658: 4638 mov r0, r7
165a: f7ff ff8f bl 157c <_free_r>
165e: e7e9 b.n 1634 <_realloc_r+0x1c>
1660: 4635 mov r5, r6
1662: e7e7 b.n 1634 <_realloc_r+0x1c>
00001664 <_malloc_usable_size_r>:
1664: f851 3c04 ldr.w r3, [r1, #-4]
1668: 1f18 subs r0, r3, #4
166a: 2b00 cmp r3, #0
166c: bfbc itt lt
166e: 580b ldrlt r3, [r1, r0]
1670: 18c0 addlt r0, r0, r3
1672: 4770 bx lr
1674: 682f2e2e .word 0x682f2e2e
1678: 732f6c61 .word 0x732f6c61
167c: 682f6372 .word 0x682f6372
1680: 695f6c61 .word 0x695f6c61
1684: 00632e6f .word 0x00632e6f
1688: 682f2e2e .word 0x682f2e2e
168c: 732f6c61 .word 0x732f6c61
1690: 682f6372 .word 0x682f6372
1694: 735f6c61 .word 0x735f6c61
1698: 6d5f6970 .word 0x6d5f6970
169c: 6e79735f .word 0x6e79735f
16a0: 00632e63 .word 0x00632e63
16a4: 682f2e2e .word 0x682f2e2e
16a8: 732f6c61 .word 0x732f6c61
16ac: 682f6372 .word 0x682f6372
16b0: 755f6c61 .word 0x755f6c61
16b4: 74726173 .word 0x74726173
16b8: 6e79735f .word 0x6e79735f
16bc: 00632e63 .word 0x00632e63
16c0: 000a6948 .word 0x000a6948
16c4: 682f2e2e .word 0x682f2e2e
16c8: 732f6c70 .word 0x732f6c70
16cc: 6f637265 .word 0x6f637265
16d0: 70682f6d .word 0x70682f6d
16d4: 65735f6c .word 0x65735f6c
16d8: 6d6f6372 .word 0x6d6f6372
16dc: 0000632e .word 0x0000632e
16e0: 40003000 .word 0x40003000
16e4: 40003400 .word 0x40003400
16e8: 41012000 .word 0x41012000
16ec: 41014000 .word 0x41014000
16f0: 43000000 .word 0x43000000
16f4: 43000400 .word 0x43000400
16f8: 43000800 .word 0x43000800
16fc: 43000c00 .word 0x43000c00
00001700 <_i2cms>:
...
00001718 <sercomspi_regs>:
1718: 0030000c 00020000 00000000 01ff00fe ..0.............
1728: 62654404 49206775 6974696e 7a696c61 .Debug Initializ
1738: 000a6465 65737341 46207472 756c6961 ed..Assert Failu
1748: 61206572 696c2074 2520656e 25202c64 re at line %d, %
1758: 25203a73 00000a73 s: %s...
00001760 <__sf_fake_stderr>:
...
00001780 <__sf_fake_stdin>:
...
000017a0 <__sf_fake_stdout>:
...
17c0: 2b302d23 6c680020 6665004c 47464567 #-0+ .hlL.efgEFG
17d0: 32313000 36353433 41393837 45444342 .0123456789ABCDE
17e0: 31300046 35343332 39383736 64636261 F.0123456789abcd
17f0: 00006665 ef..
000017f4 <_init>:
17f4: b5f8 push {r3, r4, r5, r6, r7, lr}
17f6: bf00 nop
17f8: bcf8 pop {r3, r4, r5, r6, r7}
17fa: bc08 pop {r3}
17fc: 469e mov lr, r3
17fe: 4770 bx lr
00001800 <__frame_dummy_init_array_entry>:
1800: 0289 0000 ....
00001804 <_fini>:
1804: b5f8 push {r3, r4, r5, r6, r7, lr}
1806: bf00 nop
1808: bcf8 pop {r3, r4, r5, r6, r7}
180a: bc08 pop {r3}
180c: 469e mov lr, r3
180e: 4770 bx lr
00001810 <__do_global_dtors_aux_fini_array_entry>:
1810: 0265 0000 e...