Files
info.linkwitz.ha_pcb/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst
2023-06-04 08:01:55 +02:00

4606 lines
203 KiB
Plaintext

C:\Users\Martin\AppData\Local\Temp\arduino_build_93758/Swtich.ino.elf: file format elf32-avr
Disassembly of section .text:
00000000 <__vectors>:
__vectors():
../../../../../crt1/gcrt1.S:61
0: 50 c0 rjmp .+160 ; 0xa2 <__ctors_end>
2: 00 00 nop
../../../../../crt1/gcrt1.S:67
4: 73 c0 rjmp .+230 ; 0xec <__bad_interrupt>
6: 00 00 nop
../../../../../crt1/gcrt1.S:68
8: 71 c0 rjmp .+226 ; 0xec <__bad_interrupt>
a: 00 00 nop
../../../../../crt1/gcrt1.S:69
c: 6f c0 rjmp .+222 ; 0xec <__bad_interrupt>
e: 00 00 nop
../../../../../crt1/gcrt1.S:70
10: 6d c0 rjmp .+218 ; 0xec <__bad_interrupt>
12: 00 00 nop
../../../../../crt1/gcrt1.S:71
14: 6b c0 rjmp .+214 ; 0xec <__bad_interrupt>
16: 00 00 nop
../../../../../crt1/gcrt1.S:72
18: 69 c0 rjmp .+210 ; 0xec <__bad_interrupt>
1a: 00 00 nop
../../../../../crt1/gcrt1.S:73
1c: 67 c0 rjmp .+206 ; 0xec <__bad_interrupt>
1e: 00 00 nop
../../../../../crt1/gcrt1.S:74
20: 65 c0 rjmp .+202 ; 0xec <__bad_interrupt>
22: 00 00 nop
../../../../../crt1/gcrt1.S:75
24: 63 c0 rjmp .+198 ; 0xec <__bad_interrupt>
26: 00 00 nop
../../../../../crt1/gcrt1.S:76
28: 61 c0 rjmp .+194 ; 0xec <__bad_interrupt>
2a: 00 00 nop
../../../../../crt1/gcrt1.S:77
2c: 5f c0 rjmp .+190 ; 0xec <__bad_interrupt>
2e: 00 00 nop
../../../../../crt1/gcrt1.S:78
30: 5d c0 rjmp .+186 ; 0xec <__bad_interrupt>
32: 00 00 nop
../../../../../crt1/gcrt1.S:79
34: 5b c0 rjmp .+182 ; 0xec <__bad_interrupt>
36: 00 00 nop
../../../../../crt1/gcrt1.S:80
38: 59 c0 rjmp .+178 ; 0xec <__bad_interrupt>
3a: 00 00 nop
../../../../../crt1/gcrt1.S:81
3c: 57 c0 rjmp .+174 ; 0xec <__bad_interrupt>
3e: 00 00 nop
../../../../../crt1/gcrt1.S:82
40: 55 c0 rjmp .+170 ; 0xec <__bad_interrupt>
42: 00 00 nop
../../../../../crt1/gcrt1.S:83
44: 53 c0 rjmp .+166 ; 0xec <__bad_interrupt>
46: 00 00 nop
../../../../../crt1/gcrt1.S:84
48: 51 c0 rjmp .+162 ; 0xec <__bad_interrupt>
4a: 00 00 nop
../../../../../crt1/gcrt1.S:85
4c: 4f c0 rjmp .+158 ; 0xec <__bad_interrupt>
4e: 00 00 nop
../../../../../crt1/gcrt1.S:86
50: 4d c0 rjmp .+154 ; 0xec <__bad_interrupt>
52: 00 00 nop
../../../../../crt1/gcrt1.S:87
54: 4b c0 rjmp .+150 ; 0xec <__bad_interrupt>
56: 00 00 nop
../../../../../crt1/gcrt1.S:88
58: 49 c0 rjmp .+146 ; 0xec <__bad_interrupt>
5a: 00 00 nop
../../../../../crt1/gcrt1.S:89
5c: 47 c0 rjmp .+142 ; 0xec <__bad_interrupt>
5e: 00 00 nop
../../../../../crt1/gcrt1.S:90
60: 45 c0 rjmp .+138 ; 0xec <__bad_interrupt>
62: 00 00 nop
../../../../../crt1/gcrt1.S:91
64: a8 c6 rjmp .+3408 ; 0xdb6 <__vector_25>
66: 00 00 nop
../../../../../crt1/gcrt1.S:92
68: 41 c0 rjmp .+130 ; 0xec <__bad_interrupt>
6a: 00 00 nop
../../../../../crt1/gcrt1.S:93
6c: 3f c0 rjmp .+126 ; 0xec <__bad_interrupt>
6e: 00 00 nop
../../../../../crt1/gcrt1.S:94
70: 3d c0 rjmp .+122 ; 0xec <__bad_interrupt>
72: 00 00 nop
../../../../../crt1/gcrt1.S:95
74: 3b c0 rjmp .+118 ; 0xec <__bad_interrupt>
76: 00 00 nop
../../../../../crt1/gcrt1.S:96
78: 39 c0 rjmp .+114 ; 0xec <__bad_interrupt>
7a: 00 00 nop
../../../../../crt1/gcrt1.S:97
7c: 37 c0 rjmp .+110 ; 0xec <__bad_interrupt>
7e: 00 00 nop
../../../../../crt1/gcrt1.S:98
80: 35 c0 rjmp .+106 ; 0xec <__bad_interrupt>
82: 00 00 nop
../../../../../crt1/gcrt1.S:99
84: 33 c0 rjmp .+102 ; 0xec <__bad_interrupt>
86: 00 00 nop
../../../../../crt1/gcrt1.S:100
88: 31 c0 rjmp .+98 ; 0xec <__bad_interrupt>
8a: 00 00 nop
../../../../../crt1/gcrt1.S:101
8c: 2f c0 rjmp .+94 ; 0xec <__bad_interrupt>
8e: 00 00 nop
../../../../../crt1/gcrt1.S:102
90: 2d c0 rjmp .+90 ; 0xec <__bad_interrupt>
92: 00 00 nop
../../../../../crt1/gcrt1.S:103
94: 2b c0 rjmp .+86 ; 0xec <__bad_interrupt>
96: 00 00 nop
../../../../../crt1/gcrt1.S:104
98: 29 c0 rjmp .+82 ; 0xec <__bad_interrupt>
9a: 00 00 nop
../../../../../crt1/gcrt1.S:105
9c: 27 c0 rjmp .+78 ; 0xec <__bad_interrupt>
...
000000a0 <__ctors_start>:
__trampolines_start():
a0: 11 07 cpc r17, r17
000000a2 <__ctors_end>:
__dtors_end():
../../../../../crt1/gcrt1.S:230
a2: 11 24 eor r1, r1
../../../../../crt1/gcrt1.S:231
a4: 1f be out 0x3f, r1 ; 63
../../../../../crt1/gcrt1.S:232
a6: cf ef ldi r28, 0xFF ; 255
../../../../../crt1/gcrt1.S:234
a8: cd bf out 0x3d, r28 ; 61
../../../../../crt1/gcrt1.S:236
aa: df e3 ldi r29, 0x3F ; 63
../../../../../crt1/gcrt1.S:237
ac: de bf out 0x3e, r29 ; 62
000000ae <__do_copy_data>:
__do_copy_data():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2409
ae: 1c e3 ldi r17, 0x3C ; 60
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2410
b0: a0 e0 ldi r26, 0x00 ; 0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2411
b2: bc e3 ldi r27, 0x3C ; 60
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2412
b4: e0 eb ldi r30, 0xB0 ; 176
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2413
b6: f3 e1 ldi r31, 0x13 ; 19
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2414
b8: 02 c0 rjmp .+4 ; 0xbe <__do_copy_data+0x10>
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2417
ba: 05 90 lpm r0, Z+
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2422
bc: 0d 92 st X+, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2424
be: ae 30 cpi r26, 0x0E ; 14
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2425
c0: b1 07 cpc r27, r17
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2426
c2: d9 f7 brne .-10 ; 0xba <__do_copy_data+0xc>
000000c4 <__do_clear_bss>:
__do_clear_bss():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441
c4: 2c e3 ldi r18, 0x3C ; 60
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442
c6: ae e0 ldi r26, 0x0E ; 14
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443
c8: bc e3 ldi r27, 0x3C ; 60
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444
ca: 01 c0 rjmp .+2 ; 0xce <.do_clear_bss_start>
000000cc <.do_clear_bss_loop>:
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446
cc: 1d 92 st X+, r1
000000ce <.do_clear_bss_start>:
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448
ce: a4 37 cpi r26, 0x74 ; 116
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449
d0: b2 07 cpc r27, r18
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450
d2: e1 f7 brne .-8 ; 0xcc <.do_clear_bss_loop>
000000d4 <__do_global_ctors>:
__do_global_ctors():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2466
d4: 10 e0 ldi r17, 0x00 ; 0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2467
d6: c1 e5 ldi r28, 0x51 ; 81
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2468
d8: d0 e0 ldi r29, 0x00 ; 0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2472
da: 03 c0 rjmp .+6 ; 0xe2 <__do_global_ctors+0xe>
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2474
dc: 21 97 sbiw r28, 0x01 ; 1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2480
de: fe 01 movw r30, r28
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2481
e0: c9 d7 rcall .+3986 ; 0x1074 <__tablejump2__>
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2483
e2: c0 35 cpi r28, 0x50 ; 80
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2484
e4: d1 07 cpc r29, r17
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2489
e6: d1 f7 brne .-12 ; 0xdc <__do_global_ctors+0x8>
../../../../../crt1/gcrt1.S:314
e8: b6 d6 rcall .+3436 ; 0xe56 <main>
../../../../../crt1/gcrt1.S:315
ea: 04 c9 rjmp .-3576 ; 0xfffff2f4 <__eeprom_end+0xff7ef2f4>
000000ec <__bad_interrupt>:
__vector_38():
../../../../../crt1/gcrt1.S:209
ec: 89 cf rjmp .-238 ; 0x0 <__vectors>
000000ee <pinMode.part.1.constprop.29>:
pinMode.part.1.constprop.29():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31
#include "wiring_private.h"
#include "pins_arduino.h"
void pinMode(uint8_t pin, uint8_t mode)
{
uint8_t bit_mask = digitalPinToBitMask(pin);
ee: 90 e0 ldi r25, 0x00 ; 0
f0: fc 01 movw r30, r24
f2: e9 57 subi r30, 0x79 ; 121
f4: fc 4a sbci r31, 0xAC ; 172
f6: 20 81 ld r18, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:33
if ((bit_mask == NOT_A_PIN) || (mode > INPUT_PULLUP))
f8: 2f 3f cpi r18, 0xFF ; 255
fa: 51 f0 breq .+20 ; 0x110 <__EEPROM_REGION_LENGTH__+0x10>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:36
return;
PORT_t *port = digitalPinToPortStruct(pin);
fc: 82 5a subi r24, 0xA2 ; 162
fe: 9c 4a sbci r25, 0xAC ; 172
100: dc 01 movw r26, r24
102: ec 91 ld r30, X
104: b0 e2 ldi r27, 0x20 ; 32
106: eb 9f mul r30, r27
108: f0 01 movw r30, r0
10a: 11 24 eor r1, r1
10c: fc 5f subi r31, 0xFC ; 252
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:43
return;
if (mode == OUTPUT)
{
/* Configure direction as output */
port->DIRSET = bit_mask;
10e: 21 83 std Z+1, r18 ; 0x01
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:75
}
/* Restore state */
SREG = status;
}
}
110: 08 95 ret
00000112 <SPIClass::begin() [clone .constprop.25]>:
_ZN8SPIClass5beginEv.constprop.25():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:131
config(DEFAULT_SPI_SETTINGS);
}
void SPIClass::init()
{
if (initialized)
112: 80 91 2d 3c lds r24, 0x3C2D ; 0x803c2d <SPI+0x5>
116: 81 11 cpse r24, r1
118: 17 c0 rjmp .+46 ; 0x148 <SPIClass::begin() [clone .constprop.25]+0x36>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:133
return;
interruptMode = SPI_IMODE_NONE;
11a: 10 92 2e 3c sts 0x3C2E, r1 ; 0x803c2e <SPI+0x6>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:134
interruptSave = 0;
11e: 10 92 2f 3c sts 0x3C2F, r1 ; 0x803c2f <SPI+0x7>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:135
interruptMask_lo = 0;
122: 10 92 30 3c sts 0x3C30, r1 ; 0x803c30 <SPI+0x8>
126: 10 92 31 3c sts 0x3C31, r1 ; 0x803c31 <SPI+0x9>
12a: 10 92 32 3c sts 0x3C32, r1 ; 0x803c32 <SPI+0xa>
12e: 10 92 33 3c sts 0x3C33, r1 ; 0x803c33 <SPI+0xb>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:136
interruptMask_hi = 0;
132: 10 92 34 3c sts 0x3C34, r1 ; 0x803c34 <SPI+0xc>
136: 10 92 35 3c sts 0x3C35, r1 ; 0x803c35 <SPI+0xd>
13a: 10 92 36 3c sts 0x3C36, r1 ; 0x803c36 <SPI+0xe>
13e: 10 92 37 3c sts 0x3C37, r1 ; 0x803c37 <SPI+0xf>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:137
initialized = true;
142: 81 e0 ldi r24, 0x01 ; 1
144: 80 93 2d 3c sts 0x3C2D, r24 ; 0x803c2d <SPI+0x5>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:99
void SPIClass::begin()
{
init();
PORTMUX.TWISPIROUTEA = _uc_mux | (PORTMUX.TWISPIROUTEA & ~3);
148: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 <digital_pin_to_bit_mask+0x7fb25c>
14c: 8c 7f andi r24, 0xFC ; 252
14e: 90 91 2c 3c lds r25, 0x3C2C ; 0x803c2c <SPI+0x4>
152: 89 2b or r24, r25
154: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 <digital_pin_to_bit_mask+0x7fb25c>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:102
// MISO is set to input by the controller
if(_uc_mux == SPI_MUX)
158: 91 11 cpse r25, r1
15a: 17 c0 rjmp .+46 ; 0x18a <SPIClass::begin() [clone .constprop.25]+0x78>
pinMode():
15c: 84 e0 ldi r24, 0x04 ; 4
15e: c7 df rcall .-114 ; 0xee <pinMode.part.1.constprop.29>
160: 86 e0 ldi r24, 0x06 ; 6
162: c5 df rcall .-118 ; 0xee <pinMode.part.1.constprop.29>
_ZN8SPIClass5beginEv.constprop.25():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:123
pinMode(PIN_SPI_SCK_PINSWAP_2, OUTPUT);
}
#endif
// We don't need HW SS since salve/master mode is selected via registers
SPI0.CTRLB |= (SPI_SSD_bm);
164: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 <digital_pin_to_bit_mask+0x7fb53a>
168: 84 60 ori r24, 0x04 ; 4
16a: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <digital_pin_to_bit_mask+0x7fb53a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:124
SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm);
16e: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 <digital_pin_to_bit_mask+0x7fb539>
172: 81 62 ori r24, 0x21 ; 33
174: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 <digital_pin_to_bit_mask+0x7fb539>
178: 90 91 67 3c lds r25, 0x3C67 ; 0x803c67 <DEFAULT_SPI_SETTINGS>
17c: 80 91 68 3c lds r24, 0x3C68 ; 0x803c68 <DEFAULT_SPI_SETTINGS+0x1>
config():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142
initialized = true;
}
void SPIClass::config(SPISettings settings)
{
SPI0.CTRLA = settings.ctrla;
180: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 <digital_pin_to_bit_mask+0x7fb539>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143
SPI0.CTRLB = settings.ctrlb;
184: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <digital_pin_to_bit_mask+0x7fb53a>
_ZN8SPIClass5beginEv.constprop.25():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:127
// We don't need HW SS since salve/master mode is selected via registers
SPI0.CTRLB |= (SPI_SSD_bm);
SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm);
config(DEFAULT_SPI_SETTINGS);
}
188: 08 95 ret
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:108
{
pinMode(PIN_SPI_MOSI, OUTPUT);
pinMode(PIN_SPI_SCK, OUTPUT);
}
#if defined(SPI_MUX_PINSWAP_1)
else if(_uc_mux == SPI_MUX_PINSWAP_1)
18a: 91 30 cpi r25, 0x01 ; 1
18c: 21 f4 brne .+8 ; 0x196 <SPIClass::begin() [clone .constprop.25]+0x84>
pinMode():
18e: 8e e0 ldi r24, 0x0E ; 14
190: ae df rcall .-164 ; 0xee <pinMode.part.1.constprop.29>
192: 80 e1 ldi r24, 0x10 ; 16
194: e6 cf rjmp .-52 ; 0x162 <SPIClass::begin() [clone .constprop.25]+0x50>
_ZN8SPIClass5beginEv.constprop.25():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:115
pinMode(PIN_SPI_MOSI_PINSWAP_1, OUTPUT);
pinMode(PIN_SPI_SCK_PINSWAP_1, OUTPUT);
}
#endif
#if defined(SPI_MUX_PINSWAP_2)
else if(_uc_mux == SPI_MUX_PINSWAP_2)
196: 92 30 cpi r25, 0x02 ; 2
198: 29 f7 brne .-54 ; 0x164 <SPIClass::begin() [clone .constprop.25]+0x52>
pinMode():
19a: 8e e1 ldi r24, 0x1E ; 30
19c: a8 df rcall .-176 ; 0xee <pinMode.part.1.constprop.29>
19e: 80 e2 ldi r24, 0x20 ; 32
1a0: e0 cf rjmp .-64 ; 0x162 <SPIClass::begin() [clone .constprop.25]+0x50>
000001a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>:
_ZN8SPIClass8transferEh.constprop.16():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:304
* The following NOP introduces a small delay that can prevent the wait
* loop from iterating when running at the maximum speed. This gives
* about 10% more speed, even if it seems counter-intuitive. At lower
* speeds it is unnoticed.
*/
asm volatile("nop");
1a2: 00 00 nop
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:306
SPI0.DATA = data;
1a4: 80 93 c4 08 sts 0x08C4, r24 ; 0x8008c4 <digital_pin_to_bit_mask+0x7fb53d>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:307
while ((SPI0.INTFLAGS & SPI_RXCIF_bm) == 0); // wait for complete send
1a8: 80 91 c3 08 lds r24, 0x08C3 ; 0x8008c3 <digital_pin_to_bit_mask+0x7fb53c>
1ac: 87 ff sbrs r24, 7
1ae: fc cf rjmp .-8 ; 0x1a8 <SPIClass::transfer(unsigned char) [clone .constprop.16]+0x6>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:308
return SPI0.DATA; // read data back
1b0: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 <digital_pin_to_bit_mask+0x7fb53d>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:309
}
1b4: 08 95 ret
000001b6 <digitalWrite.part.2>:
digitalWrite.part.2():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137
}
void digitalWrite(uint8_t pin, uint8_t val)
{
/* Get bit mask for pin */
uint8_t bit_mask = digitalPinToBitMask(pin);
1b6: 28 2f mov r18, r24
1b8: 30 e0 ldi r19, 0x00 ; 0
1ba: f9 01 movw r30, r18
1bc: e9 57 subi r30, 0x79 ; 121
1be: fc 4a sbci r31, 0xAC ; 172
1c0: 40 81 ld r20, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:138
if (bit_mask == NOT_A_PIN)
1c2: 4f 3f cpi r20, 0xFF ; 255
1c4: 09 f4 brne .+2 ; 0x1c8 <digitalWrite.part.2+0x12>
1c6: 50 c0 rjmp .+160 ; 0x268 <digitalWrite.part.2+0xb2>
turnOffPWM():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:97
static void turnOffPWM(uint8_t pin)
{
/* Actually turn off compare channel, not the timer */
/* Get pin's timer */
uint8_t timer = digitalPinToTimer(pin);
1c8: 89 32 cpi r24, 0x29 ; 41
1ca: 58 f4 brcc .+22 ; 0x1e2 <digitalWrite.part.2+0x2c>
1cc: f9 01 movw r30, r18
1ce: ec 5f subi r30, 0xFC ; 252
1d0: fc 4a sbci r31, 0xAC ; 172
1d2: e0 81 ld r30, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:98
if (timer == NOT_ON_TIMER)
1d4: ee 23 and r30, r30
1d6: 29 f0 breq .+10 ; 0x1e2 <digitalWrite.part.2+0x2c>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:104
return;
uint8_t bit_pos;
TCB_t *timerB;
switch (timer)
1d8: e1 30 cpi r30, 0x01 ; 1
1da: 99 f0 breq .+38 ; 0x202 <digitalWrite.part.2+0x4c>
1dc: 10 f0 brcs .+4 ; 0x1e2 <digitalWrite.part.2+0x2c>
1de: e6 30 cpi r30, 0x06 ; 6
1e0: 20 f1 brcs .+72 ; 0x22a <digitalWrite.part.2+0x74>
digitalWrite.part.2():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:150
turnOffPWM(pin);
/* Assuming the direction is already output !! */
/* Get port */
PORT_t *port = digitalPinToPortStruct(pin);
1e2: f9 01 movw r30, r18
1e4: e2 5a subi r30, 0xA2 ; 162
1e6: fc 4a sbci r31, 0xAC ; 172
1e8: e0 81 ld r30, Z
1ea: a0 e2 ldi r26, 0x20 ; 32
1ec: ea 9f mul r30, r26
1ee: f0 01 movw r30, r0
1f0: 11 24 eor r1, r1
1f2: fc 5f subi r31, 0xFC ; 252
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:153
/* Output direction */
if (port->DIR & bit_mask)
1f4: 80 81 ld r24, Z
1f6: 84 23 and r24, r20
1f8: 21 f1 breq .+72 ; 0x242 <digitalWrite.part.2+0x8c>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:156
{
/* Set output to value */
if (val == LOW)
1fa: 61 11 cpse r22, r1
1fc: 20 c0 rjmp .+64 ; 0x23e <digitalWrite.part.2+0x88>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:158
{ /* If LOW */
port->OUTCLR = bit_mask;
1fe: 46 83 std Z+6, r20 ; 0x06
200: 08 95 ret
turnOffPWM():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:109
switch (timer)
{
/* TCA0 */
case TIMERA0:
/* Bit position will give output channel */
bit_pos = digitalPinToBitPosition(pin);
202: f9 01 movw r30, r18
204: eb 5c subi r30, 0xCB ; 203
206: fc 4a sbci r31, 0xAC ; 172
208: 50 81 ld r21, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:112
/* Disable corresponding channel */
if (bit_pos >= 3) ++bit_pos; /* Upper 3 bits are shifted by 1 */
20a: 53 30 cpi r21, 0x03 ; 3
20c: 08 f0 brcs .+2 ; 0x210 <digitalWrite.part.2+0x5a>
20e: 5f 5f subi r21, 0xFF ; 255
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:113
TCA0.SPLIT.CTRLB &= ~(1 << (TCA_SPLIT_LCMP0EN_bp + bit_pos));
210: 70 91 01 0a lds r23, 0x0A01 ; 0x800a01 <digital_pin_to_bit_mask+0x7fb67a>
214: 81 e0 ldi r24, 0x01 ; 1
216: 90 e0 ldi r25, 0x00 ; 0
218: 01 c0 rjmp .+2 ; 0x21c <digitalWrite.part.2+0x66>
21a: 88 0f add r24, r24
21c: 5a 95 dec r21
21e: ea f7 brpl .-6 ; 0x21a <digitalWrite.part.2+0x64>
220: 80 95 com r24
222: 87 23 and r24, r23
224: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 <digital_pin_to_bit_mask+0x7fb67a>
228: dc cf rjmp .-72 ; 0x1e2 <digitalWrite.part.2+0x2c>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:123
case TIMERB0:
case TIMERB1:
case TIMERB2:
case TIMERB3:
timerB = (TCB_t *)&TCB0 + (timer - TIMERB0);
22a: 80 e1 ldi r24, 0x10 ; 16
22c: e8 9f mul r30, r24
22e: f0 01 movw r30, r0
230: 11 24 eor r1, r1
232: e0 5a subi r30, 0xA0 ; 160
234: f5 4f sbci r31, 0xF5 ; 245
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:126
/* Disable TCB compare channel */
timerB->CTRLB &= ~(TCB_CCMPEN_bm);
236: 81 81 ldd r24, Z+1 ; 0x01
238: 8f 7e andi r24, 0xEF ; 239
23a: 81 83 std Z+1, r24 ; 0x01
23c: d2 cf rjmp .-92 ; 0x1e2 <digitalWrite.part.2+0x2c>
digitalWrite.part.2():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:167
port->OUTTGL = bit_mask;
/* If HIGH OR > TOGGLE */
}
else
{
port->OUTSET = bit_mask;
23e: 45 83 std Z+5, r20 ; 0x05
240: 08 95 ret
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:180
pull up is enabled if this function is called.
Should we purposely implement this side effect?
*/
/* Get bit position for getting pin ctrl reg */
uint8_t bit_pos = digitalPinToBitPosition(pin);
242: 2b 5c subi r18, 0xCB ; 203
244: 3c 4a sbci r19, 0xAC ; 172
246: d9 01 movw r26, r18
248: 8c 91 ld r24, X
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:183
/* Calculate where pin control register is */
volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos);
24a: 30 97 sbiw r30, 0x00 ; 0
24c: 71 f0 breq .+28 ; 0x26a <digitalWrite.part.2+0xb4>
24e: 8f 3f cpi r24, 0xFF ; 255
250: 61 f0 breq .+24 ; 0x26a <digitalWrite.part.2+0xb4>
252: 70 96 adiw r30, 0x10 ; 16
254: e8 0f add r30, r24
256: f1 1d adc r31, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:186
/* Save system status and disable interrupts */
uint8_t status = SREG;
258: 9f b7 in r25, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:187
cli();
25a: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:192
if (val == LOW)
{
/* Disable pullup */
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
25c: 80 81 ld r24, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:189
/* Save system status and disable interrupts */
uint8_t status = SREG;
cli();
if (val == LOW)
25e: 61 11 cpse r22, r1
260: 07 c0 rjmp .+14 ; 0x270 <digitalWrite.part.2+0xba>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:192
{
/* Disable pullup */
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
262: 87 7f andi r24, 0xF7 ; 247
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:197
}
else
{
/* Enable pull-up */
*pin_ctrl_reg |= PORT_PULLUPEN_bm;
264: 80 83 st Z, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:201
}
/* Restore system status */
SREG = status;
266: 9f bf out 0x3f, r25 ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:203
}
}
268: 08 95 ret
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:183
/* Get bit position for getting pin ctrl reg */
uint8_t bit_pos = digitalPinToBitPosition(pin);
/* Calculate where pin control register is */
volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos);
26a: f0 e0 ldi r31, 0x00 ; 0
26c: e0 e0 ldi r30, 0x00 ; 0
26e: f4 cf rjmp .-24 ; 0x258 <digitalWrite.part.2+0xa2>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:197
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
}
else
{
/* Enable pull-up */
*pin_ctrl_reg |= PORT_PULLUPEN_bm;
270: 88 60 ori r24, 0x08 ; 8
272: f8 cf rjmp .-16 ; 0x264 <digitalWrite.part.2+0xae>
00000274 <micros>:
micros():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:103
{
uint32_t m;
uint16_t t;
/* Save current state and disable interrupts */
uint8_t status = SREG;
274: 8f b7 in r24, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:104
cli();
276: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:107
/* Get current number of millis (i.e. overflows) and timer count */
m = timer_millis;
278: 20 91 10 3c lds r18, 0x3C10 ; 0x803c10 <timer_millis>
27c: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 <timer_millis+0x1>
280: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 <timer_millis+0x2>
284: 50 91 13 3c lds r21, 0x3C13 ; 0x803c13 <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:108
t = _timer->CNT;
288: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa <digital_pin_to_bit_mask+0x7fb723>
28c: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab <digital_pin_to_bit_mask+0x7fb724>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:112
/* If the timer overflow flag is raised, we just missed it,
increment to account for it, & read new ticks */
if (_timer->INTFLAGS & TCB_CAPT_bm)
290: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 <digital_pin_to_bit_mask+0x7fb71f>
294: 90 ff sbrs r25, 0
296: 08 c0 rjmp .+16 ; 0x2a8 <micros+0x34>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:114
{
m++;
298: 2f 5f subi r18, 0xFF ; 255
29a: 3f 4f sbci r19, 0xFF ; 255
29c: 4f 4f sbci r20, 0xFF ; 255
29e: 5f 4f sbci r21, 0xFF ; 255
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:115
t = _timer->CNT;
2a0: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa <digital_pin_to_bit_mask+0x7fb723>
2a4: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab <digital_pin_to_bit_mask+0x7fb724>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:119
}
// Restore SREG
SREG = status;
2a8: 8f bf out 0x3f, r24 ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:130
return m * 1000 + (t >> 4);
#elif (F_CPU == 10000000L)
t = t >> 3;
return m * 1000 + (t - (t >> 2) + (t >> 4) - (t >> 6));
#elif (F_CPU == 8000000L)
return m * 1000 + (t >> 3);
2aa: a8 ee ldi r26, 0xE8 ; 232
2ac: b3 e0 ldi r27, 0x03 ; 3
2ae: af d6 rcall .+3422 ; 0x100e <__muluhisi3>
2b0: 23 e0 ldi r18, 0x03 ; 3
2b2: f6 95 lsr r31
2b4: e7 95 ror r30
2b6: 2a 95 dec r18
2b8: e1 f7 brne .-8 ; 0x2b2 <micros+0x3e>
2ba: 6e 0f add r22, r30
2bc: 7f 1f adc r23, r31
2be: 81 1d adc r24, r1
2c0: 91 1d adc r25, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:143
#elif (F_CPU == 1000000L)
return m * 1000 + t;
#else
return 0;
#endif
}
2c2: 08 95 ret
000002c4 <delay.constprop.18>:
delay.constprop.18():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:145
void delay(unsigned long ms)
2c4: cf 92 push r12
2c6: df 92 push r13
2c8: ef 92 push r14
2ca: ff 92 push r15
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:147
{
uint32_t start_time = micros(), delay_time = 1000 * ms;
2cc: d3 df rcall .-90 ; 0x274 <micros>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:150
/* Calculate future time to return */
uint32_t return_time = start_time + delay_time;
2ce: 6b 01 movw r12, r22
2d0: 7c 01 movw r14, r24
2d2: 20 e1 ldi r18, 0x10 ; 16
2d4: c2 0e add r12, r18
2d6: 27 e2 ldi r18, 0x27 ; 39
2d8: d2 1e adc r13, r18
2da: e1 1c adc r14, r1
2dc: f1 1c adc r15, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:153
/* If return time overflows */
if (return_time < delay_time)
2de: 80 e1 ldi r24, 0x10 ; 16
2e0: c8 16 cp r12, r24
2e2: 87 e2 ldi r24, 0x27 ; 39
2e4: d8 06 cpc r13, r24
2e6: e1 04 cpc r14, r1
2e8: f1 04 cpc r15, r1
2ea: 30 f4 brcc .+12 ; 0x2f8 <delay.constprop.18+0x34>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:156
{
/* Wait until micros overflows */
while (micros() > return_time)
2ec: c3 df rcall .-122 ; 0x274 <micros>
2ee: c6 16 cp r12, r22
2f0: d7 06 cpc r13, r23
2f2: e8 06 cpc r14, r24
2f4: f9 06 cpc r15, r25
2f6: d0 f3 brcs .-12 ; 0x2ec <delay.constprop.18+0x28>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:161
;
}
/* Wait until return time */
while (micros() < return_time)
2f8: bd df rcall .-134 ; 0x274 <micros>
2fa: 6c 15 cp r22, r12
2fc: 7d 05 cpc r23, r13
2fe: 8e 05 cpc r24, r14
300: 9f 05 cpc r25, r15
302: d0 f3 brcs .-12 ; 0x2f8 <delay.constprop.18+0x34>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:163
;
}
304: ff 90 pop r15
306: ef 90 pop r14
308: df 90 pop r13
30a: cf 90 pop r12
30c: 08 95 ret
0000030e <MCP2515::endSPI()>:
_ZN7MCP25156endSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:29
void MCP2515::startSPI() {
SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
digitalWrite(SPICS, LOW);
}
void MCP2515::endSPI() {
30e: 8f 92 push r8
310: 9f 92 push r9
312: af 92 push r10
314: bf 92 push r11
316: cf 92 push r12
318: df 92 push r13
31a: ef 92 push r14
31c: ff 92 push r15
31e: 0f 93 push r16
320: cf 93 push r28
322: df 93 push r29
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:30
digitalWrite(SPICS, HIGH);
324: fc 01 movw r30, r24
326: 80 81 ld r24, Z
digitalWrite():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137
}
void digitalWrite(uint8_t pin, uint8_t val)
{
/* Get bit mask for pin */
uint8_t bit_mask = digitalPinToBitMask(pin);
328: 89 32 cpi r24, 0x29 ; 41
32a: 10 f4 brcc .+4 ; 0x330 <MCP2515::endSPI()+0x22>
32c: 61 e0 ldi r22, 0x01 ; 1
32e: 43 df rcall .-378 ; 0x1b6 <digitalWrite.part.2>
endTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:265
config(settings);
}
void SPIClass::endTransaction(void)
{
if (interruptMode != SPI_IMODE_NONE)
330: 80 91 2e 3c lds r24, 0x3C2E ; 0x803c2e <SPI+0x6>
334: 88 23 and r24, r24
336: 19 f0 breq .+6 ; 0x33e <MCP2515::endSPI()+0x30>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:267
{
if (interruptMode & SPI_IMODE_GLOBAL)
338: 81 ff sbrs r24, 1
33a: 0d c0 rjmp .+26 ; 0x356 <MCP2515::endSPI()+0x48>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:269
{
interrupts();
33c: 78 94 sei
_ZN7MCP25156endSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:32
SPI.endTransaction();
}
33e: df 91 pop r29
340: cf 91 pop r28
342: 0f 91 pop r16
344: ff 90 pop r15
346: ef 90 pop r14
348: df 90 pop r13
34a: cf 90 pop r12
34c: bf 90 pop r11
34e: af 90 pop r10
350: 9f 90 pop r9
352: 8f 90 pop r8
354: 08 95 ret
endTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:271
}
else if (interruptMode & SPI_IMODE_EXTINT)
356: 80 ff sbrs r24, 0
358: f2 cf rjmp .-28 ; 0x33e <MCP2515::endSPI()+0x30>
reattachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:225
shift++;
}
}
void SPIClass::reattachMaskedInterrupts() {
uint64_t temp = interruptMask_lo;
35a: 80 90 30 3c lds r8, 0x3C30 ; 0x803c30 <SPI+0x8>
35e: 90 90 31 3c lds r9, 0x3C31 ; 0x803c31 <SPI+0x9>
362: a0 90 32 3c lds r10, 0x3C32 ; 0x803c32 <SPI+0xa>
366: b0 90 33 3c lds r11, 0x3C33 ; 0x803c33 <SPI+0xb>
36a: c1 2c mov r12, r1
36c: d1 2c mov r13, r1
36e: 76 01 movw r14, r12
_ZN7MCP25156endSPIEv():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:226
uint8_t shift = 0;
370: e0 e0 ldi r30, 0x00 ; 0
reattachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:227
while (temp != 0) {
372: 94 01 movw r18, r8
374: a5 01 movw r20, r10
376: b6 01 movw r22, r12
378: c7 01 movw r24, r14
37a: a0 e0 ldi r26, 0x00 ; 0
37c: 6f d6 rcall .+3294 ; 0x105c <__cmpdi2_s8>
37e: 81 f1 breq .+96 ; 0x3e0 <MCP2515::endSPI()+0xd2>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:228
if (temp & 1) {
380: 21 70 andi r18, 0x01 ; 1
382: 30 e0 ldi r19, 0x00 ; 0
384: 40 e0 ldi r20, 0x00 ; 0
386: 50 e0 ldi r21, 0x00 ; 0
388: 60 e0 ldi r22, 0x00 ; 0
38a: 70 e0 ldi r23, 0x00 ; 0
38c: 80 e0 ldi r24, 0x00 ; 0
38e: 90 e0 ldi r25, 0x00 ; 0
390: 65 d6 rcall .+3274 ; 0x105c <__cmpdi2_s8>
392: d1 f0 breq .+52 ; 0x3c8 <MCP2515::endSPI()+0xba>
_ZN7MCP25156endSPIEv():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:229
volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8);
394: b0 e0 ldi r27, 0x00 ; 0
396: a0 e0 ldi r26, 0x00 ; 0
reattachMaskedInterrupts():
398: e0 33 cpi r30, 0x30 ; 48
39a: 70 f4 brcc .+28 ; 0x3b8 <MCP2515::endSPI()+0xaa>
39c: ae 2f mov r26, r30
39e: a6 95 lsr r26
3a0: a6 95 lsr r26
3a2: a6 95 lsr r26
3a4: f0 e2 ldi r31, 0x20 ; 32
3a6: af 9f mul r26, r31
3a8: d0 01 movw r26, r0
3aa: 11 24 eor r1, r1
3ac: a0 5f subi r26, 0xF0 ; 240
3ae: bb 4f sbci r27, 0xFB ; 251
3b0: 8e 2f mov r24, r30
3b2: 87 70 andi r24, 0x07 ; 7
3b4: a8 0f add r26, r24
3b6: b1 1d adc r27, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:230
*pin_ctrl_reg |= irqMap[shift];
3b8: ce 2f mov r28, r30
3ba: d0 e0 ldi r29, 0x00 ; 0
3bc: c8 5d subi r28, 0xD8 ; 216
3be: d3 4c sbci r29, 0xC3 ; 195
3c0: 88 89 ldd r24, Y+16 ; 0x10
3c2: 9c 91 ld r25, X
3c4: 89 2b or r24, r25
3c6: 8c 93 st X, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:232
}
temp = temp >> 1;
3c8: 94 01 movw r18, r8
3ca: a5 01 movw r20, r10
3cc: b6 01 movw r22, r12
3ce: c7 01 movw r24, r14
3d0: 01 e0 ldi r16, 0x01 ; 1
3d2: 29 d6 rcall .+3154 ; 0x1026 <__lshrdi3>
3d4: 49 01 movw r8, r18
3d6: 5a 01 movw r10, r20
3d8: 6b 01 movw r12, r22
3da: 7c 01 movw r14, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:233
shift++;
3dc: ef 5f subi r30, 0xFF ; 255
3de: c9 cf rjmp .-110 ; 0x372 <MCP2515::endSPI()+0x64>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:235
}
temp = interruptMask_hi;
3e0: 80 90 34 3c lds r8, 0x3C34 ; 0x803c34 <SPI+0xc>
3e4: 90 90 35 3c lds r9, 0x3C35 ; 0x803c35 <SPI+0xd>
3e8: a0 90 36 3c lds r10, 0x3C36 ; 0x803c36 <SPI+0xe>
3ec: b0 90 37 3c lds r11, 0x3C37 ; 0x803c37 <SPI+0xf>
3f0: c1 2c mov r12, r1
3f2: d1 2c mov r13, r1
3f4: 76 01 movw r14, r12
_ZN7MCP25156endSPIEv():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:236
shift = 32;
3f6: e0 e2 ldi r30, 0x20 ; 32
reattachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:237
while (temp != 0) {
3f8: 94 01 movw r18, r8
3fa: a5 01 movw r20, r10
3fc: b6 01 movw r22, r12
3fe: c7 01 movw r24, r14
400: a0 e0 ldi r26, 0x00 ; 0
402: 2c d6 rcall .+3160 ; 0x105c <__cmpdi2_s8>
404: 09 f4 brne .+2 ; 0x408 <__DATA_REGION_LENGTH__+0x8>
406: 9b cf rjmp .-202 ; 0x33e <MCP2515::endSPI()+0x30>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:238
if (temp & 1) {
408: 21 70 andi r18, 0x01 ; 1
40a: 30 e0 ldi r19, 0x00 ; 0
40c: 40 e0 ldi r20, 0x00 ; 0
40e: 50 e0 ldi r21, 0x00 ; 0
410: 60 e0 ldi r22, 0x00 ; 0
412: 70 e0 ldi r23, 0x00 ; 0
414: 80 e0 ldi r24, 0x00 ; 0
416: 90 e0 ldi r25, 0x00 ; 0
418: 21 d6 rcall .+3138 ; 0x105c <__cmpdi2_s8>
41a: d1 f0 breq .+52 ; 0x450 <__DATA_REGION_LENGTH__+0x50>
_ZN7MCP25156endSPIEv():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:239
volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8);
41c: b0 e0 ldi r27, 0x00 ; 0
41e: a0 e0 ldi r26, 0x00 ; 0
reattachMaskedInterrupts():
420: e0 33 cpi r30, 0x30 ; 48
422: 70 f4 brcc .+28 ; 0x440 <__DATA_REGION_LENGTH__+0x40>
424: ae 2f mov r26, r30
426: a6 95 lsr r26
428: a6 95 lsr r26
42a: a6 95 lsr r26
42c: 80 e2 ldi r24, 0x20 ; 32
42e: a8 9f mul r26, r24
430: d0 01 movw r26, r0
432: 11 24 eor r1, r1
434: a0 5f subi r26, 0xF0 ; 240
436: bb 4f sbci r27, 0xFB ; 251
438: 8e 2f mov r24, r30
43a: 87 70 andi r24, 0x07 ; 7
43c: a8 0f add r26, r24
43e: b1 1d adc r27, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:240
*pin_ctrl_reg |= irqMap[shift];
440: ce 2f mov r28, r30
442: d0 e0 ldi r29, 0x00 ; 0
444: c8 5d subi r28, 0xD8 ; 216
446: d3 4c sbci r29, 0xC3 ; 195
448: 88 89 ldd r24, Y+16 ; 0x10
44a: 9c 91 ld r25, X
44c: 89 2b or r24, r25
44e: 8c 93 st X, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:242
}
temp = temp >> 1;
450: 94 01 movw r18, r8
452: a5 01 movw r20, r10
454: b6 01 movw r22, r12
456: c7 01 movw r24, r14
458: 01 e0 ldi r16, 0x01 ; 1
45a: e5 d5 rcall .+3018 ; 0x1026 <__lshrdi3>
45c: 49 01 movw r8, r18
45e: 5a 01 movw r10, r20
460: 6b 01 movw r12, r22
462: 7c 01 movw r14, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:243
shift++;
464: ef 5f subi r30, 0xFF ; 255
466: c8 cf rjmp .-112 ; 0x3f8 <MCP2515::endSPI()+0xea>
00000468 <GetDeviceIdHigh()>:
_Z15GetDeviceIdHighv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:397
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
468: e0 e0 ldi r30, 0x00 ; 0
46a: f1 e1 ldi r31, 0x11 ; 17
46c: 44 81 ldd r20, Z+4 ; 0x04
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:398
CircularShift(SIGROW.SERNUM3) << 1 ^
46e: 96 81 ldd r25, Z+6 ; 0x06
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:399
CircularShift( CircularShift(SIGROW.SERNUM5)) ^
470: 30 85 ldd r19, Z+8 ; 0x08
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:400
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^
472: 22 85 ldd r18, Z+10 ; 0x0a
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:401
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9)))));
474: 84 85 ldd r24, Z+12 ; 0x0c
CircularShift():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
476: 99 0f add r25, r25
478: 91 1d adc r25, r1
_Z15GetDeviceIdHighv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:398
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
47a: 99 0f add r25, r25
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:397
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
47c: 94 27 eor r25, r20
CircularShift():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
47e: 33 0f add r19, r19
480: 31 1d adc r19, r1
482: 33 0f add r19, r19
484: 31 1d adc r19, r1
_Z15GetDeviceIdHighv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:398
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
486: 93 27 eor r25, r19
CircularShift():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
488: 22 95 swap r18
48a: 20 fb bst r18, 0
48c: 27 95 ror r18
48e: 27 f9 bld r18, 7
_Z15GetDeviceIdHighv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:399
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM5)) ^
490: 92 27 eor r25, r18
CircularShift():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
492: 82 95 swap r24
_Z15GetDeviceIdHighv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:402
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM5)) ^
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9)))));
}
494: 89 27 eor r24, r25
496: 08 95 ret
00000498 <GetDeviceIdLow()>:
_Z14GetDeviceIdLowv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:389
{
return myDeviceId;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
498: e0 e0 ldi r30, 0x00 ; 0
49a: f1 e1 ldi r31, 0x11 ; 17
49c: 43 81 ldd r20, Z+3 ; 0x03
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:390
CircularShift(SIGROW.SERNUM2) << 1 ^
49e: 95 81 ldd r25, Z+5 ; 0x05
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:391
CircularShift( CircularShift(SIGROW.SERNUM4)) ^
4a0: 37 81 ldd r19, Z+7 ; 0x07
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:392
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
4a2: 21 85 ldd r18, Z+9 ; 0x09
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:393
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
4a4: 83 85 ldd r24, Z+11 ; 0x0b
CircularShift():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
4a6: 99 0f add r25, r25
4a8: 91 1d adc r25, r1
_Z14GetDeviceIdLowv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:390
return myDeviceId;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
4aa: 99 0f add r25, r25
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:389
{
return myDeviceId;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
4ac: 94 27 eor r25, r20
CircularShift():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
4ae: 33 0f add r19, r19
4b0: 31 1d adc r19, r1
4b2: 33 0f add r19, r19
4b4: 31 1d adc r19, r1
_Z14GetDeviceIdLowv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:390
return myDeviceId;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
4b6: 93 27 eor r25, r19
CircularShift():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
4b8: 22 95 swap r18
4ba: 20 fb bst r18, 0
4bc: 27 95 ror r18
4be: 27 f9 bld r18, 7
_Z14GetDeviceIdLowv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:391
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM4)) ^
4c0: 92 27 eor r25, r18
CircularShift():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
4c2: 82 95 swap r24
_Z14GetDeviceIdLowv():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:394
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM4)) ^
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
4c4: 89 27 eor r24, r25
4c6: 08 95 ret
000004c8 <HandleFrame(can_frame*) [clone .constprop.19]>:
_Z11HandleFrameP9can_frame.constprop.19():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:255
HandleFrame(&_frame);
}
delay(10);
}
void HandleFrame(can_frame *frame)
4c8: cf 92 push r12
4ca: df 92 push r13
4cc: ef 92 push r14
4ce: ff 92 push r15
4d0: cf 93 push r28
4d2: df 93 push r29
digitalWrite():
4d4: 61 e0 ldi r22, 0x01 ; 1
4d6: 85 e1 ldi r24, 0x15 ; 21
4d8: 6e de rcall .-804 ; 0x1b6 <digitalWrite.part.2>
HandleMeyPinTriggeredCanPackage():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:267
}
// this method will save the state of the triggered pin to be present for the rules
void HandleMeyPinTriggeredCanPackage(can_frame *frame)
{
if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID)
4da: c0 90 18 3c lds r12, 0x3C18 ; 0x803c18 <_frame>
4de: d0 90 19 3c lds r13, 0x3C19 ; 0x803c19 <_frame+0x1>
4e2: e0 90 1a 3c lds r14, 0x3C1A ; 0x803c1a <_frame+0x2>
4e6: f0 90 1b 3c lds r15, 0x3C1B ; 0x803c1b <_frame+0x3>
GetPackageType():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:370
return canFrameId & 0xFFFF;
}
uint16_t GetPackageType(uint32_t canFrameId)
{
return (canFrameId / 0x10000) & 0xFFF;
4ea: c7 01 movw r24, r14
4ec: 9f 70 andi r25, 0x0F ; 15
HandleMeyPinTriggeredCanPackage():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:267
}
// this method will save the state of the triggered pin to be present for the rules
void HandleMeyPinTriggeredCanPackage(can_frame *frame)
{
if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID)
4ee: 80 35 cpi r24, 0x50 ; 80
4f0: 91 05 cpc r25, r1
4f2: 71 f5 brne .+92 ; 0x550 <HandleFrame(can_frame*) [clone .constprop.19]+0x88>
GetDeviceId():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:365
return (b << 1) | (b >> 7 & 1);
}
uint16_t GetDeviceId(uint32_t canFrameId)
{
return canFrameId & 0xFFFF;
4f4: a6 01 movw r20, r12
4f6: 80 e0 ldi r24, 0x00 ; 0
4f8: c0 e0 ldi r28, 0x00 ; 0
4fa: dc e3 ldi r29, 0x3C ; 60
FindOrAdd():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:101
return this->next->Count() + 1;
}
RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0)
{
if (count > MAX_REMOTE_PIN_COUNT)
4fc: 98 81 ld r25, Y
4fe: 98 17 cp r25, r24
500: 38 f1 brcs .+78 ; 0x550 <HandleFrame(can_frame*) [clone .constprop.19]+0x88>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:105
return NULL;
if (this->DeviceId == 0 && this->pinState == 0)
502: 29 81 ldd r18, Y+1 ; 0x01
504: 3a 81 ldd r19, Y+2 ; 0x02
506: 23 2b or r18, r19
508: 31 f4 brne .+12 ; 0x516 <HandleFrame(can_frame*) [clone .constprop.19]+0x4e>
50a: 2b 81 ldd r18, Y+3 ; 0x03
50c: 3c 81 ldd r19, Y+4 ; 0x04
50e: 23 2b or r18, r19
510: 11 f4 brne .+4 ; 0x516 <HandleFrame(can_frame*) [clone .constprop.19]+0x4e>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:107
{
this->DeviceId = deviceId;
512: 49 83 std Y+1, r20 ; 0x01
514: 5a 83 std Y+2, r21 ; 0x02
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:111
this->pinState = 0;
}
if (this->DeviceId == deviceId)
516: 29 81 ldd r18, Y+1 ; 0x01
518: 3a 81 ldd r19, Y+2 ; 0x02
51a: 42 17 cp r20, r18
51c: 53 07 cpc r21, r19
51e: f9 f0 breq .+62 ; 0x55e <HandleFrame(can_frame*) [clone .constprop.19]+0x96>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:117
{
//ToggleDebug();
return this;
}
if (next != NULL)
520: 2d 81 ldd r18, Y+5 ; 0x05
522: 3e 81 ldd r19, Y+6 ; 0x06
524: 21 15 cp r18, r1
526: 31 05 cpc r19, r1
528: 19 f0 breq .+6 ; 0x530 <HandleFrame(can_frame*) [clone .constprop.19]+0x68>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:119
{
return next->FindOrAdd(deviceId, count + 1);
52a: 8f 5f subi r24, 0xFF ; 255
_Z11HandleFrameP9can_frame.constprop.19():
52c: e9 01 movw r28, r18
52e: e6 cf rjmp .-52 ; 0x4fc <HandleFrame(can_frame*) [clone .constprop.19]+0x34>
operator new():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/new.cpp:23
#include <stdlib.h>
void *operator new(size_t size)
{
return malloc(size);
530: 87 e0 ldi r24, 0x07 ; 7
532: 90 e0 ldi r25, 0x00 ; 0
534: b1 d5 rcall .+2914 ; 0x1098 <malloc>
536: fc 01 movw r30, r24
_ZN13RemotePinInfoC2Ev():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:72
this->is_input = true;
this->meyPinId = meyPinId;
}
} PinState;
struct RemotePinInfo
538: 82 e3 ldi r24, 0x32 ; 50
53a: 80 83 st Z, r24
53c: 13 82 std Z+3, r1 ; 0x03
53e: 14 82 std Z+4, r1 ; 0x04
540: 15 82 std Z+5, r1 ; 0x05
542: 16 82 std Z+6, r1 ; 0x06
FindOrAdd():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:123
{
return next->FindOrAdd(deviceId, count + 1);
}
RemotePinInfo *theNext = new RemotePinInfo;
theNext->DeviceId = deviceId;
544: c1 82 std Z+1, r12 ; 0x01
546: d2 82 std Z+2, r13 ; 0x02
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:127
theNext->pinState = 0;
theNext->next = NULL;
this->next = theNext;
548: ed 83 std Y+5, r30 ; 0x05
54a: fe 83 std Y+6, r31 ; 0x06
HandleMeyPinTriggeredCanPackage():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:273
{
RemotePinInfo *currentPinState = remotePinInfos.FindOrAdd(GetDeviceId(frame->can_id) );
if (currentPinState == NULL)
54c: 30 97 sbiw r30, 0x00 ; 0
54e: 41 f4 brne .+16 ; 0x560 <HandleFrame(can_frame*) [clone .constprop.19]+0x98>
_Z11HandleFrameP9can_frame.constprop.19():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:262
digitalWrite(PIN_PC7, HIGH);
HandleMeyPinTriggeredCanPackage(frame);
HandleTriggerMeypinCanPackage(frame);
// Handle rules needs to be the last call
HandleRules(frame);
}
550: df 91 pop r29
552: cf 91 pop r28
554: ff 90 pop r15
556: ef 90 pop r14
558: df 90 pop r13
55a: cf 90 pop r12
55c: 08 95 ret
FindOrAdd():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:111
{
this->DeviceId = deviceId;
this->pinState = 0;
}
if (this->DeviceId == deviceId)
55e: fe 01 movw r30, r28
560: 43 81 ldd r20, Z+3 ; 0x03
562: 54 81 ldd r21, Z+4 ; 0x04
564: 20 91 20 3c lds r18, 0x3C20 ; 0x803c20 <_frame+0x8>
568: 21 50 subi r18, 0x01 ; 1
56a: 33 0b sbc r19, r19
56c: 81 e0 ldi r24, 0x01 ; 1
56e: 90 e0 ldi r25, 0x00 ; 0
570: 02 c0 rjmp .+4 ; 0x576 <HandleFrame(can_frame*) [clone .constprop.19]+0xae>
572: 88 0f add r24, r24
574: 99 1f adc r25, r25
576: 2a 95 dec r18
578: e2 f7 brpl .-8 ; 0x572 <HandleFrame(can_frame*) [clone .constprop.19]+0xaa>
_ZN13RemotePinInfo11setPinStateEhb.isra.1():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:86
return (this->pinState >> (meyPin - 1)) & 1;
}
void setPinState(byte meyPin, bool state)
{
if (state)
57a: 20 91 21 3c lds r18, 0x3C21 ; 0x803c21 <_frame+0x9>
57e: 22 23 and r18, r18
580: 29 f0 breq .+10 ; 0x58c <HandleFrame(can_frame*) [clone .constprop.19]+0xc4>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:87
this->pinState = this->pinState | (1 << (meyPin - 1)); // 0001 0000
582: 84 2b or r24, r20
584: 95 2b or r25, r21
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:89
else
this->pinState = this->pinState & (~(1 << (meyPin - 1))); // 1110 1111 -> not
586: 83 83 std Z+3, r24 ; 0x03
588: 94 83 std Z+4, r25 ; 0x04
58a: e2 cf rjmp .-60 ; 0x550 <HandleFrame(can_frame*) [clone .constprop.19]+0x88>
58c: 80 95 com r24
58e: 90 95 com r25
590: 84 23 and r24, r20
592: 95 23 and r25, r21
594: f8 cf rjmp .-16 ; 0x586 <HandleFrame(can_frame*) [clone .constprop.19]+0xbe>
00000596 <MCP2515::startSPI()>:
_ZN7MCP25158startSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24
SPICS = _CS;
pinMode(SPICS, OUTPUT);
endSPI();
}
void MCP2515::startSPI() {
596: 6f 92 push r6
598: 7f 92 push r7
59a: 8f 92 push r8
59c: 9f 92 push r9
59e: af 92 push r10
5a0: bf 92 push r11
5a2: cf 92 push r12
5a4: df 92 push r13
5a6: ef 92 push r14
5a8: ff 92 push r15
5aa: 0f 93 push r16
5ac: cf 93 push r28
5ae: df 93 push r29
5b0: 3c 01 movw r6, r24
beginTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:249
}
}
void SPIClass::beginTransaction(SPISettings settings)
{
if (interruptMode != SPI_IMODE_NONE)
5b2: 80 91 2e 3c lds r24, 0x3C2E ; 0x803c2e <SPI+0x6>
5b6: 88 23 and r24, r24
5b8: 19 f0 breq .+6 ; 0x5c0 <MCP2515::startSPI()+0x2a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:251
{
if (interruptMode & SPI_IMODE_GLOBAL)
5ba: 81 ff sbrs r24, 1
5bc: 1b c0 rjmp .+54 ; 0x5f4 <MCP2515::startSPI()+0x5e>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:253
{
noInterrupts();
5be: f8 94 cli
config():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142
initialized = true;
}
void SPIClass::config(SPISettings settings)
{
SPI0.CTRLA = settings.ctrla;
5c0: 81 e3 ldi r24, 0x31 ; 49
5c2: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 <digital_pin_to_bit_mask+0x7fb539>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143
SPI0.CTRLB = settings.ctrlb;
5c6: 84 e0 ldi r24, 0x04 ; 4
5c8: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <digital_pin_to_bit_mask+0x7fb53a>
_ZN7MCP25158startSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:26
SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
digitalWrite(SPICS, LOW);
5cc: f3 01 movw r30, r6
5ce: 80 81 ld r24, Z
digitalWrite():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137
5d0: 89 32 cpi r24, 0x29 ; 41
5d2: 08 f0 brcs .+2 ; 0x5d6 <MCP2515::startSPI()+0x40>
5d4: 9c c0 rjmp .+312 ; 0x70e <MCP2515::startSPI()+0x178>
5d6: 60 e0 ldi r22, 0x00 ; 0
_ZN7MCP25158startSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27
}
5d8: df 91 pop r29
5da: cf 91 pop r28
5dc: 0f 91 pop r16
5de: ff 90 pop r15
5e0: ef 90 pop r14
5e2: df 90 pop r13
5e4: cf 90 pop r12
5e6: bf 90 pop r11
5e8: af 90 pop r10
5ea: 9f 90 pop r9
5ec: 8f 90 pop r8
5ee: 7f 90 pop r7
5f0: 6f 90 pop r6
digitalWrite():
5f2: e1 cd rjmp .-1086 ; 0x1b6 <digitalWrite.part.2>
beginTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:255
{
if (interruptMode & SPI_IMODE_GLOBAL)
{
noInterrupts();
}
else if (interruptMode & SPI_IMODE_EXTINT)
5f4: 80 ff sbrs r24, 0
5f6: e4 cf rjmp .-56 ; 0x5c0 <MCP2515::startSPI()+0x2a>
detachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:200
#endif
}
}
void SPIClass::detachMaskedInterrupts() {
uint64_t temp = interruptMask_lo;
5f8: 80 90 30 3c lds r8, 0x3C30 ; 0x803c30 <SPI+0x8>
5fc: 90 90 31 3c lds r9, 0x3C31 ; 0x803c31 <SPI+0x9>
600: a0 90 32 3c lds r10, 0x3C32 ; 0x803c32 <SPI+0xa>
604: b0 90 33 3c lds r11, 0x3C33 ; 0x803c33 <SPI+0xb>
608: c1 2c mov r12, r1
60a: d1 2c mov r13, r1
60c: 76 01 movw r14, r12
_ZN7MCP25158startSPIEv():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:201
uint8_t shift = 0;
60e: b0 e0 ldi r27, 0x00 ; 0
detachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:202
while (temp != 0) {
610: 94 01 movw r18, r8
612: a5 01 movw r20, r10
614: b6 01 movw r22, r12
616: c7 01 movw r24, r14
618: a0 e0 ldi r26, 0x00 ; 0
61a: 20 d5 rcall .+2624 ; 0x105c <__cmpdi2_s8>
61c: 91 f1 breq .+100 ; 0x682 <MCP2515::startSPI()+0xec>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:203
if (temp & 1) {
61e: 21 70 andi r18, 0x01 ; 1
620: 30 e0 ldi r19, 0x00 ; 0
622: 40 e0 ldi r20, 0x00 ; 0
624: 50 e0 ldi r21, 0x00 ; 0
626: 60 e0 ldi r22, 0x00 ; 0
628: 70 e0 ldi r23, 0x00 ; 0
62a: 80 e0 ldi r24, 0x00 ; 0
62c: 90 e0 ldi r25, 0x00 ; 0
62e: 16 d5 rcall .+2604 ; 0x105c <__cmpdi2_s8>
630: e1 f0 breq .+56 ; 0x66a <MCP2515::startSPI()+0xd4>
_ZN7MCP25158startSPIEv():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:204
volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8);
632: d0 e0 ldi r29, 0x00 ; 0
634: c0 e0 ldi r28, 0x00 ; 0
detachMaskedInterrupts():
636: b0 33 cpi r27, 0x30 ; 48
638: 70 f4 brcc .+28 ; 0x656 <MCP2515::startSPI()+0xc0>
63a: cb 2f mov r28, r27
63c: c6 95 lsr r28
63e: c6 95 lsr r28
640: c6 95 lsr r28
642: 80 e2 ldi r24, 0x20 ; 32
644: c8 9f mul r28, r24
646: e0 01 movw r28, r0
648: 11 24 eor r1, r1
64a: c0 5f subi r28, 0xF0 ; 240
64c: db 4f sbci r29, 0xFB ; 251
64e: 8b 2f mov r24, r27
650: 87 70 andi r24, 0x07 ; 7
652: c8 0f add r28, r24
654: d1 1d adc r29, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:205
irqMap[shift] = *pin_ctrl_reg;
656: 8b 2f mov r24, r27
658: 90 e0 ldi r25, 0x00 ; 0
65a: 28 81 ld r18, Y
65c: 88 5d subi r24, 0xD8 ; 216
65e: 93 4c sbci r25, 0xC3 ; 195
660: fc 01 movw r30, r24
662: 20 8b std Z+16, r18 ; 0x10
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:206
*pin_ctrl_reg &= ~(PORT_ISC_gm);
664: 88 81 ld r24, Y
666: 88 7f andi r24, 0xF8 ; 248
668: 88 83 st Y, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:208
}
temp = temp >> 1;
66a: 94 01 movw r18, r8
66c: a5 01 movw r20, r10
66e: b6 01 movw r22, r12
670: c7 01 movw r24, r14
672: 01 e0 ldi r16, 0x01 ; 1
674: d8 d4 rcall .+2480 ; 0x1026 <__lshrdi3>
676: 49 01 movw r8, r18
678: 5a 01 movw r10, r20
67a: 6b 01 movw r12, r22
67c: 7c 01 movw r14, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:209
shift++;
67e: bf 5f subi r27, 0xFF ; 255
680: c7 cf rjmp .-114 ; 0x610 <MCP2515::startSPI()+0x7a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:211
}
temp = interruptMask_hi;
682: 80 90 34 3c lds r8, 0x3C34 ; 0x803c34 <SPI+0xc>
686: 90 90 35 3c lds r9, 0x3C35 ; 0x803c35 <SPI+0xd>
68a: a0 90 36 3c lds r10, 0x3C36 ; 0x803c36 <SPI+0xe>
68e: b0 90 37 3c lds r11, 0x3C37 ; 0x803c37 <SPI+0xf>
692: c1 2c mov r12, r1
694: d1 2c mov r13, r1
696: 76 01 movw r14, r12
_ZN7MCP25158startSPIEv():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:212
shift = 32;
698: b0 e2 ldi r27, 0x20 ; 32
detachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:213
while (temp != 0) {
69a: 94 01 movw r18, r8
69c: a5 01 movw r20, r10
69e: b6 01 movw r22, r12
6a0: c7 01 movw r24, r14
6a2: a0 e0 ldi r26, 0x00 ; 0
6a4: db d4 rcall .+2486 ; 0x105c <__cmpdi2_s8>
6a6: 09 f4 brne .+2 ; 0x6aa <MCP2515::startSPI()+0x114>
6a8: 8b cf rjmp .-234 ; 0x5c0 <MCP2515::startSPI()+0x2a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:214
if (temp & 1) {
6aa: 21 70 andi r18, 0x01 ; 1
6ac: 30 e0 ldi r19, 0x00 ; 0
6ae: 40 e0 ldi r20, 0x00 ; 0
6b0: 50 e0 ldi r21, 0x00 ; 0
6b2: 60 e0 ldi r22, 0x00 ; 0
6b4: 70 e0 ldi r23, 0x00 ; 0
6b6: 80 e0 ldi r24, 0x00 ; 0
6b8: 90 e0 ldi r25, 0x00 ; 0
6ba: d0 d4 rcall .+2464 ; 0x105c <__cmpdi2_s8>
6bc: e1 f0 breq .+56 ; 0x6f6 <MCP2515::startSPI()+0x160>
_ZN7MCP25158startSPIEv():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:215
volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8);
6be: d0 e0 ldi r29, 0x00 ; 0
6c0: c0 e0 ldi r28, 0x00 ; 0
detachMaskedInterrupts():
6c2: b0 33 cpi r27, 0x30 ; 48
6c4: 70 f4 brcc .+28 ; 0x6e2 <MCP2515::startSPI()+0x14c>
6c6: cb 2f mov r28, r27
6c8: c6 95 lsr r28
6ca: c6 95 lsr r28
6cc: c6 95 lsr r28
6ce: f0 e2 ldi r31, 0x20 ; 32
6d0: cf 9f mul r28, r31
6d2: e0 01 movw r28, r0
6d4: 11 24 eor r1, r1
6d6: c0 5f subi r28, 0xF0 ; 240
6d8: db 4f sbci r29, 0xFB ; 251
6da: 8b 2f mov r24, r27
6dc: 87 70 andi r24, 0x07 ; 7
6de: c8 0f add r28, r24
6e0: d1 1d adc r29, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:216
irqMap[shift] = *pin_ctrl_reg;
6e2: 8b 2f mov r24, r27
6e4: 90 e0 ldi r25, 0x00 ; 0
6e6: 28 81 ld r18, Y
6e8: 88 5d subi r24, 0xD8 ; 216
6ea: 93 4c sbci r25, 0xC3 ; 195
6ec: fc 01 movw r30, r24
6ee: 20 8b std Z+16, r18 ; 0x10
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:217
*pin_ctrl_reg &= ~(PORT_ISC_gm);
6f0: 88 81 ld r24, Y
6f2: 88 7f andi r24, 0xF8 ; 248
6f4: 88 83 st Y, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:219
}
temp = temp >> 1;
6f6: 94 01 movw r18, r8
6f8: a5 01 movw r20, r10
6fa: b6 01 movw r22, r12
6fc: c7 01 movw r24, r14
6fe: 01 e0 ldi r16, 0x01 ; 1
700: 92 d4 rcall .+2340 ; 0x1026 <__lshrdi3>
702: 49 01 movw r8, r18
704: 5a 01 movw r10, r20
706: 6b 01 movw r12, r22
708: 7c 01 movw r14, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:220
shift++;
70a: bf 5f subi r27, 0xFF ; 255
70c: c6 cf rjmp .-116 ; 0x69a <MCP2515::startSPI()+0x104>
_ZN7MCP25158startSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27
70e: df 91 pop r29
710: cf 91 pop r28
712: 0f 91 pop r16
714: ff 90 pop r15
716: ef 90 pop r14
718: df 90 pop r13
71a: cf 90 pop r12
71c: bf 90 pop r11
71e: af 90 pop r10
720: 9f 90 pop r9
722: 8f 90 pop r8
724: 7f 90 pop r7
726: 6f 90 pop r6
728: 08 95 ret
0000072a <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char)>:
_ZN7MCP251514modifyRegisterENS_8REGISTEREhh():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:129
}
endSPI();
}
void MCP2515::modifyRegister(const REGISTER reg, const uint8_t mask, const uint8_t data)
{
72a: ff 92 push r15
72c: 0f 93 push r16
72e: 1f 93 push r17
730: cf 93 push r28
732: df 93 push r29
734: ec 01 movw r28, r24
736: f6 2e mov r15, r22
738: 04 2f mov r16, r20
73a: 12 2f mov r17, r18
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:130
startSPI();
73c: 2c df rcall .-424 ; 0x596 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:131
SPI.transfer(INSTRUCTION_BITMOD);
73e: 85 e0 ldi r24, 0x05 ; 5
740: 30 dd rcall .-1440 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:132
SPI.transfer(reg);
742: 8f 2d mov r24, r15
744: 2e dd rcall .-1444 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:133
SPI.transfer(mask);
746: 80 2f mov r24, r16
748: 2c dd rcall .-1448 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:134
SPI.transfer(data);
74a: 81 2f mov r24, r17
74c: 2a dd rcall .-1452 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135
endSPI();
74e: ce 01 movw r24, r28
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:136
}
750: df 91 pop r29
752: cf 91 pop r28
754: 1f 91 pop r17
756: 0f 91 pop r16
758: ff 90 pop r15
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135
startSPI();
SPI.transfer(INSTRUCTION_BITMOD);
SPI.transfer(reg);
SPI.transfer(mask);
SPI.transfer(data);
endSPI();
75a: d9 cd rjmp .-1102 ; 0x30e <MCP2515::endSPI()>
0000075c <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)>:
_ZN7MCP251512setRegistersENS_8REGISTEREPKhh():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:118
SPI.transfer(value);
endSPI();
}
void MCP2515::setRegisters(const REGISTER reg, const uint8_t values[], const uint8_t n)
{
75c: df 92 push r13
75e: ef 92 push r14
760: ff 92 push r15
762: 0f 93 push r16
764: 1f 93 push r17
766: cf 93 push r28
768: df 93 push r29
76a: 7c 01 movw r14, r24
76c: c6 2f mov r28, r22
76e: d4 2e mov r13, r20
770: 15 2f mov r17, r21
772: 02 2f mov r16, r18
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:119
startSPI();
774: 10 df rcall .-480 ; 0x596 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:120
SPI.transfer(INSTRUCTION_WRITE);
776: 82 e0 ldi r24, 0x02 ; 2
778: 14 dd rcall .-1496 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:121
SPI.transfer(reg);
77a: 8c 2f mov r24, r28
77c: 12 dd rcall .-1500 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
77e: cd 2d mov r28, r13
780: d1 2f mov r29, r17
782: 0c 0f add r16, r28
784: 1d 2f mov r17, r29
786: 11 1d adc r17, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:122
for (uint8_t i=0; i<n; i++) {
788: c0 17 cp r28, r16
78a: d1 07 cpc r29, r17
78c: 19 f0 breq .+6 ; 0x794 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)+0x38>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:123
SPI.transfer(values[i]);
78e: 89 91 ld r24, Y+
790: 08 dd rcall .-1520 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
792: fa cf rjmp .-12 ; 0x788 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)+0x2c>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125
}
endSPI();
794: c7 01 movw r24, r14
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:126
}
796: df 91 pop r29
798: cf 91 pop r28
79a: 1f 91 pop r17
79c: 0f 91 pop r16
79e: ff 90 pop r15
7a0: ef 90 pop r14
7a2: df 90 pop r13
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125
SPI.transfer(INSTRUCTION_WRITE);
SPI.transfer(reg);
for (uint8_t i=0; i<n; i++) {
SPI.transfer(values[i]);
}
endSPI();
7a4: b4 cd rjmp .-1176 ; 0x30e <MCP2515::endSPI()>
000007a6 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>:
_ZN7MCP251511setRegisterENS_8REGISTEREh():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:109
}
endSPI();
}
void MCP2515::setRegister(const REGISTER reg, const uint8_t value)
{
7a6: 0f 93 push r16
7a8: 1f 93 push r17
7aa: cf 93 push r28
7ac: df 93 push r29
7ae: ec 01 movw r28, r24
7b0: 06 2f mov r16, r22
7b2: 14 2f mov r17, r20
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:110
startSPI();
7b4: f0 de rcall .-544 ; 0x596 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:111
SPI.transfer(INSTRUCTION_WRITE);
7b6: 82 e0 ldi r24, 0x02 ; 2
7b8: f4 dc rcall .-1560 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:112
SPI.transfer(reg);
7ba: 80 2f mov r24, r16
7bc: f2 dc rcall .-1564 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:113
SPI.transfer(value);
7be: 81 2f mov r24, r17
7c0: f0 dc rcall .-1568 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114
endSPI();
7c2: ce 01 movw r24, r28
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:115
}
7c4: df 91 pop r29
7c6: cf 91 pop r28
7c8: 1f 91 pop r17
7ca: 0f 91 pop r16
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114
{
startSPI();
SPI.transfer(INSTRUCTION_WRITE);
SPI.transfer(reg);
SPI.transfer(value);
endSPI();
7cc: a0 cd rjmp .-1216 ; 0x30e <MCP2515::endSPI()>
000007ce <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char)>:
_ZN7MCP251513readRegistersENS_8REGISTEREPhh():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:97
return ret;
}
void MCP2515::readRegisters(const REGISTER reg, uint8_t values[], const uint8_t n)
{
7ce: df 92 push r13
7d0: ef 92 push r14
7d2: ff 92 push r15
7d4: 0f 93 push r16
7d6: 1f 93 push r17
7d8: cf 93 push r28
7da: df 93 push r29
7dc: 7c 01 movw r14, r24
7de: c6 2f mov r28, r22
7e0: d4 2e mov r13, r20
7e2: 15 2f mov r17, r21
7e4: 02 2f mov r16, r18
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:98
startSPI();
7e6: d7 de rcall .-594 ; 0x596 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:99
SPI.transfer(INSTRUCTION_READ);
7e8: 83 e0 ldi r24, 0x03 ; 3
7ea: db dc rcall .-1610 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:100
SPI.transfer(reg);
7ec: 8c 2f mov r24, r28
7ee: d9 dc rcall .-1614 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
7f0: cd 2d mov r28, r13
7f2: d1 2f mov r29, r17
7f4: 0c 0f add r16, r28
7f6: 1d 2f mov r17, r29
7f8: 11 1d adc r17, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:102
// mcp2515 has auto-increment of address-pointer
for (uint8_t i=0; i<n; i++) {
7fa: c0 17 cp r28, r16
7fc: d1 07 cpc r29, r17
7fe: 21 f0 breq .+8 ; 0x808 <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char)+0x3a>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:103
values[i] = SPI.transfer(0x00);
800: 80 e0 ldi r24, 0x00 ; 0
802: cf dc rcall .-1634 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
804: 89 93 st Y+, r24
806: f9 cf rjmp .-14 ; 0x7fa <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char)+0x2c>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:105
}
endSPI();
808: c7 01 movw r24, r14
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:106
}
80a: df 91 pop r29
80c: cf 91 pop r28
80e: 1f 91 pop r17
810: 0f 91 pop r16
812: ff 90 pop r15
814: ef 90 pop r14
816: df 90 pop r13
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:105
SPI.transfer(reg);
// mcp2515 has auto-increment of address-pointer
for (uint8_t i=0; i<n; i++) {
values[i] = SPI.transfer(0x00);
}
endSPI();
818: 7a cd rjmp .-1292 ; 0x30e <MCP2515::endSPI()>
0000081a <MCP2515::readRegister(MCP2515::REGISTER)>:
_ZN7MCP251512readRegisterENS_8REGISTERE():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:86
return ERROR_OK;
}
uint8_t MCP2515::readRegister(const REGISTER reg)
{
81a: 1f 93 push r17
81c: cf 93 push r28
81e: df 93 push r29
820: ec 01 movw r28, r24
822: 16 2f mov r17, r22
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:87
startSPI();
824: b8 de rcall .-656 ; 0x596 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:88
SPI.transfer(INSTRUCTION_READ);
826: 83 e0 ldi r24, 0x03 ; 3
828: bc dc rcall .-1672 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:89
SPI.transfer(reg);
82a: 81 2f mov r24, r17
82c: ba dc rcall .-1676 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:90
uint8_t ret = SPI.transfer(0x00);
82e: 80 e0 ldi r24, 0x00 ; 0
830: b8 dc rcall .-1680 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
832: 18 2f mov r17, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91
endSPI();
834: ce 01 movw r24, r28
836: 6b dd rcall .-1322 ; 0x30e <MCP2515::endSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:94
return ret;
}
838: 81 2f mov r24, r17
83a: df 91 pop r29
83c: cf 91 pop r28
83e: 1f 91 pop r17
840: 08 95 ret
00000842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>:
_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.constprop.10():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:579
setRegisters(reg, tbufdata, 4);
return ERROR_OK;
}
MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame)
842: 4f 92 push r4
844: 5f 92 push r5
846: 6f 92 push r6
848: 7f 92 push r7
84a: 8f 92 push r8
84c: 9f 92 push r9
84e: af 92 push r10
850: bf 92 push r11
852: cf 92 push r12
854: df 92 push r13
856: ef 92 push r14
858: ff 92 push r15
85a: 1f 93 push r17
85c: cf 93 push r28
85e: df 93 push r29
860: cd b7 in r28, 0x3d ; 61
862: de b7 in r29, 0x3e ; 62
864: 2d 97 sbiw r28, 0x0d ; 13
866: cd bf out 0x3d, r28 ; 61
868: de bf out 0x3e, r29 ; 62
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:581
{
if (frame->can_dlc > CAN_MAX_DLEN) {
86a: 10 91 1c 3c lds r17, 0x3C1C ; 0x803c1c <_frame+0x4>
86e: 19 30 cpi r17, 0x09 ; 9
870: 08 f0 brcs .+2 ; 0x874 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0x32>
872: 61 c0 rjmp .+194 ; 0x936 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0xf4>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:589
const struct TXBn_REGS *txbuf = &TXB[txbn];
uint8_t data[13];
bool ext = (frame->can_id & CAN_EFF_FLAG);
874: 40 91 18 3c lds r20, 0x3C18 ; 0x803c18 <_frame>
878: 50 91 19 3c lds r21, 0x3C19 ; 0x803c19 <_frame+0x1>
87c: 60 91 1a 3c lds r22, 0x3C1A ; 0x803c1a <_frame+0x2>
880: 70 91 1b 3c lds r23, 0x3C1B ; 0x803c1b <_frame+0x3>
884: 6a 01 movw r12, r20
886: 7b 01 movw r14, r22
888: cc 24 eor r12, r12
88a: f7 fc sbrc r15, 7
88c: c3 94 inc r12
88e: dd 24 eor r13, r13
890: ee 24 eor r14, r14
892: ff 24 eor r15, r15
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590
bool rtr = (frame->can_id & CAN_RTR_FLAG);
894: 4a 01 movw r8, r20
896: 5b 01 movw r10, r22
898: 88 24 eor r8, r8
89a: 99 24 eor r9, r9
89c: aa 24 eor r10, r10
89e: 20 e4 ldi r18, 0x40 ; 64
8a0: b2 22 and r11, r18
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:591
uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK));
8a2: 44 24 eor r4, r4
8a4: 4a 94 dec r4
8a6: 54 2c mov r5, r4
8a8: 64 2c mov r6, r4
8aa: bf e1 ldi r27, 0x1F ; 31
8ac: 7b 2e mov r7, r27
8ae: c1 10 cpse r12, r1
8b0: 06 c0 rjmp .+12 ; 0x8be <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0x7c>
8b2: 44 24 eor r4, r4
8b4: 4a 94 dec r4
8b6: a7 e0 ldi r26, 0x07 ; 7
8b8: 5a 2e mov r5, r26
8ba: 61 2c mov r6, r1
8bc: 71 2c mov r7, r1
8be: 44 21 and r20, r4
8c0: 55 21 and r21, r5
8c2: 66 21 and r22, r6
8c4: 77 21 and r23, r7
prepareId():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513
void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id)
{
uint16_t canid = (uint16_t)(id & 0x0FFFF);
if (ext) {
8c6: cc 20 and r12, r12
8c8: c9 f1 breq .+114 ; 0x93c <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0xfa>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
8ca: 4c 83 std Y+4, r20 ; 0x04
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515
buffer[MCP_EID8] = (uint8_t) (canid >> 8);
8cc: 5b 83 std Y+3, r21 ; 0x03
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516
canid = (uint16_t)(id >> 16);
8ce: ab 01 movw r20, r22
8d0: 66 27 eor r22, r22
8d2: 77 27 eor r23, r23
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
8d4: 24 2f mov r18, r20
8d6: 23 70 andi r18, 0x03 ; 3
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
buffer[MCP_SIDL] |= TXB_EXIDE_MASK;
8d8: 28 60 ori r18, 0x08 ; 8
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:518
if (ext) {
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
buffer[MCP_EID8] = (uint8_t) (canid >> 8);
canid = (uint16_t)(id >> 16);
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
8da: 34 2f mov r19, r20
8dc: 33 0f add r19, r19
8de: 33 0f add r19, r19
8e0: 33 0f add r19, r19
8e2: 30 7e andi r19, 0xE0 ; 224
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519
buffer[MCP_SIDL] |= TXB_EXIDE_MASK;
8e4: 23 2b or r18, r19
8e6: 2a 83 std Y+2, r18 ; 0x02
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520
buffer[MCP_SIDH] = (uint8_t) (canid >> 5);
8e8: f5 e0 ldi r31, 0x05 ; 5
8ea: 56 95 lsr r21
8ec: 47 95 ror r20
8ee: fa 95 dec r31
8f0: e1 f7 brne .-8 ; 0x8ea <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0xa8>
8f2: 49 83 std Y+1, r20 ; 0x01
_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.constprop.10():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595
bool rtr = (frame->can_id & CAN_RTR_FLAG);
uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK));
prepareId(data, ext, id);
data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc;
8f4: 21 2f mov r18, r17
8f6: 89 28 or r8, r9
8f8: 8a 28 or r8, r10
8fa: 8b 28 or r8, r11
8fc: 09 f0 breq .+2 ; 0x900 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0xbe>
8fe: 20 64 ori r18, 0x40 ; 64
900: 7c 01 movw r14, r24
902: 2d 83 std Y+5, r18 ; 0x05
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:597
memcpy(&data[MCP_DATA], frame->data, frame->can_dlc);
904: 41 2f mov r20, r17
906: 50 e0 ldi r21, 0x00 ; 0
908: 60 e2 ldi r22, 0x20 ; 32
90a: 7c e3 ldi r23, 0x3C ; 60
90c: ce 01 movw r24, r28
90e: 06 96 adiw r24, 0x06 ; 6
910: e8 d4 rcall .+2512 ; 0x12e2 <memcpy>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599
setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc);
912: 25 e0 ldi r18, 0x05 ; 5
914: 21 0f add r18, r17
916: ae 01 movw r20, r28
918: 4f 5f subi r20, 0xFF ; 255
91a: 5f 4f sbci r21, 0xFF ; 255
91c: 61 e4 ldi r22, 0x41 ; 65
91e: c7 01 movw r24, r14
920: 1d df rcall .-454 ; 0x75c <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:601
modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ);
922: 28 e0 ldi r18, 0x08 ; 8
924: 48 e0 ldi r20, 0x08 ; 8
926: 60 e4 ldi r22, 0x40 ; 64
928: c7 01 movw r24, r14
92a: ff de rcall .-514 ; 0x72a <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:603
uint8_t ctrl = readRegister(txbuf->CTRL);
92c: 60 e4 ldi r22, 0x40 ; 64
92e: c7 01 movw r24, r14
930: 74 df rcall .-280 ; 0x81a <MCP2515::readRegister(MCP2515::REGISTER)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:604
if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) {
932: 80 77 andi r24, 0x70 ; 112
934: 89 f0 breq .+34 ; 0x958 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0x116>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:582
}
MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame)
{
if (frame->can_dlc > CAN_MAX_DLEN) {
return ERROR_FAILTX;
936: 84 e0 ldi r24, 0x04 ; 4
938: 90 e0 ldi r25, 0x00 ; 0
93a: 10 c0 rjmp .+32 ; 0x95c <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0x11a>
prepareId():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
buffer[MCP_SIDL] |= TXB_EXIDE_MASK;
buffer[MCP_SIDH] = (uint8_t) (canid >> 5);
} else {
buffer[MCP_SIDH] = (uint8_t) (canid >> 3);
93c: 9a 01 movw r18, r20
93e: 53 e0 ldi r21, 0x03 ; 3
940: 36 95 lsr r19
942: 27 95 ror r18
944: 5a 95 dec r21
946: e1 f7 brne .-8 ; 0x940 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0xfe>
948: 29 83 std Y+1, r18 ; 0x01
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523
buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5);
94a: 42 95 swap r20
94c: 44 0f add r20, r20
94e: 40 7e andi r20, 0xE0 ; 224
950: 4a 83 std Y+2, r20 ; 0x02
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524
buffer[MCP_EID0] = 0;
952: 1c 82 std Y+4, r1 ; 0x04
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525
buffer[MCP_EID8] = 0;
954: 1b 82 std Y+3, r1 ; 0x03
956: ce cf rjmp .-100 ; 0x8f4 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]+0xb2>
_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.constprop.10():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:607
uint8_t ctrl = readRegister(txbuf->CTRL);
if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) {
return ERROR_FAILTX;
}
return ERROR_OK;
958: 90 e0 ldi r25, 0x00 ; 0
95a: 80 e0 ldi r24, 0x00 ; 0
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:608
}
95c: 2d 96 adiw r28, 0x0d ; 13
95e: cd bf out 0x3d, r28 ; 61
960: de bf out 0x3e, r29 ; 62
962: df 91 pop r29
964: cf 91 pop r28
966: 1f 91 pop r17
968: ff 90 pop r15
96a: ef 90 pop r14
96c: df 90 pop r13
96e: cf 90 pop r12
970: bf 90 pop r11
972: af 90 pop r10
974: 9f 90 pop r9
976: 8f 90 pop r8
978: 7f 90 pop r7
97a: 6f 90 pop r6
97c: 5f 90 pop r5
97e: 4f 90 pop r4
980: 08 95 ret
00000982 <SendSerialPackage(MCP2515*)>:
_Z17SendSerialPackageP7MCP2515():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:405
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9)))));
}
void SendSerialPackage(MCP2515 *interface)
{
982: 0f 93 push r16
984: 1f 93 push r17
986: cf 93 push r28
988: df 93 push r29
98a: 8c 01 movw r16, r24
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:406
_frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID);
98c: c8 e1 ldi r28, 0x18 ; 24
98e: dc e3 ldi r29, 0x3C ; 60
CreateCanId():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:375
return (canFrameId / 0x10000) & 0xFFF;
}
uint32_t CreateCanId(uint16_t commandId)
{
return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG;
990: 80 91 14 3c lds r24, 0x3C14 ; 0x803c14 <myDeviceId>
994: 90 91 15 3c lds r25, 0x3C15 ; 0x803c15 <myDeviceId+0x1>
998: b0 e0 ldi r27, 0x00 ; 0
99a: a0 e0 ldi r26, 0x00 ; 0
99c: af 6f ori r26, 0xFF ; 255
99e: bf 68 ori r27, 0x8F ; 143
_Z17SendSerialPackageP7MCP2515():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:406
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9)))));
}
void SendSerialPackage(MCP2515 *interface)
{
_frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID);
9a0: 88 83 st Y, r24
9a2: 99 83 std Y+1, r25 ; 0x01
9a4: aa 83 std Y+2, r26 ; 0x02
9a6: bb 83 std Y+3, r27 ; 0x03
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:407
_frame.can_dlc = 6;
9a8: 86 e0 ldi r24, 0x06 ; 6
9aa: 8c 83 std Y+4, r24 ; 0x04
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:409
_frame.data[0] = SoftwareVersionHigh;
9ac: 93 e0 ldi r25, 0x03 ; 3
9ae: 98 87 std Y+8, r25 ; 0x08
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:410
_frame.data[1] = SoftwareVersionLow;
9b0: 19 86 std Y+9, r1 ; 0x09
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:411
_frame.data[2] = HardwareVersionHigh;
9b2: 8a 87 std Y+10, r24 ; 0x0a
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:412
_frame.data[3] = HardwareVersionLow;
9b4: 1b 86 std Y+11, r1 ; 0x0b
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:413
_frame.data[4] = GetDeviceIdHigh();
9b6: 58 dd rcall .-1360 ; 0x468 <GetDeviceIdHigh()>
9b8: 8c 87 std Y+12, r24 ; 0x0c
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:414
_frame.data[5] = GetDeviceIdLow();
9ba: 6e dd rcall .-1316 ; 0x498 <GetDeviceIdLow()>
9bc: 8d 87 std Y+13, r24 ; 0x0d
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:415
interface->sendMessage(MCP2515::TXB1, &_frame);
9be: c8 01 movw r24, r16
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:416
}
9c0: df 91 pop r29
9c2: cf 91 pop r28
9c4: 1f 91 pop r17
9c6: 0f 91 pop r16
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:415
_frame.data[1] = SoftwareVersionLow;
_frame.data[2] = HardwareVersionHigh;
_frame.data[3] = HardwareVersionLow;
_frame.data[4] = GetDeviceIdHigh();
_frame.data[5] = GetDeviceIdLow();
interface->sendMessage(MCP2515::TXB1, &_frame);
9c8: 3c cf rjmp .-392 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
000009ca <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.9]>:
_ZN7MCP251511readMessageENS_4RXBnEP9can_frame.constprop.9():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:629
}
return ERROR_ALLTXBUSY;
}
MCP2515::ERROR MCP2515::readMessage(const RXBn rxbn, struct can_frame *frame)
9ca: 9f 92 push r9
9cc: af 92 push r10
9ce: bf 92 push r11
9d0: cf 92 push r12
9d2: df 92 push r13
9d4: ef 92 push r14
9d6: ff 92 push r15
9d8: 0f 93 push r16
9da: 1f 93 push r17
9dc: cf 93 push r28
9de: df 93 push r29
9e0: cd b7 in r28, 0x3d ; 61
9e2: de b7 in r29, 0x3e ; 62
9e4: 25 97 sbiw r28, 0x05 ; 5
9e6: cd bf out 0x3d, r28 ; 61
9e8: de bf out 0x3e, r29 ; 62
9ea: 5c 01 movw r10, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:635
{
const struct RXBn_REGS *rxb = &RXB[rxbn];
uint8_t tbufdata[5];
readRegisters(rxb->SIDH, tbufdata, 5);
9ec: 8b 01 movw r16, r22
9ee: 00 0f add r16, r16
9f0: 11 1f adc r17, r17
9f2: 00 0f add r16, r16
9f4: 11 1f adc r17, r17
9f6: f8 01 movw r30, r16
9f8: e3 5d subi r30, 0xD3 ; 211
9fa: fc 4a sbci r31, 0xAC ; 172
9fc: 25 e0 ldi r18, 0x05 ; 5
9fe: ae 01 movw r20, r28
a00: 4f 5f subi r20, 0xFF ; 255
a02: 5f 4f sbci r21, 0xFF ; 255
a04: 61 81 ldd r22, Z+1 ; 0x01
a06: e3 de rcall .-570 ; 0x7ce <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:637
uint32_t id = (tbufdata[MCP_SIDH]<<3) + (tbufdata[MCP_SIDL]>>5);
a08: 8a 81 ldd r24, Y+2 ; 0x02
a0a: c9 80 ldd r12, Y+1 ; 0x01
a0c: 98 e0 ldi r25, 0x08 ; 8
a0e: c9 9e mul r12, r25
a10: 60 01 movw r12, r0
a12: 11 24 eor r1, r1
a14: 28 2f mov r18, r24
a16: 30 e0 ldi r19, 0x00 ; 0
a18: 55 e0 ldi r21, 0x05 ; 5
a1a: 35 95 asr r19
a1c: 27 95 ror r18
a1e: 5a 95 dec r21
a20: e1 f7 brne .-8 ; 0xa1a <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.9]+0x50>
a22: c2 0e add r12, r18
a24: d3 1e adc r13, r19
a26: 0d 2c mov r0, r13
a28: 00 0c add r0, r0
a2a: ee 08 sbc r14, r14
a2c: ff 08 sbc r15, r15
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:639
if ( (tbufdata[MCP_SIDL] & TXB_EXIDE_MASK) == TXB_EXIDE_MASK ) {
a2e: 83 ff sbrs r24, 3
a30: 20 c0 rjmp .+64 ; 0xa72 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.9]+0xa8>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:640
id = (id<<2) + (tbufdata[MCP_SIDL] & 0x03);
a32: 92 e0 ldi r25, 0x02 ; 2
a34: cc 0c add r12, r12
a36: dd 1c adc r13, r13
a38: ee 1c adc r14, r14
a3a: ff 1c adc r15, r15
a3c: 9a 95 dec r25
a3e: d1 f7 brne .-12 ; 0xa34 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.9]+0x6a>
a40: 83 70 andi r24, 0x03 ; 3
a42: c8 0e add r12, r24
a44: d1 1c adc r13, r1
a46: e1 1c adc r14, r1
a48: f1 1c adc r15, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:641
id = (id<<8) + tbufdata[MCP_EID8];
a4a: fe 2c mov r15, r14
a4c: ed 2c mov r14, r13
a4e: dc 2c mov r13, r12
a50: cc 24 eor r12, r12
a52: 8b 81 ldd r24, Y+3 ; 0x03
a54: c8 0e add r12, r24
a56: d1 1c adc r13, r1
a58: e1 1c adc r14, r1
a5a: f1 1c adc r15, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:642
id = (id<<8) + tbufdata[MCP_EID0];
a5c: fe 2c mov r15, r14
a5e: ed 2c mov r14, r13
a60: dc 2c mov r13, r12
a62: cc 24 eor r12, r12
a64: 8c 81 ldd r24, Y+4 ; 0x04
a66: c8 0e add r12, r24
a68: d1 1c adc r13, r1
a6a: e1 1c adc r14, r1
a6c: f1 1c adc r15, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:643
id |= CAN_EFF_FLAG;
a6e: 68 94 set
a70: f7 f8 bld r15, 7
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:646
}
uint8_t dlc = (tbufdata[MCP_DLC] & DLC_MASK);
a72: 8d 81 ldd r24, Y+5 ; 0x05
a74: 8f 70 andi r24, 0x0F ; 15
a76: 98 2e mov r9, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:647
if (dlc > CAN_MAX_DLEN) {
a78: e8 e0 ldi r30, 0x08 ; 8
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:648
return ERROR_FAIL;
a7a: 81 e0 ldi r24, 0x01 ; 1
a7c: 90 e0 ldi r25, 0x00 ; 0
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:647
id = (id<<8) + tbufdata[MCP_EID0];
id |= CAN_EFF_FLAG;
}
uint8_t dlc = (tbufdata[MCP_DLC] & DLC_MASK);
if (dlc > CAN_MAX_DLEN) {
a7e: e9 15 cp r30, r9
a80: 28 f1 brcs .+74 ; 0xacc <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.9]+0x102>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:651
return ERROR_FAIL;
}
uint8_t ctrl = readRegister(rxb->CTRL);
a82: f8 01 movw r30, r16
a84: e3 5d subi r30, 0xD3 ; 211
a86: fc 4a sbci r31, 0xAC ; 172
a88: 60 81 ld r22, Z
a8a: c5 01 movw r24, r10
a8c: c6 de rcall .-628 ; 0x81a <MCP2515::readRegister(MCP2515::REGISTER)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:652
if (ctrl & RXBnCTRL_RTR) {
a8e: 83 ff sbrs r24, 3
a90: 02 c0 rjmp .+4 ; 0xa96 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.9]+0xcc>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:653
id |= CAN_RTR_FLAG;
a92: 68 94 set
a94: f6 f8 bld r15, 6
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:656
}
frame->can_id = id;
a96: c0 92 18 3c sts 0x3C18, r12 ; 0x803c18 <_frame>
a9a: d0 92 19 3c sts 0x3C19, r13 ; 0x803c19 <_frame+0x1>
a9e: e0 92 1a 3c sts 0x3C1A, r14 ; 0x803c1a <_frame+0x2>
aa2: f0 92 1b 3c sts 0x3C1B, r15 ; 0x803c1b <_frame+0x3>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:657
frame->can_dlc = dlc;
aa6: 90 92 1c 3c sts 0x3C1C, r9 ; 0x803c1c <_frame+0x4>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:659
readRegisters(rxb->DATA, frame->data, dlc);
aaa: 03 5d subi r16, 0xD3 ; 211
aac: 1c 4a sbci r17, 0xAC ; 172
aae: 29 2d mov r18, r9
ab0: 40 e2 ldi r20, 0x20 ; 32
ab2: 5c e3 ldi r21, 0x3C ; 60
ab4: f8 01 movw r30, r16
ab6: 62 81 ldd r22, Z+2 ; 0x02
ab8: c5 01 movw r24, r10
aba: 89 de rcall .-750 ; 0x7ce <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:661
modifyRegister(MCP_CANINTF, rxb->CANINTF_RXnIF, 0);
abc: 20 e0 ldi r18, 0x00 ; 0
abe: f8 01 movw r30, r16
ac0: 43 81 ldd r20, Z+3 ; 0x03
ac2: 6c e2 ldi r22, 0x2C ; 44
ac4: c5 01 movw r24, r10
ac6: 31 de rcall .-926 ; 0x72a <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:663
return ERROR_OK;
ac8: 90 e0 ldi r25, 0x00 ; 0
aca: 80 e0 ldi r24, 0x00 ; 0
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:664
}
acc: 25 96 adiw r28, 0x05 ; 5
ace: cd bf out 0x3d, r28 ; 61
ad0: de bf out 0x3e, r29 ; 62
ad2: df 91 pop r29
ad4: cf 91 pop r28
ad6: 1f 91 pop r17
ad8: 0f 91 pop r16
ada: ff 90 pop r15
adc: ef 90 pop r14
ade: df 90 pop r13
ae0: cf 90 pop r12
ae2: bf 90 pop r11
ae4: af 90 pop r10
ae6: 9f 90 pop r9
ae8: 08 95 ret
00000aea <MCP2515::readMessage(can_frame*) [clone .constprop.7]>:
_ZN7MCP251511readMessageEP9can_frame.constprop.7():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:666
MCP2515::ERROR MCP2515::readMessage(struct can_frame *frame)
aea: 1f 93 push r17
aec: cf 93 push r28
aee: df 93 push r29
af0: ec 01 movw r28, r24
getStatus():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:140
endSPI();
}
uint8_t MCP2515::getStatus(void)
{
startSPI();
af2: 51 dd rcall .-1374 ; 0x596 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:141
SPI.transfer(INSTRUCTION_READ_STATUS);
af4: 80 ea ldi r24, 0xA0 ; 160
af6: 55 db rcall .-2390 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:142
uint8_t i = SPI.transfer(0x00);
af8: 80 e0 ldi r24, 0x00 ; 0
afa: 53 db rcall .-2394 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
afc: 18 2f mov r17, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:143
endSPI();
afe: ce 01 movw r24, r28
b00: 06 dc rcall .-2036 ; 0x30e <MCP2515::endSPI()>
_ZN7MCP251511readMessageEP9can_frame.constprop.7():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:672
{
ERROR rc;
uint8_t stat = getStatus();
if ( stat & STAT_RX0IF ) {
rc = readMessage(RXB0, frame);
b02: 70 e0 ldi r23, 0x00 ; 0
b04: 60 e0 ldi r22, 0x00 ; 0
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:671
MCP2515::ERROR MCP2515::readMessage(struct can_frame *frame)
{
ERROR rc;
uint8_t stat = getStatus();
if ( stat & STAT_RX0IF ) {
b06: 10 fd sbrc r17, 0
b08: 04 c0 rjmp .+8 ; 0xb12 <MCP2515::readMessage(can_frame*) [clone .constprop.7]+0x28>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:673
rc = readMessage(RXB0, frame);
} else if ( stat & STAT_RX1IF ) {
b0a: 11 ff sbrs r17, 1
b0c: 07 c0 rjmp .+14 ; 0xb1c <MCP2515::readMessage(can_frame*) [clone .constprop.7]+0x32>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:674
rc = readMessage(RXB1, frame);
b0e: 61 e0 ldi r22, 0x01 ; 1
b10: 70 e0 ldi r23, 0x00 ; 0
b12: ce 01 movw r24, r28
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:680
} else {
rc = ERROR_NOMSG;
}
return rc;
}
b14: df 91 pop r29
b16: cf 91 pop r28
b18: 1f 91 pop r17
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:674
uint8_t stat = getStatus();
if ( stat & STAT_RX0IF ) {
rc = readMessage(RXB0, frame);
} else if ( stat & STAT_RX1IF ) {
rc = readMessage(RXB1, frame);
b1a: 57 cf rjmp .-338 ; 0x9ca <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.9]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:680
} else {
rc = ERROR_NOMSG;
}
return rc;
}
b1c: 85 e0 ldi r24, 0x05 ; 5
b1e: 90 e0 ldi r25, 0x00 ; 0
b20: df 91 pop r29
b22: cf 91 pop r28
b24: 1f 91 pop r17
b26: 08 95 ret
00000b28 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>:
_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:174
{
return setMode(CANCTRL_REQOP_NORMAL);
}
MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode)
{
b28: cf 92 push r12
b2a: df 92 push r13
b2c: ef 92 push r14
b2e: ff 92 push r15
b30: 1f 93 push r17
b32: cf 93 push r28
b34: df 93 push r29
b36: ec 01 movw r28, r24
b38: 16 2f mov r17, r22
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:175
modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode);
b3a: 26 2f mov r18, r22
b3c: 40 ee ldi r20, 0xE0 ; 224
b3e: 6f e0 ldi r22, 0x0F ; 15
b40: f4 dd rcall .-1048 ; 0x72a <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char)>
millis():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:87
{
unsigned long m;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer_millis)
uint8_t status = SREG;
b42: 8f b7 in r24, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:88
cli();
b44: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:90
m = timer_millis;
b46: c0 90 10 3c lds r12, 0x3C10 ; 0x803c10 <timer_millis>
b4a: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 <timer_millis+0x1>
b4e: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 <timer_millis+0x2>
b52: f0 90 13 3c lds r15, 0x3C13 ; 0x803c13 <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92
SREG = status;
b56: 8f bf out 0x3f, r24 ; 63
_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:177
unsigned long endTime = millis() + 10;
b58: 8a e0 ldi r24, 0x0A ; 10
b5a: c8 0e add r12, r24
b5c: d1 1c adc r13, r1
b5e: e1 1c adc r14, r1
b60: f1 1c adc r15, r1
millis():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:87
{
unsigned long m;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer_millis)
uint8_t status = SREG;
b62: 2f b7 in r18, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:88
cli();
b64: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:90
m = timer_millis;
b66: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 <timer_millis>
b6a: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 <timer_millis+0x1>
b6e: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 <timer_millis+0x2>
b72: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92
SREG = status;
b76: 2f bf out 0x3f, r18 ; 63
_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179
bool modeMatch = false;
while (millis() < endTime) {
b78: 8c 15 cp r24, r12
b7a: 9d 05 cpc r25, r13
b7c: ae 05 cpc r26, r14
b7e: bf 05 cpc r27, r15
b80: 90 f4 brcc .+36 ; 0xba6 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)+0x7e>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:180
uint8_t newmode = readRegister(MCP_CANSTAT);
b82: 6e e0 ldi r22, 0x0E ; 14
b84: ce 01 movw r24, r28
b86: 49 de rcall .-878 ; 0x81a <MCP2515::readRegister(MCP2515::REGISTER)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:181
newmode &= CANSTAT_OPMOD;
b88: 80 7e andi r24, 0xE0 ; 224
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:185
modeMatch = newmode == mode;
if (modeMatch) {
b8a: 18 13 cpse r17, r24
b8c: ea cf rjmp .-44 ; 0xb62 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)+0x3a>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:183
bool modeMatch = false;
while (millis() < endTime) {
uint8_t newmode = readRegister(MCP_CANSTAT);
newmode &= CANSTAT_OPMOD;
modeMatch = newmode == mode;
b8e: 81 e0 ldi r24, 0x01 ; 1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:190
if (modeMatch) {
break;
}
}
return modeMatch ? ERROR_OK : ERROR_FAIL;
b90: 91 e0 ldi r25, 0x01 ; 1
b92: 89 27 eor r24, r25
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:192
}
b94: 90 e0 ldi r25, 0x00 ; 0
b96: df 91 pop r29
b98: cf 91 pop r28
b9a: 1f 91 pop r17
b9c: ff 90 pop r15
b9e: ef 90 pop r14
ba0: df 90 pop r13
ba2: cf 90 pop r12
ba4: 08 95 ret
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179
{
modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode);
unsigned long endTime = millis() + 10;
bool modeMatch = false;
while (millis() < endTime) {
ba6: 80 e0 ldi r24, 0x00 ; 0
ba8: f3 cf rjmp .-26 ; 0xb90 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)+0x68>
00000baa <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>:
_ZN7MCP251510setBitrateE9CAN_SPEED9CAN_CLOCK.constprop.6():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:199
MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed)
{
return setBitrate(canSpeed, MCP_16MHZ);
}
MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
baa: 0f 93 push r16
bac: 1f 93 push r17
bae: cf 93 push r28
bb0: df 93 push r29
bb2: ec 01 movw r28, r24
setConfigMode():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150
return i;
}
MCP2515::ERROR MCP2515::setConfigMode()
{
return setMode(CANCTRL_REQOP_CONFIG);
bb4: 60 e8 ldi r22, 0x80 ; 128
bb6: b8 df rcall .-144 ; 0xb28 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>
bb8: 8c 01 movw r16, r24
_ZN7MCP251510setBitrateE9CAN_SPEED9CAN_CLOCK.constprop.6():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:202
}
MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
{
ERROR error = setConfigMode();
if (error != ERROR_OK) {
bba: 89 2b or r24, r25
bbc: 61 f4 brne .+24 ; 0xbd6 <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]+0x2c>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:477
set = 0;
break;
}
if (set) {
setRegister(MCP_CNF1, cfg1);
bbe: 40 e0 ldi r20, 0x00 ; 0
bc0: 6a e2 ldi r22, 0x2A ; 42
bc2: ce 01 movw r24, r28
bc4: f0 dd rcall .-1056 ; 0x7a6 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:478
setRegister(MCP_CNF2, cfg2);
bc6: 40 e9 ldi r20, 0x90 ; 144
bc8: 69 e2 ldi r22, 0x29 ; 41
bca: ce 01 movw r24, r28
bcc: ec dd rcall .-1064 ; 0x7a6 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:479
setRegister(MCP_CNF3, cfg3);
bce: 42 e8 ldi r20, 0x82 ; 130
bd0: 68 e2 ldi r22, 0x28 ; 40
bd2: ce 01 movw r24, r28
bd4: e8 dd rcall .-1072 ; 0x7a6 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:485
return ERROR_OK;
}
else {
return ERROR_FAIL;
}
}
bd6: c8 01 movw r24, r16
bd8: df 91 pop r29
bda: cf 91 pop r28
bdc: 1f 91 pop r17
bde: 0f 91 pop r16
be0: 08 95 ret
00000be2 <MCP2515::setNormalMode()>:
_ZN7MCP251513setNormalModeEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:170
return setMode(CANCTRL_REQOP_LOOPBACK);
}
MCP2515::ERROR MCP2515::setNormalMode()
{
return setMode(CANCTRL_REQOP_NORMAL);
be2: 60 e0 ldi r22, 0x00 ; 0
be4: a1 cf rjmp .-190 ; 0xb28 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>
00000be6 <MCP2515::reset()>:
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:35
digitalWrite(SPICS, HIGH);
SPI.endTransaction();
}
MCP2515::ERROR MCP2515::reset(void)
{
be6: 7f 92 push r7
be8: 8f 92 push r8
bea: 9f 92 push r9
bec: af 92 push r10
bee: bf 92 push r11
bf0: cf 92 push r12
bf2: df 92 push r13
bf4: ef 92 push r14
bf6: ff 92 push r15
bf8: 0f 93 push r16
bfa: 1f 93 push r17
bfc: cf 93 push r28
bfe: df 93 push r29
c00: cd b7 in r28, 0x3d ; 61
c02: de b7 in r29, 0x3e ; 62
c04: a2 97 sbiw r28, 0x22 ; 34
c06: cd bf out 0x3d, r28 ; 61
c08: de bf out 0x3e, r29 ; 62
c0a: 8c 01 movw r16, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:36
startSPI();
c0c: c4 dc rcall .-1656 ; 0x596 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:37
SPI.transfer(INSTRUCTION_RESET);
c0e: 80 ec ldi r24, 0xC0 ; 192
c10: c8 da rcall .-2672 ; 0x1a2 <SPIClass::transfer(unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38
endSPI();
c12: c8 01 movw r24, r16
c14: 7c db rcall .-2312 ; 0x30e <MCP2515::endSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:40
delay(10);
c16: 56 db rcall .-2388 ; 0x2c4 <delay.constprop.18>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:43
uint8_t zeros[14];
memset(zeros, 0, sizeof(zeros));
c18: ce 01 movw r24, r28
c1a: 01 96 adiw r24, 0x01 ; 1
c1c: 7c 01 movw r14, r24
c1e: 8e e0 ldi r24, 0x0E ; 14
c20: f7 01 movw r30, r14
c22: 11 92 st Z+, r1
c24: 8a 95 dec r24
c26: e9 f7 brne .-6 ; 0xc22 <MCP2515::reset()+0x3c>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:44
setRegisters(MCP_TXB0CTRL, zeros, 14);
c28: 2e e0 ldi r18, 0x0E ; 14
c2a: a7 01 movw r20, r14
c2c: 60 e3 ldi r22, 0x30 ; 48
c2e: c8 01 movw r24, r16
c30: 95 dd rcall .-1238 ; 0x75c <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:45
setRegisters(MCP_TXB1CTRL, zeros, 14);
c32: 2e e0 ldi r18, 0x0E ; 14
c34: a7 01 movw r20, r14
c36: 60 e4 ldi r22, 0x40 ; 64
c38: c8 01 movw r24, r16
c3a: 90 dd rcall .-1248 ; 0x75c <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:46
setRegisters(MCP_TXB2CTRL, zeros, 14);
c3c: 2e e0 ldi r18, 0x0E ; 14
c3e: a7 01 movw r20, r14
c40: 60 e5 ldi r22, 0x50 ; 80
c42: c8 01 movw r24, r16
c44: 8b dd rcall .-1258 ; 0x75c <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:48
setRegister(MCP_RXB0CTRL, 0);
c46: 40 e0 ldi r20, 0x00 ; 0
c48: 60 e6 ldi r22, 0x60 ; 96
c4a: c8 01 movw r24, r16
c4c: ac dd rcall .-1192 ; 0x7a6 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:49
setRegister(MCP_RXB1CTRL, 0);
c4e: 40 e0 ldi r20, 0x00 ; 0
c50: 60 e7 ldi r22, 0x70 ; 112
c52: c8 01 movw r24, r16
c54: a8 dd rcall .-1200 ; 0x7a6 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:51
setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF);
c56: 43 ea ldi r20, 0xA3 ; 163
c58: 6b e2 ldi r22, 0x2B ; 43
c5a: c8 01 movw r24, r16
c5c: a4 dd rcall .-1208 ; 0x7a6 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:55
// receives all valid messages using either Standard or Extended Identifiers that
// meet filter criteria. RXF0 is applied for RXB0, RXF1 is applied for RXB1
modifyRegister(MCP_RXB0CTRL,
c5e: 24 e0 ldi r18, 0x04 ; 4
c60: 47 e6 ldi r20, 0x67 ; 103
c62: 60 e6 ldi r22, 0x60 ; 96
c64: c8 01 movw r24, r16
c66: 61 dd rcall .-1342 ; 0x72a <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:58
RXBnCTRL_RXM_MASK | RXB0CTRL_BUKT | RXB0CTRL_FILHIT_MASK,
RXBnCTRL_RXM_STDEXT | RXB0CTRL_BUKT | RXB0CTRL_FILHIT);
modifyRegister(MCP_RXB1CTRL,
c68: 21 e0 ldi r18, 0x01 ; 1
c6a: 47 e6 ldi r20, 0x67 ; 103
c6c: 60 e7 ldi r22, 0x70 ; 112
c6e: c8 01 movw r24, r16
c70: 5c dd rcall .-1352 ; 0x72a <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:65
RXBnCTRL_RXM_STDEXT | RXB1CTRL_FILHIT);
// clear filters and masks
// do not filter any standard frames for RXF0 used by RXB0
// do not filter any extended frames for RXF1 used by RXB1
RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5};
c72: 8c e0 ldi r24, 0x0C ; 12
c74: e8 ef ldi r30, 0xF8 ; 248
c76: f2 e5 ldi r31, 0x52 ; 82
c78: de 01 movw r26, r28
c7a: 1f 96 adiw r26, 0x0f ; 15
c7c: 01 90 ld r0, Z+
c7e: 0d 92 st X+, r0
c80: 8a 95 dec r24
c82: e1 f7 brne .-8 ; 0xc7c <MCP2515::reset()+0x96>
c84: 4e 01 movw r8, r28
c86: ff e0 ldi r31, 0x0F ; 15
c88: 8f 0e add r8, r31
c8a: 91 1c adc r9, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66
for (int i=0; i<6; i++) {
c8c: b1 2c mov r11, r1
c8e: a1 2c mov r10, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564
REGISTER reg;
switch (num) {
case RXF0: reg = MCP_RXF0SIDH; break;
case RXF1: reg = MCP_RXF1SIDH; break;
case RXF2: reg = MCP_RXF2SIDH; break;
c90: 28 e0 ldi r18, 0x08 ; 8
c92: 72 2e mov r7, r18
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:68
// do not filter any standard frames for RXF0 used by RXB0
// do not filter any extended frames for RXF1 used by RXB1
RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5};
for (int i=0; i<6; i++) {
bool ext = (i == 1);
ERROR result = setFilter(filters[i], ext, 0);
c94: f4 01 movw r30, r8
c96: e1 90 ld r14, Z+
c98: f1 90 ld r15, Z+
c9a: 4f 01 movw r8, r30
setConfigMode():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150
return i;
}
MCP2515::ERROR MCP2515::setConfigMode()
{
return setMode(CANCTRL_REQOP_CONFIG);
c9c: 60 e8 ldi r22, 0x80 ; 128
c9e: c8 01 movw r24, r16
ca0: 43 df rcall .-378 ; 0xb28 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>
ca2: 6c 01 movw r12, r24
setFilter():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:555
}
MCP2515::ERROR MCP2515::setFilter(const RXF num, const bool ext, const uint32_t ulData)
{
ERROR res = setConfigMode();
if (res != ERROR_OK) {
ca4: 89 2b or r24, r25
ca6: 09 f0 breq .+2 ; 0xcaa <MCP2515::reset()+0xc4>
ca8: 65 c0 rjmp .+202 ; 0xd74 <MCP2515::reset()+0x18e>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561
return res;
}
REGISTER reg;
switch (num) {
caa: f2 e0 ldi r31, 0x02 ; 2
cac: ef 16 cp r14, r31
cae: f1 04 cpc r15, r1
cb0: 09 f4 brne .+2 ; 0xcb4 <MCP2515::reset()+0xce>
cb2: 72 c0 rjmp .+228 ; 0xd98 <MCP2515::reset()+0x1b2>
cb4: 58 f4 brcc .+22 ; 0xccc <MCP2515::reset()+0xe6>
cb6: e1 14 cp r14, r1
cb8: f1 04 cpc r15, r1
cba: 09 f4 brne .+2 ; 0xcbe <MCP2515::reset()+0xd8>
cbc: 73 c0 rjmp .+230 ; 0xda4 <MCP2515::reset()+0x1be>
cbe: ea 94 dec r14
cc0: ef 28 or r14, r15
cc2: 89 f0 breq .+34 ; 0xce6 <MCP2515::reset()+0x100>
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:544
REGISTER reg;
switch (mask) {
case MASK0: reg = MCP_RXM0SIDH; break;
case MASK1: reg = MCP_RXM1SIDH; break;
default:
return ERROR_FAIL;
cc4: cc 24 eor r12, r12
cc6: c3 94 inc r12
cc8: d1 2c mov r13, r1
cca: 54 c0 rjmp .+168 ; 0xd74 <MCP2515::reset()+0x18e>
setFilter():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561
return res;
}
REGISTER reg;
switch (num) {
ccc: e4 e0 ldi r30, 0x04 ; 4
cce: ee 16 cp r14, r30
cd0: f1 04 cpc r15, r1
cd2: 09 f4 brne .+2 ; 0xcd6 <MCP2515::reset()+0xf0>
cd4: 65 c0 rjmp .+202 ; 0xda0 <MCP2515::reset()+0x1ba>
cd6: 08 f4 brcc .+2 ; 0xcda <MCP2515::reset()+0xf4>
cd8: 61 c0 rjmp .+194 ; 0xd9c <MCP2515::reset()+0x1b6>
cda: 85 e0 ldi r24, 0x05 ; 5
cdc: e8 16 cp r14, r24
cde: f1 04 cpc r15, r1
ce0: 89 f7 brne .-30 ; 0xcc4 <MCP2515::reset()+0xde>
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:567
case RXF0: reg = MCP_RXF0SIDH; break;
case RXF1: reg = MCP_RXF1SIDH; break;
case RXF2: reg = MCP_RXF2SIDH; break;
case RXF3: reg = MCP_RXF3SIDH; break;
case RXF4: reg = MCP_RXF4SIDH; break;
case RXF5: reg = MCP_RXF5SIDH; break;
ce2: 68 e1 ldi r22, 0x18 ; 24
ce4: 01 c0 rjmp .+2 ; 0xce8 <MCP2515::reset()+0x102>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:563
REGISTER reg;
switch (num) {
case RXF0: reg = MCP_RXF0SIDH; break;
case RXF1: reg = MCP_RXF1SIDH; break;
ce6: 64 e0 ldi r22, 0x04 ; 4
prepareId():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513
void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id)
{
uint16_t canid = (uint16_t)(id & 0x0FFFF);
if (ext) {
ce8: 91 e0 ldi r25, 0x01 ; 1
cea: a9 16 cp r10, r25
cec: b1 04 cpc r11, r1
cee: 09 f0 breq .+2 ; 0xcf2 <MCP2515::reset()+0x10c>
cf0: 5b c0 rjmp .+182 ; 0xda8 <MCP2515::reset()+0x1c2>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
cf2: 1e 8e std Y+30, r1 ; 0x1e
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515
buffer[MCP_EID8] = (uint8_t) (canid >> 8);
cf4: 1d 8e std Y+29, r1 ; 0x1d
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519
canid = (uint16_t)(id >> 16);
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
buffer[MCP_SIDL] |= TXB_EXIDE_MASK;
cf6: 7c 8e std Y+28, r7 ; 0x1c
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520
buffer[MCP_SIDH] = (uint8_t) (canid >> 5);
cf8: 1b 8e std Y+27, r1 ; 0x1b
setFilter():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:574
return ERROR_FAIL;
}
uint8_t tbufdata[4];
prepareId(tbufdata, ext, ulData);
setRegisters(reg, tbufdata, 4);
cfa: 24 e0 ldi r18, 0x04 ; 4
cfc: ae 01 movw r20, r28
cfe: 45 5e subi r20, 0xE5 ; 229
d00: 5f 4f sbci r21, 0xFF ; 255
d02: c8 01 movw r24, r16
d04: 2b dd rcall .-1450 ; 0x75c <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)>
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66
// clear filters and masks
// do not filter any standard frames for RXF0 used by RXB0
// do not filter any extended frames for RXF1 used by RXB1
RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5};
for (int i=0; i<6; i++) {
d06: ef ef ldi r30, 0xFF ; 255
d08: ae 1a sub r10, r30
d0a: be 0a sbc r11, r30
d0c: f6 e0 ldi r31, 0x06 ; 6
d0e: af 16 cp r10, r31
d10: b1 04 cpc r11, r1
d12: 09 f0 breq .+2 ; 0xd16 <MCP2515::reset()+0x130>
d14: bf cf rjmp .-130 ; 0xc94 <MCP2515::reset()+0xae>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74
if (result != ERROR_OK) {
return result;
}
}
MASK masks[] = {MASK0, MASK1};
d16: 1f 8e std Y+31, r1 ; 0x1f
d18: 18 a2 std Y+32, r1 ; 0x20
d1a: 81 e0 ldi r24, 0x01 ; 1
d1c: 90 e0 ldi r25, 0x00 ; 0
d1e: 89 a3 std Y+33, r24 ; 0x21
d20: 9a a3 std Y+34, r25 ; 0x22
d22: 7e 01 movw r14, r28
d24: 8f e1 ldi r24, 0x1F ; 31
d26: e8 0e add r14, r24
d28: f1 1c adc r15, r1
d2a: 4e 01 movw r8, r28
d2c: 93 e2 ldi r25, 0x23 ; 35
d2e: 89 0e add r8, r25
d30: 91 1c adc r9, r1
prepareId():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
buffer[MCP_EID8] = (uint8_t) (canid >> 8);
canid = (uint16_t)(id >> 16);
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
buffer[MCP_SIDL] |= TXB_EXIDE_MASK;
d32: 98 e0 ldi r25, 0x08 ; 8
d34: 79 2e mov r7, r25
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:76
}
}
MASK masks[] = {MASK0, MASK1};
for (int i=0; i<2; i++) {
ERROR result = setFilterMask(masks[i], true, 0);
d36: f7 01 movw r30, r14
d38: a1 90 ld r10, Z+
d3a: b1 90 ld r11, Z+
d3c: 7f 01 movw r14, r30
setConfigMode():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150
return i;
}
MCP2515::ERROR MCP2515::setConfigMode()
{
return setMode(CANCTRL_REQOP_CONFIG);
d3e: 60 e8 ldi r22, 0x80 ; 128
d40: c8 01 movw r24, r16
d42: f2 de rcall .-540 ; 0xb28 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>
d44: 6c 01 movw r12, r24
setFilterMask():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:532
}
MCP2515::ERROR MCP2515::setFilterMask(const MASK mask, const bool ext, const uint32_t ulData)
{
ERROR res = setConfigMode();
if (res != ERROR_OK) {
d46: 89 2b or r24, r25
d48: a9 f4 brne .+42 ; 0xd74 <MCP2515::reset()+0x18e>
prepareId():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514
void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id)
{
uint16_t canid = (uint16_t)(id & 0x0FFFF);
if (ext) {
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
d4a: 1e 8e std Y+30, r1 ; 0x1e
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515
buffer[MCP_EID8] = (uint8_t) (canid >> 8);
d4c: 1d 8e std Y+29, r1 ; 0x1d
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519
canid = (uint16_t)(id >> 16);
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
buffer[MCP_SIDL] |= TXB_EXIDE_MASK;
d4e: 7c 8e std Y+28, r7 ; 0x1c
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520
buffer[MCP_SIDH] = (uint8_t) (canid >> 5);
d50: 1b 8e std Y+27, r1 ; 0x1b
setFilterMask():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:540
uint8_t tbufdata[4];
prepareId(tbufdata, ext, ulData);
REGISTER reg;
switch (mask) {
d52: a1 14 cp r10, r1
d54: b1 04 cpc r11, r1
d56: 69 f1 breq .+90 ; 0xdb2 <MCP2515::reset()+0x1cc>
d58: aa 94 dec r10
d5a: ab 28 or r10, r11
d5c: 09 f0 breq .+2 ; 0xd60 <MCP2515::reset()+0x17a>
d5e: b2 cf rjmp .-156 ; 0xcc4 <MCP2515::reset()+0xde>
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:542
case MASK0: reg = MCP_RXM0SIDH; break;
case MASK1: reg = MCP_RXM1SIDH; break;
d60: 64 e2 ldi r22, 0x24 ; 36
setFilterMask():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:547
default:
return ERROR_FAIL;
}
setRegisters(reg, tbufdata, 4);
d62: 24 e0 ldi r18, 0x04 ; 4
d64: ae 01 movw r20, r28
d66: 45 5e subi r20, 0xE5 ; 229
d68: 5f 4f sbci r21, 0xFF ; 255
d6a: c8 01 movw r24, r16
d6c: f7 dc rcall .-1554 ; 0x75c <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)>
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:75
return result;
}
}
MASK masks[] = {MASK0, MASK1};
for (int i=0; i<2; i++) {
d6e: 8e 14 cp r8, r14
d70: 9f 04 cpc r9, r15
d72: 09 f7 brne .-62 ; 0xd36 <MCP2515::reset()+0x150>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:83
return result;
}
}
return ERROR_OK;
}
d74: c6 01 movw r24, r12
d76: a2 96 adiw r28, 0x22 ; 34
d78: cd bf out 0x3d, r28 ; 61
d7a: de bf out 0x3e, r29 ; 62
d7c: df 91 pop r29
d7e: cf 91 pop r28
d80: 1f 91 pop r17
d82: 0f 91 pop r16
d84: ff 90 pop r15
d86: ef 90 pop r14
d88: df 90 pop r13
d8a: cf 90 pop r12
d8c: bf 90 pop r11
d8e: af 90 pop r10
d90: 9f 90 pop r9
d92: 8f 90 pop r8
d94: 7f 90 pop r7
d96: 08 95 ret
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564
REGISTER reg;
switch (num) {
case RXF0: reg = MCP_RXF0SIDH; break;
case RXF1: reg = MCP_RXF1SIDH; break;
case RXF2: reg = MCP_RXF2SIDH; break;
d98: 68 e0 ldi r22, 0x08 ; 8
d9a: a6 cf rjmp .-180 ; 0xce8 <MCP2515::reset()+0x102>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:565
case RXF3: reg = MCP_RXF3SIDH; break;
d9c: 60 e1 ldi r22, 0x10 ; 16
d9e: a4 cf rjmp .-184 ; 0xce8 <MCP2515::reset()+0x102>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:566
case RXF4: reg = MCP_RXF4SIDH; break;
da0: 64 e1 ldi r22, 0x14 ; 20
da2: a2 cf rjmp .-188 ; 0xce8 <MCP2515::reset()+0x102>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562
}
REGISTER reg;
switch (num) {
case RXF0: reg = MCP_RXF0SIDH; break;
da4: 60 e0 ldi r22, 0x00 ; 0
da6: a0 cf rjmp .-192 ; 0xce8 <MCP2515::reset()+0x102>
prepareId():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
buffer[MCP_SIDL] |= TXB_EXIDE_MASK;
buffer[MCP_SIDH] = (uint8_t) (canid >> 5);
} else {
buffer[MCP_SIDH] = (uint8_t) (canid >> 3);
da8: 1b 8e std Y+27, r1 ; 0x1b
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523
buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5);
daa: 1c 8e std Y+28, r1 ; 0x1c
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524
buffer[MCP_EID0] = 0;
dac: 1e 8e std Y+30, r1 ; 0x1e
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525
buffer[MCP_EID8] = 0;
dae: 1d 8e std Y+29, r1 ; 0x1d
db0: a4 cf rjmp .-184 ; 0xcfa <MCP2515::reset()+0x114>
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:541
uint8_t tbufdata[4];
prepareId(tbufdata, ext, ulData);
REGISTER reg;
switch (mask) {
case MASK0: reg = MCP_RXM0SIDH; break;
db2: 60 e2 ldi r22, 0x20 ; 32
db4: d6 cf rjmp .-84 ; 0xd62 <MCP2515::reset()+0x17c>
00000db6 <__vector_25>:
__vector_25():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:74
#elif defined(MILLIS_USE_TIMERB2)
ISR(TCB2_INT_vect)
#else // fallback or defined(MILLIS_USE_TIMERB3)
ISR(TCB3_INT_vect)
#endif
{
db6: 1f 92 push r1
db8: 0f 92 push r0
dba: 0f b6 in r0, 0x3f ; 63
dbc: 0f 92 push r0
dbe: 11 24 eor r1, r1
dc0: 8f 93 push r24
dc2: 9f 93 push r25
dc4: af 93 push r26
dc6: bf 93 push r27
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:75
timer_millis++;
dc8: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 <timer_millis>
dcc: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 <timer_millis+0x1>
dd0: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 <timer_millis+0x2>
dd4: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 <timer_millis+0x3>
dd8: 01 96 adiw r24, 0x01 ; 1
dda: a1 1d adc r26, r1
ddc: b1 1d adc r27, r1
dde: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 <timer_millis>
de2: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 <timer_millis+0x1>
de6: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 <timer_millis+0x2>
dea: b0 93 13 3c sts 0x3C13, r27 ; 0x803c13 <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:78
/* Clear flag */
_timer->INTFLAGS = TCB_CAPT_bm;
dee: 81 e0 ldi r24, 0x01 ; 1
df0: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 <digital_pin_to_bit_mask+0x7fb71f>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:79
}
df4: bf 91 pop r27
df6: af 91 pop r26
df8: 9f 91 pop r25
dfa: 8f 91 pop r24
dfc: 0f 90 pop r0
dfe: 0f be out 0x3f, r0 ; 63
e00: 0f 90 pop r0
e02: 1f 90 pop r1
e04: 18 95 reti
00000e06 <MCP2515::MCP2515(unsigned char)>:
_ZN7MCP2515C2Eh():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:15
const struct MCP2515::RXBn_REGS MCP2515::RXB[N_RXBUFFERS] = {
{MCP_RXB0CTRL, MCP_RXB0SIDH, MCP_RXB0DATA, CANINTF_RX0IF},
{MCP_RXB1CTRL, MCP_RXB1SIDH, MCP_RXB1DATA, CANINTF_RX1IF}
};
MCP2515::MCP2515(const uint8_t _CS)
e06: 1f 93 push r17
e08: cf 93 push r28
e0a: df 93 push r29
e0c: ec 01 movw r28, r24
e0e: 16 2f mov r17, r22
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:17
{
SPI.begin();
e10: 80 d9 rcall .-3328 ; 0x112 <SPIClass::begin() [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:19
SPICS = _CS;
e12: 18 83 st Y, r17
pinMode():
e14: 81 2f mov r24, r17
e16: 6b d9 rcall .-3370 ; 0xee <pinMode.part.1.constprop.29>
_ZN7MCP2515C2Eh():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21
pinMode(SPICS, OUTPUT);
endSPI();
e18: ce 01 movw r24, r28
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:22
}
e1a: df 91 pop r29
e1c: cf 91 pop r28
e1e: 1f 91 pop r17
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21
{
SPI.begin();
SPICS = _CS;
pinMode(SPICS, OUTPUT);
endSPI();
e20: 76 ca rjmp .-2836 ; 0x30e <MCP2515::endSPI()>
00000e22 <global constructors keyed to 65535_0_Swtich.ino.cpp.o.2769>:
_GLOBAL__I_65535_0_Swtich.ino.cpp.o.2769():
e22: e7 e6 ldi r30, 0x67 ; 103
e24: fc e3 ldi r31, 0x3C ; 60
e26: 84 e0 ldi r24, 0x04 ; 4
e28: 81 83 std Z+1, r24 ; 0x01
e2a: 81 e3 ldi r24, 0x31 ; 49
e2c: 80 83 st Z, r24
e2e: e8 e2 ldi r30, 0x28 ; 40
e30: fc e3 ldi r31, 0x3C ; 60
e32: 15 82 std Z+5, r1 ; 0x05
e34: 14 82 std Z+4, r1 ; 0x04
e36: 62 e0 ldi r22, 0x02 ; 2
e38: 8c e6 ldi r24, 0x6C ; 108
e3a: 9c e3 ldi r25, 0x3C ; 60
e3c: e4 df rcall .-56 ; 0xe06 <MCP2515::MCP2515(unsigned char)>
e3e: 63 e0 ldi r22, 0x03 ; 3
e40: 8b e6 ldi r24, 0x6B ; 107
e42: 9c e3 ldi r25, 0x3C ; 60
e44: e0 df rcall .-64 ; 0xe06 <MCP2515::MCP2515(unsigned char)>
e46: 68 e0 ldi r22, 0x08 ; 8
e48: 8a e6 ldi r24, 0x6A ; 106
e4a: 9c e3 ldi r25, 0x3C ; 60
e4c: dc df rcall .-72 ; 0xe06 <MCP2515::MCP2515(unsigned char)>
e4e: 69 e0 ldi r22, 0x09 ; 9
e50: 89 e6 ldi r24, 0x69 ; 105
e52: 9c e3 ldi r25, 0x3C ; 60
e54: d8 cf rjmp .-80 ; 0xe06 <MCP2515::MCP2515(unsigned char)>
00000e56 <main>:
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:361
#elif (F_CPU == 10000000L)
/* Clock DIV2 */
_PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc));
#elif (F_CPU == 8000000L)
/* Clock DIV2 */
_PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc));
e56: 91 e0 ldi r25, 0x01 ; 1
e58: 88 ed ldi r24, 0xD8 ; 216
e5a: 84 bf out 0x34, r24 ; 52
e5c: 90 93 61 00 sts 0x0061, r25 ; 0x800061 <digital_pin_to_bit_mask+0x7facda>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:390
#if (F_CPU >= 20000000L) // 20 MHz / 128 = 156.250 kHz
ADC0.CTRLC |= ADC_PRESC_DIV128_gc;
#elif (F_CPU >= 16000000L) // 16 MHz / 128 = 125 kHz
ADC0.CTRLC |= ADC_PRESC_DIV128_gc;
#elif (F_CPU >= 8000000L) // 8 MHz / 64 = 125 kHz
ADC0.CTRLC |= ADC_PRESC_DIV64_gc;
e60: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <digital_pin_to_bit_mask+0x7fb27b>
e64: 85 60 ori r24, 0x05 ; 5
e66: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <digital_pin_to_bit_mask+0x7fb27b>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:402
#else // 128 kHz / 2 = 64 kHz -> This is the closest you can get, the prescaler is 2
ADC0.CTRLC |= ADC_PRESC_DIV2_gc;
#endif
/* Enable ADC */
ADC0.CTRLA |= ADC_ENABLE_bm;
e6a: 80 91 00 06 lds r24, 0x0600 ; 0x800600 <digital_pin_to_bit_mask+0x7fb279>
e6e: 81 60 ori r24, 0x01 ; 1
e70: 80 93 00 06 sts 0x0600, r24 ; 0x800600 <digital_pin_to_bit_mask+0x7fb279>
analogReference():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_analog.c:35
{
switch (mode)
{
case EXTERNAL:
case VDD:
ADC0.CTRLC = (ADC0.CTRLC & ~(ADC_REFSEL_gm)) | mode | ADC_SAMPCAP_bm; // Per datasheet, recommended SAMPCAP=1 at ref > 1v - we don't *KNOW* the external reference will be >1v, but it's probably more likely...
e74: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <digital_pin_to_bit_mask+0x7fb27b>
e78: 8f 7c andi r24, 0xCF ; 207
e7a: 80 65 ori r24, 0x50 ; 80
e7c: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <digital_pin_to_bit_mask+0x7fb27b>
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:407
analogReference(VDD);
#endif
PORTMUX.USARTROUTEA = 0;
e80: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 <digital_pin_to_bit_mask+0x7fb25b>
setup_timers():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:446
void setup_timers()
{
// TYPE A TIMER
// PORTMUX setting for TCA (defined in pins_arduino.h)
PORTMUX.TCAROUTEA = TCA0_PINS;
e84: 82 e0 ldi r24, 0x02 ; 2
e86: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 <digital_pin_to_bit_mask+0x7fb25d>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:449
// Enable split mode before anything else
TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm;
e8a: 90 93 03 0a sts 0x0A03, r25 ; 0x800a03 <digital_pin_to_bit_mask+0x7fb67c>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:453
// Period setting, two 8 bit registers
TCA0.SPLIT.LPER =
TCA0.SPLIT.HPER = PWM_TIMER_PERIOD;
e8e: 8e ef ldi r24, 0xFE ; 254
e90: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 <digital_pin_to_bit_mask+0x7fb6a0>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:452
// Enable split mode before anything else
TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm;
// Period setting, two 8 bit registers
TCA0.SPLIT.LPER =
e94: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 <digital_pin_to_bit_mask+0x7fb69f>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:461
TCA0.SPLIT.LCMP0 =
TCA0.SPLIT.LCMP1 =
TCA0.SPLIT.LCMP2 =
TCA0.SPLIT.HCMP0 =
TCA0.SPLIT.HCMP1 =
TCA0.SPLIT.HCMP2 = PWM_TIMER_COMPARE;
e98: 80 e8 ldi r24, 0x80 ; 128
e9a: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d <digital_pin_to_bit_mask+0x7fb6a6>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:460
// Default duty 50%, will re-assign in analogWrite()
TCA0.SPLIT.LCMP0 =
TCA0.SPLIT.LCMP1 =
TCA0.SPLIT.LCMP2 =
TCA0.SPLIT.HCMP0 =
TCA0.SPLIT.HCMP1 =
e9e: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b <digital_pin_to_bit_mask+0x7fb6a4>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:459
// Default duty 50%, will re-assign in analogWrite()
TCA0.SPLIT.LCMP0 =
TCA0.SPLIT.LCMP1 =
TCA0.SPLIT.LCMP2 =
TCA0.SPLIT.HCMP0 =
ea2: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 <digital_pin_to_bit_mask+0x7fb6a2>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:458
TCA0.SPLIT.HPER = PWM_TIMER_PERIOD;
// Default duty 50%, will re-assign in analogWrite()
TCA0.SPLIT.LCMP0 =
TCA0.SPLIT.LCMP1 =
TCA0.SPLIT.LCMP2 =
ea6: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c <digital_pin_to_bit_mask+0x7fb6a5>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:457
TCA0.SPLIT.LPER =
TCA0.SPLIT.HPER = PWM_TIMER_PERIOD;
// Default duty 50%, will re-assign in analogWrite()
TCA0.SPLIT.LCMP0 =
TCA0.SPLIT.LCMP1 =
eaa: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a <digital_pin_to_bit_mask+0x7fb6a3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:456
// Period setting, two 8 bit registers
TCA0.SPLIT.LPER =
TCA0.SPLIT.HPER = PWM_TIMER_PERIOD;
// Default duty 50%, will re-assign in analogWrite()
TCA0.SPLIT.LCMP0 =
eae: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 <digital_pin_to_bit_mask+0x7fb6a1>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:471
#elif F_CPU <= 2000000L
// Use DIV8 prescaler (giving 250kHz clock on 2MHz), enable TCA timer
TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV8_gc) | (TCA_SPLIT_ENABLE_bm);
#elif F_CPU <= 8000000L
// Use DIV16 prescaler (giving 250kHz clocke on 4MHz, 500kHz clock on 8MHz), enable TCA timer
TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV16_gc) | (TCA_SPLIT_ENABLE_bm);
eb2: 89 e0 ldi r24, 0x09 ; 9
eb4: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 <digital_pin_to_bit_mask+0x7fb679>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:480
#endif
// TYPE B TIMERS
// Set up routing (defined in pins_arduino.h)
PORTMUX.TCBROUTEA = 0
eb8: 87 e0 ldi r24, 0x07 ; 7
eba: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 <digital_pin_to_bit_mask+0x7fb25e>
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:496
| TCB3_PINS
#endif
;
// Start with TCB0
TCB_t *timer_B = (TCB_t *)&TCB0;
ebe: e0 e8 ldi r30, 0x80 ; 128
ec0: fa e0 ldi r31, 0x0A ; 10
setup_timers():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:513
// Timer B Setup loop for TCB[0:end]
do
{
// 8 bit PWM mode, but do not enable output yet, will do in analogWrite()
timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc);
ec2: 37 e0 ldi r19, 0x07 ; 7
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:516
// Assign 8-bit period
timer_B->CCMPL = PWM_TIMER_PERIOD;
ec4: 2e ef ldi r18, 0xFE ; 254
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519
// default duty 50%, set when output enabled
timer_B->CCMPH = PWM_TIMER_COMPARE;
ec6: 90 e8 ldi r25, 0x80 ; 128
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523
// Use TCA clock (250kHz) and enable
// (sync update commented out, might try to synchronize later
timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc)
ec8: 85 e0 ldi r24, 0x05 ; 5
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:513
// Timer B Setup loop for TCB[0:end]
do
{
// 8 bit PWM mode, but do not enable output yet, will do in analogWrite()
timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc);
eca: 31 83 std Z+1, r19 ; 0x01
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:516
// Assign 8-bit period
timer_B->CCMPL = PWM_TIMER_PERIOD;
ecc: 24 87 std Z+12, r18 ; 0x0c
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519
// default duty 50%, set when output enabled
timer_B->CCMPH = PWM_TIMER_COMPARE;
ece: 95 87 std Z+13, r25 ; 0x0d
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523
// Use TCA clock (250kHz) and enable
// (sync update commented out, might try to synchronize later
timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc)
ed0: 80 83 st Z, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:528
//|(TCB_SYNCUPD_bm)
| (TCB_ENABLE_bm);
// Increment pointer to next TCB instance
timer_B++;
ed2: 70 96 adiw r30, 0x10 ; 16
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:531
// Stop when pointing to TCB3
} while (timer_B <= timer_B_end);
ed4: e0 3c cpi r30, 0xC0 ; 192
ed6: 4a e0 ldi r20, 0x0A ; 10
ed8: f4 07 cpc r31, r20
eda: b9 f7 brne .-18 ; 0xeca <main+0x74>
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:416
/********************* TCB for system time tracking **************************/
// BUG: we can compensate for F_CPU by fine tuning value of TIME_TRACKING_TIMER_COUNT
/* Select vanilla 16 bit periodic interrupt mode */
_timer->CTRLB = TCB_CNTMODE_INT_gc;
edc: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 <digital_pin_to_bit_mask+0x7fb71a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:419
/* TOP value for overflow every N clock cycles */
_timer->CCMP = TIME_TRACKING_TIMER_COUNT - 1;
ee0: 8f e3 ldi r24, 0x3F ; 63
ee2: 9f e1 ldi r25, 0x1F ; 31
ee4: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac <digital_pin_to_bit_mask+0x7fb725>
ee8: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad <digital_pin_to_bit_mask+0x7fb726>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:422
/* Enable TCB interrupt */
_timer->INTCTRL |= TCB_CAPT_bm;
eec: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 <digital_pin_to_bit_mask+0x7fb71e>
ef0: 81 60 ori r24, 0x01 ; 1
ef2: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 <digital_pin_to_bit_mask+0x7fb71e>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:426
/* Clock selection is F_CPU/N -- which is independent of TCA */
#if TIME_TRACKING_TIMER_DIVIDER == 1
_timer->CTRLA = TCB_CLKSEL_CLKDIV1_gc; /* F_CPU */
ef6: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 <digital_pin_to_bit_mask+0x7fb719>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:434
#else
#assert "TIME_TRACKING_TIMER_DIVIDER not supported"
#endif
/* Enable & start */
_timer->CTRLA |= TCB_ENABLE_bm; /* Keep this last before enabling interrupts to ensure tracking as accurate as possible */
efa: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 <digital_pin_to_bit_mask+0x7fb719>
efe: 81 60 ori r24, 0x01 ; 1
f00: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 <digital_pin_to_bit_mask+0x7fb719>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:438
/*************************** ENABLE GLOBAL INTERRUPTS *************************/
sei();
f04: 78 94 sei
setup():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:147
MCP2515 mcp2515_1(PIN_PA3);
MCP2515 mcp2515_2(PIN_PB0);
MCP2515 mcp2515_3(PIN_PB1);
void setup() {
SPI.begin();
f06: 05 d9 rcall .-3574 ; 0x112 <SPIClass::begin() [clone .constprop.25]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:175
MeyPins[7] = PinState();
MeyPins[7].Init(PIN_PC0, (byte) 8);
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7);
f08: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <digital_pin_to_bit_mask+0x7facd9>
f0c: 80 68 ori r24, 0x80 ; 128
f0e: 90 e0 ldi r25, 0x00 ; 0
f10: 28 ed ldi r18, 0xD8 ; 216
f12: 24 bf out 0x34, r18 ; 52
f14: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <digital_pin_to_bit_mask+0x7facd9>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:178
mcp2515_0.reset();
f18: 8c e6 ldi r24, 0x6C ; 108
f1a: 9c e3 ldi r25, 0x3C ; 60
f1c: 64 de rcall .-824 ; 0xbe6 <MCP2515::reset()>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:179
mcp2515_0.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
f1e: 8c e6 ldi r24, 0x6C ; 108
f20: 9c e3 ldi r25, 0x3C ; 60
f22: 43 de rcall .-890 ; 0xbaa <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:180
mcp2515_0.setNormalMode();
f24: 8c e6 ldi r24, 0x6C ; 108
f26: 9c e3 ldi r25, 0x3C ; 60
f28: 5c de rcall .-840 ; 0xbe2 <MCP2515::setNormalMode()>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:182
mcp2515_1.reset();
f2a: 8b e6 ldi r24, 0x6B ; 107
f2c: 9c e3 ldi r25, 0x3C ; 60
f2e: 5b de rcall .-842 ; 0xbe6 <MCP2515::reset()>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:183
mcp2515_1.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
f30: 8b e6 ldi r24, 0x6B ; 107
f32: 9c e3 ldi r25, 0x3C ; 60
f34: 3a de rcall .-908 ; 0xbaa <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:184
mcp2515_1.setNormalMode();
f36: 8b e6 ldi r24, 0x6B ; 107
f38: 9c e3 ldi r25, 0x3C ; 60
f3a: 53 de rcall .-858 ; 0xbe2 <MCP2515::setNormalMode()>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:186
mcp2515_2.reset();
f3c: 8a e6 ldi r24, 0x6A ; 106
f3e: 9c e3 ldi r25, 0x3C ; 60
f40: 52 de rcall .-860 ; 0xbe6 <MCP2515::reset()>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:187
mcp2515_2.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
f42: 8a e6 ldi r24, 0x6A ; 106
f44: 9c e3 ldi r25, 0x3C ; 60
f46: 31 de rcall .-926 ; 0xbaa <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:188
mcp2515_2.setNormalMode();
f48: 8a e6 ldi r24, 0x6A ; 106
f4a: 9c e3 ldi r25, 0x3C ; 60
f4c: 4a de rcall .-876 ; 0xbe2 <MCP2515::setNormalMode()>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:190
mcp2515_3.reset();
f4e: 89 e6 ldi r24, 0x69 ; 105
f50: 9c e3 ldi r25, 0x3C ; 60
f52: 49 de rcall .-878 ; 0xbe6 <MCP2515::reset()>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:191
mcp2515_3.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
f54: 89 e6 ldi r24, 0x69 ; 105
f56: 9c e3 ldi r25, 0x3C ; 60
f58: 28 de rcall .-944 ; 0xbaa <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:192
mcp2515_3.setNormalMode();
f5a: 89 e6 ldi r24, 0x69 ; 105
f5c: 9c e3 ldi r25, 0x3C ; 60
f5e: 41 de rcall .-894 ; 0xbe2 <MCP2515::setNormalMode()>
CalculateMyDeviceId():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:380
return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG;
}
void CalculateMyDeviceId()
{
myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow();
f60: 83 da rcall .-2810 ; 0x468 <GetDeviceIdHigh()>
f62: c8 2f mov r28, r24
f64: 99 da rcall .-2766 ; 0x498 <GetDeviceIdLow()>
f66: 9c 2f mov r25, r28
f68: 80 93 14 3c sts 0x3C14, r24 ; 0x803c14 <myDeviceId>
f6c: 90 93 15 3c sts 0x3C15, r25 ; 0x803c15 <myDeviceId+0x1>
setup():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:206
digitalWrite(MeyPins[i].pin_id, LOW);
}
CalculateMyDeviceId();
SendSerialPackage(&mcp2515_0);
f70: 8c e6 ldi r24, 0x6C ; 108
f72: 9c e3 ldi r25, 0x3C ; 60
f74: 06 dd rcall .-1524 ; 0x982 <SendSerialPackage(MCP2515*)>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:207
SendSerialPackage(&mcp2515_1);
f76: 8b e6 ldi r24, 0x6B ; 107
f78: 9c e3 ldi r25, 0x3C ; 60
f7a: 03 dd rcall .-1530 ; 0x982 <SendSerialPackage(MCP2515*)>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:208
SendSerialPackage(&mcp2515_2);
f7c: 8a e6 ldi r24, 0x6A ; 106
f7e: 9c e3 ldi r25, 0x3C ; 60
f80: 00 dd rcall .-1536 ; 0x982 <SendSerialPackage(MCP2515*)>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:209
SendSerialPackage(&mcp2515_3);
f82: 89 e6 ldi r24, 0x69 ; 105
f84: 9c e3 ldi r25, 0x3C ; 60
f86: fd dc rcall .-1542 ; 0x982 <SendSerialPackage(MCP2515*)>
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43
setup();
for (;;)
{
loop();
if (serialEventRun) serialEventRun();
f88: c0 e0 ldi r28, 0x00 ; 0
f8a: d0 e0 ldi r29, 0x00 ; 0
loop():
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:224
}
void loop()
{
if (mcp2515_0.readMessage(&_frame) == MCP2515::ERROR_OK)
f8c: 8c e6 ldi r24, 0x6C ; 108
f8e: 9c e3 ldi r25, 0x3C ; 60
f90: ac dd rcall .-1192 ; 0xaea <MCP2515::readMessage(can_frame*) [clone .constprop.7]>
f92: 89 2b or r24, r25
f94: 51 f4 brne .+20 ; 0xfaa <main+0x154>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:226
{
mcp2515_1.sendMessage(MCP2515::TXB1, &_frame);
f96: 8b e6 ldi r24, 0x6B ; 107
f98: 9c e3 ldi r25, 0x3C ; 60
f9a: 53 dc rcall .-1882 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:227
mcp2515_2.sendMessage(MCP2515::TXB1, &_frame);
f9c: 8a e6 ldi r24, 0x6A ; 106
f9e: 9c e3 ldi r25, 0x3C ; 60
fa0: 50 dc rcall .-1888 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:228
mcp2515_3.sendMessage(MCP2515::TXB1, &_frame);
fa2: 89 e6 ldi r24, 0x69 ; 105
fa4: 9c e3 ldi r25, 0x3C ; 60
fa6: 4d dc rcall .-1894 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:229
HandleFrame(&_frame);
fa8: 8f da rcall .-2786 ; 0x4c8 <HandleFrame(can_frame*) [clone .constprop.19]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:231
}
if (mcp2515_1.readMessage(&_frame) == MCP2515::ERROR_OK)
faa: 8b e6 ldi r24, 0x6B ; 107
fac: 9c e3 ldi r25, 0x3C ; 60
fae: 9d dd rcall .-1222 ; 0xaea <MCP2515::readMessage(can_frame*) [clone .constprop.7]>
fb0: 89 2b or r24, r25
fb2: 51 f4 brne .+20 ; 0xfc8 <main+0x172>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:233
{
mcp2515_0.sendMessage(MCP2515::TXB1, &_frame);
fb4: 8c e6 ldi r24, 0x6C ; 108
fb6: 9c e3 ldi r25, 0x3C ; 60
fb8: 44 dc rcall .-1912 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:234
mcp2515_2.sendMessage(MCP2515::TXB1, &_frame);
fba: 8a e6 ldi r24, 0x6A ; 106
fbc: 9c e3 ldi r25, 0x3C ; 60
fbe: 41 dc rcall .-1918 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:235
mcp2515_3.sendMessage(MCP2515::TXB1, &_frame);
fc0: 89 e6 ldi r24, 0x69 ; 105
fc2: 9c e3 ldi r25, 0x3C ; 60
fc4: 3e dc rcall .-1924 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:236
HandleFrame(&_frame);
fc6: 80 da rcall .-2816 ; 0x4c8 <HandleFrame(can_frame*) [clone .constprop.19]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:238
}
if (mcp2515_2.readMessage(&_frame) == MCP2515::ERROR_OK)
fc8: 8a e6 ldi r24, 0x6A ; 106
fca: 9c e3 ldi r25, 0x3C ; 60
fcc: 8e dd rcall .-1252 ; 0xaea <MCP2515::readMessage(can_frame*) [clone .constprop.7]>
fce: 89 2b or r24, r25
fd0: 51 f4 brne .+20 ; 0xfe6 <main+0x190>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:240
{
mcp2515_0.sendMessage(MCP2515::TXB1, &_frame);
fd2: 8c e6 ldi r24, 0x6C ; 108
fd4: 9c e3 ldi r25, 0x3C ; 60
fd6: 35 dc rcall .-1942 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:241
mcp2515_1.sendMessage(MCP2515::TXB1, &_frame);
fd8: 8b e6 ldi r24, 0x6B ; 107
fda: 9c e3 ldi r25, 0x3C ; 60
fdc: 32 dc rcall .-1948 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:242
mcp2515_3.sendMessage(MCP2515::TXB1, &_frame);
fde: 89 e6 ldi r24, 0x69 ; 105
fe0: 9c e3 ldi r25, 0x3C ; 60
fe2: 2f dc rcall .-1954 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:243
HandleFrame(&_frame);
fe4: 71 da rcall .-2846 ; 0x4c8 <HandleFrame(can_frame*) [clone .constprop.19]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:245
}
if (mcp2515_3.readMessage(&_frame) == MCP2515::ERROR_OK)
fe6: 89 e6 ldi r24, 0x69 ; 105
fe8: 9c e3 ldi r25, 0x3C ; 60
fea: 7f dd rcall .-1282 ; 0xaea <MCP2515::readMessage(can_frame*) [clone .constprop.7]>
fec: 89 2b or r24, r25
fee: 51 f4 brne .+20 ; 0x1004 <main+0x1ae>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:247
{
mcp2515_0.sendMessage(MCP2515::TXB1, &_frame);
ff0: 8c e6 ldi r24, 0x6C ; 108
ff2: 9c e3 ldi r25, 0x3C ; 60
ff4: 26 dc rcall .-1972 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:248
mcp2515_1.sendMessage(MCP2515::TXB1, &_frame);
ff6: 8b e6 ldi r24, 0x6B ; 107
ff8: 9c e3 ldi r25, 0x3C ; 60
ffa: 23 dc rcall .-1978 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:249
mcp2515_2.sendMessage(MCP2515::TXB1, &_frame);
ffc: 8a e6 ldi r24, 0x6A ; 106
ffe: 9c e3 ldi r25, 0x3C ; 60
1000: 20 dc rcall .-1984 ; 0x842 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .constprop.10]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:250
HandleFrame(&_frame);
1002: 62 da rcall .-2876 ; 0x4c8 <HandleFrame(can_frame*) [clone .constprop.19]>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:252
}
delay(10);
1004: 5f d9 rcall .-3394 ; 0x2c4 <delay.constprop.18>
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43
1006: 20 97 sbiw r28, 0x00 ; 0
1008: 09 f2 breq .-126 ; 0xf8c <main+0x136>
100a: fa d7 rcall .+4084 ; 0x2000 <__TEXT_REGION_LENGTH__>
100c: bf cf rjmp .-130 ; 0xf8c <main+0x136>
0000100e <__muluhisi3>:
__muluhisi3():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:626
100e: 38 d0 rcall .+112 ; 0x1080 <__umulhisi3>
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:627
1010: a5 9f mul r26, r21
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:628
1012: 90 0d add r25, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:629
1014: b4 9f mul r27, r20
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:630
1016: 90 0d add r25, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:631
1018: a4 9f mul r26, r20
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:632
101a: 80 0d add r24, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:633
101c: 91 1d adc r25, r1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:634
101e: 11 24 eor r1, r1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:635
1020: 08 95 ret
00001022 <__ashrdi3>:
__ashrdi3():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3122
1022: 97 fd sbrc r25, 7
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3123
1024: 10 94 com r1
00001026 <__lshrdi3>:
__lshrdi3():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3131
1026: 00 2e mov r0, r16
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3132
1028: 08 30 cpi r16, 0x08 ; 8
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3133
102a: 98 f0 brcs .+38 ; 0x1052 <__lshrdi3+0x2c>
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3134
102c: 08 50 subi r16, 0x08 ; 8
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3135
102e: 23 2f mov r18, r19
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3136
1030: 34 2f mov r19, r20
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3137
1032: 45 2f mov r20, r21
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3138
1034: 56 2f mov r21, r22
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3139
1036: 67 2f mov r22, r23
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3140
1038: 78 2f mov r23, r24
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3141
103a: 89 2f mov r24, r25
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3142
103c: 91 2d mov r25, r1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3143
103e: f4 cf rjmp .-24 ; 0x1028 <__lshrdi3+0x2>
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3144
1040: 15 94 asr r1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3145
1042: 97 95 ror r25
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3146
1044: 87 95 ror r24
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3147
1046: 77 95 ror r23
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3148
1048: 67 95 ror r22
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3149
104a: 57 95 ror r21
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3150
104c: 47 95 ror r20
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3151
104e: 37 95 ror r19
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3152
1050: 27 95 ror r18
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3153
1052: 0a 95 dec r16
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3154
1054: aa f7 brpl .-22 ; 0x1040 <__lshrdi3+0x1a>
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3155
1056: 11 24 eor r1, r1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3156
1058: 00 2d mov r16, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3157
105a: 08 95 ret
0000105c <__cmpdi2_s8>:
__cmpdi2_s8():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2102
105c: 00 24 eor r0, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2103
105e: a7 fd sbrc r26, 7
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2104
1060: 00 94 com r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2105
1062: 2a 17 cp r18, r26
1064: 30 05 cpc r19, r0
1066: 40 05 cpc r20, r0
1068: 50 05 cpc r21, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2106
106a: 60 05 cpc r22, r0
106c: 70 05 cpc r23, r0
106e: 80 05 cpc r24, r0
1070: 90 05 cpc r25, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2107
1072: 08 95 ret
00001074 <__tablejump2__>:
__tablejump2__():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2296
1074: ee 0f add r30, r30
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2297
1076: ff 1f adc r31, r31
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2328
1078: 05 90 lpm r0, Z+
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2329
107a: f4 91 lpm r31, Z
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2330
107c: e0 2d mov r30, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2331
107e: 09 94 ijmp
00001080 <__umulhisi3>:
__umulhisi3():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:564
1080: a2 9f mul r26, r18
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:565
1082: b0 01 movw r22, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:566
1084: b3 9f mul r27, r19
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:567
1086: c0 01 movw r24, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:568
1088: a3 9f mul r26, r19
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:578
108a: 01 d0 rcall .+2 ; 0x108e <__umulhisi3+0xe>
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:580
108c: b2 9f mul r27, r18
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:581
108e: 70 0d add r23, r0
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:582
1090: 81 1d adc r24, r1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:583
1092: 11 24 eor r1, r1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:584
1094: 91 1d adc r25, r1
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:585
1096: 08 95 ret
00001098 <malloc>:
malloc():
1098: 0f 93 push r16
109a: 1f 93 push r17
109c: cf 93 push r28
109e: df 93 push r29
10a0: 82 30 cpi r24, 0x02 ; 2
10a2: 91 05 cpc r25, r1
10a4: 10 f4 brcc .+4 ; 0x10aa <malloc+0x12>
10a6: 82 e0 ldi r24, 0x02 ; 2
10a8: 90 e0 ldi r25, 0x00 ; 0
10aa: e0 91 72 3c lds r30, 0x3C72 ; 0x803c72 <__flp>
10ae: f0 91 73 3c lds r31, 0x3C73 ; 0x803c73 <__flp+0x1>
10b2: 30 e0 ldi r19, 0x00 ; 0
10b4: 20 e0 ldi r18, 0x00 ; 0
10b6: b0 e0 ldi r27, 0x00 ; 0
10b8: a0 e0 ldi r26, 0x00 ; 0
10ba: 30 97 sbiw r30, 0x00 ; 0
10bc: 99 f4 brne .+38 ; 0x10e4 <malloc+0x4c>
10be: 21 15 cp r18, r1
10c0: 31 05 cpc r19, r1
10c2: 09 f4 brne .+2 ; 0x10c6 <malloc+0x2e>
10c4: 4a c0 rjmp .+148 ; 0x115a <malloc+0xc2>
10c6: 28 1b sub r18, r24
10c8: 39 0b sbc r19, r25
10ca: 24 30 cpi r18, 0x04 ; 4
10cc: 31 05 cpc r19, r1
10ce: d8 f5 brcc .+118 ; 0x1146 <malloc+0xae>
10d0: 8a 81 ldd r24, Y+2 ; 0x02
10d2: 9b 81 ldd r25, Y+3 ; 0x03
10d4: 61 15 cp r22, r1
10d6: 71 05 cpc r23, r1
10d8: 89 f1 breq .+98 ; 0x113c <malloc+0xa4>
10da: fb 01 movw r30, r22
10dc: 82 83 std Z+2, r24 ; 0x02
10de: 93 83 std Z+3, r25 ; 0x03
10e0: fe 01 movw r30, r28
10e2: 11 c0 rjmp .+34 ; 0x1106 <malloc+0x6e>
10e4: 40 81 ld r20, Z
10e6: 51 81 ldd r21, Z+1 ; 0x01
10e8: 02 81 ldd r16, Z+2 ; 0x02
10ea: 13 81 ldd r17, Z+3 ; 0x03
10ec: 48 17 cp r20, r24
10ee: 59 07 cpc r21, r25
10f0: e0 f0 brcs .+56 ; 0x112a <malloc+0x92>
10f2: 48 17 cp r20, r24
10f4: 59 07 cpc r21, r25
10f6: 99 f4 brne .+38 ; 0x111e <malloc+0x86>
10f8: 10 97 sbiw r26, 0x00 ; 0
10fa: 61 f0 breq .+24 ; 0x1114 <malloc+0x7c>
10fc: 12 96 adiw r26, 0x02 ; 2
10fe: 0c 93 st X, r16
1100: 12 97 sbiw r26, 0x02 ; 2
1102: 13 96 adiw r26, 0x03 ; 3
1104: 1c 93 st X, r17
1106: 32 96 adiw r30, 0x02 ; 2
1108: cf 01 movw r24, r30
110a: df 91 pop r29
110c: cf 91 pop r28
110e: 1f 91 pop r17
1110: 0f 91 pop r16
1112: 08 95 ret
1114: 00 93 72 3c sts 0x3C72, r16 ; 0x803c72 <__flp>
1118: 10 93 73 3c sts 0x3C73, r17 ; 0x803c73 <__flp+0x1>
111c: f4 cf rjmp .-24 ; 0x1106 <malloc+0x6e>
111e: 21 15 cp r18, r1
1120: 31 05 cpc r19, r1
1122: 51 f0 breq .+20 ; 0x1138 <malloc+0xa0>
1124: 42 17 cp r20, r18
1126: 53 07 cpc r21, r19
1128: 38 f0 brcs .+14 ; 0x1138 <malloc+0xa0>
112a: a9 01 movw r20, r18
112c: db 01 movw r26, r22
112e: 9a 01 movw r18, r20
1130: bd 01 movw r22, r26
1132: df 01 movw r26, r30
1134: f8 01 movw r30, r16
1136: c1 cf rjmp .-126 ; 0x10ba <malloc+0x22>
1138: ef 01 movw r28, r30
113a: f9 cf rjmp .-14 ; 0x112e <malloc+0x96>
113c: 80 93 72 3c sts 0x3C72, r24 ; 0x803c72 <__flp>
1140: 90 93 73 3c sts 0x3C73, r25 ; 0x803c73 <__flp+0x1>
1144: cd cf rjmp .-102 ; 0x10e0 <malloc+0x48>
1146: fe 01 movw r30, r28
1148: e2 0f add r30, r18
114a: f3 1f adc r31, r19
114c: 81 93 st Z+, r24
114e: 91 93 st Z+, r25
1150: 22 50 subi r18, 0x02 ; 2
1152: 31 09 sbc r19, r1
1154: 28 83 st Y, r18
1156: 39 83 std Y+1, r19 ; 0x01
1158: d7 cf rjmp .-82 ; 0x1108 <malloc+0x70>
115a: 20 91 70 3c lds r18, 0x3C70 ; 0x803c70 <__brkval>
115e: 30 91 71 3c lds r19, 0x3C71 ; 0x803c71 <__brkval+0x1>
1162: 23 2b or r18, r19
1164: 41 f4 brne .+16 ; 0x1176 <malloc+0xde>
1166: 20 91 09 3c lds r18, 0x3C09 ; 0x803c09 <__malloc_heap_start>
116a: 30 91 0a 3c lds r19, 0x3C0A ; 0x803c0a <__malloc_heap_start+0x1>
116e: 20 93 70 3c sts 0x3C70, r18 ; 0x803c70 <__brkval>
1172: 30 93 71 3c sts 0x3C71, r19 ; 0x803c71 <__brkval+0x1>
1176: 20 91 07 3c lds r18, 0x3C07 ; 0x803c07 <__malloc_heap_end>
117a: 30 91 08 3c lds r19, 0x3C08 ; 0x803c08 <__malloc_heap_end+0x1>
117e: 21 15 cp r18, r1
1180: 31 05 cpc r19, r1
1182: 41 f4 brne .+16 ; 0x1194 <malloc+0xfc>
1184: 2d b7 in r18, 0x3d ; 61
1186: 3e b7 in r19, 0x3e ; 62
1188: 40 91 0b 3c lds r20, 0x3C0B ; 0x803c0b <__malloc_margin>
118c: 50 91 0c 3c lds r21, 0x3C0C ; 0x803c0c <__malloc_margin+0x1>
1190: 24 1b sub r18, r20
1192: 35 0b sbc r19, r21
1194: e0 91 70 3c lds r30, 0x3C70 ; 0x803c70 <__brkval>
1198: f0 91 71 3c lds r31, 0x3C71 ; 0x803c71 <__brkval+0x1>
119c: e2 17 cp r30, r18
119e: f3 07 cpc r31, r19
11a0: a0 f4 brcc .+40 ; 0x11ca <malloc+0x132>
11a2: 2e 1b sub r18, r30
11a4: 3f 0b sbc r19, r31
11a6: 28 17 cp r18, r24
11a8: 39 07 cpc r19, r25
11aa: 78 f0 brcs .+30 ; 0x11ca <malloc+0x132>
11ac: ac 01 movw r20, r24
11ae: 4e 5f subi r20, 0xFE ; 254
11b0: 5f 4f sbci r21, 0xFF ; 255
11b2: 24 17 cp r18, r20
11b4: 35 07 cpc r19, r21
11b6: 48 f0 brcs .+18 ; 0x11ca <malloc+0x132>
11b8: 4e 0f add r20, r30
11ba: 5f 1f adc r21, r31
11bc: 40 93 70 3c sts 0x3C70, r20 ; 0x803c70 <__brkval>
11c0: 50 93 71 3c sts 0x3C71, r21 ; 0x803c71 <__brkval+0x1>
11c4: 81 93 st Z+, r24
11c6: 91 93 st Z+, r25
11c8: 9f cf rjmp .-194 ; 0x1108 <malloc+0x70>
11ca: f0 e0 ldi r31, 0x00 ; 0
11cc: e0 e0 ldi r30, 0x00 ; 0
11ce: 9c cf rjmp .-200 ; 0x1108 <malloc+0x70>
000011d0 <free>:
free():
11d0: cf 93 push r28
11d2: df 93 push r29
11d4: 00 97 sbiw r24, 0x00 ; 0
11d6: e9 f0 breq .+58 ; 0x1212 <free+0x42>
11d8: fc 01 movw r30, r24
11da: 32 97 sbiw r30, 0x02 ; 2
11dc: 12 82 std Z+2, r1 ; 0x02
11de: 13 82 std Z+3, r1 ; 0x03
11e0: a0 91 72 3c lds r26, 0x3C72 ; 0x803c72 <__flp>
11e4: b0 91 73 3c lds r27, 0x3C73 ; 0x803c73 <__flp+0x1>
11e8: ed 01 movw r28, r26
11ea: 30 e0 ldi r19, 0x00 ; 0
11ec: 20 e0 ldi r18, 0x00 ; 0
11ee: 10 97 sbiw r26, 0x00 ; 0
11f0: a1 f4 brne .+40 ; 0x121a <free+0x4a>
11f2: 20 81 ld r18, Z
11f4: 31 81 ldd r19, Z+1 ; 0x01
11f6: 82 0f add r24, r18
11f8: 93 1f adc r25, r19
11fa: 20 91 70 3c lds r18, 0x3C70 ; 0x803c70 <__brkval>
11fe: 30 91 71 3c lds r19, 0x3C71 ; 0x803c71 <__brkval+0x1>
1202: 28 17 cp r18, r24
1204: 39 07 cpc r19, r25
1206: 09 f0 breq .+2 ; 0x120a <free+0x3a>
1208: 61 c0 rjmp .+194 ; 0x12cc <free+0xfc>
120a: e0 93 70 3c sts 0x3C70, r30 ; 0x803c70 <__brkval>
120e: f0 93 71 3c sts 0x3C71, r31 ; 0x803c71 <__brkval+0x1>
1212: df 91 pop r29
1214: cf 91 pop r28
1216: 08 95 ret
1218: ea 01 movw r28, r20
121a: ce 17 cp r28, r30
121c: df 07 cpc r29, r31
121e: e8 f5 brcc .+122 ; 0x129a <free+0xca>
1220: 4a 81 ldd r20, Y+2 ; 0x02
1222: 5b 81 ldd r21, Y+3 ; 0x03
1224: 9e 01 movw r18, r28
1226: 41 15 cp r20, r1
1228: 51 05 cpc r21, r1
122a: b1 f7 brne .-20 ; 0x1218 <free+0x48>
122c: e9 01 movw r28, r18
122e: ea 83 std Y+2, r30 ; 0x02
1230: fb 83 std Y+3, r31 ; 0x03
1232: 49 91 ld r20, Y+
1234: 59 91 ld r21, Y+
1236: c4 0f add r28, r20
1238: d5 1f adc r29, r21
123a: ec 17 cp r30, r28
123c: fd 07 cpc r31, r29
123e: 61 f4 brne .+24 ; 0x1258 <free+0x88>
1240: 80 81 ld r24, Z
1242: 91 81 ldd r25, Z+1 ; 0x01
1244: 02 96 adiw r24, 0x02 ; 2
1246: 84 0f add r24, r20
1248: 95 1f adc r25, r21
124a: e9 01 movw r28, r18
124c: 88 83 st Y, r24
124e: 99 83 std Y+1, r25 ; 0x01
1250: 82 81 ldd r24, Z+2 ; 0x02
1252: 93 81 ldd r25, Z+3 ; 0x03
1254: 8a 83 std Y+2, r24 ; 0x02
1256: 9b 83 std Y+3, r25 ; 0x03
1258: f0 e0 ldi r31, 0x00 ; 0
125a: e0 e0 ldi r30, 0x00 ; 0
125c: 12 96 adiw r26, 0x02 ; 2
125e: 8d 91 ld r24, X+
1260: 9c 91 ld r25, X
1262: 13 97 sbiw r26, 0x03 ; 3
1264: 00 97 sbiw r24, 0x00 ; 0
1266: b9 f5 brne .+110 ; 0x12d6 <free+0x106>
1268: 2d 91 ld r18, X+
126a: 3c 91 ld r19, X
126c: 11 97 sbiw r26, 0x01 ; 1
126e: cd 01 movw r24, r26
1270: 02 96 adiw r24, 0x02 ; 2
1272: 82 0f add r24, r18
1274: 93 1f adc r25, r19
1276: 20 91 70 3c lds r18, 0x3C70 ; 0x803c70 <__brkval>
127a: 30 91 71 3c lds r19, 0x3C71 ; 0x803c71 <__brkval+0x1>
127e: 28 17 cp r18, r24
1280: 39 07 cpc r19, r25
1282: 39 f6 brne .-114 ; 0x1212 <free+0x42>
1284: 30 97 sbiw r30, 0x00 ; 0
1286: 51 f5 brne .+84 ; 0x12dc <free+0x10c>
1288: 10 92 72 3c sts 0x3C72, r1 ; 0x803c72 <__flp>
128c: 10 92 73 3c sts 0x3C73, r1 ; 0x803c73 <__flp+0x1>
1290: a0 93 70 3c sts 0x3C70, r26 ; 0x803c70 <__brkval>
1294: b0 93 71 3c sts 0x3C71, r27 ; 0x803c71 <__brkval+0x1>
1298: bc cf rjmp .-136 ; 0x1212 <free+0x42>
129a: c2 83 std Z+2, r28 ; 0x02
129c: d3 83 std Z+3, r29 ; 0x03
129e: 40 81 ld r20, Z
12a0: 51 81 ldd r21, Z+1 ; 0x01
12a2: 84 0f add r24, r20
12a4: 95 1f adc r25, r21
12a6: c8 17 cp r28, r24
12a8: d9 07 cpc r29, r25
12aa: 61 f4 brne .+24 ; 0x12c4 <free+0xf4>
12ac: 4e 5f subi r20, 0xFE ; 254
12ae: 5f 4f sbci r21, 0xFF ; 255
12b0: 88 81 ld r24, Y
12b2: 99 81 ldd r25, Y+1 ; 0x01
12b4: 48 0f add r20, r24
12b6: 59 1f adc r21, r25
12b8: 40 83 st Z, r20
12ba: 51 83 std Z+1, r21 ; 0x01
12bc: 8a 81 ldd r24, Y+2 ; 0x02
12be: 9b 81 ldd r25, Y+3 ; 0x03
12c0: 82 83 std Z+2, r24 ; 0x02
12c2: 93 83 std Z+3, r25 ; 0x03
12c4: 21 15 cp r18, r1
12c6: 31 05 cpc r19, r1
12c8: 09 f0 breq .+2 ; 0x12cc <free+0xfc>
12ca: b0 cf rjmp .-160 ; 0x122c <free+0x5c>
12cc: e0 93 72 3c sts 0x3C72, r30 ; 0x803c72 <__flp>
12d0: f0 93 73 3c sts 0x3C73, r31 ; 0x803c73 <__flp+0x1>
12d4: 9e cf rjmp .-196 ; 0x1212 <free+0x42>
12d6: fd 01 movw r30, r26
12d8: dc 01 movw r26, r24
12da: c0 cf rjmp .-128 ; 0x125c <free+0x8c>
12dc: 12 82 std Z+2, r1 ; 0x02
12de: 13 82 std Z+3, r1 ; 0x03
12e0: d7 cf rjmp .-82 ; 0x1290 <free+0xc0>
000012e2 <memcpy>:
memcpy():
12e2: fb 01 movw r30, r22
12e4: dc 01 movw r26, r24
12e6: 02 c0 rjmp .+4 ; 0x12ec <memcpy+0xa>
12e8: 01 90 ld r0, Z+
12ea: 0d 92 st X+, r0
12ec: 41 50 subi r20, 0x01 ; 1
12ee: 50 40 sbci r21, 0x00 ; 0
12f0: d8 f7 brcc .-10 ; 0x12e8 <memcpy+0x6>
12f2: 08 95 ret
000012f4 <_exit>:
exit():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2278
12f4: f8 94 cli
000012f6 <__stop_program>:
__stop_program():
/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2280
12f6: ff cf rjmp .-2 ; 0x12f6 <__stop_program>