Files
info.linkwitz.ha_pcb/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst
2023-07-08 13:08:06 +02:00

3872 lines
161 KiB
Plaintext

C:\Users\Martin\AppData\Local\Temp\arduino_build_427645/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: 68 c0 rjmp .+208 ; 0xd6 <__bad_interrupt>
6: 00 00 nop
../../../../../crt1/gcrt1.S:68
8: 66 c0 rjmp .+204 ; 0xd6 <__bad_interrupt>
a: 00 00 nop
../../../../../crt1/gcrt1.S:69
c: 64 c0 rjmp .+200 ; 0xd6 <__bad_interrupt>
e: 00 00 nop
../../../../../crt1/gcrt1.S:70
10: 62 c0 rjmp .+196 ; 0xd6 <__bad_interrupt>
12: 00 00 nop
../../../../../crt1/gcrt1.S:71
14: 60 c0 rjmp .+192 ; 0xd6 <__bad_interrupt>
16: 00 00 nop
../../../../../crt1/gcrt1.S:72
18: 5e c0 rjmp .+188 ; 0xd6 <__bad_interrupt>
1a: 00 00 nop
../../../../../crt1/gcrt1.S:73
1c: 5c c0 rjmp .+184 ; 0xd6 <__bad_interrupt>
1e: 00 00 nop
../../../../../crt1/gcrt1.S:74
20: 5a c0 rjmp .+180 ; 0xd6 <__bad_interrupt>
22: 00 00 nop
../../../../../crt1/gcrt1.S:75
24: 58 c0 rjmp .+176 ; 0xd6 <__bad_interrupt>
26: 00 00 nop
../../../../../crt1/gcrt1.S:76
28: 56 c0 rjmp .+172 ; 0xd6 <__bad_interrupt>
2a: 00 00 nop
../../../../../crt1/gcrt1.S:77
2c: 54 c0 rjmp .+168 ; 0xd6 <__bad_interrupt>
2e: 00 00 nop
../../../../../crt1/gcrt1.S:78
30: 52 c0 rjmp .+164 ; 0xd6 <__bad_interrupt>
32: 00 00 nop
../../../../../crt1/gcrt1.S:79
34: 50 c0 rjmp .+160 ; 0xd6 <__bad_interrupt>
36: 00 00 nop
../../../../../crt1/gcrt1.S:80
38: 4e c0 rjmp .+156 ; 0xd6 <__bad_interrupt>
3a: 00 00 nop
../../../../../crt1/gcrt1.S:81
3c: 4c c0 rjmp .+152 ; 0xd6 <__bad_interrupt>
3e: 00 00 nop
../../../../../crt1/gcrt1.S:82
40: 4a c0 rjmp .+148 ; 0xd6 <__bad_interrupt>
42: 00 00 nop
../../../../../crt1/gcrt1.S:83
44: 48 c0 rjmp .+144 ; 0xd6 <__bad_interrupt>
46: 00 00 nop
../../../../../crt1/gcrt1.S:84
48: 46 c0 rjmp .+140 ; 0xd6 <__bad_interrupt>
4a: 00 00 nop
../../../../../crt1/gcrt1.S:85
4c: 44 c0 rjmp .+136 ; 0xd6 <__bad_interrupt>
4e: 00 00 nop
../../../../../crt1/gcrt1.S:86
50: 42 c0 rjmp .+132 ; 0xd6 <__bad_interrupt>
52: 00 00 nop
../../../../../crt1/gcrt1.S:87
54: 40 c0 rjmp .+128 ; 0xd6 <__bad_interrupt>
56: 00 00 nop
../../../../../crt1/gcrt1.S:88
58: 3e c0 rjmp .+124 ; 0xd6 <__bad_interrupt>
5a: 00 00 nop
../../../../../crt1/gcrt1.S:89
5c: 3c c0 rjmp .+120 ; 0xd6 <__bad_interrupt>
5e: 00 00 nop
../../../../../crt1/gcrt1.S:90
60: 3a c0 rjmp .+116 ; 0xd6 <__bad_interrupt>
62: 00 00 nop
../../../../../crt1/gcrt1.S:91
64: 72 c5 rjmp .+2788 ; 0xb4a <__vector_25>
66: 00 00 nop
../../../../../crt1/gcrt1.S:92
68: 36 c0 rjmp .+108 ; 0xd6 <__bad_interrupt>
6a: 00 00 nop
../../../../../crt1/gcrt1.S:93
6c: 34 c0 rjmp .+104 ; 0xd6 <__bad_interrupt>
6e: 00 00 nop
../../../../../crt1/gcrt1.S:94
70: 32 c0 rjmp .+100 ; 0xd6 <__bad_interrupt>
72: 00 00 nop
../../../../../crt1/gcrt1.S:95
74: 30 c0 rjmp .+96 ; 0xd6 <__bad_interrupt>
76: 00 00 nop
../../../../../crt1/gcrt1.S:96
78: 2e c0 rjmp .+92 ; 0xd6 <__bad_interrupt>
7a: 00 00 nop
../../../../../crt1/gcrt1.S:97
7c: 2c c0 rjmp .+88 ; 0xd6 <__bad_interrupt>
7e: 00 00 nop
../../../../../crt1/gcrt1.S:98
80: 2a c0 rjmp .+84 ; 0xd6 <__bad_interrupt>
82: 00 00 nop
../../../../../crt1/gcrt1.S:99
84: 28 c0 rjmp .+80 ; 0xd6 <__bad_interrupt>
86: 00 00 nop
../../../../../crt1/gcrt1.S:100
88: 26 c0 rjmp .+76 ; 0xd6 <__bad_interrupt>
8a: 00 00 nop
../../../../../crt1/gcrt1.S:101
8c: 24 c0 rjmp .+72 ; 0xd6 <__bad_interrupt>
8e: 00 00 nop
../../../../../crt1/gcrt1.S:102
90: 22 c0 rjmp .+68 ; 0xd6 <__bad_interrupt>
92: 00 00 nop
../../../../../crt1/gcrt1.S:103
94: 20 c0 rjmp .+64 ; 0xd6 <__bad_interrupt>
96: 00 00 nop
../../../../../crt1/gcrt1.S:104
98: 1e c0 rjmp .+60 ; 0xd6 <__bad_interrupt>
9a: 00 00 nop
../../../../../crt1/gcrt1.S:105
9c: 1c c0 rjmp .+56 ; 0xd6 <__bad_interrupt>
...
000000a0 <__ctors_start>:
__trampolines_start():
a0: db 05 cpc r29, r11
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_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
ae: 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
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:2443
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:2444
b4: 01 c0 rjmp .+2 ; 0xb8 <.do_clear_bss_start>
000000b6 <.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
b6: 1d 92 st X+, r1
000000b8 <.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
b8: a8 38 cpi r26, 0x88 ; 136
/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
ba: 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
bc: e1 f7 brne .-8 ; 0xb6 <.do_clear_bss_loop>
000000be <__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
be: 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
c0: 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
c2: 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
c4: 03 c0 rjmp .+6 ; 0xcc <__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
c6: 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
c8: 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
ca: 1b d7 rcall .+3638 ; 0xf02 <__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
cc: 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
ce: 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
d0: d1 f7 brne .-12 ; 0xc6 <__do_global_ctors+0x8>
../../../../../crt1/gcrt1.S:314
d2: 8b d5 rcall .+2838 ; 0xbea <main>
../../../../../crt1/gcrt1.S:315
d4: 31 c7 rjmp .+3682 ; 0xf38 <_exit>
000000d6 <__bad_interrupt>:
__vector_38():
../../../../../crt1/gcrt1.S:209
d6: 94 cf rjmp .-216 ; 0x0 <__vectors>
000000d8 <pinMode.part.1.constprop.23>:
pinMode.part.1.constprop.23():
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);
d8: 90 e0 ldi r25, 0x00 ; 0
da: fc 01 movw r30, r24
dc: ee 52 subi r30, 0x2E ; 46
de: f0 4b sbci r31, 0xB0 ; 176
e0: 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))
e2: 2f 3f cpi r18, 0xFF ; 255
e4: 51 f0 breq .+20 ; 0xfa <pinMode.part.1.constprop.23+0x22>
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);
e6: 87 55 subi r24, 0x57 ; 87
e8: 90 4b sbci r25, 0xB0 ; 176
ea: dc 01 movw r26, r24
ec: ec 91 ld r30, X
ee: b0 e2 ldi r27, 0x20 ; 32
f0: eb 9f mul r30, r27
f2: f0 01 movw r30, r0
f4: 11 24 eor r1, r1
f6: 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;
f8: 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;
}
}
fa: 08 95 ret
000000fc <SPIClass::begin() [clone .constprop.19]>:
_ZN8SPIClass5beginEv.constprop.19():
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)
fc: 80 91 43 3c lds r24, 0x3C43 ; 0x803c43 <SPI+0x5>
100: 81 11 cpse r24, r1
102: 17 c0 rjmp .+46 ; 0x132 <__EEPROM_REGION_LENGTH__+0x32>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:133
return;
interruptMode = SPI_IMODE_NONE;
104: 10 92 44 3c sts 0x3C44, r1 ; 0x803c44 <SPI+0x6>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:134
interruptSave = 0;
108: 10 92 45 3c sts 0x3C45, r1 ; 0x803c45 <SPI+0x7>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:135
interruptMask_lo = 0;
10c: 10 92 46 3c sts 0x3C46, r1 ; 0x803c46 <SPI+0x8>
110: 10 92 47 3c sts 0x3C47, r1 ; 0x803c47 <SPI+0x9>
114: 10 92 48 3c sts 0x3C48, r1 ; 0x803c48 <SPI+0xa>
118: 10 92 49 3c sts 0x3C49, r1 ; 0x803c49 <SPI+0xb>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:136
interruptMask_hi = 0;
11c: 10 92 4a 3c sts 0x3C4A, r1 ; 0x803c4a <SPI+0xc>
120: 10 92 4b 3c sts 0x3C4B, r1 ; 0x803c4b <SPI+0xd>
124: 10 92 4c 3c sts 0x3C4C, r1 ; 0x803c4c <SPI+0xe>
128: 10 92 4d 3c sts 0x3C4D, r1 ; 0x803c4d <SPI+0xf>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:137
initialized = true;
12c: 81 e0 ldi r24, 0x01 ; 1
12e: 80 93 43 3c sts 0x3C43, r24 ; 0x803c43 <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);
132: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 <digital_pin_to_bit_mask+0x7fb611>
136: 8c 7f andi r24, 0xFC ; 252
138: 90 91 42 3c lds r25, 0x3C42 ; 0x803c42 <SPI+0x4>
13c: 89 2b or r24, r25
13e: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 <digital_pin_to_bit_mask+0x7fb611>
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)
142: 91 11 cpse r25, r1
144: 17 c0 rjmp .+46 ; 0x174 <__EEPROM_REGION_LENGTH__+0x74>
pinMode():
146: 84 e0 ldi r24, 0x04 ; 4
148: c7 df rcall .-114 ; 0xd8 <pinMode.part.1.constprop.23>
14a: 86 e0 ldi r24, 0x06 ; 6
14c: c5 df rcall .-118 ; 0xd8 <pinMode.part.1.constprop.23>
_ZN8SPIClass5beginEv.constprop.19():
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);
14e: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 <digital_pin_to_bit_mask+0x7fb8ef>
152: 84 60 ori r24, 0x04 ; 4
154: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <digital_pin_to_bit_mask+0x7fb8ef>
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);
158: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 <digital_pin_to_bit_mask+0x7fb8ee>
15c: 81 62 ori r24, 0x21 ; 33
15e: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 <digital_pin_to_bit_mask+0x7fb8ee>
162: 90 91 7d 3c lds r25, 0x3C7D ; 0x803c7d <DEFAULT_SPI_SETTINGS>
166: 80 91 7e 3c lds r24, 0x3C7E ; 0x803c7e <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;
16a: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 <digital_pin_to_bit_mask+0x7fb8ee>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143
SPI0.CTRLB = settings.ctrlb;
16e: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <digital_pin_to_bit_mask+0x7fb8ef>
_ZN8SPIClass5beginEv.constprop.19():
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);
}
172: 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)
174: 91 30 cpi r25, 0x01 ; 1
176: 21 f4 brne .+8 ; 0x180 <__EEPROM_REGION_LENGTH__+0x80>
pinMode():
178: 8e e0 ldi r24, 0x0E ; 14
17a: ae df rcall .-164 ; 0xd8 <pinMode.part.1.constprop.23>
17c: 80 e1 ldi r24, 0x10 ; 16
17e: e6 cf rjmp .-52 ; 0x14c <__EEPROM_REGION_LENGTH__+0x4c>
_ZN8SPIClass5beginEv.constprop.19():
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)
180: 92 30 cpi r25, 0x02 ; 2
182: 29 f7 brne .-54 ; 0x14e <__EEPROM_REGION_LENGTH__+0x4e>
pinMode():
184: 8e e1 ldi r24, 0x1E ; 30
186: a8 df rcall .-176 ; 0xd8 <pinMode.part.1.constprop.23>
188: 80 e2 ldi r24, 0x20 ; 32
18a: e0 cf rjmp .-64 ; 0x14c <__EEPROM_REGION_LENGTH__+0x4c>
0000018c <SPIClass::transfer(unsigned char) [clone .constprop.17]>:
_ZN8SPIClass8transferEh.constprop.17():
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");
18c: 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;
18e: 80 93 c4 08 sts 0x08C4, r24 ; 0x8008c4 <digital_pin_to_bit_mask+0x7fb8f2>
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
192: 80 91 c3 08 lds r24, 0x08C3 ; 0x8008c3 <digital_pin_to_bit_mask+0x7fb8f1>
196: 87 ff sbrs r24, 7
198: fc cf rjmp .-8 ; 0x192 <SPIClass::transfer(unsigned char) [clone .constprop.17]+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
19a: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 <digital_pin_to_bit_mask+0x7fb8f2>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:309
}
19e: 08 95 ret
000001a0 <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);
1a0: 28 2f mov r18, r24
1a2: 30 e0 ldi r19, 0x00 ; 0
1a4: f9 01 movw r30, r18
1a6: ee 52 subi r30, 0x2E ; 46
1a8: f0 4b sbci r31, 0xB0 ; 176
1aa: 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)
1ac: 4f 3f cpi r20, 0xFF ; 255
1ae: 09 f4 brne .+2 ; 0x1b2 <digitalWrite.part.2+0x12>
1b0: 50 c0 rjmp .+160 ; 0x252 <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);
1b2: 89 32 cpi r24, 0x29 ; 41
1b4: 58 f4 brcc .+22 ; 0x1cc <digitalWrite.part.2+0x2c>
1b6: f9 01 movw r30, r18
1b8: e9 5a subi r30, 0xA9 ; 169
1ba: f0 4b sbci r31, 0xB0 ; 176
1bc: 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)
1be: ee 23 and r30, r30
1c0: 29 f0 breq .+10 ; 0x1cc <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)
1c2: e1 30 cpi r30, 0x01 ; 1
1c4: 99 f0 breq .+38 ; 0x1ec <digitalWrite.part.2+0x4c>
1c6: 10 f0 brcs .+4 ; 0x1cc <digitalWrite.part.2+0x2c>
1c8: e6 30 cpi r30, 0x06 ; 6
1ca: 20 f1 brcs .+72 ; 0x214 <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);
1cc: f9 01 movw r30, r18
1ce: e7 55 subi r30, 0x57 ; 87
1d0: f0 4b sbci r31, 0xB0 ; 176
1d2: e0 81 ld r30, Z
1d4: a0 e2 ldi r26, 0x20 ; 32
1d6: ea 9f mul r30, r26
1d8: f0 01 movw r30, r0
1da: 11 24 eor r1, r1
1dc: 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)
1de: 80 81 ld r24, Z
1e0: 84 23 and r24, r20
1e2: 21 f1 breq .+72 ; 0x22c <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)
1e4: 61 11 cpse r22, r1
1e6: 20 c0 rjmp .+64 ; 0x228 <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;
1e8: 46 83 std Z+6, r20 ; 0x06
1ea: 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);
1ec: f9 01 movw r30, r18
1ee: e0 58 subi r30, 0x80 ; 128
1f0: f0 4b sbci r31, 0xB0 ; 176
1f2: 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 */
1f4: 53 30 cpi r21, 0x03 ; 3
1f6: 08 f0 brcs .+2 ; 0x1fa <digitalWrite.part.2+0x5a>
1f8: 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));
1fa: 70 91 01 0a lds r23, 0x0A01 ; 0x800a01 <digital_pin_to_bit_mask+0x7fba2f>
1fe: 81 e0 ldi r24, 0x01 ; 1
200: 90 e0 ldi r25, 0x00 ; 0
202: 01 c0 rjmp .+2 ; 0x206 <digitalWrite.part.2+0x66>
204: 88 0f add r24, r24
206: 5a 95 dec r21
208: ea f7 brpl .-6 ; 0x204 <digitalWrite.part.2+0x64>
20a: 80 95 com r24
20c: 87 23 and r24, r23
20e: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 <digital_pin_to_bit_mask+0x7fba2f>
212: dc cf rjmp .-72 ; 0x1cc <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);
214: 80 e1 ldi r24, 0x10 ; 16
216: e8 9f mul r30, r24
218: f0 01 movw r30, r0
21a: 11 24 eor r1, r1
21c: e0 5a subi r30, 0xA0 ; 160
21e: 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);
220: 81 81 ldd r24, Z+1 ; 0x01
222: 8f 7e andi r24, 0xEF ; 239
224: 81 83 std Z+1, r24 ; 0x01
226: d2 cf rjmp .-92 ; 0x1cc <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;
228: 45 83 std Z+5, r20 ; 0x05
22a: 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);
22c: 20 58 subi r18, 0x80 ; 128
22e: 30 4b sbci r19, 0xB0 ; 176
230: d9 01 movw r26, r18
232: 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);
234: 30 97 sbiw r30, 0x00 ; 0
236: 71 f0 breq .+28 ; 0x254 <digitalWrite.part.2+0xb4>
238: 8f 3f cpi r24, 0xFF ; 255
23a: 61 f0 breq .+24 ; 0x254 <digitalWrite.part.2+0xb4>
23c: 70 96 adiw r30, 0x10 ; 16
23e: e8 0f add r30, r24
240: 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;
242: 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();
244: 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;
246: 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)
248: 61 11 cpse r22, r1
24a: 07 c0 rjmp .+14 ; 0x25a <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;
24c: 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;
24e: 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;
250: 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
}
}
252: 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);
254: f0 e0 ldi r31, 0x00 ; 0
256: e0 e0 ldi r30, 0x00 ; 0
258: f4 cf rjmp .-24 ; 0x242 <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;
25a: 88 60 ori r24, 0x08 ; 8
25c: f8 cf rjmp .-16 ; 0x24e <digitalWrite.part.2+0xae>
0000025e <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;
25e: 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();
260: 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;
262: 20 91 10 3c lds r18, 0x3C10 ; 0x803c10 <timer_millis>
266: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 <timer_millis+0x1>
26a: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 <timer_millis+0x2>
26e: 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;
272: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa <digital_pin_to_bit_mask+0x7fbad8>
276: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab <digital_pin_to_bit_mask+0x7fbad9>
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)
27a: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 <digital_pin_to_bit_mask+0x7fbad4>
27e: 90 ff sbrs r25, 0
280: 08 c0 rjmp .+16 ; 0x292 <micros+0x34>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:114
{
m++;
282: 2f 5f subi r18, 0xFF ; 255
284: 3f 4f sbci r19, 0xFF ; 255
286: 4f 4f sbci r20, 0xFF ; 255
288: 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;
28a: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa <digital_pin_to_bit_mask+0x7fbad8>
28e: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab <digital_pin_to_bit_mask+0x7fbad9>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:119
}
// Restore SREG
SREG = status;
292: 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);
294: a8 ee ldi r26, 0xE8 ; 232
296: b3 e0 ldi r27, 0x03 ; 3
298: 01 d6 rcall .+3074 ; 0xe9c <__muluhisi3>
29a: 23 e0 ldi r18, 0x03 ; 3
29c: f6 95 lsr r31
29e: e7 95 ror r30
2a0: 2a 95 dec r18
2a2: e1 f7 brne .-8 ; 0x29c <micros+0x3e>
2a4: 6e 0f add r22, r30
2a6: 7f 1f adc r23, r31
2a8: 81 1d adc r24, r1
2aa: 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
}
2ac: 08 95 ret
000002ae <delay>:
delay():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:146
void delay(unsigned long ms)
{
2ae: 8f 92 push r8
2b0: 9f 92 push r9
2b2: af 92 push r10
2b4: bf 92 push r11
2b6: cf 92 push r12
2b8: df 92 push r13
2ba: ef 92 push r14
2bc: ff 92 push r15
2be: 4b 01 movw r8, r22
2c0: 5c 01 movw r10, r24
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;
2c2: cd df rcall .-102 ; 0x25e <micros>
2c4: 6b 01 movw r12, r22
2c6: 7c 01 movw r14, r24
2c8: a8 ee ldi r26, 0xE8 ; 232
2ca: b3 e0 ldi r27, 0x03 ; 3
2cc: a5 01 movw r20, r10
2ce: 94 01 movw r18, r8
2d0: e5 d5 rcall .+3018 ; 0xe9c <__muluhisi3>
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;
2d2: c6 0e add r12, r22
2d4: d7 1e adc r13, r23
2d6: e8 1e adc r14, r24
2d8: f9 1e adc r15, r25
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)
2da: c6 16 cp r12, r22
2dc: d7 06 cpc r13, r23
2de: e8 06 cpc r14, r24
2e0: f9 06 cpc r15, r25
2e2: 10 f4 brcc .+4 ; 0x2e8 <delay+0x3a>
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)
2e4: bc df rcall .-136 ; 0x25e <micros>
2e6: f9 cf rjmp .-14 ; 0x2da <delay+0x2c>
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)
2e8: ba df rcall .-140 ; 0x25e <micros>
2ea: 6c 15 cp r22, r12
2ec: 7d 05 cpc r23, r13
2ee: 8e 05 cpc r24, r14
2f0: 9f 05 cpc r25, r15
2f2: d0 f3 brcs .-12 ; 0x2e8 <delay+0x3a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:163
;
}
2f4: ff 90 pop r15
2f6: ef 90 pop r14
2f8: df 90 pop r13
2fa: cf 90 pop r12
2fc: bf 90 pop r11
2fe: af 90 pop r10
300: 9f 90 pop r9
302: 8f 90 pop r8
304: 08 95 ret
00000306 <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() {
306: 8f 92 push r8
308: 9f 92 push r9
30a: af 92 push r10
30c: bf 92 push r11
30e: cf 92 push r12
310: df 92 push r13
312: ef 92 push r14
314: ff 92 push r15
316: 0f 93 push r16
318: cf 93 push r28
31a: df 93 push r29
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:30
digitalWrite(SPICS, HIGH);
31c: fc 01 movw r30, r24
31e: 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);
320: 89 32 cpi r24, 0x29 ; 41
322: 10 f4 brcc .+4 ; 0x328 <MCP2515::endSPI()+0x22>
324: 61 e0 ldi r22, 0x01 ; 1
326: 3c df rcall .-392 ; 0x1a0 <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)
328: 80 91 44 3c lds r24, 0x3C44 ; 0x803c44 <SPI+0x6>
32c: 88 23 and r24, r24
32e: 19 f0 breq .+6 ; 0x336 <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)
330: 81 ff sbrs r24, 1
332: 0d c0 rjmp .+26 ; 0x34e <MCP2515::endSPI()+0x48>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:269
{
interrupts();
334: 78 94 sei
_ZN7MCP25156endSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:32
SPI.endTransaction();
}
336: df 91 pop r29
338: cf 91 pop r28
33a: 0f 91 pop r16
33c: ff 90 pop r15
33e: ef 90 pop r14
340: df 90 pop r13
342: cf 90 pop r12
344: bf 90 pop r11
346: af 90 pop r10
348: 9f 90 pop r9
34a: 8f 90 pop r8
34c: 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)
34e: 80 ff sbrs r24, 0
350: f2 cf rjmp .-28 ; 0x336 <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;
352: 80 90 46 3c lds r8, 0x3C46 ; 0x803c46 <SPI+0x8>
356: 90 90 47 3c lds r9, 0x3C47 ; 0x803c47 <SPI+0x9>
35a: a0 90 48 3c lds r10, 0x3C48 ; 0x803c48 <SPI+0xa>
35e: b0 90 49 3c lds r11, 0x3C49 ; 0x803c49 <SPI+0xb>
362: c1 2c mov r12, r1
364: d1 2c mov r13, r1
366: 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;
368: 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) {
36a: 94 01 movw r18, r8
36c: a5 01 movw r20, r10
36e: b6 01 movw r22, r12
370: c7 01 movw r24, r14
372: a0 e0 ldi r26, 0x00 ; 0
374: ba d5 rcall .+2932 ; 0xeea <__cmpdi2_s8>
376: 81 f1 breq .+96 ; 0x3d8 <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) {
378: 21 70 andi r18, 0x01 ; 1
37a: 30 e0 ldi r19, 0x00 ; 0
37c: 40 e0 ldi r20, 0x00 ; 0
37e: 50 e0 ldi r21, 0x00 ; 0
380: 60 e0 ldi r22, 0x00 ; 0
382: 70 e0 ldi r23, 0x00 ; 0
384: 80 e0 ldi r24, 0x00 ; 0
386: 90 e0 ldi r25, 0x00 ; 0
388: b0 d5 rcall .+2912 ; 0xeea <__cmpdi2_s8>
38a: d1 f0 breq .+52 ; 0x3c0 <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);
38c: b0 e0 ldi r27, 0x00 ; 0
38e: a0 e0 ldi r26, 0x00 ; 0
reattachMaskedInterrupts():
390: e0 33 cpi r30, 0x30 ; 48
392: 70 f4 brcc .+28 ; 0x3b0 <MCP2515::endSPI()+0xaa>
394: ae 2f mov r26, r30
396: a6 95 lsr r26
398: a6 95 lsr r26
39a: a6 95 lsr r26
39c: f0 e2 ldi r31, 0x20 ; 32
39e: af 9f mul r26, r31
3a0: d0 01 movw r26, r0
3a2: 11 24 eor r1, r1
3a4: a0 5f subi r26, 0xF0 ; 240
3a6: bb 4f sbci r27, 0xFB ; 251
3a8: 8e 2f mov r24, r30
3aa: 87 70 andi r24, 0x07 ; 7
3ac: a8 0f add r26, r24
3ae: 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];
3b0: ce 2f mov r28, r30
3b2: d0 e0 ldi r29, 0x00 ; 0
3b4: c2 5c subi r28, 0xC2 ; 194
3b6: d3 4c sbci r29, 0xC3 ; 195
3b8: 88 89 ldd r24, Y+16 ; 0x10
3ba: 9c 91 ld r25, X
3bc: 89 2b or r24, r25
3be: 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;
3c0: 94 01 movw r18, r8
3c2: a5 01 movw r20, r10
3c4: b6 01 movw r22, r12
3c6: c7 01 movw r24, r14
3c8: 01 e0 ldi r16, 0x01 ; 1
3ca: 74 d5 rcall .+2792 ; 0xeb4 <__lshrdi3>
3cc: 49 01 movw r8, r18
3ce: 5a 01 movw r10, r20
3d0: 6b 01 movw r12, r22
3d2: 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++;
3d4: ef 5f subi r30, 0xFF ; 255
3d6: c9 cf rjmp .-110 ; 0x36a <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;
3d8: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a <SPI+0xc>
3dc: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b <SPI+0xd>
3e0: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c <SPI+0xe>
3e4: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d <SPI+0xf>
3e8: c1 2c mov r12, r1
3ea: d1 2c mov r13, r1
3ec: 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;
3ee: 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) {
3f0: 94 01 movw r18, r8
3f2: a5 01 movw r20, r10
3f4: b6 01 movw r22, r12
3f6: c7 01 movw r24, r14
3f8: a0 e0 ldi r26, 0x00 ; 0
3fa: 77 d5 rcall .+2798 ; 0xeea <__cmpdi2_s8>
3fc: 09 f4 brne .+2 ; 0x400 <__DATA_REGION_LENGTH__>
3fe: 9b cf rjmp .-202 ; 0x336 <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) {
400: 21 70 andi r18, 0x01 ; 1
402: 30 e0 ldi r19, 0x00 ; 0
404: 40 e0 ldi r20, 0x00 ; 0
406: 50 e0 ldi r21, 0x00 ; 0
408: 60 e0 ldi r22, 0x00 ; 0
40a: 70 e0 ldi r23, 0x00 ; 0
40c: 80 e0 ldi r24, 0x00 ; 0
40e: 90 e0 ldi r25, 0x00 ; 0
410: 6c d5 rcall .+2776 ; 0xeea <__cmpdi2_s8>
412: d1 f0 breq .+52 ; 0x448 <__DATA_REGION_LENGTH__+0x48>
_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);
414: b0 e0 ldi r27, 0x00 ; 0
416: a0 e0 ldi r26, 0x00 ; 0
reattachMaskedInterrupts():
418: e0 33 cpi r30, 0x30 ; 48
41a: 70 f4 brcc .+28 ; 0x438 <__DATA_REGION_LENGTH__+0x38>
41c: ae 2f mov r26, r30
41e: a6 95 lsr r26
420: a6 95 lsr r26
422: a6 95 lsr r26
424: 80 e2 ldi r24, 0x20 ; 32
426: a8 9f mul r26, r24
428: d0 01 movw r26, r0
42a: 11 24 eor r1, r1
42c: a0 5f subi r26, 0xF0 ; 240
42e: bb 4f sbci r27, 0xFB ; 251
430: 8e 2f mov r24, r30
432: 87 70 andi r24, 0x07 ; 7
434: a8 0f add r26, r24
436: 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];
438: ce 2f mov r28, r30
43a: d0 e0 ldi r29, 0x00 ; 0
43c: c2 5c subi r28, 0xC2 ; 194
43e: d3 4c sbci r29, 0xC3 ; 195
440: 88 89 ldd r24, Y+16 ; 0x10
442: 9c 91 ld r25, X
444: 89 2b or r24, r25
446: 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;
448: 94 01 movw r18, r8
44a: a5 01 movw r20, r10
44c: b6 01 movw r22, r12
44e: c7 01 movw r24, r14
450: 01 e0 ldi r16, 0x01 ; 1
452: 30 d5 rcall .+2656 ; 0xeb4 <__lshrdi3>
454: 49 01 movw r8, r18
456: 5a 01 movw r10, r20
458: 6b 01 movw r12, r22
45a: 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++;
45c: ef 5f subi r30, 0xFF ; 255
45e: c8 cf rjmp .-112 ; 0x3f0 <MCP2515::endSPI()+0xea>
00000460 <MCP2515::startSPI()>:
_ZN7MCP25158startSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24
SPICS = _CS;
pinMode(SPICS, OUTPUT);
endSPI();
}
void MCP2515::startSPI() {
460: 6f 92 push r6
462: 7f 92 push r7
464: 8f 92 push r8
466: 9f 92 push r9
468: af 92 push r10
46a: bf 92 push r11
46c: cf 92 push r12
46e: df 92 push r13
470: ef 92 push r14
472: ff 92 push r15
474: 0f 93 push r16
476: cf 93 push r28
478: df 93 push r29
47a: 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)
47c: 80 91 44 3c lds r24, 0x3C44 ; 0x803c44 <SPI+0x6>
480: 88 23 and r24, r24
482: 19 f0 breq .+6 ; 0x48a <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)
484: 81 ff sbrs r24, 1
486: 1b c0 rjmp .+54 ; 0x4be <MCP2515::startSPI()+0x5e>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:253
{
noInterrupts();
488: 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;
48a: 81 e3 ldi r24, 0x31 ; 49
48c: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 <digital_pin_to_bit_mask+0x7fb8ee>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143
SPI0.CTRLB = settings.ctrlb;
490: 84 e0 ldi r24, 0x04 ; 4
492: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <digital_pin_to_bit_mask+0x7fb8ef>
_ZN7MCP25158startSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:26
SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
digitalWrite(SPICS, LOW);
496: f3 01 movw r30, r6
498: 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
49a: 89 32 cpi r24, 0x29 ; 41
49c: 08 f0 brcs .+2 ; 0x4a0 <MCP2515::startSPI()+0x40>
49e: 9c c0 rjmp .+312 ; 0x5d8 <MCP2515::startSPI()+0x178>
4a0: 60 e0 ldi r22, 0x00 ; 0
_ZN7MCP25158startSPIEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27
}
4a2: df 91 pop r29
4a4: cf 91 pop r28
4a6: 0f 91 pop r16
4a8: ff 90 pop r15
4aa: ef 90 pop r14
4ac: df 90 pop r13
4ae: cf 90 pop r12
4b0: bf 90 pop r11
4b2: af 90 pop r10
4b4: 9f 90 pop r9
4b6: 8f 90 pop r8
4b8: 7f 90 pop r7
4ba: 6f 90 pop r6
digitalWrite():
4bc: 71 ce rjmp .-798 ; 0x1a0 <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)
4be: 80 ff sbrs r24, 0
4c0: e4 cf rjmp .-56 ; 0x48a <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;
4c2: 80 90 46 3c lds r8, 0x3C46 ; 0x803c46 <SPI+0x8>
4c6: 90 90 47 3c lds r9, 0x3C47 ; 0x803c47 <SPI+0x9>
4ca: a0 90 48 3c lds r10, 0x3C48 ; 0x803c48 <SPI+0xa>
4ce: b0 90 49 3c lds r11, 0x3C49 ; 0x803c49 <SPI+0xb>
4d2: c1 2c mov r12, r1
4d4: d1 2c mov r13, r1
4d6: 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;
4d8: 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) {
4da: 94 01 movw r18, r8
4dc: a5 01 movw r20, r10
4de: b6 01 movw r22, r12
4e0: c7 01 movw r24, r14
4e2: a0 e0 ldi r26, 0x00 ; 0
4e4: 02 d5 rcall .+2564 ; 0xeea <__cmpdi2_s8>
4e6: 91 f1 breq .+100 ; 0x54c <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) {
4e8: 21 70 andi r18, 0x01 ; 1
4ea: 30 e0 ldi r19, 0x00 ; 0
4ec: 40 e0 ldi r20, 0x00 ; 0
4ee: 50 e0 ldi r21, 0x00 ; 0
4f0: 60 e0 ldi r22, 0x00 ; 0
4f2: 70 e0 ldi r23, 0x00 ; 0
4f4: 80 e0 ldi r24, 0x00 ; 0
4f6: 90 e0 ldi r25, 0x00 ; 0
4f8: f8 d4 rcall .+2544 ; 0xeea <__cmpdi2_s8>
4fa: e1 f0 breq .+56 ; 0x534 <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);
4fc: d0 e0 ldi r29, 0x00 ; 0
4fe: c0 e0 ldi r28, 0x00 ; 0
detachMaskedInterrupts():
500: b0 33 cpi r27, 0x30 ; 48
502: 70 f4 brcc .+28 ; 0x520 <MCP2515::startSPI()+0xc0>
504: cb 2f mov r28, r27
506: c6 95 lsr r28
508: c6 95 lsr r28
50a: c6 95 lsr r28
50c: 80 e2 ldi r24, 0x20 ; 32
50e: c8 9f mul r28, r24
510: e0 01 movw r28, r0
512: 11 24 eor r1, r1
514: c0 5f subi r28, 0xF0 ; 240
516: db 4f sbci r29, 0xFB ; 251
518: 8b 2f mov r24, r27
51a: 87 70 andi r24, 0x07 ; 7
51c: c8 0f add r28, r24
51e: 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;
520: 8b 2f mov r24, r27
522: 90 e0 ldi r25, 0x00 ; 0
524: 28 81 ld r18, Y
526: 82 5c subi r24, 0xC2 ; 194
528: 93 4c sbci r25, 0xC3 ; 195
52a: fc 01 movw r30, r24
52c: 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);
52e: 88 81 ld r24, Y
530: 88 7f andi r24, 0xF8 ; 248
532: 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;
534: 94 01 movw r18, r8
536: a5 01 movw r20, r10
538: b6 01 movw r22, r12
53a: c7 01 movw r24, r14
53c: 01 e0 ldi r16, 0x01 ; 1
53e: ba d4 rcall .+2420 ; 0xeb4 <__lshrdi3>
540: 49 01 movw r8, r18
542: 5a 01 movw r10, r20
544: 6b 01 movw r12, r22
546: 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++;
548: bf 5f subi r27, 0xFF ; 255
54a: c7 cf rjmp .-114 ; 0x4da <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;
54c: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a <SPI+0xc>
550: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b <SPI+0xd>
554: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c <SPI+0xe>
558: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d <SPI+0xf>
55c: c1 2c mov r12, r1
55e: d1 2c mov r13, r1
560: 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;
562: 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) {
564: 94 01 movw r18, r8
566: a5 01 movw r20, r10
568: b6 01 movw r22, r12
56a: c7 01 movw r24, r14
56c: a0 e0 ldi r26, 0x00 ; 0
56e: bd d4 rcall .+2426 ; 0xeea <__cmpdi2_s8>
570: 09 f4 brne .+2 ; 0x574 <MCP2515::startSPI()+0x114>
572: 8b cf rjmp .-234 ; 0x48a <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) {
574: 21 70 andi r18, 0x01 ; 1
576: 30 e0 ldi r19, 0x00 ; 0
578: 40 e0 ldi r20, 0x00 ; 0
57a: 50 e0 ldi r21, 0x00 ; 0
57c: 60 e0 ldi r22, 0x00 ; 0
57e: 70 e0 ldi r23, 0x00 ; 0
580: 80 e0 ldi r24, 0x00 ; 0
582: 90 e0 ldi r25, 0x00 ; 0
584: b2 d4 rcall .+2404 ; 0xeea <__cmpdi2_s8>
586: e1 f0 breq .+56 ; 0x5c0 <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);
588: d0 e0 ldi r29, 0x00 ; 0
58a: c0 e0 ldi r28, 0x00 ; 0
detachMaskedInterrupts():
58c: b0 33 cpi r27, 0x30 ; 48
58e: 70 f4 brcc .+28 ; 0x5ac <MCP2515::startSPI()+0x14c>
590: cb 2f mov r28, r27
592: c6 95 lsr r28
594: c6 95 lsr r28
596: c6 95 lsr r28
598: f0 e2 ldi r31, 0x20 ; 32
59a: cf 9f mul r28, r31
59c: e0 01 movw r28, r0
59e: 11 24 eor r1, r1
5a0: c0 5f subi r28, 0xF0 ; 240
5a2: db 4f sbci r29, 0xFB ; 251
5a4: 8b 2f mov r24, r27
5a6: 87 70 andi r24, 0x07 ; 7
5a8: c8 0f add r28, r24
5aa: 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;
5ac: 8b 2f mov r24, r27
5ae: 90 e0 ldi r25, 0x00 ; 0
5b0: 28 81 ld r18, Y
5b2: 82 5c subi r24, 0xC2 ; 194
5b4: 93 4c sbci r25, 0xC3 ; 195
5b6: fc 01 movw r30, r24
5b8: 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);
5ba: 88 81 ld r24, Y
5bc: 88 7f andi r24, 0xF8 ; 248
5be: 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;
5c0: 94 01 movw r18, r8
5c2: a5 01 movw r20, r10
5c4: b6 01 movw r22, r12
5c6: c7 01 movw r24, r14
5c8: 01 e0 ldi r16, 0x01 ; 1
5ca: 74 d4 rcall .+2280 ; 0xeb4 <__lshrdi3>
5cc: 49 01 movw r8, r18
5ce: 5a 01 movw r10, r20
5d0: 6b 01 movw r12, r22
5d2: 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++;
5d4: bf 5f subi r27, 0xFF ; 255
5d6: c6 cf rjmp .-116 ; 0x564 <MCP2515::startSPI()+0x104>
_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
5f2: 08 95 ret
000005f4 <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)
{
5f4: ff 92 push r15
5f6: 0f 93 push r16
5f8: 1f 93 push r17
5fa: cf 93 push r28
5fc: df 93 push r29
5fe: ec 01 movw r28, r24
600: f6 2e mov r15, r22
602: 04 2f mov r16, r20
604: 12 2f mov r17, r18
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:130
startSPI();
606: 2c df rcall .-424 ; 0x460 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:131
SPI.transfer(INSTRUCTION_BITMOD);
608: 85 e0 ldi r24, 0x05 ; 5
60a: c0 dd rcall .-1152 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:132
SPI.transfer(reg);
60c: 8f 2d mov r24, r15
60e: be dd rcall .-1156 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:133
SPI.transfer(mask);
610: 80 2f mov r24, r16
612: bc dd rcall .-1160 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:134
SPI.transfer(data);
614: 81 2f mov r24, r17
616: ba dd rcall .-1164 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135
endSPI();
618: ce 01 movw r24, r28
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:136
}
61a: df 91 pop r29
61c: cf 91 pop r28
61e: 1f 91 pop r17
620: 0f 91 pop r16
622: 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();
624: 70 ce rjmp .-800 ; 0x306 <MCP2515::endSPI()>
00000626 <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)
{
626: df 92 push r13
628: ef 92 push r14
62a: ff 92 push r15
62c: 0f 93 push r16
62e: 1f 93 push r17
630: cf 93 push r28
632: df 93 push r29
634: 7c 01 movw r14, r24
636: c6 2f mov r28, r22
638: d4 2e mov r13, r20
63a: 15 2f mov r17, r21
63c: 02 2f mov r16, r18
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:119
startSPI();
63e: 10 df rcall .-480 ; 0x460 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:120
SPI.transfer(INSTRUCTION_WRITE);
640: 82 e0 ldi r24, 0x02 ; 2
642: a4 dd rcall .-1208 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:121
SPI.transfer(reg);
644: 8c 2f mov r24, r28
646: a2 dd rcall .-1212 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
648: cd 2d mov r28, r13
64a: d1 2f mov r29, r17
64c: 0c 0f add r16, r28
64e: 1d 2f mov r17, r29
650: 11 1d adc r17, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:122
for (uint8_t i=0; i<n; i++) {
652: c0 17 cp r28, r16
654: d1 07 cpc r29, r17
656: 19 f0 breq .+6 ; 0x65e <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]);
658: 89 91 ld r24, Y+
65a: 98 dd rcall .-1232 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
65c: fa cf rjmp .-12 ; 0x652 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)+0x2c>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125
}
endSPI();
65e: c7 01 movw r24, r14
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:126
}
660: df 91 pop r29
662: cf 91 pop r28
664: 1f 91 pop r17
666: 0f 91 pop r16
668: ff 90 pop r15
66a: ef 90 pop r14
66c: 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();
66e: 4b ce rjmp .-874 ; 0x306 <MCP2515::endSPI()>
00000670 <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)
{
670: 0f 93 push r16
672: 1f 93 push r17
674: cf 93 push r28
676: df 93 push r29
678: ec 01 movw r28, r24
67a: 06 2f mov r16, r22
67c: 14 2f mov r17, r20
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:110
startSPI();
67e: f0 de rcall .-544 ; 0x460 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:111
SPI.transfer(INSTRUCTION_WRITE);
680: 82 e0 ldi r24, 0x02 ; 2
682: 84 dd rcall .-1272 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:112
SPI.transfer(reg);
684: 80 2f mov r24, r16
686: 82 dd rcall .-1276 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:113
SPI.transfer(value);
688: 81 2f mov r24, r17
68a: 80 dd rcall .-1280 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114
endSPI();
68c: ce 01 movw r24, r28
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:115
}
68e: df 91 pop r29
690: cf 91 pop r28
692: 1f 91 pop r17
694: 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();
696: 37 ce rjmp .-914 ; 0x306 <MCP2515::endSPI()>
00000698 <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)
{
698: 1f 93 push r17
69a: cf 93 push r28
69c: df 93 push r29
69e: ec 01 movw r28, r24
6a0: 16 2f mov r17, r22
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:87
startSPI();
6a2: de de rcall .-580 ; 0x460 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:88
SPI.transfer(INSTRUCTION_READ);
6a4: 83 e0 ldi r24, 0x03 ; 3
6a6: 72 dd rcall .-1308 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:89
SPI.transfer(reg);
6a8: 81 2f mov r24, r17
6aa: 70 dd rcall .-1312 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:90
uint8_t ret = SPI.transfer(0x00);
6ac: 80 e0 ldi r24, 0x00 ; 0
6ae: 6e dd rcall .-1316 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
6b0: 18 2f mov r17, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91
endSPI();
6b2: ce 01 movw r24, r28
6b4: 28 de rcall .-944 ; 0x306 <MCP2515::endSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:94
return ret;
}
6b6: 81 2f mov r24, r17
6b8: df 91 pop r29
6ba: cf 91 pop r28
6bc: 1f 91 pop r17
6be: 08 95 ret
000006c0 <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)
{
6c0: cf 92 push r12
6c2: df 92 push r13
6c4: ef 92 push r14
6c6: ff 92 push r15
6c8: 1f 93 push r17
6ca: cf 93 push r28
6cc: df 93 push r29
6ce: ec 01 movw r28, r24
6d0: 16 2f mov r17, r22
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:175
modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode);
6d2: 26 2f mov r18, r22
6d4: 40 ee ldi r20, 0xE0 ; 224
6d6: 6f e0 ldi r22, 0x0F ; 15
6d8: 8d df rcall .-230 ; 0x5f4 <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;
6da: 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();
6dc: 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;
6de: c0 90 10 3c lds r12, 0x3C10 ; 0x803c10 <timer_millis>
6e2: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 <timer_millis+0x1>
6e6: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 <timer_millis+0x2>
6ea: 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;
6ee: 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;
6f0: 8a e0 ldi r24, 0x0A ; 10
6f2: c8 0e add r12, r24
6f4: d1 1c adc r13, r1
6f6: e1 1c adc r14, r1
6f8: 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;
6fa: 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();
6fc: 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;
6fe: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 <timer_millis>
702: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 <timer_millis+0x1>
706: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 <timer_millis+0x2>
70a: 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;
70e: 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) {
710: 8c 15 cp r24, r12
712: 9d 05 cpc r25, r13
714: ae 05 cpc r26, r14
716: bf 05 cpc r27, r15
718: 90 f4 brcc .+36 ; 0x73e <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)+0x7e>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:180
uint8_t newmode = readRegister(MCP_CANSTAT);
71a: 6e e0 ldi r22, 0x0E ; 14
71c: ce 01 movw r24, r28
71e: bc df rcall .-136 ; 0x698 <MCP2515::readRegister(MCP2515::REGISTER)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:181
newmode &= CANSTAT_OPMOD;
720: 80 7e andi r24, 0xE0 ; 224
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:185
modeMatch = newmode == mode;
if (modeMatch) {
722: 18 13 cpse r17, r24
724: ea cf rjmp .-44 ; 0x6fa <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;
726: 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;
728: 91 e0 ldi r25, 0x01 ; 1
72a: 89 27 eor r24, r25
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:192
}
72c: 90 e0 ldi r25, 0x00 ; 0
72e: df 91 pop r29
730: cf 91 pop r28
732: 1f 91 pop r17
734: ff 90 pop r15
736: ef 90 pop r14
738: df 90 pop r13
73a: cf 90 pop r12
73c: 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) {
73e: 80 e0 ldi r24, 0x00 ; 0
740: f3 cf rjmp .-26 ; 0x728 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)+0x68>
00000742 <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)
742: 0f 93 push r16
744: 1f 93 push r17
746: cf 93 push r28
748: df 93 push r29
74a: 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);
74c: 60 e8 ldi r22, 0x80 ; 128
74e: b8 df rcall .-144 ; 0x6c0 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>
750: 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) {
752: 89 2b or r24, r25
754: 61 f4 brne .+24 ; 0x76e <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);
756: 40 e0 ldi r20, 0x00 ; 0
758: 6a e2 ldi r22, 0x2A ; 42
75a: ce 01 movw r24, r28
75c: 89 df rcall .-238 ; 0x670 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:478
setRegister(MCP_CNF2, cfg2);
75e: 40 e9 ldi r20, 0x90 ; 144
760: 69 e2 ldi r22, 0x29 ; 41
762: ce 01 movw r24, r28
764: 85 df rcall .-246 ; 0x670 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:479
setRegister(MCP_CNF3, cfg3);
766: 42 e8 ldi r20, 0x82 ; 130
768: 68 e2 ldi r22, 0x28 ; 40
76a: ce 01 movw r24, r28
76c: 81 df rcall .-254 ; 0x670 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:485
return ERROR_OK;
}
else {
return ERROR_FAIL;
}
}
76e: c8 01 movw r24, r16
770: df 91 pop r29
772: cf 91 pop r28
774: 1f 91 pop r17
776: 0f 91 pop r16
778: 08 95 ret
0000077a <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);
77a: 60 e0 ldi r22, 0x00 ; 0
77c: a1 cf rjmp .-190 ; 0x6c0 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>
0000077e <MCP2515::reset()>:
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:35
digitalWrite(SPICS, HIGH);
SPI.endTransaction();
}
MCP2515::ERROR MCP2515::reset(void)
{
77e: 7f 92 push r7
780: 8f 92 push r8
782: 9f 92 push r9
784: af 92 push r10
786: bf 92 push r11
788: cf 92 push r12
78a: df 92 push r13
78c: ef 92 push r14
78e: ff 92 push r15
790: 0f 93 push r16
792: 1f 93 push r17
794: cf 93 push r28
796: df 93 push r29
798: cd b7 in r28, 0x3d ; 61
79a: de b7 in r29, 0x3e ; 62
79c: a2 97 sbiw r28, 0x22 ; 34
79e: cd bf out 0x3d, r28 ; 61
7a0: de bf out 0x3e, r29 ; 62
7a2: 8c 01 movw r16, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:36
startSPI();
7a4: 5d de rcall .-838 ; 0x460 <MCP2515::startSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:37
SPI.transfer(INSTRUCTION_RESET);
7a6: 80 ec ldi r24, 0xC0 ; 192
7a8: f1 dc rcall .-1566 ; 0x18c <SPIClass::transfer(unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38
endSPI();
7aa: c8 01 movw r24, r16
7ac: ac dd rcall .-1192 ; 0x306 <MCP2515::endSPI()>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:40
delay(10);
7ae: 6a e0 ldi r22, 0x0A ; 10
7b0: 70 e0 ldi r23, 0x00 ; 0
7b2: 80 e0 ldi r24, 0x00 ; 0
7b4: 90 e0 ldi r25, 0x00 ; 0
7b6: 7b dd rcall .-1290 ; 0x2ae <delay>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:43
uint8_t zeros[14];
memset(zeros, 0, sizeof(zeros));
7b8: ce 01 movw r24, r28
7ba: 01 96 adiw r24, 0x01 ; 1
7bc: 7c 01 movw r14, r24
7be: 8e e0 ldi r24, 0x0E ; 14
7c0: f7 01 movw r30, r14
7c2: 11 92 st Z+, r1
7c4: 8a 95 dec r24
7c6: e9 f7 brne .-6 ; 0x7c2 <MCP2515::reset()+0x44>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:44
setRegisters(MCP_TXB0CTRL, zeros, 14);
7c8: 2e e0 ldi r18, 0x0E ; 14
7ca: a7 01 movw r20, r14
7cc: 60 e3 ldi r22, 0x30 ; 48
7ce: c8 01 movw r24, r16
7d0: 2a df rcall .-428 ; 0x626 <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);
7d2: 2e e0 ldi r18, 0x0E ; 14
7d4: a7 01 movw r20, r14
7d6: 60 e4 ldi r22, 0x40 ; 64
7d8: c8 01 movw r24, r16
7da: 25 df rcall .-438 ; 0x626 <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);
7dc: 2e e0 ldi r18, 0x0E ; 14
7de: a7 01 movw r20, r14
7e0: 60 e5 ldi r22, 0x50 ; 80
7e2: c8 01 movw r24, r16
7e4: 20 df rcall .-448 ; 0x626 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:48
setRegister(MCP_RXB0CTRL, 0);
7e6: 40 e0 ldi r20, 0x00 ; 0
7e8: 60 e6 ldi r22, 0x60 ; 96
7ea: c8 01 movw r24, r16
7ec: 41 df rcall .-382 ; 0x670 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:49
setRegister(MCP_RXB1CTRL, 0);
7ee: 40 e0 ldi r20, 0x00 ; 0
7f0: 60 e7 ldi r22, 0x70 ; 112
7f2: c8 01 movw r24, r16
7f4: 3d df rcall .-390 ; 0x670 <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);
7f6: 43 ea ldi r20, 0xA3 ; 163
7f8: 6b e2 ldi r22, 0x2B ; 43
7fa: c8 01 movw r24, r16
7fc: 39 df rcall .-398 ; 0x670 <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,
7fe: 24 e0 ldi r18, 0x04 ; 4
800: 47 e6 ldi r20, 0x67 ; 103
802: 60 e6 ldi r22, 0x60 ; 96
804: c8 01 movw r24, r16
806: f6 de rcall .-532 ; 0x5f4 <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,
808: 21 e0 ldi r18, 0x01 ; 1
80a: 47 e6 ldi r20, 0x67 ; 103
80c: 60 e7 ldi r22, 0x70 ; 112
80e: c8 01 movw r24, r16
810: f1 de rcall .-542 ; 0x5f4 <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};
812: 8c e0 ldi r24, 0x0C ; 12
814: ec e3 ldi r30, 0x3C ; 60
816: ff e4 ldi r31, 0x4F ; 79
818: de 01 movw r26, r28
81a: 1f 96 adiw r26, 0x0f ; 15
81c: 01 90 ld r0, Z+
81e: 0d 92 st X+, r0
820: 8a 95 dec r24
822: e1 f7 brne .-8 ; 0x81c <MCP2515::reset()+0x9e>
824: 4e 01 movw r8, r28
826: ff e0 ldi r31, 0x0F ; 15
828: 8f 0e add r8, r31
82a: 91 1c adc r9, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66
for (int i=0; i<6; i++) {
82c: b1 2c mov r11, r1
82e: 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;
830: 28 e0 ldi r18, 0x08 ; 8
832: 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);
834: f4 01 movw r30, r8
836: e1 90 ld r14, Z+
838: f1 90 ld r15, Z+
83a: 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);
83c: 60 e8 ldi r22, 0x80 ; 128
83e: c8 01 movw r24, r16
840: 3f df rcall .-386 ; 0x6c0 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>
842: 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) {
844: 89 2b or r24, r25
846: 09 f0 breq .+2 ; 0x84a <MCP2515::reset()+0xcc>
848: 65 c0 rjmp .+202 ; 0x914 <MCP2515::reset()+0x196>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561
return res;
}
REGISTER reg;
switch (num) {
84a: f2 e0 ldi r31, 0x02 ; 2
84c: ef 16 cp r14, r31
84e: f1 04 cpc r15, r1
850: 09 f4 brne .+2 ; 0x854 <MCP2515::reset()+0xd6>
852: 72 c0 rjmp .+228 ; 0x938 <MCP2515::reset()+0x1ba>
854: 58 f4 brcc .+22 ; 0x86c <MCP2515::reset()+0xee>
856: e1 14 cp r14, r1
858: f1 04 cpc r15, r1
85a: 09 f4 brne .+2 ; 0x85e <MCP2515::reset()+0xe0>
85c: 73 c0 rjmp .+230 ; 0x944 <MCP2515::reset()+0x1c6>
85e: ea 94 dec r14
860: ef 28 or r14, r15
862: 89 f0 breq .+34 ; 0x886 <MCP2515::reset()+0x108>
_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;
864: cc 24 eor r12, r12
866: c3 94 inc r12
868: d1 2c mov r13, r1
86a: 54 c0 rjmp .+168 ; 0x914 <MCP2515::reset()+0x196>
setFilter():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561
return res;
}
REGISTER reg;
switch (num) {
86c: e4 e0 ldi r30, 0x04 ; 4
86e: ee 16 cp r14, r30
870: f1 04 cpc r15, r1
872: 09 f4 brne .+2 ; 0x876 <MCP2515::reset()+0xf8>
874: 65 c0 rjmp .+202 ; 0x940 <MCP2515::reset()+0x1c2>
876: 08 f4 brcc .+2 ; 0x87a <MCP2515::reset()+0xfc>
878: 61 c0 rjmp .+194 ; 0x93c <MCP2515::reset()+0x1be>
87a: 85 e0 ldi r24, 0x05 ; 5
87c: e8 16 cp r14, r24
87e: f1 04 cpc r15, r1
880: 89 f7 brne .-30 ; 0x864 <MCP2515::reset()+0xe6>
_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;
882: 68 e1 ldi r22, 0x18 ; 24
884: 01 c0 rjmp .+2 ; 0x888 <MCP2515::reset()+0x10a>
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;
886: 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) {
888: 91 e0 ldi r25, 0x01 ; 1
88a: a9 16 cp r10, r25
88c: b1 04 cpc r11, r1
88e: 09 f0 breq .+2 ; 0x892 <MCP2515::reset()+0x114>
890: 5b c0 rjmp .+182 ; 0x948 <MCP2515::reset()+0x1ca>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
892: 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);
894: 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;
896: 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);
898: 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);
89a: 24 e0 ldi r18, 0x04 ; 4
89c: ae 01 movw r20, r28
89e: 45 5e subi r20, 0xE5 ; 229
8a0: 5f 4f sbci r21, 0xFF ; 255
8a2: c8 01 movw r24, r16
8a4: c0 de rcall .-640 ; 0x626 <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++) {
8a6: ef ef ldi r30, 0xFF ; 255
8a8: ae 1a sub r10, r30
8aa: be 0a sbc r11, r30
8ac: f6 e0 ldi r31, 0x06 ; 6
8ae: af 16 cp r10, r31
8b0: b1 04 cpc r11, r1
8b2: 09 f0 breq .+2 ; 0x8b6 <MCP2515::reset()+0x138>
8b4: bf cf rjmp .-130 ; 0x834 <MCP2515::reset()+0xb6>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74
if (result != ERROR_OK) {
return result;
}
}
MASK masks[] = {MASK0, MASK1};
8b6: 1f 8e std Y+31, r1 ; 0x1f
8b8: 18 a2 std Y+32, r1 ; 0x20
8ba: 81 e0 ldi r24, 0x01 ; 1
8bc: 90 e0 ldi r25, 0x00 ; 0
8be: 89 a3 std Y+33, r24 ; 0x21
8c0: 9a a3 std Y+34, r25 ; 0x22
8c2: 7e 01 movw r14, r28
8c4: 8f e1 ldi r24, 0x1F ; 31
8c6: e8 0e add r14, r24
8c8: f1 1c adc r15, r1
8ca: 4e 01 movw r8, r28
8cc: 93 e2 ldi r25, 0x23 ; 35
8ce: 89 0e add r8, r25
8d0: 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;
8d2: 98 e0 ldi r25, 0x08 ; 8
8d4: 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);
8d6: f7 01 movw r30, r14
8d8: a1 90 ld r10, Z+
8da: b1 90 ld r11, Z+
8dc: 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);
8de: 60 e8 ldi r22, 0x80 ; 128
8e0: c8 01 movw r24, r16
8e2: ee de rcall .-548 ; 0x6c0 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE)>
8e4: 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) {
8e6: 89 2b or r24, r25
8e8: a9 f4 brne .+42 ; 0x914 <MCP2515::reset()+0x196>
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);
8ea: 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);
8ec: 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;
8ee: 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);
8f0: 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) {
8f2: a1 14 cp r10, r1
8f4: b1 04 cpc r11, r1
8f6: 69 f1 breq .+90 ; 0x952 <MCP2515::reset()+0x1d4>
8f8: aa 94 dec r10
8fa: ab 28 or r10, r11
8fc: 09 f0 breq .+2 ; 0x900 <MCP2515::reset()+0x182>
8fe: b2 cf rjmp .-156 ; 0x864 <MCP2515::reset()+0xe6>
_ZN7MCP25155resetEv():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:542
case MASK0: reg = MCP_RXM0SIDH; break;
case MASK1: reg = MCP_RXM1SIDH; break;
900: 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);
902: 24 e0 ldi r18, 0x04 ; 4
904: ae 01 movw r20, r28
906: 45 5e subi r20, 0xE5 ; 229
908: 5f 4f sbci r21, 0xFF ; 255
90a: c8 01 movw r24, r16
90c: 8c de rcall .-744 ; 0x626 <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++) {
90e: 8e 14 cp r8, r14
910: 9f 04 cpc r9, r15
912: 09 f7 brne .-62 ; 0x8d6 <MCP2515::reset()+0x158>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:83
return result;
}
}
return ERROR_OK;
}
914: c6 01 movw r24, r12
916: a2 96 adiw r28, 0x22 ; 34
918: cd bf out 0x3d, r28 ; 61
91a: de bf out 0x3e, r29 ; 62
91c: df 91 pop r29
91e: cf 91 pop r28
920: 1f 91 pop r17
922: 0f 91 pop r16
924: ff 90 pop r15
926: ef 90 pop r14
928: df 90 pop r13
92a: cf 90 pop r12
92c: bf 90 pop r11
92e: af 90 pop r10
930: 9f 90 pop r9
932: 8f 90 pop r8
934: 7f 90 pop r7
936: 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;
938: 68 e0 ldi r22, 0x08 ; 8
93a: a6 cf rjmp .-180 ; 0x888 <MCP2515::reset()+0x10a>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:565
case RXF3: reg = MCP_RXF3SIDH; break;
93c: 60 e1 ldi r22, 0x10 ; 16
93e: a4 cf rjmp .-184 ; 0x888 <MCP2515::reset()+0x10a>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:566
case RXF4: reg = MCP_RXF4SIDH; break;
940: 64 e1 ldi r22, 0x14 ; 20
942: a2 cf rjmp .-188 ; 0x888 <MCP2515::reset()+0x10a>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562
}
REGISTER reg;
switch (num) {
case RXF0: reg = MCP_RXF0SIDH; break;
944: 60 e0 ldi r22, 0x00 ; 0
946: a0 cf rjmp .-192 ; 0x888 <MCP2515::reset()+0x10a>
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);
948: 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);
94a: 1c 8e std Y+28, r1 ; 0x1c
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524
buffer[MCP_EID0] = 0;
94c: 1e 8e std Y+30, r1 ; 0x1e
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525
buffer[MCP_EID8] = 0;
94e: 1d 8e std Y+29, r1 ; 0x1d
950: a4 cf rjmp .-184 ; 0x89a <MCP2515::reset()+0x11c>
_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;
952: 60 e2 ldi r22, 0x20 ; 32
954: d6 cf rjmp .-84 ; 0x902 <MCP2515::reset()+0x184>
00000956 <SendSerialPackage(MCP2515*)>:
_Z17SendSerialPackageP7MCP2515():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:442
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9)))));
}
void SendSerialPackage(MCP2515 *interface)
{
956: 2f 92 push r2
958: 3f 92 push r3
95a: 4f 92 push r4
95c: 5f 92 push r5
95e: 6f 92 push r6
960: 7f 92 push r7
962: 8f 92 push r8
964: 9f 92 push r9
966: af 92 push r10
968: bf 92 push r11
96a: cf 92 push r12
96c: df 92 push r13
96e: ef 92 push r14
970: ff 92 push r15
972: 0f 93 push r16
974: 1f 93 push r17
976: cf 93 push r28
978: df 93 push r29
97a: cd b7 in r28, 0x3d ; 61
97c: de b7 in r29, 0x3e ; 62
97e: 63 97 sbiw r28, 0x13 ; 19
980: cd bf out 0x3d, r28 ; 61
982: de bf out 0x3e, r29 ; 62
984: 7c 01 movw r14, r24
CreateCanId():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:407
return (canFrameId / 0x10000) & 0xFFF;
}
uint32_t CreateCanId(uint16_t commandId)
{
return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG;
986: 80 91 14 3c lds r24, 0x3C14 ; 0x803c14 <myDeviceId>
98a: 90 91 15 3c lds r25, 0x3C15 ; 0x803c15 <myDeviceId+0x1>
98e: 09 2e mov r0, r25
990: 00 0c add r0, r0
992: aa 0b sbc r26, r26
994: bb 0b sbc r27, r27
996: af 6f ori r26, 0xFF ; 255
998: bf 68 ori r27, 0x8F ; 143
_Z17SendSerialPackageP7MCP2515():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:443
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9)))));
}
void SendSerialPackage(MCP2515 *interface)
{
_frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID);
99a: 80 93 00 3c sts 0x3C00, r24 ; 0x803c00 <__DATA_REGION_ORIGIN__>
99e: 90 93 01 3c sts 0x3C01, r25 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1>
9a2: a0 93 02 3c sts 0x3C02, r26 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2>
9a6: b0 93 03 3c sts 0x3C03, r27 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:444
_frame.can_dlc = 4;
9aa: 84 e0 ldi r24, 0x04 ; 4
9ac: 80 93 04 3c sts 0x3C04, r24 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:446
_frame.data[0] = SoftwareVersionHigh;
9b0: 83 e0 ldi r24, 0x03 ; 3
9b2: 80 93 08 3c sts 0x3C08, r24 ; 0x803c08 <__DATA_REGION_ORIGIN__+0x8>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:447
_frame.data[1] = SoftwareVersionLow;
9b6: 81 e0 ldi r24, 0x01 ; 1
9b8: 80 93 09 3c sts 0x3C09, r24 ; 0x803c09 <__DATA_REGION_ORIGIN__+0x9>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:448
_frame.data[2] = HardwareVersionHigh;
9bc: 86 e0 ldi r24, 0x06 ; 6
9be: 80 93 0a 3c sts 0x3C0A, r24 ; 0x803c0a <__DATA_REGION_ORIGIN__+0xa>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:449
_frame.data[3] = HardwareVersionLow;
9c2: 10 92 0b 3c sts 0x3C0B, r1 ; 0x803c0b <__DATA_REGION_ORIGIN__+0xb>
9c6: 4b e0 ldi r20, 0x0B ; 11
9c8: 94 2e mov r9, r20
9ca: 5e 01 movw r10, r28
9cc: 84 e1 ldi r24, 0x14 ; 20
9ce: a8 0e add r10, r24
9d0: b1 1c adc r11, r1
sendMessage():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:612
return ERROR_OK;
}
MCP2515::ERROR MCP2515::sendMessage(const struct can_frame *frame)
{
if (frame->can_dlc > CAN_MAX_DLEN) {
9d2: 80 91 04 3c lds r24, 0x3C04 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4>
9d6: 89 30 cpi r24, 0x09 ; 9
9d8: 08 f0 brcs .+2 ; 0x9dc <SendSerialPackage(MCP2515*)+0x86>
9da: 8b c0 rjmp .+278 ; 0xaf2 <SendSerialPackage(MCP2515*)+0x19c>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:616
return ERROR_FAILTX;
}
TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2};
9dc: 86 e0 ldi r24, 0x06 ; 6
9de: e8 e4 ldi r30, 0x48 ; 72
9e0: ff e4 ldi r31, 0x4F ; 79
9e2: de 01 movw r26, r28
9e4: 1e 96 adiw r26, 0x0e ; 14
9e6: 01 90 ld r0, Z+
9e8: 0d 92 st X+, r0
9ea: 8a 95 dec r24
9ec: e1 f7 brne .-8 ; 0x9e6 <SendSerialPackage(MCP2515*)+0x90>
9ee: 3e 01 movw r6, r28
9f0: ee e0 ldi r30, 0x0E ; 14
9f2: 6e 0e add r6, r30
9f4: 71 1c adc r7, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:619
for (int i=0; i<N_TXBUFFERS; i++) {
const struct TXBn_REGS *txbuf = &TXB[txBuffers[i]];
9f6: f3 01 movw r30, r6
9f8: c1 90 ld r12, Z+
9fa: d1 90 ld r13, Z+
9fc: 3f 01 movw r6, r30
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:620
uint8_t ctrlval = readRegister(txbuf->CTRL);
9fe: 86 01 movw r16, r12
a00: 00 0f add r16, r16
a02: 11 1f adc r17, r17
a04: f8 01 movw r30, r16
a06: ec 0d add r30, r12
a08: fd 1d adc r31, r13
a0a: e2 5b subi r30, 0xB2 ; 178
a0c: f0 4b sbci r31, 0xB0 ; 176
a0e: 80 80 ld r8, Z
a10: 68 2d mov r22, r8
a12: c7 01 movw r24, r14
a14: 41 de rcall .-894 ; 0x698 <MCP2515::readRegister(MCP2515::REGISTER)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:621
if ( (ctrlval & TXB_TXREQ) == 0 ) {
a16: 83 fd sbrc r24, 3
a18: 93 c0 rjmp .+294 ; 0xb40 <SendSerialPackage(MCP2515*)+0x1ea>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:581
return ERROR_OK;
}
MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame)
{
if (frame->can_dlc > CAN_MAX_DLEN) {
a1a: 70 90 04 3c lds r7, 0x3C04 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4>
a1e: f8 e0 ldi r31, 0x08 ; 8
a20: f7 15 cp r31, r7
a22: 08 f4 brcc .+2 ; 0xa26 <SendSerialPackage(MCP2515*)+0xd0>
a24: 66 c0 rjmp .+204 ; 0xaf2 <SendSerialPackage(MCP2515*)+0x19c>
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);
a26: 80 91 00 3c lds r24, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__>
a2a: 90 91 01 3c lds r25, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1>
a2e: a0 91 02 3c lds r26, 0x3C02 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2>
a32: b0 91 03 3c lds r27, 0x3C03 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3>
a36: ac 01 movw r20, r24
a38: bd 01 movw r22, r26
a3a: 44 27 eor r20, r20
a3c: 77 fd sbrc r23, 7
a3e: 43 95 inc r20
a40: 55 27 eor r21, r21
a42: 66 27 eor r22, r22
a44: 77 27 eor r23, r23
a46: 24 2f mov r18, r20
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590
bool rtr = (frame->can_id & CAN_RTR_FLAG);
a48: ac 01 movw r20, r24
a4a: bd 01 movw r22, r26
a4c: 44 27 eor r20, r20
a4e: 55 27 eor r21, r21
a50: 66 27 eor r22, r22
a52: 70 74 andi r23, 0x40 ; 64
_Z17SendSerialPackageP7MCP2515():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:591
uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK));
a54: 22 24 eor r2, r2
a56: 2a 94 dec r2
a58: 32 2c mov r3, r2
a5a: 42 2c mov r4, r2
a5c: ff e1 ldi r31, 0x1F ; 31
a5e: 5f 2e mov r5, r31
sendMessage():
a60: 21 11 cpse r18, r1
a62: 06 c0 rjmp .+12 ; 0xa70 <SendSerialPackage(MCP2515*)+0x11a>
_Z17SendSerialPackageP7MCP2515():
a64: 22 24 eor r2, r2
a66: 2a 94 dec r2
a68: e7 e0 ldi r30, 0x07 ; 7
a6a: 3e 2e mov r3, r30
a6c: 41 2c mov r4, r1
a6e: 51 2c mov r5, r1
sendMessage():
a70: 82 21 and r24, r2
a72: 93 21 and r25, r3
a74: a4 21 and r26, r4
a76: b5 21 and r27, r5
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) {
a78: 22 23 and r18, r18
a7a: 09 f4 brne .+2 ; 0xa7e <SendSerialPackage(MCP2515*)+0x128>
a7c: 53 c0 rjmp .+166 ; 0xb24 <SendSerialPackage(MCP2515*)+0x1ce>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
a7e: 8c 83 std Y+4, r24 ; 0x04
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515
buffer[MCP_EID8] = (uint8_t) (canid >> 8);
a80: 9b 83 std Y+3, r25 ; 0x03
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516
canid = (uint16_t)(id >> 16);
a82: cd 01 movw r24, r26
a84: aa 27 eor r26, r26
a86: bb 27 eor r27, r27
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:518
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
a88: 28 2f mov r18, r24
a8a: 22 0f add r18, r18
a8c: 22 0f add r18, r18
a8e: 22 0f add r18, r18
a90: 20 7e andi r18, 0xE0 ; 224
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517
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);
a92: 38 2f mov r19, r24
a94: 33 70 andi r19, 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;
a96: 38 60 ori r19, 0x08 ; 8
a98: 23 2b or r18, r19
a9a: 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);
a9c: 35 e0 ldi r19, 0x05 ; 5
a9e: 96 95 lsr r25
aa0: 87 95 ror r24
aa2: 3a 95 dec r19
aa4: e1 f7 brne .-8 ; 0xa9e <SendSerialPackage(MCP2515*)+0x148>
aa6: 89 83 std Y+1, r24 ; 0x01
sendMessage():
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;
aa8: 87 2d mov r24, r7
aaa: 45 2b or r20, r21
aac: 46 2b or r20, r22
aae: 47 2b or r20, r23
ab0: 09 f0 breq .+2 ; 0xab4 <SendSerialPackage(MCP2515*)+0x15e>
ab2: 80 64 ori r24, 0x40 ; 64
ab4: 8d 83 std Y+5, r24 ; 0x05
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:597
memcpy(&data[MCP_DATA], frame->data, frame->can_dlc);
ab6: 47 2d mov r20, r7
ab8: 50 e0 ldi r21, 0x00 ; 0
aba: 68 e0 ldi r22, 0x08 ; 8
abc: 7c e3 ldi r23, 0x3C ; 60
abe: ce 01 movw r24, r28
ac0: 06 96 adiw r24, 0x06 ; 6
ac2: 31 d2 rcall .+1122 ; 0xf26 <memcpy>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599
setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc);
ac4: 25 e0 ldi r18, 0x05 ; 5
ac6: 27 0d add r18, r7
ac8: 0c 0d add r16, r12
aca: 1d 1d adc r17, r13
acc: f8 01 movw r30, r16
ace: e2 5b subi r30, 0xB2 ; 178
ad0: f0 4b sbci r31, 0xB0 ; 176
ad2: ae 01 movw r20, r28
ad4: 4f 5f subi r20, 0xFF ; 255
ad6: 5f 4f sbci r21, 0xFF ; 255
ad8: 61 81 ldd r22, Z+1 ; 0x01
ada: c7 01 movw r24, r14
adc: a4 dd rcall .-1208 ; 0x626 <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);
ade: 28 e0 ldi r18, 0x08 ; 8
ae0: 48 e0 ldi r20, 0x08 ; 8
ae2: 68 2d mov r22, r8
ae4: c7 01 movw r24, r14
ae6: 86 dd rcall .-1268 ; 0x5f4 <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);
ae8: 68 2d mov r22, r8
aea: c7 01 movw r24, r14
aec: d5 dd rcall .-1110 ; 0x698 <MCP2515::readRegister(MCP2515::REGISTER)>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:604
if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) {
aee: 80 77 andi r24, 0x70 ; 112
af0: 19 f0 breq .+6 ; 0xaf8 <SendSerialPackage(MCP2515*)+0x1a2>
af2: 9a 94 dec r9
DoSendCanPkg():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:482
{
// ToggleDebug();
byte cnt = 0;
while (interface->sendMessage(&_frame)) {
cnt++;
if (cnt > 10) return;
af4: 91 10 cpse r9, r1
af6: 6d cf rjmp .-294 ; 0x9d2 <SendSerialPackage(MCP2515*)+0x7c>
_Z17SendSerialPackageP7MCP2515():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:451
_frame.data[0] = SoftwareVersionHigh;
_frame.data[1] = SoftwareVersionLow;
_frame.data[2] = HardwareVersionHigh;
_frame.data[3] = HardwareVersionLow;
DoSendCanPkg(interface, &_frame);
}
af8: 63 96 adiw r28, 0x13 ; 19
afa: cd bf out 0x3d, r28 ; 61
afc: de bf out 0x3e, r29 ; 62
afe: df 91 pop r29
b00: cf 91 pop r28
b02: 1f 91 pop r17
b04: 0f 91 pop r16
b06: ff 90 pop r15
b08: ef 90 pop r14
b0a: df 90 pop r13
b0c: cf 90 pop r12
b0e: bf 90 pop r11
b10: af 90 pop r10
b12: 9f 90 pop r9
b14: 8f 90 pop r8
b16: 7f 90 pop r7
b18: 6f 90 pop r6
b1a: 5f 90 pop r5
b1c: 4f 90 pop r4
b1e: 3f 90 pop r3
b20: 2f 90 pop r2
b22: 08 95 ret
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);
b24: 9c 01 movw r18, r24
b26: 93 e0 ldi r25, 0x03 ; 3
b28: 36 95 lsr r19
b2a: 27 95 ror r18
b2c: 9a 95 dec r25
b2e: e1 f7 brne .-8 ; 0xb28 <SendSerialPackage(MCP2515*)+0x1d2>
b30: 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);
b32: 82 95 swap r24
b34: 88 0f add r24, r24
b36: 80 7e andi r24, 0xE0 ; 224
b38: 8a 83 std Y+2, r24 ; 0x02
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524
buffer[MCP_EID0] = 0;
b3a: 1c 82 std Y+4, r1 ; 0x04
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525
buffer[MCP_EID8] = 0;
b3c: 1b 82 std Y+3, r1 ; 0x03
b3e: b4 cf rjmp .-152 ; 0xaa8 <SendSerialPackage(MCP2515*)+0x152>
sendMessage():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:618
return ERROR_FAILTX;
}
TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2};
for (int i=0; i<N_TXBUFFERS; i++) {
b40: 6a 14 cp r6, r10
b42: 7b 04 cpc r7, r11
b44: 09 f0 breq .+2 ; 0xb48 <SendSerialPackage(MCP2515*)+0x1f2>
b46: 57 cf rjmp .-338 ; 0x9f6 <SendSerialPackage(MCP2515*)+0xa0>
b48: d4 cf rjmp .-88 ; 0xaf2 <SendSerialPackage(MCP2515*)+0x19c>
00000b4a <__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
{
b4a: 1f 92 push r1
b4c: 0f 92 push r0
b4e: 0f b6 in r0, 0x3f ; 63
b50: 0f 92 push r0
b52: 11 24 eor r1, r1
b54: 8f 93 push r24
b56: 9f 93 push r25
b58: af 93 push r26
b5a: 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++;
b5c: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 <timer_millis>
b60: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 <timer_millis+0x1>
b64: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 <timer_millis+0x2>
b68: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 <timer_millis+0x3>
b6c: 01 96 adiw r24, 0x01 ; 1
b6e: a1 1d adc r26, r1
b70: b1 1d adc r27, r1
b72: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 <timer_millis>
b76: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 <timer_millis+0x1>
b7a: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 <timer_millis+0x2>
b7e: 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;
b82: 81 e0 ldi r24, 0x01 ; 1
b84: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 <digital_pin_to_bit_mask+0x7fbad4>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:79
}
b88: bf 91 pop r27
b8a: af 91 pop r26
b8c: 9f 91 pop r25
b8e: 8f 91 pop r24
b90: 0f 90 pop r0
b92: 0f be out 0x3f, r0 ; 63
b94: 0f 90 pop r0
b96: 1f 90 pop r1
b98: 18 95 reti
00000b9a <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)
b9a: 1f 93 push r17
b9c: cf 93 push r28
b9e: df 93 push r29
ba0: ec 01 movw r28, r24
ba2: 16 2f mov r17, r22
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:17
{
SPI.begin();
ba4: ab da rcall .-2730 ; 0xfc <SPIClass::begin() [clone .constprop.19]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:19
SPICS = _CS;
ba6: 18 83 st Y, r17
pinMode():
ba8: 81 2f mov r24, r17
baa: 96 da rcall .-2772 ; 0xd8 <pinMode.part.1.constprop.23>
_ZN7MCP2515C2Eh():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21
pinMode(SPICS, OUTPUT);
endSPI();
bac: ce 01 movw r24, r28
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:22
}
bae: df 91 pop r29
bb0: cf 91 pop r28
bb2: 1f 91 pop r17
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21
{
SPI.begin();
SPICS = _CS;
pinMode(SPICS, OUTPUT);
endSPI();
bb4: a8 cb rjmp .-2224 ; 0x306 <MCP2515::endSPI()>
00000bb6 <global constructors keyed to 65535_0_Swtich.ino.cpp.o.2764>:
_GLOBAL__I_65535_0_Swtich.ino.cpp.o.2764():
bb6: ed e7 ldi r30, 0x7D ; 125
bb8: fc e3 ldi r31, 0x3C ; 60
bba: 84 e0 ldi r24, 0x04 ; 4
bbc: 81 83 std Z+1, r24 ; 0x01
bbe: 81 e3 ldi r24, 0x31 ; 49
bc0: 80 83 st Z, r24
bc2: ee e3 ldi r30, 0x3E ; 62
bc4: fc e3 ldi r31, 0x3C ; 60
bc6: 15 82 std Z+5, r1 ; 0x05
bc8: 14 82 std Z+4, r1 ; 0x04
bca: 62 e0 ldi r22, 0x02 ; 2
bcc: 82 e8 ldi r24, 0x82 ; 130
bce: 9c e3 ldi r25, 0x3C ; 60
bd0: e4 df rcall .-56 ; 0xb9a <MCP2515::MCP2515(unsigned char)>
bd2: 63 e0 ldi r22, 0x03 ; 3
bd4: 81 e8 ldi r24, 0x81 ; 129
bd6: 9c e3 ldi r25, 0x3C ; 60
bd8: e0 df rcall .-64 ; 0xb9a <MCP2515::MCP2515(unsigned char)>
bda: 68 e0 ldi r22, 0x08 ; 8
bdc: 80 e8 ldi r24, 0x80 ; 128
bde: 9c e3 ldi r25, 0x3C ; 60
be0: dc df rcall .-72 ; 0xb9a <MCP2515::MCP2515(unsigned char)>
be2: 69 e0 ldi r22, 0x09 ; 9
be4: 8f e7 ldi r24, 0x7F ; 127
be6: 9c e3 ldi r25, 0x3C ; 60
be8: d8 cf rjmp .-80 ; 0xb9a <MCP2515::MCP2515(unsigned char)>
00000bea <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));
bea: 91 e0 ldi r25, 0x01 ; 1
bec: 88 ed ldi r24, 0xD8 ; 216
bee: 84 bf out 0x34, r24 ; 52
bf0: 90 93 61 00 sts 0x0061, r25 ; 0x800061 <digital_pin_to_bit_mask+0x7fb08f>
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;
bf4: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <digital_pin_to_bit_mask+0x7fb630>
bf8: 85 60 ori r24, 0x05 ; 5
bfa: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <digital_pin_to_bit_mask+0x7fb630>
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;
bfe: 80 91 00 06 lds r24, 0x0600 ; 0x800600 <digital_pin_to_bit_mask+0x7fb62e>
c02: 81 60 ori r24, 0x01 ; 1
c04: 80 93 00 06 sts 0x0600, r24 ; 0x800600 <digital_pin_to_bit_mask+0x7fb62e>
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...
c08: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <digital_pin_to_bit_mask+0x7fb630>
c0c: 8f 7c andi r24, 0xCF ; 207
c0e: 80 65 ori r24, 0x50 ; 80
c10: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <digital_pin_to_bit_mask+0x7fb630>
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;
c14: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 <digital_pin_to_bit_mask+0x7fb610>
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;
c18: 82 e0 ldi r24, 0x02 ; 2
c1a: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 <digital_pin_to_bit_mask+0x7fb612>
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;
c1e: 90 93 03 0a sts 0x0A03, r25 ; 0x800a03 <digital_pin_to_bit_mask+0x7fba31>
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;
c22: 8e ef ldi r24, 0xFE ; 254
c24: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 <digital_pin_to_bit_mask+0x7fba55>
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 =
c28: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 <digital_pin_to_bit_mask+0x7fba54>
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;
c2c: 80 e8 ldi r24, 0x80 ; 128
c2e: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d <digital_pin_to_bit_mask+0x7fba5b>
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 =
c32: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b <digital_pin_to_bit_mask+0x7fba59>
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 =
c36: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 <digital_pin_to_bit_mask+0x7fba57>
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 =
c3a: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c <digital_pin_to_bit_mask+0x7fba5a>
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 =
c3e: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a <digital_pin_to_bit_mask+0x7fba58>
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 =
c42: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 <digital_pin_to_bit_mask+0x7fba56>
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);
c46: 89 e0 ldi r24, 0x09 ; 9
c48: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 <digital_pin_to_bit_mask+0x7fba2e>
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
c4c: 87 e0 ldi r24, 0x07 ; 7
c4e: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 <digital_pin_to_bit_mask+0x7fb613>
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;
c52: e0 e8 ldi r30, 0x80 ; 128
c54: 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);
c56: c7 e0 ldi r28, 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;
c58: 9e ef ldi r25, 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;
c5a: 80 e8 ldi r24, 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)
c5c: d5 e0 ldi r29, 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);
c5e: c1 83 std Z+1, r28 ; 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;
c60: 94 87 std Z+12, r25 ; 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;
c62: 85 87 std Z+13, r24 ; 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)
c64: d0 83 st Z, r29
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++;
c66: 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);
c68: e0 3c cpi r30, 0xC0 ; 192
c6a: 2a e0 ldi r18, 0x0A ; 10
c6c: f2 07 cpc r31, r18
c6e: b9 f7 brne .-18 ; 0xc5e <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;
c70: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 <digital_pin_to_bit_mask+0x7fbacf>
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;
c74: 8f e3 ldi r24, 0x3F ; 63
c76: 9f e1 ldi r25, 0x1F ; 31
c78: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac <digital_pin_to_bit_mask+0x7fbada>
c7c: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad <digital_pin_to_bit_mask+0x7fbadb>
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;
c80: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 <digital_pin_to_bit_mask+0x7fbad3>
c84: 81 60 ori r24, 0x01 ; 1
c86: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 <digital_pin_to_bit_mask+0x7fbad3>
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 */
c8a: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 <digital_pin_to_bit_mask+0x7fbace>
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 */
c8e: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 <digital_pin_to_bit_mask+0x7fbace>
c92: 81 60 ori r24, 0x01 ; 1
c94: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 <digital_pin_to_bit_mask+0x7fbace>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:438
/*************************** ENABLE GLOBAL INTERRUPTS *************************/
sei();
c98: 78 94 sei
setup():
C:\source\Meycan\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();
c9a: 30 da rcall .-2976 ; 0xfc <SPIClass::begin() [clone .constprop.19]>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:194
Rules[14].InitToggle(0x0196, 3, 0x9829, 1); // Flurlicht von Papas Büro
Rules[15] = Rule();
Rules[15].InitToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro
delay(10);
c9c: 6a e0 ldi r22, 0x0A ; 10
c9e: 70 e0 ldi r23, 0x00 ; 0
ca0: 80 e0 ldi r24, 0x00 ; 0
ca2: 90 e0 ldi r25, 0x00 ; 0
ca4: 04 db rcall .-2552 ; 0x2ae <delay>
_ZN8PinState4InitEih():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65
byte meyPinId;
PinState() {}
void Init(int pin_id, byte meyPinId)
{
this->pin_id = pin_id;
ca6: 85 e1 ldi r24, 0x15 ; 21
ca8: 90 e0 ldi r25, 0x00 ; 0
caa: 80 93 16 3c sts 0x3C16, r24 ; 0x803c16 <MeyPins>
cae: 90 93 17 3c sts 0x3C17, r25 ; 0x803c17 <MeyPins+0x1>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66
this->pin_state = true;
cb2: 81 e0 ldi r24, 0x01 ; 1
cb4: 80 93 18 3c sts 0x3C18, r24 ; 0x803c18 <MeyPins+0x2>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67
this->is_input = true;
cb8: 80 93 19 3c sts 0x3C19, r24 ; 0x803c19 <MeyPins+0x3>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68
this->meyPinId = meyPinId;
cbc: 80 93 1a 3c sts 0x3C1A, r24 ; 0x803c1a <MeyPins+0x4>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65
byte meyPinId;
PinState() {}
void Init(int pin_id, byte meyPinId)
{
this->pin_id = pin_id;
cc0: 24 e1 ldi r18, 0x14 ; 20
cc2: 30 e0 ldi r19, 0x00 ; 0
cc4: 20 93 1b 3c sts 0x3C1B, r18 ; 0x803c1b <MeyPins+0x5>
cc8: 30 93 1c 3c sts 0x3C1C, r19 ; 0x803c1c <MeyPins+0x6>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66
this->pin_state = true;
ccc: 80 93 1d 3c sts 0x3C1D, r24 ; 0x803c1d <MeyPins+0x7>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67
this->is_input = true;
cd0: 80 93 1e 3c sts 0x3C1E, r24 ; 0x803c1e <MeyPins+0x8>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68
this->meyPinId = meyPinId;
cd4: 92 e0 ldi r25, 0x02 ; 2
cd6: 90 93 1f 3c sts 0x3C1F, r25 ; 0x803c1f <MeyPins+0x9>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65
byte meyPinId;
PinState() {}
void Init(int pin_id, byte meyPinId)
{
this->pin_id = pin_id;
cda: 23 e1 ldi r18, 0x13 ; 19
cdc: 30 e0 ldi r19, 0x00 ; 0
cde: 20 93 20 3c sts 0x3C20, r18 ; 0x803c20 <MeyPins+0xa>
ce2: 30 93 21 3c sts 0x3C21, r19 ; 0x803c21 <MeyPins+0xb>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66
this->pin_state = true;
ce6: 80 93 22 3c sts 0x3C22, r24 ; 0x803c22 <MeyPins+0xc>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67
this->is_input = true;
cea: 80 93 23 3c sts 0x3C23, r24 ; 0x803c23 <MeyPins+0xd>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68
this->meyPinId = meyPinId;
cee: 93 e0 ldi r25, 0x03 ; 3
cf0: 90 93 24 3c sts 0x3C24, r25 ; 0x803c24 <MeyPins+0xe>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65
byte meyPinId;
PinState() {}
void Init(int pin_id, byte meyPinId)
{
this->pin_id = pin_id;
cf4: 22 e1 ldi r18, 0x12 ; 18
cf6: 30 e0 ldi r19, 0x00 ; 0
cf8: 20 93 25 3c sts 0x3C25, r18 ; 0x803c25 <MeyPins+0xf>
cfc: 30 93 26 3c sts 0x3C26, r19 ; 0x803c26 <MeyPins+0x10>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66
this->pin_state = true;
d00: 80 93 27 3c sts 0x3C27, r24 ; 0x803c27 <MeyPins+0x11>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67
this->is_input = true;
d04: 80 93 28 3c sts 0x3C28, r24 ; 0x803c28 <MeyPins+0x12>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68
this->meyPinId = meyPinId;
d08: 94 e0 ldi r25, 0x04 ; 4
d0a: 90 93 29 3c sts 0x3C29, r25 ; 0x803c29 <MeyPins+0x13>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65
byte meyPinId;
PinState() {}
void Init(int pin_id, byte meyPinId)
{
this->pin_id = pin_id;
d0e: 21 e1 ldi r18, 0x11 ; 17
d10: 30 e0 ldi r19, 0x00 ; 0
d12: 20 93 2a 3c sts 0x3C2A, r18 ; 0x803c2a <MeyPins+0x14>
d16: 30 93 2b 3c sts 0x3C2B, r19 ; 0x803c2b <MeyPins+0x15>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66
this->pin_state = true;
d1a: 80 93 2c 3c sts 0x3C2C, r24 ; 0x803c2c <MeyPins+0x16>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67
this->is_input = true;
d1e: 80 93 2d 3c sts 0x3C2D, r24 ; 0x803c2d <MeyPins+0x17>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68
this->meyPinId = meyPinId;
d22: d0 93 2e 3c sts 0x3C2E, r29 ; 0x803c2e <MeyPins+0x18>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65
byte meyPinId;
PinState() {}
void Init(int pin_id, byte meyPinId)
{
this->pin_id = pin_id;
d26: 20 e1 ldi r18, 0x10 ; 16
d28: 30 e0 ldi r19, 0x00 ; 0
d2a: 20 93 2f 3c sts 0x3C2F, r18 ; 0x803c2f <MeyPins+0x19>
d2e: 30 93 30 3c sts 0x3C30, r19 ; 0x803c30 <MeyPins+0x1a>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66
this->pin_state = true;
d32: 80 93 31 3c sts 0x3C31, r24 ; 0x803c31 <MeyPins+0x1b>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67
this->is_input = true;
d36: 80 93 32 3c sts 0x3C32, r24 ; 0x803c32 <MeyPins+0x1c>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68
this->meyPinId = meyPinId;
d3a: 96 e0 ldi r25, 0x06 ; 6
d3c: 90 93 33 3c sts 0x3C33, r25 ; 0x803c33 <MeyPins+0x1d>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65
byte meyPinId;
PinState() {}
void Init(int pin_id, byte meyPinId)
{
this->pin_id = pin_id;
d40: 2f e0 ldi r18, 0x0F ; 15
d42: 30 e0 ldi r19, 0x00 ; 0
d44: 20 93 34 3c sts 0x3C34, r18 ; 0x803c34 <MeyPins+0x1e>
d48: 30 93 35 3c sts 0x3C35, r19 ; 0x803c35 <MeyPins+0x1f>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66
this->pin_state = true;
d4c: 80 93 36 3c sts 0x3C36, r24 ; 0x803c36 <MeyPins+0x20>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67
this->is_input = true;
d50: 80 93 37 3c sts 0x3C37, r24 ; 0x803c37 <MeyPins+0x21>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68
this->meyPinId = meyPinId;
d54: c0 93 38 3c sts 0x3C38, r28 ; 0x803c38 <MeyPins+0x22>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65
byte meyPinId;
PinState() {}
void Init(int pin_id, byte meyPinId)
{
this->pin_id = pin_id;
d58: 2e e0 ldi r18, 0x0E ; 14
d5a: 30 e0 ldi r19, 0x00 ; 0
d5c: 20 93 39 3c sts 0x3C39, r18 ; 0x803c39 <MeyPins+0x23>
d60: 30 93 3a 3c sts 0x3C3A, r19 ; 0x803c3a <MeyPins+0x24>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66
this->pin_state = true;
d64: 80 93 3b 3c sts 0x3C3B, r24 ; 0x803c3b <MeyPins+0x25>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67
this->is_input = true;
d68: 80 93 3c 3c sts 0x3C3C, r24 ; 0x803c3c <MeyPins+0x26>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68
this->meyPinId = meyPinId;
d6c: 88 e0 ldi r24, 0x08 ; 8
d6e: 80 93 3d 3c sts 0x3C3D, r24 ; 0x803c3d <MeyPins+0x27>
setup():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:221
MeyPins[7] = PinState();
MeyPins[7].Init(PIN_PC0, (byte) 8);
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7);
d72: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <digital_pin_to_bit_mask+0x7fb08e>
d76: 80 68 ori r24, 0x80 ; 128
d78: 90 e0 ldi r25, 0x00 ; 0
d7a: 28 ed ldi r18, 0xD8 ; 216
d7c: 24 bf out 0x34, r18 ; 52
d7e: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <digital_pin_to_bit_mask+0x7fb08e>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:224
mcp2515_0.reset();
d82: 82 e8 ldi r24, 0x82 ; 130
d84: 9c e3 ldi r25, 0x3C ; 60
d86: fb dc rcall .-1546 ; 0x77e <MCP2515::reset()>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:225
mcp2515_0.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
d88: 82 e8 ldi r24, 0x82 ; 130
d8a: 9c e3 ldi r25, 0x3C ; 60
d8c: da dc rcall .-1612 ; 0x742 <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:226
mcp2515_0.setNormalMode();
d8e: 82 e8 ldi r24, 0x82 ; 130
d90: 9c e3 ldi r25, 0x3C ; 60
d92: f3 dc rcall .-1562 ; 0x77a <MCP2515::setNormalMode()>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:228
mcp2515_1.reset();
d94: 81 e8 ldi r24, 0x81 ; 129
d96: 9c e3 ldi r25, 0x3C ; 60
d98: f2 dc rcall .-1564 ; 0x77e <MCP2515::reset()>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:229
mcp2515_1.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
d9a: 81 e8 ldi r24, 0x81 ; 129
d9c: 9c e3 ldi r25, 0x3C ; 60
d9e: d1 dc rcall .-1630 ; 0x742 <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:230
mcp2515_1.setNormalMode();
da0: 81 e8 ldi r24, 0x81 ; 129
da2: 9c e3 ldi r25, 0x3C ; 60
da4: ea dc rcall .-1580 ; 0x77a <MCP2515::setNormalMode()>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:232
mcp2515_2.reset();
da6: 80 e8 ldi r24, 0x80 ; 128
da8: 9c e3 ldi r25, 0x3C ; 60
daa: e9 dc rcall .-1582 ; 0x77e <MCP2515::reset()>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:233
mcp2515_2.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
dac: 80 e8 ldi r24, 0x80 ; 128
dae: 9c e3 ldi r25, 0x3C ; 60
db0: c8 dc rcall .-1648 ; 0x742 <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:234
mcp2515_2.setNormalMode();
db2: 80 e8 ldi r24, 0x80 ; 128
db4: 9c e3 ldi r25, 0x3C ; 60
db6: e1 dc rcall .-1598 ; 0x77a <MCP2515::setNormalMode()>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:236
mcp2515_3.reset();
db8: 8f e7 ldi r24, 0x7F ; 127
dba: 9c e3 ldi r25, 0x3C ; 60
dbc: e0 dc rcall .-1600 ; 0x77e <MCP2515::reset()>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:237
mcp2515_3.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
dbe: 8f e7 ldi r24, 0x7F ; 127
dc0: 9c e3 ldi r25, 0x3C ; 60
dc2: bf dc rcall .-1666 ; 0x742 <MCP2515::setBitrate(CAN_SPEED, CAN_CLOCK) [clone .constprop.6]>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:238
mcp2515_3.setNormalMode();
dc4: 8f e7 ldi r24, 0x7F ; 127
dc6: 9c e3 ldi r25, 0x3C ; 60
dc8: d8 dc rcall .-1616 ; 0x77a <MCP2515::setNormalMode()>
dca: c6 e1 ldi r28, 0x16 ; 22
dcc: dc e3 ldi r29, 0x3C ; 60
dce: 8e e3 ldi r24, 0x3E ; 62
dd0: e8 2e mov r14, r24
dd2: 8c e3 ldi r24, 0x3C ; 60
dd4: f8 2e mov r15, r24
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:240
for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++)
dd6: ec 16 cp r14, r28
dd8: fd 06 cpc r15, r29
dda: 51 f0 breq .+20 ; 0xdf0 <main+0x206>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:242
{
pinMode(MeyPins[i].pin_id, OUTPUT);
ddc: 18 81 ld r17, Y
pinMode():
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);
dde: 19 32 cpi r17, 0x29 ; 41
de0: 28 f4 brcc .+10 ; 0xdec <main+0x202>
de2: 81 2f mov r24, r17
de4: 79 d9 rcall .-3342 ; 0xd8 <pinMode.part.1.constprop.23>
digitalWrite():
de6: 60 e0 ldi r22, 0x00 ; 0
de8: 81 2f mov r24, r17
dea: da d9 rcall .-3148 ; 0x1a0 <digitalWrite.part.2>
dec: 25 96 adiw r28, 0x05 ; 5
dee: f3 cf rjmp .-26 ; 0xdd6 <main+0x1ec>
GetDeviceIdHigh():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:434
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
df0: f0 91 04 11 lds r31, 0x1104 ; 0x801104 <digital_pin_to_bit_mask+0x7fc132>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435
CircularShift(SIGROW.SERNUM3) << 1 ^
df4: 80 91 06 11 lds r24, 0x1106 ; 0x801106 <digital_pin_to_bit_mask+0x7fc134>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:436
CircularShift( CircularShift(SIGROW.SERNUM5)) ^
df8: 70 91 08 11 lds r23, 0x1108 ; 0x801108 <digital_pin_to_bit_mask+0x7fc136>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:437
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^
dfc: 60 91 0a 11 lds r22, 0x110A ; 0x80110a <digital_pin_to_bit_mask+0x7fc138>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:438
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9)))));
e00: 90 91 0c 11 lds r25, 0x110C ; 0x80110c <digital_pin_to_bit_mask+0x7fc13a>
GetDeviceIdLow():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:426
{
return myDeviceId;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
e04: e0 91 03 11 lds r30, 0x1103 ; 0x801103 <digital_pin_to_bit_mask+0x7fc131>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427
CircularShift(SIGROW.SERNUM2) << 1 ^
e08: 20 91 05 11 lds r18, 0x1105 ; 0x801105 <digital_pin_to_bit_mask+0x7fc133>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:428
CircularShift( CircularShift(SIGROW.SERNUM4)) ^
e0c: 50 91 07 11 lds r21, 0x1107 ; 0x801107 <digital_pin_to_bit_mask+0x7fc135>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:429
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
e10: 40 91 09 11 lds r20, 0x1109 ; 0x801109 <digital_pin_to_bit_mask+0x7fc137>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:430
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
e14: 30 91 0b 11 lds r19, 0x110B ; 0x80110b <digital_pin_to_bit_mask+0x7fc139>
CircularShift():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
e18: 88 0f add r24, r24
e1a: 81 1d adc r24, r1
GetDeviceIdHigh():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
e1c: 88 0f add r24, r24
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:434
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
e1e: 8f 27 eor r24, r31
CircularShift():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
e20: 77 0f add r23, r23
e22: 71 1d adc r23, r1
e24: 77 0f add r23, r23
e26: 71 1d adc r23, r1
GetDeviceIdHigh():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435
CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8)))));
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
e28: 87 27 eor r24, r23
CircularShift():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
e2a: 62 95 swap r22
e2c: 60 fb bst r22, 0
e2e: 67 95 ror r22
e30: 67 f9 bld r22, 7
GetDeviceIdHigh():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:436
}
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM5)) ^
e32: 86 27 eor r24, r22
CircularShift():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
e34: 92 95 swap r25
GetDeviceIdHigh():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:437
byte GetDeviceIdHigh() {
return (SIGROW.SERNUM1 ^
CircularShift(SIGROW.SERNUM3) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM5)) ^
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^
e36: 98 27 eor r25, r24
CircularShift():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
e38: 82 2f mov r24, r18
e3a: 88 0f add r24, r24
e3c: 81 1d adc r24, r1
GetDeviceIdLow():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427
return myDeviceId;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
e3e: 88 0f add r24, r24
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:426
{
return myDeviceId;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
e40: 8e 27 eor r24, r30
CircularShift():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
e42: 25 2f mov r18, r21
e44: 22 0f add r18, r18
e46: 21 1d adc r18, r1
e48: 22 0f add r18, r18
e4a: 21 1d adc r18, r1
GetDeviceIdLow():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427
return myDeviceId;
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
e4c: 82 27 eor r24, r18
CircularShift():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
e4e: 24 2f mov r18, r20
e50: 22 95 swap r18
e52: 20 fb bst r18, 0
e54: 27 95 ror r18
e56: 27 f9 bld r18, 7
GetDeviceIdLow():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:428
}
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM4)) ^
e58: 82 27 eor r24, r18
CircularShift():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392
}
byte CircularShift(byte b)
{
return (b << 1) | (b >> 7 & 1);
e5a: 23 2f mov r18, r19
e5c: 22 95 swap r18
GetDeviceIdLow():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:429
byte GetDeviceIdLow() {
return (SIGROW.SERNUM0 ^
CircularShift(SIGROW.SERNUM2) << 1 ^
CircularShift( CircularShift(SIGROW.SERNUM4)) ^
CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^
e5e: 82 27 eor r24, r18
CalculateMyDeviceId():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:417
return ((commandId & 0xFFF) * 0x10000) | deviceId | CAN_EFF_FLAG;
}
void CalculateMyDeviceId()
{
myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow();
e60: 80 93 14 3c sts 0x3C14, r24 ; 0x803c14 <myDeviceId>
e64: 90 93 15 3c sts 0x3C15, r25 ; 0x803c15 <myDeviceId+0x1>
setup():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:249
digitalWrite(MeyPins[i].pin_id, LOW);
}
CalculateMyDeviceId();
SendSerialPackage(&mcp2515_0);
e68: 82 e8 ldi r24, 0x82 ; 130
e6a: 9c e3 ldi r25, 0x3C ; 60
e6c: 74 dd rcall .-1304 ; 0x956 <SendSerialPackage(MCP2515*)>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:250
SendSerialPackage(&mcp2515_1);
e6e: 81 e8 ldi r24, 0x81 ; 129
e70: 9c e3 ldi r25, 0x3C ; 60
e72: 71 dd rcall .-1310 ; 0x956 <SendSerialPackage(MCP2515*)>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:251
SendSerialPackage(&mcp2515_2);
e74: 80 e8 ldi r24, 0x80 ; 128
e76: 9c e3 ldi r25, 0x3C ; 60
e78: 6e dd rcall .-1316 ; 0x956 <SendSerialPackage(MCP2515*)>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:252
SendSerialPackage(&mcp2515_3);
e7a: 8f e7 ldi r24, 0x7F ; 127
e7c: 9c e3 ldi r25, 0x3C ; 60
e7e: 6b dd rcall .-1322 ; 0x956 <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();
e80: c0 e0 ldi r28, 0x00 ; 0
e82: d0 e0 ldi r29, 0x00 ; 0
loop():
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:270
void loop()
{
SendSerialPackage(&mcp2515_0);
e84: 82 e8 ldi r24, 0x82 ; 130
e86: 9c e3 ldi r25, 0x3C ; 60
e88: 66 dd rcall .-1332 ; 0x956 <SendSerialPackage(MCP2515*)>
C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:271
delay(1000);
e8a: 68 ee ldi r22, 0xE8 ; 232
e8c: 73 e0 ldi r23, 0x03 ; 3
e8e: 80 e0 ldi r24, 0x00 ; 0
e90: 90 e0 ldi r25, 0x00 ; 0
e92: 0d da rcall .-3046 ; 0x2ae <delay>
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43
e94: 20 97 sbiw r28, 0x00 ; 0
e96: b1 f3 breq .-20 ; 0xe84 <main+0x29a>
e98: b3 d8 rcall .-3738 ; 0x0 <__vectors>
e9a: f4 cf rjmp .-24 ; 0xe84 <main+0x29a>
00000e9c <__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
e9c: 38 d0 rcall .+112 ; 0xf0e <__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
e9e: 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
ea0: 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
ea2: 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
ea4: 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
ea6: 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
ea8: 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
eaa: 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
eac: 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
eae: 08 95 ret
00000eb0 <__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
eb0: 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
eb2: 10 94 com r1
00000eb4 <__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
eb4: 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
eb6: 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
eb8: 98 f0 brcs .+38 ; 0xee0 <__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
eba: 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
ebc: 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
ebe: 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
ec0: 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
ec2: 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
ec4: 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
ec6: 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
ec8: 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
eca: 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
ecc: f4 cf rjmp .-24 ; 0xeb6 <__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
ece: 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
ed0: 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
ed2: 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
ed4: 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
ed6: 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
ed8: 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
eda: 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
edc: 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
ede: 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
ee0: 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
ee2: aa f7 brpl .-22 ; 0xece <__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
ee4: 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
ee6: 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
ee8: 08 95 ret
00000eea <__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
eea: 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
eec: 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
eee: 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
ef0: 2a 17 cp r18, r26
ef2: 30 05 cpc r19, r0
ef4: 40 05 cpc r20, r0
ef6: 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
ef8: 60 05 cpc r22, r0
efa: 70 05 cpc r23, r0
efc: 80 05 cpc r24, r0
efe: 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
f00: 08 95 ret
00000f02 <__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
f02: 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
f04: 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
f06: 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
f08: 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
f0a: 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
f0c: 09 94 ijmp
00000f0e <__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
f0e: 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
f10: 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
f12: 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
f14: 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
f16: 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
f18: 01 d0 rcall .+2 ; 0xf1c <__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
f1a: 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
f1c: 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
f1e: 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
f20: 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
f22: 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
f24: 08 95 ret
00000f26 <memcpy>:
memcpy():
f26: fb 01 movw r30, r22
f28: dc 01 movw r26, r24
f2a: 02 c0 rjmp .+4 ; 0xf30 <memcpy+0xa>
f2c: 01 90 ld r0, Z+
f2e: 0d 92 st X+, r0
f30: 41 50 subi r20, 0x01 ; 1
f32: 50 40 sbci r21, 0x00 ; 0
f34: d8 f7 brcc .-10 ; 0xf2c <memcpy+0x6>
f36: 08 95 ret
00000f38 <_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
f38: f8 94 cli
00000f3a <__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
f3a: ff cf rjmp .-2 ; 0xf3a <__stop_program>