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
../../../../../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(): 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 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 : _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 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 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 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 110: 10 92 47 3c sts 0x3C47, r1 ; 0x803c47 114: 10 92 48 3c sts 0x3C48, r1 ; 0x803c48 118: 10 92 49 3c sts 0x3C49, r1 ; 0x803c49 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 120: 10 92 4b 3c sts 0x3C4B, r1 ; 0x803c4b 124: 10 92 4c 3c sts 0x3C4C, r1 ; 0x803c4c 128: 10 92 4d 3c sts 0x3C4D, r1 ; 0x803c4d 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 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 136: 8c 7f andi r24, 0xFC ; 252 138: 90 91 42 3c lds r25, 0x3C42 ; 0x803c42 13c: 89 2b or r24, r25 13e: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 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 14a: 86 e0 ldi r24, 0x06 ; 6 14c: c5 df rcall .-118 ; 0xd8 _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 152: 84 60 ori r24, 0x04 ; 4 154: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 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 15c: 81 62 ori r24, 0x21 ; 33 15e: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 162: 90 91 7d 3c lds r25, 0x3C7D ; 0x803c7d 166: 80 91 7e 3c lds r24, 0x3C7E ; 0x803c7e 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 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 _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 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 188: 80 e2 ldi r24, 0x20 ; 32 18a: e0 cf rjmp .-64 ; 0x14c <__EEPROM_REGION_LENGTH__+0x4c> 0000018c : _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 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 196: 87 ff sbrs r24, 7 198: fc cf rjmp .-8 ; 0x192 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 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(): 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 1b0: 50 c0 rjmp .+160 ; 0x252 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 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 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 1c6: 10 f0 brcs .+4 ; 0x1cc 1c8: e6 30 cpi r30, 0x06 ; 6 1ca: 20 f1 brcs .+72 ; 0x214 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 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 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 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 1fe: 81 e0 ldi r24, 0x01 ; 1 200: 90 e0 ldi r25, 0x00 ; 0 202: 01 c0 rjmp .+2 ; 0x206 204: 88 0f add r24, r24 206: 5a 95 dec r21 208: ea f7 brpl .-6 ; 0x204 20a: 80 95 com r24 20c: 87 23 and r24, r23 20e: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 212: dc cf rjmp .-72 ; 0x1cc 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(): 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 238: 8f 3f cpi r24, 0xFF ; 255 23a: 61 f0 breq .+24 ; 0x254 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 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 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 0000025e : 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 266: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 26a: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 26e: 50 91 13 3c lds r21, 0x3C13 ; 0x803c13 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 276: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab 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 27e: 90 ff sbrs r25, 0 280: 08 c0 rjmp .+16 ; 0x292 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 28e: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab 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 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(): 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 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 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 2e6: f9 cf rjmp .-14 ; 0x2da 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 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 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 : _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 324: 61 e0 ldi r22, 0x01 ; 1 326: 3c df rcall .-392 ; 0x1a0 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 32c: 88 23 and r24, r24 32e: 19 f0 breq .+6 ; 0x336 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 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 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 356: 90 90 47 3c lds r9, 0x3C47 ; 0x803c47 35a: a0 90 48 3c lds r10, 0x3C48 ; 0x803c48 35e: b0 90 49 3c lds r11, 0x3C49 ; 0x803c49 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 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 _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 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 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 3dc: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b 3e0: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c 3e4: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d 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 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 00000460 : _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 480: 88 23 and r24, r24 482: 19 f0 breq .+6 ; 0x48a 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 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 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 _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 49e: 9c c0 rjmp .+312 ; 0x5d8 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 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 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 4c6: 90 90 47 3c lds r9, 0x3C47 ; 0x803c47 4ca: a0 90 48 3c lds r10, 0x3C48 ; 0x803c48 4ce: b0 90 49 3c lds r11, 0x3C49 ; 0x803c49 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 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 _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 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 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 550: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b 554: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c 558: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d 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 572: 8b cf rjmp .-234 ; 0x48a 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 _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 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 _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 : _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 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 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 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 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 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 00000626 : _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 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 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 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 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 65c: fa cf rjmp .-12 ; 0x652 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 00000670 : _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 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 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 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 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 00000698 : _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 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 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 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 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 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 : _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 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 6e2: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 6e6: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 6ea: f0 90 13 3c lds r15, 0x3C13 ; 0x803c13 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 702: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 706: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 70a: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 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 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 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 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 00000742 : _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 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 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 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 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 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 : _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 0000077e : _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 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 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38 endSPI(); 7aa: c8 01 movw r24, r16 7ac: ac dd rcall .-1192 ; 0x306 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 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 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 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 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 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 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 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 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 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 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 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 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 848: 65 c0 rjmp .+202 ; 0x914 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 852: 72 c0 rjmp .+228 ; 0x938 854: 58 f4 brcc .+22 ; 0x86c 856: e1 14 cp r14, r1 858: f1 04 cpc r15, r1 85a: 09 f4 brne .+2 ; 0x85e 85c: 73 c0 rjmp .+230 ; 0x944 85e: ea 94 dec r14 860: ef 28 or r14, r15 862: 89 f0 breq .+34 ; 0x886 _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 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 874: 65 c0 rjmp .+202 ; 0x940 876: 08 f4 brcc .+2 ; 0x87a 878: 61 c0 rjmp .+194 ; 0x93c 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 _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 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 890: 5b c0 rjmp .+182 ; 0x948 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 _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 8b4: bf cf rjmp .-130 ; 0x834 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 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 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 8f8: aa 94 dec r10 8fa: ab 28 or r10, r11 8fc: 09 f0 breq .+2 ; 0x900 8fe: b2 cf rjmp .-156 ; 0x864 _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 _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 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 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 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 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 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 _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 00000956 : _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 98a: 90 91 15 3c lds r25, 0x3C15 ; 0x803c15 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 9da: 8b c0 rjmp .+278 ; 0xaf2 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 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; iCTRL); 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 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 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 a24: 66 c0 rjmp .+204 ; 0xaf2 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 _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 a7c: 53 c0 rjmp .+166 ; 0xb24 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 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 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 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 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 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 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 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 _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 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 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 b46: 57 cf rjmp .-338 ; 0x9f6 b48: d4 cf rjmp .-88 ; 0xaf2 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 b60: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 b64: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 b68: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 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 b76: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 b7a: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 b7e: b0 93 13 3c sts 0x3C13, r27 ; 0x803c13 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 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 : _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 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 _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 00000bb6 : _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 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 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 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 00000bea
: 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 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 bf8: 85 60 ori r24, 0x05 ; 5 bfa: 80 93 02 06 sts 0x0602, r24 ; 0x800602 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 c02: 81 60 ori r24, 0x01 ; 1 c04: 80 93 00 06 sts 0x0600, r24 ; 0x800600 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 c0c: 8f 7c andi r24, 0xCF ; 207 c0e: 80 65 ori r24, 0x50 ; 80 c10: 80 93 02 06 sts 0x0602, r24 ; 0x800602 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 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 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 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 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 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 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 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 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 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 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 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 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 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(): 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 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 c7c: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad 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 c84: 81 60 ori r24, 0x01 ; 1 c86: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 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 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 c92: 81 60 ori r24, 0x01 ; 1 c94: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 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 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 _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 cae: 90 93 17 3c sts 0x3C17, r25 ; 0x803c17 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 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 this->is_input = true; cb8: 80 93 19 3c sts 0x3C19, r24 ; 0x803c19 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 this->meyPinId = meyPinId; cbc: 80 93 1a 3c sts 0x3C1A, r24 ; 0x803c1a 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 cc8: 30 93 1c 3c sts 0x3C1C, r19 ; 0x803c1c C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 this->pin_state = true; ccc: 80 93 1d 3c sts 0x3C1D, r24 ; 0x803c1d C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 this->is_input = true; cd0: 80 93 1e 3c sts 0x3C1E, r24 ; 0x803c1e 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 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 ce2: 30 93 21 3c sts 0x3C21, r19 ; 0x803c21 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 this->pin_state = true; ce6: 80 93 22 3c sts 0x3C22, r24 ; 0x803c22 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 this->is_input = true; cea: 80 93 23 3c sts 0x3C23, r24 ; 0x803c23 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 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 cfc: 30 93 26 3c sts 0x3C26, r19 ; 0x803c26 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 this->pin_state = true; d00: 80 93 27 3c sts 0x3C27, r24 ; 0x803c27 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 this->is_input = true; d04: 80 93 28 3c sts 0x3C28, r24 ; 0x803c28 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 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 d16: 30 93 2b 3c sts 0x3C2B, r19 ; 0x803c2b C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 this->pin_state = true; d1a: 80 93 2c 3c sts 0x3C2C, r24 ; 0x803c2c C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 this->is_input = true; d1e: 80 93 2d 3c sts 0x3C2D, r24 ; 0x803c2d C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 this->meyPinId = meyPinId; d22: d0 93 2e 3c sts 0x3C2E, r29 ; 0x803c2e 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 d2e: 30 93 30 3c sts 0x3C30, r19 ; 0x803c30 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 this->pin_state = true; d32: 80 93 31 3c sts 0x3C31, r24 ; 0x803c31 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 this->is_input = true; d36: 80 93 32 3c sts 0x3C32, r24 ; 0x803c32 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 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 d48: 30 93 35 3c sts 0x3C35, r19 ; 0x803c35 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 this->pin_state = true; d4c: 80 93 36 3c sts 0x3C36, r24 ; 0x803c36 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 this->is_input = true; d50: 80 93 37 3c sts 0x3C37, r24 ; 0x803c37 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 this->meyPinId = meyPinId; d54: c0 93 38 3c sts 0x3C38, r28 ; 0x803c38 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 d60: 30 93 3a 3c sts 0x3C3A, r19 ; 0x803c3a C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 this->pin_state = true; d64: 80 93 3b 3c sts 0x3C3B, r24 ; 0x803c3b C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 this->is_input = true; d68: 80 93 3c 3c sts 0x3C3C, r24 ; 0x803c3c 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 de2: 81 2f mov r24, r17 de4: 79 d9 rcall .-3342 ; 0xd8 digitalWrite(): de6: 60 e0 ldi r22, 0x00 ; 0 de8: 81 2f mov r24, r17 dea: da d9 rcall .-3148 ; 0x1a0 dec: 25 96 adiw r28, 0x05 ; 5 dee: f3 cf rjmp .-26 ; 0xdd6 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 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435 CircularShift(SIGROW.SERNUM3) << 1 ^ df4: 80 91 06 11 lds r24, 0x1106 ; 0x801106 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:436 CircularShift( CircularShift(SIGROW.SERNUM5)) ^ df8: 70 91 08 11 lds r23, 0x1108 ; 0x801108 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:437 CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ dfc: 60 91 0a 11 lds r22, 0x110A ; 0x80110a C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:438 CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); e00: 90 91 0c 11 lds r25, 0x110C ; 0x80110c 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 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427 CircularShift(SIGROW.SERNUM2) << 1 ^ e08: 20 91 05 11 lds r18, 0x1105 ; 0x801105 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:428 CircularShift( CircularShift(SIGROW.SERNUM4)) ^ e0c: 50 91 07 11 lds r21, 0x1107 ; 0x801107 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:429 CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ e10: 40 91 09 11 lds r20, 0x1109 ; 0x801109 C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:430 CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); e14: 30 91 0b 11 lds r19, 0x110B ; 0x80110b 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 e64: 90 93 15 3c sts 0x3C15, r25 ; 0x803c15 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 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 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 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 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 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 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 e98: b3 d8 rcall .-3738 ; 0x0 <__vectors> e9a: f4 cf rjmp .-24 ; 0xe84 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(): f26: fb 01 movw r30, r22 f28: dc 01 movw r26, r24 f2a: 02 c0 rjmp .+4 ; 0xf30 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 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>