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