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.
1168 lines
39 KiB
Plaintext
1168 lines
39 KiB
Plaintext
|
|
AtmelStart.elf: file format elf32-littlearm
|
|
|
|
Sections:
|
|
Idx Name Size VMA LMA File off Algn
|
|
0 .text 00000634 00000000 00000000 00010000 2**2
|
|
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
|
1 .relocate 00000000 20000000 20000000 00010634 2**0
|
|
CONTENTS
|
|
2 .bss 00000028 20000000 20000000 00020000 2**2
|
|
ALLOC
|
|
3 .stack 00002000 20000028 20000028 00020000 2**0
|
|
ALLOC
|
|
4 .ARM.attributes 00000028 00000000 00000000 00010634 2**0
|
|
CONTENTS, READONLY
|
|
5 .comment 0000001e 00000000 00000000 0001065c 2**0
|
|
CONTENTS, READONLY
|
|
6 .debug_info 00019aab 00000000 00000000 0001067a 2**0
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
7 .debug_abbrev 000018b5 00000000 00000000 0002a125 2**0
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
8 .debug_aranges 00000708 00000000 00000000 0002b9da 2**0
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
9 .debug_ranges 000016e0 00000000 00000000 0002c0e2 2**0
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
10 .debug_macro 00004179 00000000 00000000 0002d7c2 2**0
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
11 .debug_line 0000a90e 00000000 00000000 0003193b 2**0
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
12 .debug_str 00083ff5 00000000 00000000 0003c249 2**0
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
13 .debug_frame 000013f8 00000000 00000000 000c0240 2**2
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
14 .debug_loc 00007541 00000000 00000000 000c1638 2**0
|
|
CONTENTS, READONLY, DEBUGGING, OCTETS
|
|
|
|
Disassembly of section .text:
|
|
|
|
00000000 <exception_table>:
|
|
0: 28 20 00 20 01 01 00 00 fd 00 00 00 fd 00 00 00 ( . ............
|
|
...
|
|
2c: fd 00 00 00 00 00 00 00 00 00 00 00 fd 00 00 00 ................
|
|
3c: fd 00 00 00 fd 00 00 00 fd 00 00 00 fd 00 00 00 ................
|
|
4c: fd 00 00 00 fd 00 00 00 fd 00 00 00 fd 00 00 00 ................
|
|
5c: fd 00 00 00 fd 00 00 00 fd 00 00 00 fd 00 00 00 ................
|
|
6c: fd 00 00 00 fd 00 00 00 fd 00 00 00 fd 00 00 00 ................
|
|
7c: fd 00 00 00 fd 00 00 00 fd 00 00 00 fd 00 00 00 ................
|
|
8c: fd 00 00 00 fd 00 00 00 fd 00 00 00 fd 00 00 00 ................
|
|
9c: fd 00 00 00 fd 00 00 00 fd 00 00 00 fd 00 00 00 ................
|
|
ac: fd 00 00 00 00 00 00 00 ........
|
|
|
|
000000b4 <__do_global_dtors_aux>:
|
|
b4: b510 push {r4, lr}
|
|
b6: 4c06 ldr r4, [pc, #24] ; (d0 <__do_global_dtors_aux+0x1c>)
|
|
b8: 7823 ldrb r3, [r4, #0]
|
|
ba: 2b00 cmp r3, #0
|
|
bc: d107 bne.n ce <__do_global_dtors_aux+0x1a>
|
|
be: 4b05 ldr r3, [pc, #20] ; (d4 <__do_global_dtors_aux+0x20>)
|
|
c0: 2b00 cmp r3, #0
|
|
c2: d002 beq.n ca <__do_global_dtors_aux+0x16>
|
|
c4: 4804 ldr r0, [pc, #16] ; (d8 <__do_global_dtors_aux+0x24>)
|
|
c6: e000 b.n ca <__do_global_dtors_aux+0x16>
|
|
c8: bf00 nop
|
|
ca: 2301 movs r3, #1
|
|
cc: 7023 strb r3, [r4, #0]
|
|
ce: bd10 pop {r4, pc}
|
|
d0: 20000000 .word 0x20000000
|
|
d4: 00000000 .word 0x00000000
|
|
d8: 00000634 .word 0x00000634
|
|
|
|
000000dc <frame_dummy>:
|
|
dc: 4b04 ldr r3, [pc, #16] ; (f0 <frame_dummy+0x14>)
|
|
de: b510 push {r4, lr}
|
|
e0: 2b00 cmp r3, #0
|
|
e2: d003 beq.n ec <frame_dummy+0x10>
|
|
e4: 4903 ldr r1, [pc, #12] ; (f4 <frame_dummy+0x18>)
|
|
e6: 4804 ldr r0, [pc, #16] ; (f8 <frame_dummy+0x1c>)
|
|
e8: e000 b.n ec <frame_dummy+0x10>
|
|
ea: bf00 nop
|
|
ec: bd10 pop {r4, pc}
|
|
ee: 46c0 nop ; (mov r8, r8)
|
|
f0: 00000000 .word 0x00000000
|
|
f4: 20000004 .word 0x20000004
|
|
f8: 00000634 .word 0x00000634
|
|
|
|
000000fc <Dummy_Handler>:
|
|
/**
|
|
* \brief Default interrupt handler for unused IRQs.
|
|
*/
|
|
void Dummy_Handler(void)
|
|
{
|
|
while (1) {
|
|
fc: e7fe b.n fc <Dummy_Handler>
|
|
...
|
|
|
|
00000100 <Reset_Handler>:
|
|
if (pSrc != pDest) {
|
|
100: 4925 ldr r1, [pc, #148] ; (198 <Reset_Handler+0x98>)
|
|
102: 4826 ldr r0, [pc, #152] ; (19c <Reset_Handler+0x9c>)
|
|
{
|
|
104: b570 push {r4, r5, r6, lr}
|
|
if (pSrc != pDest) {
|
|
106: 4281 cmp r1, r0
|
|
108: d00a beq.n 120 <Reset_Handler+0x20>
|
|
*pDest++ = *pSrc++;
|
|
10a: 4b25 ldr r3, [pc, #148] ; (1a0 <Reset_Handler+0xa0>)
|
|
10c: 1ec4 subs r4, r0, #3
|
|
10e: 2200 movs r2, #0
|
|
110: 42a3 cmp r3, r4
|
|
112: d303 bcc.n 11c <Reset_Handler+0x1c>
|
|
114: 3303 adds r3, #3
|
|
116: 1a1a subs r2, r3, r0
|
|
118: 0892 lsrs r2, r2, #2
|
|
11a: 0092 lsls r2, r2, #2
|
|
11c: 4b21 ldr r3, [pc, #132] ; (1a4 <Reset_Handler+0xa4>)
|
|
11e: 4798 blx r3
|
|
*pDest++ = 0;
|
|
120: 4821 ldr r0, [pc, #132] ; (1a8 <Reset_Handler+0xa8>)
|
|
122: 4b22 ldr r3, [pc, #136] ; (1ac <Reset_Handler+0xac>)
|
|
124: 1ec1 subs r1, r0, #3
|
|
126: 2200 movs r2, #0
|
|
128: 4299 cmp r1, r3
|
|
12a: d803 bhi.n 134 <Reset_Handler+0x34>
|
|
12c: 3303 adds r3, #3
|
|
12e: 1a1a subs r2, r3, r0
|
|
130: 0892 lsrs r2, r2, #2
|
|
132: 0092 lsls r2, r2, #2
|
|
134: 2100 movs r1, #0
|
|
136: 4b1e ldr r3, [pc, #120] ; (1b0 <Reset_Handler+0xb0>)
|
|
138: 4798 blx r3
|
|
SCB->VTOR = ((uint32_t)pSrc & SCB_VTOR_TBLOFF_Msk);
|
|
13a: 22ff movs r2, #255 ; 0xff
|
|
13c: 4b1d ldr r3, [pc, #116] ; (1b4 <Reset_Handler+0xb4>)
|
|
USB->DEVICE.QOSCTRL.bit.CQOS = 2;
|
|
13e: 2103 movs r1, #3
|
|
SCB->VTOR = ((uint32_t)pSrc & SCB_VTOR_TBLOFF_Msk);
|
|
140: 4393 bics r3, r2
|
|
142: 4a1d ldr r2, [pc, #116] ; (1b8 <Reset_Handler+0xb8>)
|
|
USB->DEVICE.QOSCTRL.bit.DQOS = 2;
|
|
144: 250c movs r5, #12
|
|
SCB->VTOR = ((uint32_t)pSrc & SCB_VTOR_TBLOFF_Msk);
|
|
146: 6093 str r3, [r2, #8]
|
|
SBMATRIX->SFR[SBMATRIX_SLAVE_HMCRAMC0].reg = 2;
|
|
148: 2202 movs r2, #2
|
|
USB->DEVICE.QOSCTRL.bit.DQOS = 2;
|
|
14a: 2408 movs r4, #8
|
|
DMAC->QOSCTRL.bit.DQOS = 2;
|
|
14c: 2630 movs r6, #48 ; 0x30
|
|
SBMATRIX->SFR[SBMATRIX_SLAVE_HMCRAMC0].reg = 2;
|
|
14e: 4b1b ldr r3, [pc, #108] ; (1bc <Reset_Handler+0xbc>)
|
|
USB->DEVICE.QOSCTRL.bit.CQOS = 2;
|
|
150: 481b ldr r0, [pc, #108] ; (1c0 <Reset_Handler+0xc0>)
|
|
SBMATRIX->SFR[SBMATRIX_SLAVE_HMCRAMC0].reg = 2;
|
|
152: 625a str r2, [r3, #36] ; 0x24
|
|
USB->DEVICE.QOSCTRL.bit.CQOS = 2;
|
|
154: 78c3 ldrb r3, [r0, #3]
|
|
156: 438b bics r3, r1
|
|
158: 4313 orrs r3, r2
|
|
15a: 70c3 strb r3, [r0, #3]
|
|
USB->DEVICE.QOSCTRL.bit.DQOS = 2;
|
|
15c: 78c3 ldrb r3, [r0, #3]
|
|
15e: 43ab bics r3, r5
|
|
160: 4323 orrs r3, r4
|
|
162: 70c3 strb r3, [r0, #3]
|
|
DMAC->QOSCTRL.bit.DQOS = 2;
|
|
164: 4b17 ldr r3, [pc, #92] ; (1c4 <Reset_Handler+0xc4>)
|
|
166: 7b98 ldrb r0, [r3, #14]
|
|
168: 43b0 bics r0, r6
|
|
16a: 0006 movs r6, r0
|
|
16c: 2020 movs r0, #32
|
|
16e: 4330 orrs r0, r6
|
|
170: 7398 strb r0, [r3, #14]
|
|
DMAC->QOSCTRL.bit.FQOS = 2;
|
|
172: 7b98 ldrb r0, [r3, #14]
|
|
174: 43a8 bics r0, r5
|
|
176: 4304 orrs r4, r0
|
|
178: 739c strb r4, [r3, #14]
|
|
DMAC->QOSCTRL.bit.WRBQOS = 2;
|
|
17a: 7b98 ldrb r0, [r3, #14]
|
|
17c: 4388 bics r0, r1
|
|
17e: 4302 orrs r2, r0
|
|
180: 739a strb r2, [r3, #14]
|
|
NVMCTRL->CTRLB.bit.MANW = 1;
|
|
182: 2380 movs r3, #128 ; 0x80
|
|
184: 4a10 ldr r2, [pc, #64] ; (1c8 <Reset_Handler+0xc8>)
|
|
186: 6851 ldr r1, [r2, #4]
|
|
188: 430b orrs r3, r1
|
|
18a: 6053 str r3, [r2, #4]
|
|
__libc_init_array();
|
|
18c: 4b0f ldr r3, [pc, #60] ; (1cc <Reset_Handler+0xcc>)
|
|
18e: 4798 blx r3
|
|
main();
|
|
190: 4b0f ldr r3, [pc, #60] ; (1d0 <Reset_Handler+0xd0>)
|
|
192: 4798 blx r3
|
|
while (1)
|
|
194: e7fe b.n 194 <Reset_Handler+0x94>
|
|
196: 46c0 nop ; (mov r8, r8)
|
|
198: 00000634 .word 0x00000634
|
|
19c: 20000000 .word 0x20000000
|
|
1a0: 20000000 .word 0x20000000
|
|
1a4: 000005b9 .word 0x000005b9
|
|
1a8: 20000000 .word 0x20000000
|
|
1ac: 20000028 .word 0x20000028
|
|
1b0: 000005cb .word 0x000005cb
|
|
1b4: 00000000 .word 0x00000000
|
|
1b8: e000ed00 .word 0xe000ed00
|
|
1bc: 410070fc .word 0x410070fc
|
|
1c0: 41005000 .word 0x41005000
|
|
1c4: 41004800 .word 0x41004800
|
|
1c8: 41004000 .word 0x41004000
|
|
1cc: 00000571 .word 0x00000571
|
|
1d0: 000003b5 .word 0x000003b5
|
|
|
|
000001d4 <_pm_init>:
|
|
}
|
|
|
|
static inline void hri_pm_set_CPUSEL_CPUDIV_bf(const void *const hw, hri_pm_cpusel_reg_t mask)
|
|
{
|
|
PM_CRITICAL_SECTION_ENTER();
|
|
((Pm *)hw)->CPUSEL.reg |= PM_CPUSEL_CPUDIV(mask);
|
|
1d4: 4b06 ldr r3, [pc, #24] ; (1f0 <_pm_init+0x1c>)
|
|
1d6: 7a1a ldrb r2, [r3, #8]
|
|
1d8: b2d2 uxtb r2, r2
|
|
1da: 721a strb r2, [r3, #8]
|
|
}
|
|
|
|
static inline void hri_pm_set_APBASEL_APBADIV_bf(const void *const hw, hri_pm_apbasel_reg_t mask)
|
|
{
|
|
PM_CRITICAL_SECTION_ENTER();
|
|
((Pm *)hw)->APBASEL.reg |= PM_APBASEL_APBADIV(mask);
|
|
1dc: 7a5a ldrb r2, [r3, #9]
|
|
1de: b2d2 uxtb r2, r2
|
|
1e0: 725a strb r2, [r3, #9]
|
|
}
|
|
|
|
static inline void hri_pm_set_APBBSEL_APBBDIV_bf(const void *const hw, hri_pm_apbbsel_reg_t mask)
|
|
{
|
|
PM_CRITICAL_SECTION_ENTER();
|
|
((Pm *)hw)->APBBSEL.reg |= PM_APBBSEL_APBBDIV(mask);
|
|
1e2: 7a9a ldrb r2, [r3, #10]
|
|
1e4: b2d2 uxtb r2, r2
|
|
1e6: 729a strb r2, [r3, #10]
|
|
}
|
|
|
|
static inline void hri_pm_set_APBCSEL_APBCDIV_bf(const void *const hw, hri_pm_apbcsel_reg_t mask)
|
|
{
|
|
PM_CRITICAL_SECTION_ENTER();
|
|
((Pm *)hw)->APBCSEL.reg |= PM_APBCSEL_APBCDIV(mask);
|
|
1e8: 7ada ldrb r2, [r3, #11]
|
|
1ea: b2d2 uxtb r2, r2
|
|
1ec: 72da strb r2, [r3, #11]
|
|
{
|
|
hri_pm_set_CPUSEL_CPUDIV_bf(PM, CONF_CPU_DIV);
|
|
hri_pm_set_APBASEL_APBADIV_bf(PM, CONF_APBA_DIV);
|
|
hri_pm_set_APBBSEL_APBBDIV_bf(PM, CONF_APBB_DIV);
|
|
hri_pm_set_APBCSEL_APBCDIV_bf(PM, CONF_APBC_DIV);
|
|
}
|
|
1ee: 4770 bx lr
|
|
1f0: 40000400 .word 0x40000400
|
|
|
|
000001f4 <_init_chip>:
|
|
}
|
|
|
|
static inline void hri_nvmctrl_set_CTRLB_RWS_bf(const void *const hw, hri_nvmctrl_ctrlb_reg_t mask)
|
|
{
|
|
NVMCTRL_CRITICAL_SECTION_ENTER();
|
|
((Nvmctrl *)hw)->CTRLB.reg |= NVMCTRL_CTRLB_RWS(mask);
|
|
1f4: 4b06 ldr r3, [pc, #24] ; (210 <_init_chip+0x1c>)
|
|
|
|
/**
|
|
* \brief Initialize the hardware abstraction layer
|
|
*/
|
|
void _init_chip(void)
|
|
{
|
|
1f6: b510 push {r4, lr}
|
|
1f8: 685a ldr r2, [r3, #4]
|
|
1fa: 605a str r2, [r3, #4]
|
|
hri_nvmctrl_set_CTRLB_RWS_bf(NVMCTRL, CONF_NVM_WAIT_STATE);
|
|
|
|
_pm_init();
|
|
1fc: 4b05 ldr r3, [pc, #20] ; (214 <_init_chip+0x20>)
|
|
1fe: 4798 blx r3
|
|
_sysctrl_init_sources();
|
|
200: 4b05 ldr r3, [pc, #20] ; (218 <_init_chip+0x24>)
|
|
202: 4798 blx r3
|
|
#if _GCLK_INIT_1ST
|
|
_gclk_init_generators_by_fref(_GCLK_INIT_1ST);
|
|
#endif
|
|
_sysctrl_init_referenced_generators();
|
|
204: 4b05 ldr r3, [pc, #20] ; (21c <_init_chip+0x28>)
|
|
206: 4798 blx r3
|
|
_gclk_init_generators_by_fref(_GCLK_INIT_LAST);
|
|
208: 20ff movs r0, #255 ; 0xff
|
|
20a: 4b05 ldr r3, [pc, #20] ; (220 <_init_chip+0x2c>)
|
|
20c: 4798 blx r3
|
|
#if CONF_DMAC_ENABLE
|
|
_pm_enable_bus_clock(PM_BUS_AHB, DMAC);
|
|
_pm_enable_bus_clock(PM_BUS_APBB, DMAC);
|
|
_dma_init();
|
|
#endif
|
|
}
|
|
20e: bd10 pop {r4, pc}
|
|
210: 41004000 .word 0x41004000
|
|
214: 000001d5 .word 0x000001d5
|
|
218: 0000022d .word 0x0000022d
|
|
21c: 00000275 .word 0x00000275
|
|
220: 00000395 .word 0x00000395
|
|
|
|
00000224 <assert>:
|
|
/**
|
|
* \brief Assert function
|
|
*/
|
|
void assert(const bool condition, const char *const file, const int line)
|
|
{
|
|
if (!(condition)) {
|
|
224: 2800 cmp r0, #0
|
|
226: d100 bne.n 22a <assert+0x6>
|
|
__asm("BKPT #0");
|
|
228: be00 bkpt 0x0000
|
|
}
|
|
(void)file;
|
|
(void)line;
|
|
}
|
|
22a: 4770 bx lr
|
|
|
|
0000022c <_sysctrl_init_sources>:
|
|
}
|
|
|
|
static inline hri_sysctrl_osc8m_reg_t hri_sysctrl_read_OSC8M_CALIB_bf(const void *const hw)
|
|
{
|
|
uint32_t tmp;
|
|
tmp = ((Sysctrl *)hw)->OSC8M.reg;
|
|
22c: 4b0e ldr r3, [pc, #56] ; (268 <_sysctrl_init_sources+0x3c>)
|
|
22e: 6a18 ldr r0, [r3, #32]
|
|
}
|
|
|
|
static inline hri_sysctrl_osc8m_reg_t hri_sysctrl_read_OSC8M_FRANGE_bf(const void *const hw)
|
|
{
|
|
uint32_t tmp;
|
|
tmp = ((Sysctrl *)hw)->OSC8M.reg;
|
|
230: 6a19 ldr r1, [r3, #32]
|
|
|
|
#if CONF_OSC8M_CONFIG == 1
|
|
calib = hri_sysctrl_read_OSC8M_CALIB_bf(hw);
|
|
|
|
hri_sysctrl_write_OSC8M_reg(hw,
|
|
SYSCTRL_OSC8M_FRANGE(hri_sysctrl_read_OSC8M_FRANGE_bf(hw)) |
|
|
232: 0f89 lsrs r1, r1, #30
|
|
234: 078a lsls r2, r1, #30
|
|
#if CONF_OSC8M_OVERWRITE_CALIBRATION == 1
|
|
SYSCTRL_OSC8M_CALIB(CONF_OSC8M_CALIB) |
|
|
#else
|
|
SYSCTRL_OSC8M_CALIB(calib) |
|
|
236: 490d ldr r1, [pc, #52] ; (26c <_sysctrl_init_sources+0x40>)
|
|
238: 4001 ands r1, r0
|
|
SYSCTRL_OSC8M_FRANGE(hri_sysctrl_read_OSC8M_FRANGE_bf(hw)) |
|
|
23a: 430a orrs r2, r1
|
|
hri_sysctrl_write_OSC8M_reg(hw,
|
|
23c: 490c ldr r1, [pc, #48] ; (270 <_sysctrl_init_sources+0x44>)
|
|
23e: 430a orrs r2, r1
|
|
}
|
|
|
|
static inline void hri_sysctrl_write_OSC8M_reg(const void *const hw, hri_sysctrl_osc8m_reg_t data)
|
|
{
|
|
SYSCTRL_CRITICAL_SECTION_ENTER();
|
|
((Sysctrl *)hw)->OSC8M.reg = data;
|
|
240: 621a str r2, [r3, #32]
|
|
((Sysctrl *)hw)->OSC32K.reg |= SYSCTRL_OSC32K_ENABLE;
|
|
242: 2202 movs r2, #2
|
|
244: 6999 ldr r1, [r3, #24]
|
|
246: 430a orrs r2, r1
|
|
tmp = (tmp & SYSCTRL_OSCULP32K_CALIB_Msk) >> SYSCTRL_OSCULP32K_CALIB_Pos;
|
|
248: 211f movs r1, #31
|
|
((Sysctrl *)hw)->OSC32K.reg |= SYSCTRL_OSC32K_ENABLE;
|
|
24a: 619a str r2, [r3, #24]
|
|
tmp = ((Sysctrl *)hw)->OSCULP32K.reg;
|
|
24c: 7f1a ldrb r2, [r3, #28]
|
|
tmp = (tmp & SYSCTRL_OSCULP32K_CALIB_Msk) >> SYSCTRL_OSCULP32K_CALIB_Pos;
|
|
24e: 400a ands r2, r1
|
|
((Sysctrl *)hw)->OSCULP32K.reg = data;
|
|
250: 771a strb r2, [r3, #28]
|
|
return (((Sysctrl *)hw)->PCLKSR.reg & SYSCTRL_PCLKSR_OSC8MRDY) >> SYSCTRL_PCLKSR_OSC8MRDY_Pos;
|
|
252: 391e subs r1, #30
|
|
254: 68da ldr r2, [r3, #12]
|
|
256: 08d2 lsrs r2, r2, #3
|
|
#endif
|
|
#endif
|
|
|
|
#if CONF_OSC8M_CONFIG == 1
|
|
#if CONF_OSC8M_ENABLE == 1
|
|
while (!hri_sysctrl_get_PCLKSR_OSC8MRDY_bit(hw))
|
|
258: 420a tst r2, r1
|
|
25a: d0fb beq.n 254 <_sysctrl_init_sources+0x28>
|
|
((Sysctrl *)hw)->OSC8M.reg |= SYSCTRL_OSC8M_ONDEMAND;
|
|
25c: 2280 movs r2, #128 ; 0x80
|
|
25e: 6a19 ldr r1, [r3, #32]
|
|
260: 430a orrs r2, r1
|
|
262: 621a str r2, [r3, #32]
|
|
hri_sysctrl_set_OSC8M_ONDEMAND_bit(hw);
|
|
#endif
|
|
#endif
|
|
|
|
(void)calib, (void)hw;
|
|
}
|
|
264: 4770 bx lr
|
|
266: 46c0 nop ; (mov r8, r8)
|
|
268: 40000800 .word 0x40000800
|
|
26c: 0fff0000 .word 0x0fff0000
|
|
270: 00000302 .word 0x00000302
|
|
|
|
00000274 <_sysctrl_init_referenced_generators>:
|
|
((Sysctrl *)hw)->OSC32K.reg &= ~SYSCTRL_OSC32K_ENABLE;
|
|
274: 2102 movs r1, #2
|
|
276: 4a02 ldr r2, [pc, #8] ; (280 <_sysctrl_init_referenced_generators+0xc>)
|
|
278: 6993 ldr r3, [r2, #24]
|
|
27a: 438b bics r3, r1
|
|
27c: 6193 str r3, [r2, #24]
|
|
/* Disable after all possible configurations needs sync written. */
|
|
hri_sysctrl_clear_OSC32K_ENABLE_bit(hw);
|
|
#endif
|
|
|
|
(void)hw;
|
|
}
|
|
27e: 4770 bx lr
|
|
280: 40000800 .word 0x40000800
|
|
|
|
00000284 <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)
|
|
{
|
|
284: b5f8 push {r3, r4, r5, r6, r7, lr}
|
|
286: 0006 movs r6, r0
|
|
288: 000d movs r5, r1
|
|
28a: 0014 movs r4, r2
|
|
uint32_t offset = 0;
|
|
struct usart_sync_descriptor *descr = CONTAINER_OF(io_descr, struct usart_sync_descriptor, io);
|
|
|
|
ASSERT(io_descr && buf && length);
|
|
28c: 2800 cmp r0, #0
|
|
28e: d004 beq.n 29a <usart_sync_write+0x16>
|
|
290: 1e08 subs r0, r1, #0
|
|
292: d002 beq.n 29a <usart_sync_write+0x16>
|
|
294: 0010 movs r0, r2
|
|
296: 1e43 subs r3, r0, #1
|
|
298: 4198 sbcs r0, r3
|
|
29a: 22f1 movs r2, #241 ; 0xf1
|
|
29c: 4910 ldr r1, [pc, #64] ; (2e0 <usart_sync_write+0x5c>)
|
|
29e: 4b11 ldr r3, [pc, #68] ; (2e4 <usart_sync_write+0x60>)
|
|
2a0: 4798 blx r3
|
|
while (!_usart_sync_is_ready_to_send(&descr->device))
|
|
2a2: 0037 movs r7, r6
|
|
2a4: 3708 adds r7, #8
|
|
2a6: 0038 movs r0, r7
|
|
2a8: 4b0f ldr r3, [pc, #60] ; (2e8 <usart_sync_write+0x64>)
|
|
2aa: 4798 blx r3
|
|
2ac: 2800 cmp r0, #0
|
|
2ae: d0f8 beq.n 2a2 <usart_sync_write+0x1e>
|
|
uint32_t offset = 0;
|
|
2b0: 2600 movs r6, #0
|
|
;
|
|
do {
|
|
_usart_sync_write_byte(&descr->device, buf[offset]);
|
|
2b2: 0038 movs r0, r7
|
|
2b4: 5da9 ldrb r1, [r5, r6]
|
|
2b6: 4b0d ldr r3, [pc, #52] ; (2ec <usart_sync_write+0x68>)
|
|
2b8: 4798 blx r3
|
|
while (!_usart_sync_is_ready_to_send(&descr->device))
|
|
2ba: 0038 movs r0, r7
|
|
2bc: 4b0a ldr r3, [pc, #40] ; (2e8 <usart_sync_write+0x64>)
|
|
2be: 4798 blx r3
|
|
2c0: 2800 cmp r0, #0
|
|
2c2: d0fa beq.n 2ba <usart_sync_write+0x36>
|
|
;
|
|
} while (++offset < length);
|
|
2c4: 3601 adds r6, #1
|
|
2c6: 42b4 cmp r4, r6
|
|
2c8: d8f3 bhi.n 2b2 <usart_sync_write+0x2e>
|
|
2ca: 2501 movs r5, #1
|
|
2cc: 2c00 cmp r4, #0
|
|
2ce: d000 beq.n 2d2 <usart_sync_write+0x4e>
|
|
2d0: 0025 movs r5, r4
|
|
while (!_usart_sync_is_transmit_done(&descr->device))
|
|
2d2: 0038 movs r0, r7
|
|
2d4: 4b06 ldr r3, [pc, #24] ; (2f0 <usart_sync_write+0x6c>)
|
|
2d6: 4798 blx r3
|
|
2d8: 2800 cmp r0, #0
|
|
2da: d0fa beq.n 2d2 <usart_sync_write+0x4e>
|
|
;
|
|
return (int32_t)offset;
|
|
}
|
|
2dc: 0028 movs r0, r5
|
|
2de: bdf8 pop {r3, r4, r5, r6, r7, pc}
|
|
2e0: 000005da .word 0x000005da
|
|
2e4: 00000225 .word 0x00000225
|
|
2e8: 00000547 .word 0x00000547
|
|
2ec: 00000539 .word 0x00000539
|
|
2f0: 00000551 .word 0x00000551
|
|
|
|
000002f4 <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)
|
|
{
|
|
2f4: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
|
|
2f6: 0005 movs r5, r0
|
|
2f8: 0014 movs r4, r2
|
|
2fa: 9101 str r1, [sp, #4]
|
|
uint32_t offset = 0;
|
|
struct usart_sync_descriptor *descr = CONTAINER_OF(io_descr, struct usart_sync_descriptor, io);
|
|
|
|
ASSERT(io_descr && buf && length);
|
|
2fc: 2800 cmp r0, #0
|
|
2fe: d004 beq.n 30a <usart_sync_read+0x16>
|
|
300: 1e08 subs r0, r1, #0
|
|
302: d002 beq.n 30a <usart_sync_read+0x16>
|
|
304: 0010 movs r0, r2
|
|
306: 1e43 subs r3, r0, #1
|
|
308: 4198 sbcs r0, r3
|
|
30a: 2286 movs r2, #134 ; 0x86
|
|
30c: 490c ldr r1, [pc, #48] ; (340 <usart_sync_read+0x4c>)
|
|
30e: 4b0d ldr r3, [pc, #52] ; (344 <usart_sync_read+0x50>)
|
|
310: 0052 lsls r2, r2, #1
|
|
312: 4798 blx r3
|
|
uint32_t offset = 0;
|
|
314: 2600 movs r6, #0
|
|
do {
|
|
while (!_usart_sync_is_byte_received(&descr->device))
|
|
316: 002f movs r7, r5
|
|
318: 3708 adds r7, #8
|
|
31a: 0038 movs r0, r7
|
|
31c: 4b0a ldr r3, [pc, #40] ; (348 <usart_sync_read+0x54>)
|
|
31e: 4798 blx r3
|
|
320: 2800 cmp r0, #0
|
|
322: d0f8 beq.n 316 <usart_sync_read+0x22>
|
|
;
|
|
buf[offset] = _usart_sync_read_byte(&descr->device);
|
|
324: 4b09 ldr r3, [pc, #36] ; (34c <usart_sync_read+0x58>)
|
|
326: 0038 movs r0, r7
|
|
328: 4798 blx r3
|
|
32a: 9b01 ldr r3, [sp, #4]
|
|
32c: 5598 strb r0, [r3, r6]
|
|
} while (++offset < length);
|
|
32e: 3601 adds r6, #1
|
|
330: 42b4 cmp r4, r6
|
|
332: d8f0 bhi.n 316 <usart_sync_read+0x22>
|
|
334: 2001 movs r0, #1
|
|
336: 2c00 cmp r4, #0
|
|
338: d000 beq.n 33c <usart_sync_read+0x48>
|
|
33a: 0020 movs r0, r4
|
|
|
|
return (int32_t)offset;
|
|
}
|
|
33c: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
|
|
33e: 46c0 nop ; (mov r8, r8)
|
|
340: 000005da .word 0x000005da
|
|
344: 00000225 .word 0x00000225
|
|
348: 0000055b .word 0x0000055b
|
|
34c: 0000053f .word 0x0000053f
|
|
|
|
00000350 <usart_sync_init>:
|
|
{
|
|
350: b570 push {r4, r5, r6, lr}
|
|
352: 0004 movs r4, r0
|
|
354: 000d movs r5, r1
|
|
ASSERT(descr && hw);
|
|
356: 2800 cmp r0, #0
|
|
358: d002 beq.n 360 <usart_sync_init+0x10>
|
|
35a: 0008 movs r0, r1
|
|
35c: 1e43 subs r3, r0, #1
|
|
35e: 4198 sbcs r0, r3
|
|
360: 4907 ldr r1, [pc, #28] ; (380 <usart_sync_init+0x30>)
|
|
362: 4b08 ldr r3, [pc, #32] ; (384 <usart_sync_init+0x34>)
|
|
364: 2234 movs r2, #52 ; 0x34
|
|
366: 4798 blx r3
|
|
init_status = _usart_sync_init(&descr->device, hw);
|
|
368: 0020 movs r0, r4
|
|
36a: 0029 movs r1, r5
|
|
36c: 4b06 ldr r3, [pc, #24] ; (388 <usart_sync_init+0x38>)
|
|
36e: 3008 adds r0, #8
|
|
370: 4798 blx r3
|
|
if (init_status) {
|
|
372: 2800 cmp r0, #0
|
|
374: d103 bne.n 37e <usart_sync_init+0x2e>
|
|
descr->io.read = usart_sync_read;
|
|
376: 4b05 ldr r3, [pc, #20] ; (38c <usart_sync_init+0x3c>)
|
|
378: 6063 str r3, [r4, #4]
|
|
descr->io.write = usart_sync_write;
|
|
37a: 4b05 ldr r3, [pc, #20] ; (390 <usart_sync_init+0x40>)
|
|
37c: 6023 str r3, [r4, #0]
|
|
}
|
|
37e: bd70 pop {r4, r5, r6, pc}
|
|
380: 000005da .word 0x000005da
|
|
384: 00000225 .word 0x00000225
|
|
388: 0000050d .word 0x0000050d
|
|
38c: 000002f5 .word 0x000002f5
|
|
390: 00000285 .word 0x00000285
|
|
|
|
00000394 <_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)) {
|
|
394: 07c3 lsls r3, r0, #31
|
|
396: d509 bpl.n 3ac <_gclk_init_generators_by_fref+0x18>
|
|
}
|
|
|
|
static inline void hri_gclk_write_GENDIV_reg(const void *const hw, hri_gclk_gendiv_reg_t data)
|
|
{
|
|
GCLK_CRITICAL_SECTION_ENTER();
|
|
((Gclk *)hw)->GENDIV.reg = data;
|
|
398: 2380 movs r3, #128 ; 0x80
|
|
39a: 4a05 ldr r2, [pc, #20] ; (3b0 <_gclk_init_generators_by_fref+0x1c>)
|
|
39c: 005b lsls r3, r3, #1
|
|
39e: 6093 str r3, [r2, #8]
|
|
((Gclk *)hw)->GENCTRL.reg = data;
|
|
3a0: 2383 movs r3, #131 ; 0x83
|
|
3a2: 025b lsls r3, r3, #9
|
|
3a4: 6053 str r3, [r2, #4]
|
|
while (((const Gclk *)hw)->STATUS.bit.SYNCBUSY)
|
|
3a6: 7853 ldrb r3, [r2, #1]
|
|
3a8: 09db lsrs r3, r3, #7
|
|
3aa: d1fc bne.n 3a6 <_gclk_init_generators_by_fref+0x12>
|
|
| (CONF_GCLK_GEN_8_DIVSEL << GCLK_GENCTRL_DIVSEL_Pos) | (CONF_GCLK_GEN_8_OE << GCLK_GENCTRL_OE_Pos)
|
|
| (CONF_GCLK_GEN_8_OOV << GCLK_GENCTRL_OOV_Pos) | (CONF_GCLK_GEN_8_IDC << GCLK_GENCTRL_IDC_Pos)
|
|
| (CONF_GCLK_GENERATOR_8_CONFIG << GCLK_GENCTRL_GENEN_Pos) | CONF_GCLK_GEN_8_SRC | GCLK_GENCTRL_ID(8));
|
|
}
|
|
#endif
|
|
}
|
|
3ac: 4770 bx lr
|
|
3ae: 46c0 nop ; (mov r8, r8)
|
|
3b0: 40000c00 .word 0x40000c00
|
|
|
|
000003b4 <main>:
|
|
#include <atmel_start.h>
|
|
|
|
int main(void)
|
|
{
|
|
3b4: b510 push {r4, lr}
|
|
/* Initializes MCU, drivers and middleware */
|
|
atmel_start_init();
|
|
3b6: 4b01 ldr r3, [pc, #4] ; (3bc <main+0x8>)
|
|
3b8: 4798 blx r3
|
|
|
|
/* Replace with your application code */
|
|
while (1) {
|
|
3ba: e7fe b.n 3ba <main+0x6>
|
|
3bc: 00000565 .word 0x00000565
|
|
|
|
000003c0 <USART_0_PORT_init>:
|
|
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;
|
|
3c0: 4b0d ldr r3, [pc, #52] ; (3f8 <USART_0_PORT_init+0x38>)
|
|
tmp &= ~PORT_PINCFG_PMUXEN;
|
|
3c2: 2201 movs r2, #1
|
|
tmp = ((Port *)hw)->Group[submodule_index].PINCFG[index].reg;
|
|
3c4: 0018 movs r0, r3
|
|
#include <hpl_pm_base.h>
|
|
|
|
struct usart_sync_descriptor USART_0;
|
|
|
|
void USART_0_PORT_init(void)
|
|
{
|
|
3c6: b530 push {r4, r5, lr}
|
|
3c8: 3044 adds r0, #68 ; 0x44
|
|
3ca: 7801 ldrb r1, [r0, #0]
|
|
tmp &= ~PORT_PMUX_PMUXE_Msk;
|
|
3cc: 240f movs r4, #15
|
|
tmp &= ~PORT_PINCFG_PMUXEN;
|
|
3ce: 4391 bics r1, r2
|
|
tmp |= value << PORT_PINCFG_PMUXEN_Pos;
|
|
3d0: 4311 orrs r1, r2
|
|
((Port *)hw)->Group[submodule_index].PINCFG[index].reg = tmp;
|
|
3d2: 7001 strb r1, [r0, #0]
|
|
tmp = ((Port *)hw)->Group[submodule_index].PMUX[index].reg;
|
|
3d4: 0019 movs r1, r3
|
|
tmp |= PORT_PMUX_PMUXE(data);
|
|
3d6: 2003 movs r0, #3
|
|
tmp = ((Port *)hw)->Group[submodule_index].PMUX[index].reg;
|
|
3d8: 3132 adds r1, #50 ; 0x32
|
|
3da: 780d ldrb r5, [r1, #0]
|
|
tmp = ((Port *)hw)->Group[submodule_index].PINCFG[index].reg;
|
|
3dc: 3345 adds r3, #69 ; 0x45
|
|
tmp &= ~PORT_PMUX_PMUXE_Msk;
|
|
3de: 43a5 bics r5, r4
|
|
tmp |= PORT_PMUX_PMUXE(data);
|
|
3e0: 4328 orrs r0, r5
|
|
((Port *)hw)->Group[submodule_index].PMUX[index].reg = tmp;
|
|
3e2: 7008 strb r0, [r1, #0]
|
|
tmp = ((Port *)hw)->Group[submodule_index].PINCFG[index].reg;
|
|
3e4: 7818 ldrb r0, [r3, #0]
|
|
tmp &= ~PORT_PINCFG_PMUXEN;
|
|
3e6: 4390 bics r0, r2
|
|
tmp |= value << PORT_PINCFG_PMUXEN_Pos;
|
|
3e8: 4302 orrs r2, r0
|
|
((Port *)hw)->Group[submodule_index].PINCFG[index].reg = tmp;
|
|
3ea: 701a strb r2, [r3, #0]
|
|
tmp = ((Port *)hw)->Group[submodule_index].PMUX[index].reg;
|
|
3ec: 780b ldrb r3, [r1, #0]
|
|
tmp &= ~PORT_PMUX_PMUXO_Msk;
|
|
3ee: 401c ands r4, r3
|
|
tmp |= PORT_PMUX_PMUXO(data);
|
|
3f0: 2330 movs r3, #48 ; 0x30
|
|
3f2: 4323 orrs r3, r4
|
|
((Port *)hw)->Group[submodule_index].PMUX[index].reg = tmp;
|
|
3f4: 700b strb r3, [r1, #0]
|
|
|
|
gpio_set_pin_function(PA04, PINMUX_PA04D_SERCOM0_PAD0);
|
|
|
|
gpio_set_pin_function(PA05, PINMUX_PA05D_SERCOM0_PAD1);
|
|
}
|
|
3f6: bd30 pop {r4, r5, pc}
|
|
3f8: 41004400 .word 0x41004400
|
|
|
|
000003fc <USART_0_CLOCK_init>:
|
|
peripheral = (uint32_t)_pm_get_apbb_index(module);
|
|
PM->APBBMASK.reg |= 1 << peripheral;
|
|
}
|
|
break;
|
|
case PM_BUS_APBC:
|
|
PM->APBCMASK.reg |= 1 << peripheral;
|
|
3fc: 2304 movs r3, #4
|
|
3fe: 4a04 ldr r2, [pc, #16] ; (410 <USART_0_CLOCK_init+0x14>)
|
|
400: 6a11 ldr r1, [r2, #32]
|
|
402: 430b orrs r3, r1
|
|
404: 6213 str r3, [r2, #32]
|
|
((Gclk *)hw)->CLKCTRL.reg = data;
|
|
406: 4b03 ldr r3, [pc, #12] ; (414 <USART_0_CLOCK_init+0x18>)
|
|
408: 4a03 ldr r2, [pc, #12] ; (418 <USART_0_CLOCK_init+0x1c>)
|
|
40a: 805a strh r2, [r3, #2]
|
|
|
|
void USART_0_CLOCK_init(void)
|
|
{
|
|
_pm_enable_bus_clock(PM_BUS_APBC, SERCOM0);
|
|
_gclk_enable_channel(SERCOM0_GCLK_ID_CORE, CONF_GCLK_SERCOM0_CORE_SRC);
|
|
}
|
|
40c: 4770 bx lr
|
|
40e: 46c0 nop ; (mov r8, r8)
|
|
410: 40000400 .word 0x40000400
|
|
414: 40000c00 .word 0x40000c00
|
|
418: 00004014 .word 0x00004014
|
|
|
|
0000041c <USART_0_init>:
|
|
|
|
void USART_0_init(void)
|
|
{
|
|
41c: b510 push {r4, lr}
|
|
USART_0_CLOCK_init();
|
|
41e: 4b05 ldr r3, [pc, #20] ; (434 <USART_0_init+0x18>)
|
|
420: 4798 blx r3
|
|
usart_sync_init(&USART_0, SERCOM0, (void *)NULL);
|
|
422: 2200 movs r2, #0
|
|
424: 4904 ldr r1, [pc, #16] ; (438 <USART_0_init+0x1c>)
|
|
426: 4b05 ldr r3, [pc, #20] ; (43c <USART_0_init+0x20>)
|
|
428: 4805 ldr r0, [pc, #20] ; (440 <USART_0_init+0x24>)
|
|
42a: 4798 blx r3
|
|
USART_0_PORT_init();
|
|
42c: 4b05 ldr r3, [pc, #20] ; (444 <USART_0_init+0x28>)
|
|
42e: 4798 blx r3
|
|
}
|
|
430: bd10 pop {r4, pc}
|
|
432: 46c0 nop ; (mov r8, r8)
|
|
434: 000003fd .word 0x000003fd
|
|
438: 42000800 .word 0x42000800
|
|
43c: 00000351 .word 0x00000351
|
|
440: 2000001c .word 0x2000001c
|
|
444: 000003c1 .word 0x000003c1
|
|
|
|
00000448 <system_init>:
|
|
|
|
void system_init(void)
|
|
{
|
|
448: b510 push {r4, lr}
|
|
* Currently the following initialization functions are supported:
|
|
* - System clock initialization
|
|
*/
|
|
static inline void init_mcu(void)
|
|
{
|
|
_init_chip();
|
|
44a: 4b02 ldr r3, [pc, #8] ; (454 <system_init+0xc>)
|
|
44c: 4798 blx r3
|
|
init_mcu();
|
|
|
|
USART_0_init();
|
|
44e: 4b02 ldr r3, [pc, #8] ; (458 <system_init+0x10>)
|
|
450: 4798 blx r3
|
|
}
|
|
452: bd10 pop {r4, pc}
|
|
454: 000001f5 .word 0x000001f5
|
|
458: 0000041d .word 0x0000041d
|
|
|
|
0000045c <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) {
|
|
45c: 69c3 ldr r3, [r0, #28]
|
|
45e: 4219 tst r1, r3
|
|
460: d1fc bne.n 45c <hri_sercomusart_wait_for_sync>
|
|
};
|
|
}
|
|
462: 4770 bx lr
|
|
|
|
00000464 <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;
|
|
464: 2202 movs r2, #2
|
|
{
|
|
466: b510 push {r4, lr}
|
|
((Sercom *)hw)->USART.CTRLA.reg &= ~SERCOM_USART_CTRLA_ENABLE;
|
|
468: 6803 ldr r3, [r0, #0]
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
|
|
46a: 2103 movs r1, #3
|
|
((Sercom *)hw)->USART.CTRLA.reg &= ~SERCOM_USART_CTRLA_ENABLE;
|
|
46c: 4393 bics r3, r2
|
|
46e: 6003 str r3, [r0, #0]
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
|
|
470: 4b01 ldr r3, [pc, #4] ; (478 <hri_sercomusart_clear_CTRLA_ENABLE_bit+0x14>)
|
|
472: 4798 blx r3
|
|
SERCOM_CRITICAL_SECTION_LEAVE();
|
|
}
|
|
474: bd10 pop {r4, pc}
|
|
476: 46c0 nop ; (mov r8, r8)
|
|
478: 0000045d .word 0x0000045d
|
|
|
|
0000047c <_usart_init>:
|
|
{
|
|
#ifdef _UNIT_TEST_
|
|
return ((uint32_t)hw - (uint32_t)SERCOM0) / sizeof(Sercom);
|
|
#endif
|
|
|
|
return ((uint32_t)hw - (uint32_t)SERCOM0) >> 10;
|
|
47c: 4b1b ldr r3, [pc, #108] ; (4ec <_usart_init+0x70>)
|
|
* \param[in] hw The pointer to hardware instance
|
|
*
|
|
* \return The status of initialization
|
|
*/
|
|
static int32_t _usart_init(void *const hw)
|
|
{
|
|
47e: b570 push {r4, r5, r6, lr}
|
|
return ((uint32_t)hw - (uint32_t)SERCOM0) >> 10;
|
|
480: 18c3 adds r3, r0, r3
|
|
482: 0a9b lsrs r3, r3, #10
|
|
if (_usarts[i].number == sercom_offset) {
|
|
484: b2db uxtb r3, r3
|
|
{
|
|
486: 0004 movs r4, r0
|
|
if (_usarts[i].number == sercom_offset) {
|
|
488: 2b00 cmp r3, #0
|
|
48a: d004 beq.n 496 <_usart_init+0x1a>
|
|
ASSERT(false);
|
|
48c: 2000 movs r0, #0
|
|
48e: 4a18 ldr r2, [pc, #96] ; (4f0 <_usart_init+0x74>)
|
|
490: 4918 ldr r1, [pc, #96] ; (4f4 <_usart_init+0x78>)
|
|
492: 4b19 ldr r3, [pc, #100] ; (4f8 <_usart_init+0x7c>)
|
|
494: 4798 blx r3
|
|
return ((Sercom *)hw)->USART.SYNCBUSY.reg & reg;
|
|
496: 69e3 ldr r3, [r4, #28]
|
|
498: 4d18 ldr r5, [pc, #96] ; (4fc <_usart_init+0x80>)
|
|
uint8_t i = _get_sercom_index(hw);
|
|
|
|
if (!hri_sercomusart_is_syncing(hw, SERCOM_USART_SYNCBUSY_SWRST)) {
|
|
49a: 07db lsls r3, r3, #31
|
|
49c: d411 bmi.n 4c2 <_usart_init+0x46>
|
|
hri_sercomusart_ctrla_reg_t mask)
|
|
{
|
|
uint32_t tmp;
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
|
|
tmp = ((Sercom *)hw)->USART.CTRLA.reg;
|
|
tmp &= mask;
|
|
49e: 2602 movs r6, #2
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
|
|
4a0: 2103 movs r1, #3
|
|
4a2: 0020 movs r0, r4
|
|
4a4: 47a8 blx r5
|
|
tmp = ((Sercom *)hw)->USART.CTRLA.reg;
|
|
4a6: 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)) {
|
|
4a8: 4233 tst r3, r6
|
|
4aa: d005 beq.n 4b8 <_usart_init+0x3c>
|
|
hri_sercomusart_clear_CTRLA_ENABLE_bit(hw);
|
|
4ac: 0020 movs r0, r4
|
|
4ae: 4b14 ldr r3, [pc, #80] ; (500 <_usart_init+0x84>)
|
|
4b0: 4798 blx r3
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_ENABLE);
|
|
4b2: 0031 movs r1, r6
|
|
4b4: 0020 movs r0, r4
|
|
4b6: 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;
|
|
4b8: 2305 movs r3, #5
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
|
|
4ba: 2103 movs r1, #3
|
|
4bc: 0020 movs r0, r4
|
|
((Sercom *)hw)->USART.CTRLA.reg = data;
|
|
4be: 6023 str r3, [r4, #0]
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
|
|
4c0: 47a8 blx r5
|
|
}
|
|
hri_sercomusart_write_CTRLA_reg(hw, SERCOM_USART_CTRLA_SWRST | mode);
|
|
}
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST);
|
|
4c2: 0020 movs r0, r4
|
|
4c4: 2101 movs r1, #1
|
|
4c6: 47a8 blx r5
|
|
((Sercom *)hw)->USART.CTRLA.reg = data;
|
|
4c8: 4b0e ldr r3, [pc, #56] ; (504 <_usart_init+0x88>)
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
|
|
4ca: 0020 movs r0, r4
|
|
((Sercom *)hw)->USART.CTRLA.reg = data;
|
|
4cc: 6023 str r3, [r4, #0]
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_SWRST | SERCOM_USART_SYNCBUSY_ENABLE);
|
|
4ce: 2103 movs r1, #3
|
|
4d0: 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;
|
|
4d2: 23c0 movs r3, #192 ; 0xc0
|
|
4d4: 029b lsls r3, r3, #10
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_MASK);
|
|
4d6: 0020 movs r0, r4
|
|
((Sercom *)hw)->USART.CTRLB.reg = data;
|
|
4d8: 6063 str r3, [r4, #4]
|
|
hri_sercomusart_wait_for_sync(hw, SERCOM_USART_SYNCBUSY_MASK);
|
|
4da: 2107 movs r1, #7
|
|
4dc: 47a8 blx r5
|
|
}
|
|
|
|
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;
|
|
4de: 2000 movs r0, #0
|
|
((Sercom *)hw)->USART.BAUD.reg = data;
|
|
4e0: 4b09 ldr r3, [pc, #36] ; (508 <_usart_init+0x8c>)
|
|
4e2: 81a3 strh r3, [r4, #12]
|
|
((Sercom *)hw)->USART.RXPL.reg = data;
|
|
4e4: 73a0 strb r0, [r4, #14]
|
|
}
|
|
|
|
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;
|
|
4e6: 3430 adds r4, #48 ; 0x30
|
|
4e8: 7020 strb r0, [r4, #0]
|
|
|
|
hri_sercomusart_write_RXPL_reg(hw, _usarts[i].rxpl);
|
|
hri_sercomusart_write_DBGCTRL_reg(hw, _usarts[i].debug_ctrl);
|
|
|
|
return ERR_NONE;
|
|
}
|
|
4ea: bd70 pop {r4, r5, r6, pc}
|
|
4ec: bdfff800 .word 0xbdfff800
|
|
4f0: 0000023a .word 0x0000023a
|
|
4f4: 000005f6 .word 0x000005f6
|
|
4f8: 00000225 .word 0x00000225
|
|
4fc: 0000045d .word 0x0000045d
|
|
500: 00000465 .word 0x00000465
|
|
504: 40100004 .word 0x40100004
|
|
508: ffffd8ad .word 0xffffd8ad
|
|
|
|
0000050c <_usart_sync_init>:
|
|
{
|
|
50c: b570 push {r4, r5, r6, lr}
|
|
50e: 0005 movs r5, r0
|
|
ASSERT(device);
|
|
510: 1e43 subs r3, r0, #1
|
|
512: 4198 sbcs r0, r3
|
|
{
|
|
514: 000c movs r4, r1
|
|
ASSERT(device);
|
|
516: 22b4 movs r2, #180 ; 0xb4
|
|
518: 4904 ldr r1, [pc, #16] ; (52c <_usart_sync_init+0x20>)
|
|
51a: 4b05 ldr r3, [pc, #20] ; (530 <_usart_sync_init+0x24>)
|
|
51c: b2c0 uxtb r0, r0
|
|
51e: 4798 blx r3
|
|
device->hw = hw;
|
|
520: 602c str r4, [r5, #0]
|
|
return _usart_init(hw);
|
|
522: 0020 movs r0, r4
|
|
524: 4b03 ldr r3, [pc, #12] ; (534 <_usart_sync_init+0x28>)
|
|
526: 4798 blx r3
|
|
}
|
|
528: bd70 pop {r4, r5, r6, pc}
|
|
52a: 46c0 nop ; (mov r8, r8)
|
|
52c: 000005f6 .word 0x000005f6
|
|
530: 00000225 .word 0x00000225
|
|
534: 0000047d .word 0x0000047d
|
|
|
|
00000538 <_usart_sync_write_byte>:
|
|
hri_sercomusart_write_DATA_reg(device->hw, data);
|
|
538: 6803 ldr r3, [r0, #0]
|
|
((Sercom *)hw)->USART.DATA.reg = data;
|
|
53a: 8519 strh r1, [r3, #40] ; 0x28
|
|
}
|
|
53c: 4770 bx lr
|
|
|
|
0000053e <_usart_sync_read_byte>:
|
|
return hri_sercomusart_read_DATA_reg(device->hw);
|
|
53e: 6803 ldr r3, [r0, #0]
|
|
return ((Sercom *)hw)->USART.DATA.reg;
|
|
540: 8d18 ldrh r0, [r3, #40] ; 0x28
|
|
542: b2c0 uxtb r0, r0
|
|
}
|
|
544: 4770 bx lr
|
|
|
|
00000546 <_usart_sync_is_ready_to_send>:
|
|
return hri_sercomusart_get_interrupt_DRE_bit(device->hw);
|
|
546: 6803 ldr r3, [r0, #0]
|
|
return (((Sercom *)hw)->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_DRE) >> SERCOM_USART_INTFLAG_DRE_Pos;
|
|
548: 7e18 ldrb r0, [r3, #24]
|
|
54a: 2301 movs r3, #1
|
|
54c: 4018 ands r0, r3
|
|
}
|
|
54e: 4770 bx lr
|
|
|
|
00000550 <_usart_sync_is_transmit_done>:
|
|
return hri_sercomusart_get_interrupt_TXC_bit(device->hw);
|
|
550: 6803 ldr r3, [r0, #0]
|
|
return (((Sercom *)hw)->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_TXC) >> SERCOM_USART_INTFLAG_TXC_Pos;
|
|
552: 7e18 ldrb r0, [r3, #24]
|
|
554: 0780 lsls r0, r0, #30
|
|
556: 0fc0 lsrs r0, r0, #31
|
|
}
|
|
558: 4770 bx lr
|
|
|
|
0000055a <_usart_sync_is_byte_received>:
|
|
return hri_sercomusart_get_interrupt_RXC_bit(device->hw);
|
|
55a: 6803 ldr r3, [r0, #0]
|
|
return (((Sercom *)hw)->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_RXC) >> SERCOM_USART_INTFLAG_RXC_Pos;
|
|
55c: 7e18 ldrb r0, [r3, #24]
|
|
55e: 0740 lsls r0, r0, #29
|
|
560: 0fc0 lsrs r0, r0, #31
|
|
}
|
|
562: 4770 bx lr
|
|
|
|
00000564 <atmel_start_init>:
|
|
|
|
/**
|
|
* Initializes MCU, drivers and middleware in the project
|
|
**/
|
|
void atmel_start_init(void)
|
|
{
|
|
564: b510 push {r4, lr}
|
|
system_init();
|
|
566: 4b01 ldr r3, [pc, #4] ; (56c <atmel_start_init+0x8>)
|
|
568: 4798 blx r3
|
|
}
|
|
56a: bd10 pop {r4, pc}
|
|
56c: 00000449 .word 0x00000449
|
|
|
|
00000570 <__libc_init_array>:
|
|
570: b570 push {r4, r5, r6, lr}
|
|
572: 2600 movs r6, #0
|
|
574: 4d0c ldr r5, [pc, #48] ; (5a8 <__libc_init_array+0x38>)
|
|
576: 4c0d ldr r4, [pc, #52] ; (5ac <__libc_init_array+0x3c>)
|
|
578: 1b64 subs r4, r4, r5
|
|
57a: 10a4 asrs r4, r4, #2
|
|
57c: 42a6 cmp r6, r4
|
|
57e: d109 bne.n 594 <__libc_init_array+0x24>
|
|
580: 2600 movs r6, #0
|
|
582: f000 f847 bl 614 <_init>
|
|
586: 4d0a ldr r5, [pc, #40] ; (5b0 <__libc_init_array+0x40>)
|
|
588: 4c0a ldr r4, [pc, #40] ; (5b4 <__libc_init_array+0x44>)
|
|
58a: 1b64 subs r4, r4, r5
|
|
58c: 10a4 asrs r4, r4, #2
|
|
58e: 42a6 cmp r6, r4
|
|
590: d105 bne.n 59e <__libc_init_array+0x2e>
|
|
592: bd70 pop {r4, r5, r6, pc}
|
|
594: 00b3 lsls r3, r6, #2
|
|
596: 58eb ldr r3, [r5, r3]
|
|
598: 4798 blx r3
|
|
59a: 3601 adds r6, #1
|
|
59c: e7ee b.n 57c <__libc_init_array+0xc>
|
|
59e: 00b3 lsls r3, r6, #2
|
|
5a0: 58eb ldr r3, [r5, r3]
|
|
5a2: 4798 blx r3
|
|
5a4: 3601 adds r6, #1
|
|
5a6: e7f2 b.n 58e <__libc_init_array+0x1e>
|
|
5a8: 00000620 .word 0x00000620
|
|
5ac: 00000620 .word 0x00000620
|
|
5b0: 00000620 .word 0x00000620
|
|
5b4: 00000624 .word 0x00000624
|
|
|
|
000005b8 <memcpy>:
|
|
5b8: 2300 movs r3, #0
|
|
5ba: b510 push {r4, lr}
|
|
5bc: 429a cmp r2, r3
|
|
5be: d100 bne.n 5c2 <memcpy+0xa>
|
|
5c0: bd10 pop {r4, pc}
|
|
5c2: 5ccc ldrb r4, [r1, r3]
|
|
5c4: 54c4 strb r4, [r0, r3]
|
|
5c6: 3301 adds r3, #1
|
|
5c8: e7f8 b.n 5bc <memcpy+0x4>
|
|
|
|
000005ca <memset>:
|
|
5ca: 0003 movs r3, r0
|
|
5cc: 1882 adds r2, r0, r2
|
|
5ce: 4293 cmp r3, r2
|
|
5d0: d100 bne.n 5d4 <memset+0xa>
|
|
5d2: 4770 bx lr
|
|
5d4: 7019 strb r1, [r3, #0]
|
|
5d6: 3301 adds r3, #1
|
|
5d8: e7f9 b.n 5ce <memset+0x4>
|
|
5da: 2e2e .short 0x2e2e
|
|
5dc: 6c61682f .word 0x6c61682f
|
|
5e0: 6372732f .word 0x6372732f
|
|
5e4: 6c61682f .word 0x6c61682f
|
|
5e8: 6173755f .word 0x6173755f
|
|
5ec: 735f7472 .word 0x735f7472
|
|
5f0: 2e636e79 .word 0x2e636e79
|
|
5f4: 0063 .short 0x0063
|
|
5f6: 2e2e .short 0x2e2e
|
|
5f8: 6c70682f .word 0x6c70682f
|
|
5fc: 7265732f .word 0x7265732f
|
|
600: 2f6d6f63 .word 0x2f6d6f63
|
|
604: 5f6c7068 .word 0x5f6c7068
|
|
608: 63726573 .word 0x63726573
|
|
60c: 632e6d6f .word 0x632e6d6f
|
|
610: 00000000 .word 0x00000000
|
|
|
|
00000614 <_init>:
|
|
614: b5f8 push {r3, r4, r5, r6, r7, lr}
|
|
616: 46c0 nop ; (mov r8, r8)
|
|
618: bcf8 pop {r3, r4, r5, r6, r7}
|
|
61a: bc08 pop {r3}
|
|
61c: 469e mov lr, r3
|
|
61e: 4770 bx lr
|
|
|
|
00000620 <__frame_dummy_init_array_entry>:
|
|
620: 00dd 0000 ....
|
|
|
|
00000624 <_fini>:
|
|
624: b5f8 push {r3, r4, r5, r6, r7, lr}
|
|
626: 46c0 nop ; (mov r8, r8)
|
|
628: bcf8 pop {r3, r4, r5, r6, r7}
|
|
62a: bc08 pop {r3}
|
|
62c: 469e mov lr, r3
|
|
62e: 4770 bx lr
|
|
|
|
00000630 <__do_global_dtors_aux_fini_array_entry>:
|
|
630: 00b5 0000 ....
|