C:\Users\Martin\AppData\Local\Temp\arduino_build_795292/UPSoftware.ino.elf: file format elf32-avr Disassembly of section .text: 00000000 <__vectors>: __vectors(): ../../../../../crt1/gcrt1.S:61 0: 50 c0 rjmp .+160 ; 0xa2 <__ctors_end> 2: 00 00 nop ../../../../../crt1/gcrt1.S:67 4: 68 c0 rjmp .+208 ; 0xd6 <__bad_interrupt> 6: 00 00 nop ../../../../../crt1/gcrt1.S:68 8: 66 c0 rjmp .+204 ; 0xd6 <__bad_interrupt> a: 00 00 nop ../../../../../crt1/gcrt1.S:69 c: 64 c0 rjmp .+200 ; 0xd6 <__bad_interrupt> e: 00 00 nop ../../../../../crt1/gcrt1.S:70 10: 62 c0 rjmp .+196 ; 0xd6 <__bad_interrupt> 12: 00 00 nop ../../../../../crt1/gcrt1.S:71 14: 60 c0 rjmp .+192 ; 0xd6 <__bad_interrupt> 16: 00 00 nop ../../../../../crt1/gcrt1.S:72 18: 5e c0 rjmp .+188 ; 0xd6 <__bad_interrupt> 1a: 00 00 nop ../../../../../crt1/gcrt1.S:73 1c: 5c c0 rjmp .+184 ; 0xd6 <__bad_interrupt> 1e: 00 00 nop ../../../../../crt1/gcrt1.S:74 20: 5a c0 rjmp .+180 ; 0xd6 <__bad_interrupt> 22: 00 00 nop ../../../../../crt1/gcrt1.S:75 24: 58 c0 rjmp .+176 ; 0xd6 <__bad_interrupt> 26: 00 00 nop ../../../../../crt1/gcrt1.S:76 28: 56 c0 rjmp .+172 ; 0xd6 <__bad_interrupt> 2a: 00 00 nop ../../../../../crt1/gcrt1.S:77 2c: 54 c0 rjmp .+168 ; 0xd6 <__bad_interrupt> 2e: 00 00 nop ../../../../../crt1/gcrt1.S:78 30: 52 c0 rjmp .+164 ; 0xd6 <__bad_interrupt> 32: 00 00 nop ../../../../../crt1/gcrt1.S:79 34: 50 c0 rjmp .+160 ; 0xd6 <__bad_interrupt> 36: 00 00 nop ../../../../../crt1/gcrt1.S:80 38: 4e c0 rjmp .+156 ; 0xd6 <__bad_interrupt> 3a: 00 00 nop ../../../../../crt1/gcrt1.S:81 3c: 4c c0 rjmp .+152 ; 0xd6 <__bad_interrupt> 3e: 00 00 nop ../../../../../crt1/gcrt1.S:82 40: 4a c0 rjmp .+148 ; 0xd6 <__bad_interrupt> 42: 00 00 nop ../../../../../crt1/gcrt1.S:83 44: 48 c0 rjmp .+144 ; 0xd6 <__bad_interrupt> 46: 00 00 nop ../../../../../crt1/gcrt1.S:84 48: 46 c0 rjmp .+140 ; 0xd6 <__bad_interrupt> 4a: 00 00 nop ../../../../../crt1/gcrt1.S:85 4c: 44 c0 rjmp .+136 ; 0xd6 <__bad_interrupt> 4e: 00 00 nop ../../../../../crt1/gcrt1.S:86 50: 42 c0 rjmp .+132 ; 0xd6 <__bad_interrupt> 52: 00 00 nop ../../../../../crt1/gcrt1.S:87 54: 40 c0 rjmp .+128 ; 0xd6 <__bad_interrupt> 56: 00 00 nop ../../../../../crt1/gcrt1.S:88 58: 3e c0 rjmp .+124 ; 0xd6 <__bad_interrupt> 5a: 00 00 nop ../../../../../crt1/gcrt1.S:89 5c: 3c c0 rjmp .+120 ; 0xd6 <__bad_interrupt> 5e: 00 00 nop ../../../../../crt1/gcrt1.S:90 60: 3a c0 rjmp .+116 ; 0xd6 <__bad_interrupt> 62: 00 00 nop ../../../../../crt1/gcrt1.S:91 64: 02 c5 rjmp .+2564 ; 0xa6a <__vector_25> 66: 00 00 nop ../../../../../crt1/gcrt1.S:92 68: 36 c0 rjmp .+108 ; 0xd6 <__bad_interrupt> 6a: 00 00 nop ../../../../../crt1/gcrt1.S:93 6c: 34 c0 rjmp .+104 ; 0xd6 <__bad_interrupt> 6e: 00 00 nop ../../../../../crt1/gcrt1.S:94 70: 32 c0 rjmp .+100 ; 0xd6 <__bad_interrupt> 72: 00 00 nop ../../../../../crt1/gcrt1.S:95 74: 30 c0 rjmp .+96 ; 0xd6 <__bad_interrupt> 76: 00 00 nop ../../../../../crt1/gcrt1.S:96 78: 2e c0 rjmp .+92 ; 0xd6 <__bad_interrupt> 7a: 00 00 nop ../../../../../crt1/gcrt1.S:97 7c: 2c c0 rjmp .+88 ; 0xd6 <__bad_interrupt> 7e: 00 00 nop ../../../../../crt1/gcrt1.S:98 80: 2a c0 rjmp .+84 ; 0xd6 <__bad_interrupt> 82: 00 00 nop ../../../../../crt1/gcrt1.S:99 84: 28 c0 rjmp .+80 ; 0xd6 <__bad_interrupt> 86: 00 00 nop ../../../../../crt1/gcrt1.S:100 88: 26 c0 rjmp .+76 ; 0xd6 <__bad_interrupt> 8a: 00 00 nop ../../../../../crt1/gcrt1.S:101 8c: 24 c0 rjmp .+72 ; 0xd6 <__bad_interrupt> 8e: 00 00 nop ../../../../../crt1/gcrt1.S:102 90: 22 c0 rjmp .+68 ; 0xd6 <__bad_interrupt> 92: 00 00 nop ../../../../../crt1/gcrt1.S:103 94: 20 c0 rjmp .+64 ; 0xd6 <__bad_interrupt> 96: 00 00 nop ../../../../../crt1/gcrt1.S:104 98: 1e c0 rjmp .+60 ; 0xd6 <__bad_interrupt> 9a: 00 00 nop ../../../../../crt1/gcrt1.S:105 9c: 1c c0 rjmp .+56 ; 0xd6 <__bad_interrupt> ... 000000a0 <__ctors_start>: __trampolines_start(): a0: 5d 05 cpc r21, r13 000000a2 <__ctors_end>: __dtors_end(): ../../../../../crt1/gcrt1.S:230 a2: 11 24 eor r1, r1 ../../../../../crt1/gcrt1.S:231 a4: 1f be out 0x3f, r1 ; 63 ../../../../../crt1/gcrt1.S:232 a6: cf ef ldi r28, 0xFF ; 255 ../../../../../crt1/gcrt1.S:234 a8: cd bf out 0x3d, r28 ; 61 ../../../../../crt1/gcrt1.S:236 aa: df e3 ldi r29, 0x3F ; 63 ../../../../../crt1/gcrt1.S:237 ac: de bf out 0x3e, r29 ; 62 000000ae <__do_clear_bss>: __do_clear_bss(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441 ae: 2c e3 ldi r18, 0x3C ; 60 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442 b0: a0 e0 ldi r26, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443 b2: bc e3 ldi r27, 0x3C ; 60 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444 b4: 01 c0 rjmp .+2 ; 0xb8 <.do_clear_bss_start> 000000b6 <.do_clear_bss_loop>: /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446 b6: 1d 92 st X+, r1 000000b8 <.do_clear_bss_start>: /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448 b8: a8 38 cpi r26, 0x88 ; 136 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449 ba: b2 07 cpc r27, r18 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450 bc: e1 f7 brne .-8 ; 0xb6 <.do_clear_bss_loop> 000000be <__do_global_ctors>: __do_global_ctors(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2466 be: 10 e0 ldi r17, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2467 c0: c1 e5 ldi r28, 0x51 ; 81 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2468 c2: d0 e0 ldi r29, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2472 c4: 03 c0 rjmp .+6 ; 0xcc <__do_global_ctors+0xe> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2474 c6: 21 97 sbiw r28, 0x01 ; 1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2480 c8: fe 01 movw r30, r28 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2481 ca: e7 d7 rcall .+4046 ; 0x109a <__tablejump2__> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2483 cc: c0 35 cpi r28, 0x50 ; 80 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2484 ce: d1 07 cpc r29, r17 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2489 d0: d1 f7 brne .-12 ; 0xc6 <__do_global_ctors+0x8> ../../../../../crt1/gcrt1.S:314 d2: 04 d5 rcall .+2568 ; 0xadc
../../../../../crt1/gcrt1.S:315 d4: fd c7 rjmp .+4090 ; 0x10d0 <_exit> 000000d6 <__bad_interrupt>: __vector_38(): ../../../../../crt1/gcrt1.S:209 d6: 94 cf rjmp .-216 ; 0x0 <__vectors> 000000d8 : _ZN8SPIClass8transferEh.constprop.31(): 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"); d8: 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; da: 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 de: 80 91 c3 08 lds r24, 0x08C3 ; 0x8008c3 e2: 87 ff sbrs r24, 7 e4: fc cf rjmp .-8 ; 0xde 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 e6: 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 } ea: 08 95 ret 000000ec : pinMode.part.1(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:29 #define ARDUINO_MAIN #include "wiring_private.h" #include "pins_arduino.h" void pinMode(uint8_t pin, uint8_t mode) ec: cf 93 push r28 ee: df 93 push r29 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 { uint8_t bit_mask = digitalPinToBitMask(pin); f0: 90 e0 ldi r25, 0x00 ; 0 f2: fc 01 movw r30, r24 f4: e5 5a subi r30, 0xA5 ; 165 f6: fe 4a sbci r31, 0xAE ; 174 f8: 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)) fa: 2f 3f cpi r18, 0xFF ; 255 fc: 61 f0 breq .+24 ; 0x116 <__EEPROM_REGION_LENGTH__+0x16> 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); fe: fc 01 movw r30, r24 100: ee 5c subi r30, 0xCE ; 206 102: fe 4a sbci r31, 0xAE ; 174 104: e0 81 ld r30, Z 106: 30 e2 ldi r19, 0x20 ; 32 108: e3 9f mul r30, r19 10a: f0 01 movw r30, r0 10c: 11 24 eor r1, r1 10e: 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:40 if (port == NULL) return; if (mode == OUTPUT) 110: 61 30 cpi r22, 0x01 ; 1 112: 21 f4 brne .+8 ; 0x11c <__EEPROM_REGION_LENGTH__+0x1c> C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:43 { /* Configure direction as output */ port->DIRSET = bit_mask; 114: 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; } } 116: df 91 pop r29 118: cf 91 pop r28 11a: 08 95 ret C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:48 port->DIRSET = bit_mask; } else { /* mode == INPUT or INPUT_PULLUP */ uint8_t bit_pos = digitalPinToBitPosition(pin); 11c: 87 5f subi r24, 0xF7 ; 247 11e: 9e 4a sbci r25, 0xAE ; 174 120: ec 01 movw r28, r24 122: a8 81 ld r26, Y C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:50 /* Calculate where pin control register is */ volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); 124: af 3f cpi r26, 0xFF ; 255 126: 69 f0 breq .+26 ; 0x142 <__EEPROM_REGION_LENGTH__+0x42> 128: cf 01 movw r24, r30 12a: 40 96 adiw r24, 0x10 ; 16 12c: a8 0f add r26, r24 12e: b9 2f mov r27, r25 130: b1 1d adc r27, r1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:53 /* Save state */ uint8_t status = SREG; 132: 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:54 cli(); 134: f8 94 cli C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:57 /* Configure direction as input */ port->DIRCLR = bit_mask; 136: 22 83 std Z+2, r18 ; 0x02 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:63 /* Configure pull-up resistor */ if (mode == INPUT_PULLUP) { /* Enable pull-up */ *pin_ctrl_reg |= PORT_PULLUPEN_bm; 138: 8c 91 ld r24, X 13a: 88 60 ori r24, 0x08 ; 8 13c: 8c 93 st X, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:73 /* Disable pull-up */ *pin_ctrl_reg &= ~(PORT_PULLUPEN_bm); } /* Restore state */ SREG = status; 13e: 9f bf out 0x3f, r25 ; 63 140: ea cf rjmp .-44 ; 0x116 <__EEPROM_REGION_LENGTH__+0x16> C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:50 else { /* mode == INPUT or INPUT_PULLUP */ uint8_t bit_pos = digitalPinToBitPosition(pin); /* Calculate where pin control register is */ volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); 142: b0 e0 ldi r27, 0x00 ; 0 144: a0 e0 ldi r26, 0x00 ; 0 146: f5 cf rjmp .-22 ; 0x132 <__EEPROM_REGION_LENGTH__+0x32> 00000148 : _ZN8SPIClass5beginEv.constprop.8(): 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) 148: 80 91 47 3c lds r24, 0x3C47 ; 0x803c47 14c: 81 11 cpse r24, r1 14e: 17 c0 rjmp .+46 ; 0x17e C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:133 return; interruptMode = SPI_IMODE_NONE; 150: 10 92 48 3c sts 0x3C48, r1 ; 0x803c48 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:134 interruptSave = 0; 154: 10 92 49 3c sts 0x3C49, r1 ; 0x803c49 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:135 interruptMask_lo = 0; 158: 10 92 4a 3c sts 0x3C4A, r1 ; 0x803c4a 15c: 10 92 4b 3c sts 0x3C4B, r1 ; 0x803c4b 160: 10 92 4c 3c sts 0x3C4C, r1 ; 0x803c4c 164: 10 92 4d 3c sts 0x3C4D, r1 ; 0x803c4d C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:136 interruptMask_hi = 0; 168: 10 92 4e 3c sts 0x3C4E, r1 ; 0x803c4e 16c: 10 92 4f 3c sts 0x3C4F, r1 ; 0x803c4f 170: 10 92 50 3c sts 0x3C50, r1 ; 0x803c50 174: 10 92 51 3c sts 0x3C51, r1 ; 0x803c51 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:137 initialized = true; 178: 81 e0 ldi r24, 0x01 ; 1 17a: 80 93 47 3c sts 0x3C47, r24 ; 0x803c47 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); 17e: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 182: 8c 7f andi r24, 0xFC ; 252 184: 90 91 46 3c lds r25, 0x3C46 ; 0x803c46 188: 89 2b or r24, r25 18a: 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) 18e: 91 11 cpse r25, r1 190: 19 c0 rjmp .+50 ; 0x1c4 pinMode(): 192: 61 e0 ldi r22, 0x01 ; 1 194: 84 e0 ldi r24, 0x04 ; 4 196: aa df rcall .-172 ; 0xec 198: 61 e0 ldi r22, 0x01 ; 1 19a: 86 e0 ldi r24, 0x06 ; 6 19c: a7 df rcall .-178 ; 0xec _ZN8SPIClass5beginEv.constprop.8(): 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); 19e: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 1a2: 84 60 ori r24, 0x04 ; 4 1a4: 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); 1a8: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 1ac: 81 62 ori r24, 0x21 ; 33 1ae: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 1b2: 90 91 40 3c lds r25, 0x3C40 ; 0x803c40 1b6: 80 91 41 3c lds r24, 0x3C41 ; 0x803c41 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; 1ba: 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; 1be: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 _ZN8SPIClass5beginEv.constprop.8(): 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); } 1c2: 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) 1c4: 91 30 cpi r25, 0x01 ; 1 1c6: 31 f4 brne .+12 ; 0x1d4 pinMode(): 1c8: 61 e0 ldi r22, 0x01 ; 1 1ca: 8e e0 ldi r24, 0x0E ; 14 1cc: 8f df rcall .-226 ; 0xec 1ce: 61 e0 ldi r22, 0x01 ; 1 1d0: 80 e1 ldi r24, 0x10 ; 16 1d2: e4 cf rjmp .-56 ; 0x19c _ZN8SPIClass5beginEv.constprop.8(): 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) 1d4: 92 30 cpi r25, 0x02 ; 2 1d6: 19 f7 brne .-58 ; 0x19e pinMode(): 1d8: 61 e0 ldi r22, 0x01 ; 1 1da: 8e e1 ldi r24, 0x1E ; 30 1dc: 87 df rcall .-242 ; 0xec 1de: 61 e0 ldi r22, 0x01 ; 1 1e0: 80 e2 ldi r24, 0x20 ; 32 1e2: dc cf rjmp .-72 ; 0x19c 000001e4 : turnOffPWM.part.0(): 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); 1e4: 90 e0 ldi r25, 0x00 ; 0 1e6: fc 01 movw r30, r24 1e8: e0 52 subi r30, 0x20 ; 32 1ea: ff 4a sbci r31, 0xAF ; 175 1ec: 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) 1ee: ee 23 and r30, r30 1f0: 19 f1 breq .+70 ; 0x238 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) 1f2: e1 30 cpi r30, 0x01 ; 1 1f4: 21 f0 breq .+8 ; 0x1fe 1f6: 00 f1 brcs .+64 ; 0x238 1f8: e6 30 cpi r30, 0x06 ; 6 1fa: a8 f0 brcs .+42 ; 0x226 1fc: 08 95 ret C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:109 { /* TCA0 */ case TIMERA0: /* Bit position will give output channel */ bit_pos = digitalPinToBitPosition(pin); 1fe: 87 5f subi r24, 0xF7 ; 247 200: 9e 4a sbci r25, 0xAE ; 174 202: fc 01 movw r30, r24 204: 20 81 ld r18, 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 */ 206: 23 30 cpi r18, 0x03 ; 3 208: 08 f0 brcs .+2 ; 0x20c 20a: 2f 5f subi r18, 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)); 20c: 30 91 01 0a lds r19, 0x0A01 ; 0x800a01 210: 81 e0 ldi r24, 0x01 ; 1 212: 90 e0 ldi r25, 0x00 ; 0 214: 01 c0 rjmp .+2 ; 0x218 216: 88 0f add r24, r24 218: 2a 95 dec r18 21a: ea f7 brpl .-6 ; 0x216 21c: 80 95 com r24 21e: 83 23 and r24, r19 220: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 224: 08 95 ret 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); 226: 80 e1 ldi r24, 0x10 ; 16 228: e8 9f mul r30, r24 22a: f0 01 movw r30, r0 22c: 11 24 eor r1, r1 22e: e0 5a subi r30, 0xA0 ; 160 230: 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); 232: 81 81 ldd r24, Z+1 ; 0x01 234: 8f 7e andi r24, 0xEF ; 239 236: 81 83 std Z+1, r24 ; 0x01 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:132 break; default: break; } } 238: 08 95 ret 0000023a : digitalWrite.part.2(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:134 void digitalWrite(uint8_t pin, uint8_t val) 23a: 0f 93 push r16 23c: 1f 93 push r17 23e: cf 93 push r28 240: df 93 push r29 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 { /* Get bit mask for pin */ uint8_t bit_mask = digitalPinToBitMask(pin); 242: c8 2f mov r28, r24 244: d0 e0 ldi r29, 0x00 ; 0 246: fe 01 movw r30, r28 248: e5 5a subi r30, 0xA5 ; 165 24a: fe 4a sbci r31, 0xAE ; 174 24c: 00 81 ld r16, 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) 24e: 0f 3f cpi r16, 0xFF ; 255 250: 99 f0 breq .+38 ; 0x278 252: 16 2f mov r17, r22 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); 254: 89 32 cpi r24, 0x29 ; 41 256: 08 f4 brcc .+2 ; 0x25a 258: c5 df rcall .-118 ; 0x1e4 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); 25a: fe 01 movw r30, r28 25c: ee 5c subi r30, 0xCE ; 206 25e: fe 4a sbci r31, 0xAE ; 174 260: e0 81 ld r30, Z 262: 80 e2 ldi r24, 0x20 ; 32 264: e8 9f mul r30, r24 266: f0 01 movw r30, r0 268: 11 24 eor r1, r1 26a: 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) 26c: 80 81 ld r24, Z 26e: 80 23 and r24, r16 270: 51 f0 breq .+20 ; 0x286 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) 272: 11 11 cpse r17, r1 274: 06 c0 rjmp .+12 ; 0x282 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; 276: 06 83 std Z+6, r16 ; 0x06 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:203 } /* Restore system status */ SREG = status; } } 278: df 91 pop r29 27a: cf 91 pop r28 27c: 1f 91 pop r17 27e: 0f 91 pop r16 280: 08 95 ret 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; 282: 05 83 std Z+5, r16 ; 0x05 284: f9 cf rjmp .-14 ; 0x278 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); 286: c7 5f subi r28, 0xF7 ; 247 288: de 4a sbci r29, 0xAE ; 174 28a: 88 81 ld r24, Y 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); 28c: 30 97 sbiw r30, 0x00 ; 0 28e: 71 f0 breq .+28 ; 0x2ac 290: 8f 3f cpi r24, 0xFF ; 255 292: 61 f0 breq .+24 ; 0x2ac 294: 70 96 adiw r30, 0x10 ; 16 296: e8 0f add r30, r24 298: 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; 29a: 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(); 29c: 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; 29e: 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) 2a0: 11 11 cpse r17, r1 2a2: 07 c0 rjmp .+14 ; 0x2b2 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; 2a4: 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; 2a6: 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; 2a8: 9f bf out 0x3f, r25 ; 63 2aa: e6 cf rjmp .-52 ; 0x278 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); 2ac: f0 e0 ldi r31, 0x00 ; 0 2ae: e0 e0 ldi r30, 0x00 ; 0 2b0: f4 cf rjmp .-24 ; 0x29a 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; 2b2: 88 60 ori r24, 0x08 ; 8 2b4: f8 cf rjmp .-16 ; 0x2a6 000002b6 : _ZN7MCP25156endSPIEv.constprop.32(): 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() { 2b6: 8f 92 push r8 2b8: 9f 92 push r9 2ba: af 92 push r10 2bc: bf 92 push r11 2be: cf 92 push r12 2c0: df 92 push r13 2c2: ef 92 push r14 2c4: ff 92 push r15 2c6: 0f 93 push r16 2c8: cf 93 push r28 2ca: df 93 push r29 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:30 digitalWrite(SPICS, HIGH); 2cc: 80 91 81 3c lds r24, 0x3C81 ; 0x803c81 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); 2d0: 89 32 cpi r24, 0x29 ; 41 2d2: 10 f4 brcc .+4 ; 0x2d8 2d4: 61 e0 ldi r22, 0x01 ; 1 2d6: b1 df rcall .-158 ; 0x23a 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) 2d8: 80 91 48 3c lds r24, 0x3C48 ; 0x803c48 2dc: 88 23 and r24, r24 2de: 19 f0 breq .+6 ; 0x2e6 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:267 { if (interruptMode & SPI_IMODE_GLOBAL) 2e0: 81 ff sbrs r24, 1 2e2: 0d c0 rjmp .+26 ; 0x2fe C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:269 { interrupts(); 2e4: 78 94 sei _ZN7MCP25156endSPIEv.constprop.32(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:32 SPI.endTransaction(); } 2e6: df 91 pop r29 2e8: cf 91 pop r28 2ea: 0f 91 pop r16 2ec: ff 90 pop r15 2ee: ef 90 pop r14 2f0: df 90 pop r13 2f2: cf 90 pop r12 2f4: bf 90 pop r11 2f6: af 90 pop r10 2f8: 9f 90 pop r9 2fa: 8f 90 pop r8 2fc: 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) 2fe: 80 ff sbrs r24, 0 300: f2 cf rjmp .-28 ; 0x2e6 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; 302: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a 306: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b 30a: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c 30e: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d 312: c1 2c mov r12, r1 314: d1 2c mov r13, r1 316: 76 01 movw r14, r12 _ZN7MCP25156endSPIEv.constprop.32(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:226 uint8_t shift = 0; 318: 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) { 31a: 94 01 movw r18, r8 31c: a5 01 movw r20, r10 31e: b6 01 movw r22, r12 320: c7 01 movw r24, r14 322: a0 e0 ldi r26, 0x00 ; 0 324: ae d6 rcall .+3420 ; 0x1082 <__cmpdi2_s8> 326: 81 f1 breq .+96 ; 0x388 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:228 if (temp & 1) { 328: 21 70 andi r18, 0x01 ; 1 32a: 30 e0 ldi r19, 0x00 ; 0 32c: 40 e0 ldi r20, 0x00 ; 0 32e: 50 e0 ldi r21, 0x00 ; 0 330: 60 e0 ldi r22, 0x00 ; 0 332: 70 e0 ldi r23, 0x00 ; 0 334: 80 e0 ldi r24, 0x00 ; 0 336: 90 e0 ldi r25, 0x00 ; 0 338: a4 d6 rcall .+3400 ; 0x1082 <__cmpdi2_s8> 33a: d1 f0 breq .+52 ; 0x370 _ZN7MCP25156endSPIEv.constprop.32(): 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); 33c: b0 e0 ldi r27, 0x00 ; 0 33e: a0 e0 ldi r26, 0x00 ; 0 reattachMaskedInterrupts(): 340: e0 33 cpi r30, 0x30 ; 48 342: 70 f4 brcc .+28 ; 0x360 344: ae 2f mov r26, r30 346: a6 95 lsr r26 348: a6 95 lsr r26 34a: a6 95 lsr r26 34c: 80 e2 ldi r24, 0x20 ; 32 34e: a8 9f mul r26, r24 350: d0 01 movw r26, r0 352: 11 24 eor r1, r1 354: a0 5f subi r26, 0xF0 ; 240 356: bb 4f sbci r27, 0xFB ; 251 358: 8e 2f mov r24, r30 35a: 87 70 andi r24, 0x07 ; 7 35c: a8 0f add r26, r24 35e: 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]; 360: ce 2f mov r28, r30 362: d0 e0 ldi r29, 0x00 ; 0 364: ce 5b subi r28, 0xBE ; 190 366: d3 4c sbci r29, 0xC3 ; 195 368: 88 89 ldd r24, Y+16 ; 0x10 36a: 9c 91 ld r25, X 36c: 89 2b or r24, r25 36e: 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; 370: 94 01 movw r18, r8 372: a5 01 movw r20, r10 374: b6 01 movw r22, r12 376: c7 01 movw r24, r14 378: 01 e0 ldi r16, 0x01 ; 1 37a: 68 d6 rcall .+3280 ; 0x104c <__lshrdi3> 37c: 49 01 movw r8, r18 37e: 5a 01 movw r10, r20 380: 6b 01 movw r12, r22 382: 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++; 384: ef 5f subi r30, 0xFF ; 255 386: c9 cf rjmp .-110 ; 0x31a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:235 } temp = interruptMask_hi; 388: 80 90 4e 3c lds r8, 0x3C4E ; 0x803c4e 38c: 90 90 4f 3c lds r9, 0x3C4F ; 0x803c4f 390: a0 90 50 3c lds r10, 0x3C50 ; 0x803c50 394: b0 90 51 3c lds r11, 0x3C51 ; 0x803c51 398: c1 2c mov r12, r1 39a: d1 2c mov r13, r1 39c: 76 01 movw r14, r12 _ZN7MCP25156endSPIEv.constprop.32(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:236 shift = 32; 39e: 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) { 3a0: 94 01 movw r18, r8 3a2: a5 01 movw r20, r10 3a4: b6 01 movw r22, r12 3a6: c7 01 movw r24, r14 3a8: a0 e0 ldi r26, 0x00 ; 0 3aa: 6b d6 rcall .+3286 ; 0x1082 <__cmpdi2_s8> 3ac: 09 f4 brne .+2 ; 0x3b0 3ae: 9b cf rjmp .-202 ; 0x2e6 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:238 if (temp & 1) { 3b0: 21 70 andi r18, 0x01 ; 1 3b2: 30 e0 ldi r19, 0x00 ; 0 3b4: 40 e0 ldi r20, 0x00 ; 0 3b6: 50 e0 ldi r21, 0x00 ; 0 3b8: 60 e0 ldi r22, 0x00 ; 0 3ba: 70 e0 ldi r23, 0x00 ; 0 3bc: 80 e0 ldi r24, 0x00 ; 0 3be: 90 e0 ldi r25, 0x00 ; 0 3c0: 60 d6 rcall .+3264 ; 0x1082 <__cmpdi2_s8> 3c2: d1 f0 breq .+52 ; 0x3f8 _ZN7MCP25156endSPIEv.constprop.32(): 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); 3c4: b0 e0 ldi r27, 0x00 ; 0 3c6: a0 e0 ldi r26, 0x00 ; 0 reattachMaskedInterrupts(): 3c8: e0 33 cpi r30, 0x30 ; 48 3ca: 70 f4 brcc .+28 ; 0x3e8 3cc: ae 2f mov r26, r30 3ce: a6 95 lsr r26 3d0: a6 95 lsr r26 3d2: a6 95 lsr r26 3d4: 80 e2 ldi r24, 0x20 ; 32 3d6: a8 9f mul r26, r24 3d8: d0 01 movw r26, r0 3da: 11 24 eor r1, r1 3dc: a0 5f subi r26, 0xF0 ; 240 3de: bb 4f sbci r27, 0xFB ; 251 3e0: 8e 2f mov r24, r30 3e2: 87 70 andi r24, 0x07 ; 7 3e4: a8 0f add r26, r24 3e6: 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]; 3e8: ce 2f mov r28, r30 3ea: d0 e0 ldi r29, 0x00 ; 0 3ec: ce 5b subi r28, 0xBE ; 190 3ee: d3 4c sbci r29, 0xC3 ; 195 3f0: 88 89 ldd r24, Y+16 ; 0x10 3f2: 9c 91 ld r25, X 3f4: 89 2b or r24, r25 3f6: 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; 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: 01 e0 ldi r16, 0x01 ; 1 402: 24 d6 rcall .+3144 ; 0x104c <__lshrdi3> 404: 49 01 movw r8, r18 406: 5a 01 movw r10, r20 408: 6b 01 movw r12, r22 40a: 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++; 40c: ef 5f subi r30, 0xFF ; 255 40e: c8 cf rjmp .-112 ; 0x3a0 00000410 : 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; 410: 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(); 412: 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; 414: 20 91 2b 3c lds r18, 0x3C2B ; 0x803c2b 418: 30 91 2c 3c lds r19, 0x3C2C ; 0x803c2c 41c: 40 91 2d 3c lds r20, 0x3C2D ; 0x803c2d 420: 50 91 2e 3c lds r21, 0x3C2E ; 0x803c2e C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:108 t = _timer->CNT; 424: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa 428: 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) 42c: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 430: 90 ff sbrs r25, 0 432: 08 c0 rjmp .+16 ; 0x444 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:114 { m++; 434: 2f 5f subi r18, 0xFF ; 255 436: 3f 4f sbci r19, 0xFF ; 255 438: 4f 4f sbci r20, 0xFF ; 255 43a: 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; 43c: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa 440: 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; 444: 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); 446: a8 ee ldi r26, 0xE8 ; 232 448: b3 e0 ldi r27, 0x03 ; 3 44a: f4 d5 rcall .+3048 ; 0x1034 <__muluhisi3> 44c: 23 e0 ldi r18, 0x03 ; 3 44e: f6 95 lsr r31 450: e7 95 ror r30 452: 2a 95 dec r18 454: e1 f7 brne .-8 ; 0x44e 456: 6e 0f add r22, r30 458: 7f 1f adc r23, r31 45a: 81 1d adc r24, r1 45c: 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 } 45e: 08 95 ret 00000460 : delay(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:146 void delay(unsigned long ms) { 460: 8f 92 push r8 462: 9f 92 push r9 464: af 92 push r10 466: bf 92 push r11 468: cf 92 push r12 46a: df 92 push r13 46c: ef 92 push r14 46e: ff 92 push r15 470: 4b 01 movw r8, r22 472: 5c 01 movw r10, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:147 uint32_t start_time = micros(), delay_time = 1000 * ms; 474: cd df rcall .-102 ; 0x410 476: 6b 01 movw r12, r22 478: 7c 01 movw r14, r24 47a: a8 ee ldi r26, 0xE8 ; 232 47c: b3 e0 ldi r27, 0x03 ; 3 47e: a5 01 movw r20, r10 480: 94 01 movw r18, r8 482: d8 d5 rcall .+2992 ; 0x1034 <__muluhisi3> C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:150 /* Calculate future time to return */ uint32_t return_time = start_time + delay_time; 484: c6 0e add r12, r22 486: d7 1e adc r13, r23 488: e8 1e adc r14, r24 48a: f9 1e adc r15, r25 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:153 /* If return time overflows */ if (return_time < delay_time) 48c: c6 16 cp r12, r22 48e: d7 06 cpc r13, r23 490: e8 06 cpc r14, r24 492: f9 06 cpc r15, r25 494: 10 f4 brcc .+4 ; 0x49a 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) 496: bc df rcall .-136 ; 0x410 498: f9 cf rjmp .-14 ; 0x48c 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) 49a: ba df rcall .-140 ; 0x410 49c: 6c 15 cp r22, r12 49e: 7d 05 cpc r23, r13 4a0: 8e 05 cpc r24, r14 4a2: 9f 05 cpc r25, r15 4a4: d0 f3 brcs .-12 ; 0x49a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:163 ; } 4a6: ff 90 pop r15 4a8: ef 90 pop r14 4aa: df 90 pop r13 4ac: cf 90 pop r12 4ae: bf 90 pop r11 4b0: af 90 pop r10 4b2: 9f 90 pop r9 4b4: 8f 90 pop r8 4b6: 08 95 ret 000004b8 : _Z7ReadPinP8PinState(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:161 _frame.data[3] = state; mcp2515.sendMessage(MCP2515::TXB1, &_frame); } bool ReadPin(PinState * state) { 4b8: 0f 93 push r16 4ba: 1f 93 push r17 4bc: cf 93 push r28 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:162 if (state->pin_id == PIN_PD2) 4be: fc 01 movw r30, r24 4c0: 80 81 ld r24, Z 4c2: 91 81 ldd r25, Z+1 ; 0x01 4c4: 88 31 cpi r24, 0x18 ; 24 4c6: 91 05 cpc r25, r1 4c8: 41 f4 brne .+16 ; 0x4da digitalReadFast(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 // Old style port logic is a small integer 0 for PORTA, 1 for PORTB etc. vport = (VPORT_t *)(port * 4); // Read pin value from VPORTx.IN register return !!(vport->IN & mask); 4ca: 8e b1 in r24, 0x0e ; 14 4cc: 82 fb bst r24, 2 4ce: 88 27 eor r24, r24 4d0: 80 f9 bld r24, 0 _Z7ReadPinP8PinState(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:180 return digitalReadFast(PIN_PD4); else if (state->pin_id == PIN_PD3) return digitalReadFast(PIN_PD3); else return digitalRead(state->pin_id); } 4d2: cf 91 pop r28 4d4: 1f 91 pop r17 4d6: 0f 91 pop r16 4d8: 08 95 ret C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:164 bool ReadPin(PinState * state) { if (state->pin_id == PIN_PD2) return digitalReadFast(PIN_PD2); else if (state->pin_id == PIN_PC7) 4da: 85 31 cpi r24, 0x15 ; 21 4dc: 91 05 cpc r25, r1 4de: 29 f4 brne .+10 ; 0x4ea digitalReadFast(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 4e0: 8a b1 in r24, 0x0a ; 10 4e2: 88 1f adc r24, r24 4e4: 88 27 eor r24, r24 4e6: 88 1f adc r24, r24 4e8: f4 cf rjmp .-24 ; 0x4d2 _Z7ReadPinP8PinState(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:166 return digitalReadFast(PIN_PC7); else if (state->pin_id == PIN_PD1) 4ea: 87 31 cpi r24, 0x17 ; 23 4ec: 91 05 cpc r25, r1 4ee: 21 f4 brne .+8 ; 0x4f8 digitalReadFast(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 4f0: 8e b1 in r24, 0x0e ; 14 4f2: 86 95 lsr r24 4f4: 81 70 andi r24, 0x01 ; 1 4f6: ed cf rjmp .-38 ; 0x4d2 _Z7ReadPinP8PinState(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:168 return digitalReadFast(PIN_PD1); else if (state->pin_id == PIN_PD0) 4f8: 86 31 cpi r24, 0x16 ; 22 4fa: 91 05 cpc r25, r1 4fc: 19 f4 brne .+6 ; 0x504 digitalReadFast(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 4fe: 8e b1 in r24, 0x0e ; 14 _Z7ReadPinP8PinState(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:179 else if (state->pin_id == PIN_PD4) return digitalReadFast(PIN_PD4); else if (state->pin_id == PIN_PD3) return digitalReadFast(PIN_PD3); else return digitalRead(state->pin_id); 500: 81 70 andi r24, 0x01 ; 1 502: e7 cf rjmp .-50 ; 0x4d2 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:170 return digitalReadFast(PIN_PC7); else if (state->pin_id == PIN_PD1) return digitalReadFast(PIN_PD1); else if (state->pin_id == PIN_PD0) return digitalReadFast(PIN_PD0); else if (state->pin_id == PIN_PD6) 504: 8c 31 cpi r24, 0x1C ; 28 506: 91 05 cpc r25, r1 508: 29 f4 brne .+10 ; 0x514 digitalReadFast(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 50a: 8e b1 in r24, 0x0e ; 14 50c: 86 fb bst r24, 6 50e: 88 27 eor r24, r24 510: 80 f9 bld r24, 0 512: df cf rjmp .-66 ; 0x4d2 _Z7ReadPinP8PinState(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:172 return digitalReadFast(PIN_PD6); else if (state->pin_id == PIN_PD5) 514: 8b 31 cpi r24, 0x1B ; 27 516: 91 05 cpc r25, r1 518: 29 f4 brne .+10 ; 0x524 digitalReadFast(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 51a: 8e b1 in r24, 0x0e ; 14 51c: 85 fb bst r24, 5 51e: 88 27 eor r24, r24 520: 80 f9 bld r24, 0 522: d7 cf rjmp .-82 ; 0x4d2 _Z7ReadPinP8PinState(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:174 return digitalReadFast(PIN_PD5); else if (state->pin_id == PIN_PD4) 524: 8a 31 cpi r24, 0x1A ; 26 526: 91 05 cpc r25, r1 528: 21 f4 brne .+8 ; 0x532 digitalReadFast(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 52a: 8e b1 in r24, 0x0e ; 14 52c: 82 95 swap r24 52e: 81 70 andi r24, 0x01 ; 1 530: d0 cf rjmp .-96 ; 0x4d2 _Z7ReadPinP8PinState(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:176 return digitalReadFast(PIN_PD4); else if (state->pin_id == PIN_PD3) 532: 89 31 cpi r24, 0x19 ; 25 534: 91 05 cpc r25, r1 536: 29 f4 brne .+10 ; 0x542 digitalReadFast(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 538: 8e b1 in r24, 0x0e ; 14 53a: 83 fb bst r24, 3 53c: 88 27 eor r24, r24 53e: 80 f9 bld r24, 0 540: c8 cf rjmp .-112 ; 0x4d2 digitalRead(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:230 } uint8_t digitalRead(uint8_t pin) { /* Get bit mask and check valid pin */ uint8_t bit_mask = digitalPinToBitMask(pin); 542: 89 32 cpi r24, 0x29 ; 41 544: b0 f4 brcc .+44 ; 0x572 546: 8c 01 movw r16, r24 548: 11 27 eor r17, r17 54a: f8 01 movw r30, r16 54c: e5 5a subi r30, 0xA5 ; 165 54e: fe 4a sbci r31, 0xAE ; 174 550: c0 81 ld r28, Z C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:231 if (bit_mask == NOT_A_PIN) 552: cf 3f cpi r28, 0xFF ; 255 554: 71 f0 breq .+28 ; 0x572 turnOffPWM(): 556: 46 de rcall .-884 ; 0x1e4 digitalRead(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:239 // If the pin that support PWM output, we need to turn it off // before getting a digital reading. turnOffPWM(pin); /* Get port and check valid port */ PORT_t *port = digitalPinToPortStruct(pin); 558: f8 01 movw r30, r16 55a: ee 5c subi r30, 0xCE ; 206 55c: fe 4a sbci r31, 0xAE ; 174 55e: e0 81 ld r30, Z 560: 80 e2 ldi r24, 0x20 ; 32 562: e8 9f mul r30, r24 564: f0 01 movw r30, r0 566: 11 24 eor r1, r1 568: 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:242 /* Read pin value from PORTx.IN register */ if (port->IN & bit_mask) 56a: 80 85 ldd r24, Z+8 ; 0x08 56c: c8 23 and r28, r24 56e: 81 e0 ldi r24, 0x01 ; 1 570: 39 f6 brne .-114 ; 0x500 _Z7ReadPinP8PinState(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:232 uint8_t digitalRead(uint8_t pin) { /* Get bit mask and check valid pin */ uint8_t bit_mask = digitalPinToBitMask(pin); if (bit_mask == NOT_A_PIN) return LOW; 572: 80 e0 ldi r24, 0x00 ; 0 574: c5 cf rjmp .-118 ; 0x500 00000576 : _ZN7MCP25158startSPIEv.constprop.26(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24 SPICS = _CS; pinMode(SPICS, OUTPUT); endSPI(); } void MCP2515::startSPI() { 576: 8f 92 push r8 578: 9f 92 push r9 57a: af 92 push r10 57c: bf 92 push r11 57e: cf 92 push r12 580: df 92 push r13 582: ef 92 push r14 584: ff 92 push r15 586: 0f 93 push r16 588: cf 93 push r28 58a: df 93 push r29 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) 58c: 80 91 48 3c lds r24, 0x3C48 ; 0x803c48 590: 88 23 and r24, r24 592: 19 f0 breq .+6 ; 0x59a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:251 { if (interruptMode & SPI_IMODE_GLOBAL) 594: 81 ff sbrs r24, 1 596: 19 c0 rjmp .+50 ; 0x5ca C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:253 { noInterrupts(); 598: 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; 59a: 81 e3 ldi r24, 0x31 ; 49 59c: 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; 5a0: 84 e0 ldi r24, 0x04 ; 4 5a2: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 _ZN7MCP25158startSPIEv.constprop.26(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:26 SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); digitalWrite(SPICS, LOW); 5a6: 80 91 81 3c lds r24, 0x3C81 ; 0x803c81 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); 5aa: 89 32 cpi r24, 0x29 ; 41 5ac: 08 f0 brcs .+2 ; 0x5b0 5ae: 98 c0 rjmp .+304 ; 0x6e0 5b0: 60 e0 ldi r22, 0x00 ; 0 _ZN7MCP25158startSPIEv.constprop.26(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 } 5b2: df 91 pop r29 5b4: cf 91 pop r28 5b6: 0f 91 pop r16 5b8: ff 90 pop r15 5ba: ef 90 pop r14 5bc: df 90 pop r13 5be: cf 90 pop r12 5c0: bf 90 pop r11 5c2: af 90 pop r10 5c4: 9f 90 pop r9 5c6: 8f 90 pop r8 digitalWrite(): 5c8: 38 ce rjmp .-912 ; 0x23a 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) 5ca: 80 ff sbrs r24, 0 5cc: e6 cf rjmp .-52 ; 0x59a 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; 5ce: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a 5d2: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b 5d6: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c 5da: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d 5de: c1 2c mov r12, r1 5e0: d1 2c mov r13, r1 5e2: 76 01 movw r14, r12 _ZN7MCP25158startSPIEv.constprop.26(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:201 uint8_t shift = 0; 5e4: e0 e0 ldi r30, 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) { 5e6: 94 01 movw r18, r8 5e8: a5 01 movw r20, r10 5ea: b6 01 movw r22, r12 5ec: c7 01 movw r24, r14 5ee: a0 e0 ldi r26, 0x00 ; 0 5f0: 48 d5 rcall .+2704 ; 0x1082 <__cmpdi2_s8> 5f2: 89 f1 breq .+98 ; 0x656 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:203 if (temp & 1) { 5f4: 21 70 andi r18, 0x01 ; 1 5f6: 30 e0 ldi r19, 0x00 ; 0 5f8: 40 e0 ldi r20, 0x00 ; 0 5fa: 50 e0 ldi r21, 0x00 ; 0 5fc: 60 e0 ldi r22, 0x00 ; 0 5fe: 70 e0 ldi r23, 0x00 ; 0 600: 80 e0 ldi r24, 0x00 ; 0 602: 90 e0 ldi r25, 0x00 ; 0 604: 3e d5 rcall .+2684 ; 0x1082 <__cmpdi2_s8> 606: d9 f0 breq .+54 ; 0x63e _ZN7MCP25158startSPIEv.constprop.26(): 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); 608: b0 e0 ldi r27, 0x00 ; 0 60a: a0 e0 ldi r26, 0x00 ; 0 detachMaskedInterrupts(): 60c: e0 33 cpi r30, 0x30 ; 48 60e: 70 f4 brcc .+28 ; 0x62c 610: ae 2f mov r26, r30 612: a6 95 lsr r26 614: a6 95 lsr r26 616: a6 95 lsr r26 618: 80 e2 ldi r24, 0x20 ; 32 61a: a8 9f mul r26, r24 61c: d0 01 movw r26, r0 61e: 11 24 eor r1, r1 620: a0 5f subi r26, 0xF0 ; 240 622: bb 4f sbci r27, 0xFB ; 251 624: 8e 2f mov r24, r30 626: 87 70 andi r24, 0x07 ; 7 628: a8 0f add r26, r24 62a: b1 1d adc r27, 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; 62c: ce 2f mov r28, r30 62e: d0 e0 ldi r29, 0x00 ; 0 630: 8c 91 ld r24, X 632: ce 5b subi r28, 0xBE ; 190 634: d3 4c sbci r29, 0xC3 ; 195 636: 88 8b std Y+16, r24 ; 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); 638: 8c 91 ld r24, X 63a: 88 7f andi r24, 0xF8 ; 248 63c: 8c 93 st X, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:208 } temp = temp >> 1; 63e: 94 01 movw r18, r8 640: a5 01 movw r20, r10 642: b6 01 movw r22, r12 644: c7 01 movw r24, r14 646: 01 e0 ldi r16, 0x01 ; 1 648: 01 d5 rcall .+2562 ; 0x104c <__lshrdi3> 64a: 49 01 movw r8, r18 64c: 5a 01 movw r10, r20 64e: 6b 01 movw r12, r22 650: 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++; 652: ef 5f subi r30, 0xFF ; 255 654: c8 cf rjmp .-112 ; 0x5e6 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:211 } temp = interruptMask_hi; 656: 80 90 4e 3c lds r8, 0x3C4E ; 0x803c4e 65a: 90 90 4f 3c lds r9, 0x3C4F ; 0x803c4f 65e: a0 90 50 3c lds r10, 0x3C50 ; 0x803c50 662: b0 90 51 3c lds r11, 0x3C51 ; 0x803c51 666: c1 2c mov r12, r1 668: d1 2c mov r13, r1 66a: 76 01 movw r14, r12 _ZN7MCP25158startSPIEv.constprop.26(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:212 shift = 32; 66c: e0 e2 ldi r30, 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) { 66e: 94 01 movw r18, r8 670: a5 01 movw r20, r10 672: b6 01 movw r22, r12 674: c7 01 movw r24, r14 676: a0 e0 ldi r26, 0x00 ; 0 678: 04 d5 rcall .+2568 ; 0x1082 <__cmpdi2_s8> 67a: 09 f4 brne .+2 ; 0x67e 67c: 8e cf rjmp .-228 ; 0x59a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:214 if (temp & 1) { 67e: 21 70 andi r18, 0x01 ; 1 680: 30 e0 ldi r19, 0x00 ; 0 682: 40 e0 ldi r20, 0x00 ; 0 684: 50 e0 ldi r21, 0x00 ; 0 686: 60 e0 ldi r22, 0x00 ; 0 688: 70 e0 ldi r23, 0x00 ; 0 68a: 80 e0 ldi r24, 0x00 ; 0 68c: 90 e0 ldi r25, 0x00 ; 0 68e: f9 d4 rcall .+2546 ; 0x1082 <__cmpdi2_s8> 690: d9 f0 breq .+54 ; 0x6c8 _ZN7MCP25158startSPIEv.constprop.26(): 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); 692: b0 e0 ldi r27, 0x00 ; 0 694: a0 e0 ldi r26, 0x00 ; 0 detachMaskedInterrupts(): 696: e0 33 cpi r30, 0x30 ; 48 698: 70 f4 brcc .+28 ; 0x6b6 69a: ae 2f mov r26, r30 69c: a6 95 lsr r26 69e: a6 95 lsr r26 6a0: a6 95 lsr r26 6a2: 80 e2 ldi r24, 0x20 ; 32 6a4: a8 9f mul r26, r24 6a6: d0 01 movw r26, r0 6a8: 11 24 eor r1, r1 6aa: a0 5f subi r26, 0xF0 ; 240 6ac: bb 4f sbci r27, 0xFB ; 251 6ae: 8e 2f mov r24, r30 6b0: 87 70 andi r24, 0x07 ; 7 6b2: a8 0f add r26, r24 6b4: b1 1d adc r27, 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; 6b6: ce 2f mov r28, r30 6b8: d0 e0 ldi r29, 0x00 ; 0 6ba: 8c 91 ld r24, X 6bc: ce 5b subi r28, 0xBE ; 190 6be: d3 4c sbci r29, 0xC3 ; 195 6c0: 88 8b std Y+16, r24 ; 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); 6c2: 8c 91 ld r24, X 6c4: 88 7f andi r24, 0xF8 ; 248 6c6: 8c 93 st X, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:219 } temp = temp >> 1; 6c8: 94 01 movw r18, r8 6ca: a5 01 movw r20, r10 6cc: b6 01 movw r22, r12 6ce: c7 01 movw r24, r14 6d0: 01 e0 ldi r16, 0x01 ; 1 6d2: bc d4 rcall .+2424 ; 0x104c <__lshrdi3> 6d4: 49 01 movw r8, r18 6d6: 5a 01 movw r10, r20 6d8: 6b 01 movw r12, r22 6da: 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++; 6dc: ef 5f subi r30, 0xFF ; 255 6de: c7 cf rjmp .-114 ; 0x66e _ZN7MCP25158startSPIEv.constprop.26(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 6e0: df 91 pop r29 6e2: cf 91 pop r28 6e4: 0f 91 pop r16 6e6: ff 90 pop r15 6e8: ef 90 pop r14 6ea: df 90 pop r13 6ec: cf 90 pop r12 6ee: bf 90 pop r11 6f0: af 90 pop r10 6f2: 9f 90 pop r9 6f4: 8f 90 pop r8 6f6: 08 95 ret 000006f8 : _ZN7MCP251512setRegistersENS_8REGISTEREPKhh.constprop.25(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:117 SPI.transfer(reg); SPI.transfer(value); endSPI(); } void MCP2515::setRegisters(const REGISTER reg, const uint8_t values[], const uint8_t n) 6f8: ff 92 push r15 6fa: 0f 93 push r16 6fc: 1f 93 push r17 6fe: cf 93 push r28 700: df 93 push r29 702: c8 2f mov r28, r24 704: f6 2e mov r15, r22 706: 17 2f mov r17, r23 708: 04 2f mov r16, r20 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:119 { startSPI(); 70a: 35 df rcall .-406 ; 0x576 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:120 SPI.transfer(INSTRUCTION_WRITE); 70c: 82 e0 ldi r24, 0x02 ; 2 70e: e4 dc rcall .-1592 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:121 SPI.transfer(reg); 710: 8c 2f mov r24, r28 712: e2 dc rcall .-1596 ; 0xd8 714: cf 2d mov r28, r15 716: d1 2f mov r29, r17 718: 0c 0f add r16, r28 71a: 1d 2f mov r17, r29 71c: 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]); 724: 89 91 ld r24, Y+ 726: d8 dc rcall .-1616 ; 0xd8 728: fa cf rjmp .-12 ; 0x71e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:126 } endSPI(); } 72a: df 91 pop r29 72c: cf 91 pop r28 72e: 1f 91 pop r17 730: 0f 91 pop r16 732: ff 90 pop r15 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125 SPI.transfer(INSTRUCTION_WRITE); SPI.transfer(reg); for (uint8_t i=0; i 00000736 : _ZN7MCP251514modifyRegisterENS_8REGISTEREhh.constprop.24(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:128 } void MCP2515::modifyRegister(const REGISTER reg, const uint8_t mask, const uint8_t data) 736: 1f 93 push r17 738: cf 93 push r28 73a: df 93 push r29 73c: 18 2f mov r17, r24 73e: d6 2f mov r29, r22 740: c4 2f mov r28, r20 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:130 { startSPI(); 742: 19 df rcall .-462 ; 0x576 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:131 SPI.transfer(INSTRUCTION_BITMOD); 744: 85 e0 ldi r24, 0x05 ; 5 746: c8 dc rcall .-1648 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:132 SPI.transfer(reg); 748: 81 2f mov r24, r17 74a: c6 dc rcall .-1652 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:133 SPI.transfer(mask); 74c: 8d 2f mov r24, r29 74e: c4 dc rcall .-1656 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:134 SPI.transfer(data); 750: 8c 2f mov r24, r28 752: c2 dc rcall .-1660 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:136 endSPI(); } 754: df 91 pop r29 756: cf 91 pop r28 758: 1f 91 pop r17 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: ad cd rjmp .-1190 ; 0x2b6 0000075c : _ZN7MCP251512readRegisterENS_8REGISTERE.constprop.23(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:85 } return ERROR_OK; } uint8_t MCP2515::readRegister(const REGISTER reg) 75c: cf 93 push r28 75e: c8 2f mov r28, r24 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:87 { startSPI(); 760: 0a df rcall .-492 ; 0x576 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:88 SPI.transfer(INSTRUCTION_READ); 762: 83 e0 ldi r24, 0x03 ; 3 764: b9 dc rcall .-1678 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:89 SPI.transfer(reg); 766: 8c 2f mov r24, r28 768: b7 dc rcall .-1682 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:90 uint8_t ret = SPI.transfer(0x00); 76a: 80 e0 ldi r24, 0x00 ; 0 76c: b5 dc rcall .-1686 ; 0xd8 76e: c8 2f mov r28, r24 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91 endSPI(); 770: a2 dd rcall .-1212 ; 0x2b6 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:94 return ret; } 772: 8c 2f mov r24, r28 774: cf 91 pop r28 776: 08 95 ret 00000778 : _ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.20(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:173 MCP2515::ERROR MCP2515::setNormalMode() { return setMode(CANCTRL_REQOP_NORMAL); } MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode) 778: cf 92 push r12 77a: df 92 push r13 77c: ef 92 push r14 77e: ff 92 push r15 780: cf 93 push r28 782: c8 2f mov r28, r24 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:175 { modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); 784: 48 2f mov r20, r24 786: 60 ee ldi r22, 0xE0 ; 224 788: 8f e0 ldi r24, 0x0F ; 15 78a: d5 df rcall .-86 ; 0x736 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; 78c: 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(); 78e: 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; 790: c0 90 2b 3c lds r12, 0x3C2B ; 0x803c2b 794: d0 90 2c 3c lds r13, 0x3C2C ; 0x803c2c 798: e0 90 2d 3c lds r14, 0x3C2D ; 0x803c2d 79c: f0 90 2e 3c lds r15, 0x3C2E ; 0x803c2e C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92 SREG = status; 7a0: 8f bf out 0x3f, r24 ; 63 _ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.20(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:177 unsigned long endTime = millis() + 10; 7a2: 8a e0 ldi r24, 0x0A ; 10 7a4: c8 0e add r12, r24 7a6: d1 1c adc r13, r1 7a8: e1 1c adc r14, r1 7aa: 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; 7ac: 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(); 7ae: 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; 7b0: 80 91 2b 3c lds r24, 0x3C2B ; 0x803c2b 7b4: 90 91 2c 3c lds r25, 0x3C2C ; 0x803c2c 7b8: a0 91 2d 3c lds r26, 0x3C2D ; 0x803c2d 7bc: b0 91 2e 3c lds r27, 0x3C2E ; 0x803c2e C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92 SREG = status; 7c0: 2f bf out 0x3f, r18 ; 63 _ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.20(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 bool modeMatch = false; while (millis() < endTime) { 7c2: 8c 15 cp r24, r12 7c4: 9d 05 cpc r25, r13 7c6: ae 05 cpc r26, r14 7c8: bf 05 cpc r27, r15 7ca: 78 f4 brcc .+30 ; 0x7ea C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:180 uint8_t newmode = readRegister(MCP_CANSTAT); 7cc: 8e e0 ldi r24, 0x0E ; 14 7ce: c6 df rcall .-116 ; 0x75c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:181 newmode &= CANSTAT_OPMOD; 7d0: 80 7e andi r24, 0xE0 ; 224 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:185 modeMatch = newmode == mode; if (modeMatch) { 7d2: c8 13 cpse r28, r24 7d4: eb cf rjmp .-42 ; 0x7ac 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; 7d6: 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; 7d8: 91 e0 ldi r25, 0x01 ; 1 7da: 89 27 eor r24, r25 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:192 } 7dc: 90 e0 ldi r25, 0x00 ; 0 7de: cf 91 pop r28 7e0: ff 90 pop r15 7e2: ef 90 pop r14 7e4: df 90 pop r13 7e6: cf 90 pop r12 7e8: 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) { 7ea: 80 e0 ldi r24, 0x00 ; 0 7ec: f5 cf rjmp .-22 ; 0x7d8 000007ee : _ZN7MCP251511setRegisterENS_8REGISTEREh.constprop.18(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:108 values[i] = SPI.transfer(0x00); } endSPI(); } void MCP2515::setRegister(const REGISTER reg, const uint8_t value) 7ee: cf 93 push r28 7f0: df 93 push r29 7f2: d8 2f mov r29, r24 7f4: c6 2f mov r28, r22 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:110 { startSPI(); 7f6: bf de rcall .-642 ; 0x576 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:111 SPI.transfer(INSTRUCTION_WRITE); 7f8: 82 e0 ldi r24, 0x02 ; 2 7fa: 6e dc rcall .-1828 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:112 SPI.transfer(reg); 7fc: 8d 2f mov r24, r29 7fe: 6c dc rcall .-1832 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:113 SPI.transfer(value); 800: 8c 2f mov r24, r28 802: 6a dc rcall .-1836 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:115 endSPI(); } 804: df 91 pop r29 806: cf 91 pop r28 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114 { startSPI(); SPI.transfer(INSTRUCTION_WRITE); SPI.transfer(reg); SPI.transfer(value); endSPI(); 808: 56 cd rjmp .-1364 ; 0x2b6 0000080a : _ZN7MCP251513readRegistersENS_8REGISTEREPhh.constprop.7(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:96 endSPI(); return ret; } void MCP2515::readRegisters(const REGISTER reg, uint8_t values[], const uint8_t n) 80a: ff 92 push r15 80c: 0f 93 push r16 80e: 1f 93 push r17 810: cf 93 push r28 812: df 93 push r29 814: c8 2f mov r28, r24 816: f6 2e mov r15, r22 818: 17 2f mov r17, r23 81a: 04 2f mov r16, r20 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:98 { startSPI(); 81c: ac de rcall .-680 ; 0x576 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:99 SPI.transfer(INSTRUCTION_READ); 81e: 83 e0 ldi r24, 0x03 ; 3 820: 5b dc rcall .-1866 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:100 SPI.transfer(reg); 822: 8c 2f mov r24, r28 824: 59 dc rcall .-1870 ; 0xd8 826: cf 2d mov r28, r15 828: d1 2f mov r29, r17 82a: 0c 0f add r16, r28 82c: 1d 2f mov r17, r29 82e: 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); 836: 80 e0 ldi r24, 0x00 ; 0 838: 4f dc rcall .-1890 ; 0xd8 83a: 89 93 st Y+, r24 83c: f9 cf rjmp .-14 ; 0x830 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:106 } endSPI(); } 83e: df 91 pop r29 840: cf 91 pop r28 842: 1f 91 pop r17 844: 0f 91 pop r16 846: ff 90 pop r15 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 0000084a : _ZN7MCP251511readMessageENS_4RXBnEP9can_frame.constprop.6(): 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) 84a: bf 92 push r11 84c: cf 92 push r12 84e: df 92 push r13 850: ef 92 push r14 852: ff 92 push r15 854: 0f 93 push r16 856: 1f 93 push r17 858: cf 93 push r28 85a: df 93 push r29 85c: cd b7 in r28, 0x3d ; 61 85e: de b7 in r29, 0x3e ; 62 860: 25 97 sbiw r28, 0x05 ; 5 862: cd bf out 0x3d, r28 ; 61 864: de bf out 0x3e, r29 ; 62 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); 866: 8c 01 movw r16, r24 868: 00 0f add r16, r16 86a: 11 1f adc r17, r17 86c: 00 0f add r16, r16 86e: 11 1f adc r17, r17 870: f8 01 movw r30, r16 872: ec 57 subi r30, 0x7C ; 124 874: fe 4a sbci r31, 0xAE ; 174 876: 45 e0 ldi r20, 0x05 ; 5 878: be 01 movw r22, r28 87a: 6f 5f subi r22, 0xFF ; 255 87c: 7f 4f sbci r23, 0xFF ; 255 87e: 81 81 ldd r24, Z+1 ; 0x01 880: c4 df rcall .-120 ; 0x80a C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:637 uint32_t id = (tbufdata[MCP_SIDH]<<3) + (tbufdata[MCP_SIDL]>>5); 882: 8a 81 ldd r24, Y+2 ; 0x02 884: c9 80 ldd r12, Y+1 ; 0x01 886: 98 e0 ldi r25, 0x08 ; 8 888: c9 9e mul r12, r25 88a: 60 01 movw r12, r0 88c: 11 24 eor r1, r1 88e: 28 2f mov r18, r24 890: 30 e0 ldi r19, 0x00 ; 0 892: 55 e0 ldi r21, 0x05 ; 5 894: 35 95 asr r19 896: 27 95 ror r18 898: 5a 95 dec r21 89a: e1 f7 brne .-8 ; 0x894 89c: c2 0e add r12, r18 89e: d3 1e adc r13, r19 8a0: 0d 2c mov r0, r13 8a2: 00 0c add r0, r0 8a4: ee 08 sbc r14, r14 8a6: 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 ) { 8a8: 83 ff sbrs r24, 3 8aa: 20 c0 rjmp .+64 ; 0x8ec C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:640 id = (id<<2) + (tbufdata[MCP_SIDL] & 0x03); 8ac: 92 e0 ldi r25, 0x02 ; 2 8ae: cc 0c add r12, r12 8b0: dd 1c adc r13, r13 8b2: ee 1c adc r14, r14 8b4: ff 1c adc r15, r15 8b6: 9a 95 dec r25 8b8: d1 f7 brne .-12 ; 0x8ae 8ba: 83 70 andi r24, 0x03 ; 3 8bc: c8 0e add r12, r24 8be: d1 1c adc r13, r1 8c0: e1 1c adc r14, r1 8c2: f1 1c adc r15, r1 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:641 id = (id<<8) + tbufdata[MCP_EID8]; 8c4: fe 2c mov r15, r14 8c6: ed 2c mov r14, r13 8c8: dc 2c mov r13, r12 8ca: cc 24 eor r12, r12 8cc: 8b 81 ldd r24, Y+3 ; 0x03 8ce: c8 0e add r12, r24 8d0: d1 1c adc r13, r1 8d2: e1 1c adc r14, r1 8d4: f1 1c adc r15, r1 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:642 id = (id<<8) + tbufdata[MCP_EID0]; 8d6: fe 2c mov r15, r14 8d8: ed 2c mov r14, r13 8da: dc 2c mov r13, r12 8dc: cc 24 eor r12, r12 8de: 8c 81 ldd r24, Y+4 ; 0x04 8e0: c8 0e add r12, r24 8e2: d1 1c adc r13, r1 8e4: e1 1c adc r14, r1 8e6: f1 1c adc r15, r1 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:643 id |= CAN_EFF_FLAG; 8e8: 68 94 set 8ea: f7 f8 bld r15, 7 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:646 } uint8_t dlc = (tbufdata[MCP_DLC] & DLC_MASK); 8ec: 8d 81 ldd r24, Y+5 ; 0x05 8ee: 8f 70 andi r24, 0x0F ; 15 8f0: b8 2e mov r11, r24 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:647 if (dlc > CAN_MAX_DLEN) { 8f2: e8 e0 ldi r30, 0x08 ; 8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:648 return ERROR_FAIL; 8f4: 81 e0 ldi r24, 0x01 ; 1 8f6: 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) { 8f8: eb 15 cp r30, r11 8fa: 10 f1 brcs .+68 ; 0x940 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:651 return ERROR_FAIL; } uint8_t ctrl = readRegister(rxb->CTRL); 8fc: f8 01 movw r30, r16 8fe: ec 57 subi r30, 0x7C ; 124 900: fe 4a sbci r31, 0xAE ; 174 902: 80 81 ld r24, Z 904: 2b df rcall .-426 ; 0x75c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:652 if (ctrl & RXBnCTRL_RTR) { 906: 83 ff sbrs r24, 3 908: 02 c0 rjmp .+4 ; 0x90e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:653 id |= CAN_RTR_FLAG; 90a: 68 94 set 90c: f6 f8 bld r15, 6 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:656 } frame->can_id = id; 90e: c0 92 30 3c sts 0x3C30, r12 ; 0x803c30 <_frame> 912: d0 92 31 3c sts 0x3C31, r13 ; 0x803c31 <_frame+0x1> 916: e0 92 32 3c sts 0x3C32, r14 ; 0x803c32 <_frame+0x2> 91a: f0 92 33 3c sts 0x3C33, r15 ; 0x803c33 <_frame+0x3> C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:657 frame->can_dlc = dlc; 91e: b0 92 34 3c sts 0x3C34, r11 ; 0x803c34 <_frame+0x4> C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:659 readRegisters(rxb->DATA, frame->data, dlc); 922: 0c 57 subi r16, 0x7C ; 124 924: 1e 4a sbci r17, 0xAE ; 174 926: 4b 2d mov r20, r11 928: 68 e3 ldi r22, 0x38 ; 56 92a: 7c e3 ldi r23, 0x3C ; 60 92c: f8 01 movw r30, r16 92e: 82 81 ldd r24, Z+2 ; 0x02 930: 6c df rcall .-296 ; 0x80a C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:661 modifyRegister(MCP_CANINTF, rxb->CANINTF_RXnIF, 0); 932: 40 e0 ldi r20, 0x00 ; 0 934: f8 01 movw r30, r16 936: 63 81 ldd r22, Z+3 ; 0x03 938: 8c e2 ldi r24, 0x2C ; 44 93a: fd de rcall .-518 ; 0x736 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:663 return ERROR_OK; 93c: 90 e0 ldi r25, 0x00 ; 0 93e: 80 e0 ldi r24, 0x00 ; 0 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:664 } 940: 25 96 adiw r28, 0x05 ; 5 942: cd bf out 0x3d, r28 ; 61 944: de bf out 0x3e, r29 ; 62 946: df 91 pop r29 948: cf 91 pop r28 94a: 1f 91 pop r17 94c: 0f 91 pop r16 94e: ff 90 pop r15 950: ef 90 pop r14 952: df 90 pop r13 954: cf 90 pop r12 956: bf 90 pop r11 958: 08 95 ret 0000095a : _ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.part.3.constprop.22(): 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) 95a: cf 92 push r12 95c: df 92 push r13 95e: ef 92 push r14 960: ff 92 push r15 962: 0f 93 push r16 964: 1f 93 push r17 966: cf 93 push r28 968: df 93 push r29 96a: cd b7 in r28, 0x3d ; 61 96c: de b7 in r29, 0x3e ; 62 96e: 2d 97 sbiw r28, 0x0d ; 13 970: cd bf out 0x3d, r28 ; 61 972: de bf out 0x3e, r29 ; 62 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); 974: 80 91 30 3c lds r24, 0x3C30 ; 0x803c30 <_frame> 978: 90 91 31 3c lds r25, 0x3C31 ; 0x803c31 <_frame+0x1> 97c: a0 91 32 3c lds r26, 0x3C32 ; 0x803c32 <_frame+0x2> 980: b0 91 33 3c lds r27, 0x3C33 ; 0x803c33 <_frame+0x3> 984: ac 01 movw r20, r24 986: bd 01 movw r22, r26 988: 44 27 eor r20, r20 98a: 77 fd sbrc r23, 7 98c: 43 95 inc r20 98e: 55 27 eor r21, r21 990: 66 27 eor r22, r22 992: 77 27 eor r23, r23 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590 bool rtr = (frame->can_id & CAN_RTR_FLAG); 994: 6c 01 movw r12, r24 996: 7d 01 movw r14, r26 998: cc 24 eor r12, r12 99a: dd 24 eor r13, r13 99c: ee 24 eor r14, r14 99e: 20 e4 ldi r18, 0x40 ; 64 9a0: f2 22 and r15, 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)); 9a2: 0f ef ldi r16, 0xFF ; 255 9a4: 1f ef ldi r17, 0xFF ; 255 9a6: 2f ef ldi r18, 0xFF ; 255 9a8: 3f e1 ldi r19, 0x1F ; 31 9aa: 41 11 cpse r20, r1 9ac: 04 c0 rjmp .+8 ; 0x9b6 9ae: 0f ef ldi r16, 0xFF ; 255 9b0: 17 e0 ldi r17, 0x07 ; 7 9b2: 20 e0 ldi r18, 0x00 ; 0 9b4: 30 e0 ldi r19, 0x00 ; 0 9b6: 80 23 and r24, r16 9b8: 91 23 and r25, r17 9ba: a2 23 and r26, r18 9bc: b3 23 and r27, r19 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) { 9be: 44 23 and r20, r20 9c0: 09 f4 brne .+2 ; 0x9c4 9c2: 42 c0 rjmp .+132 ; 0xa48 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); 9c4: 8c 83 std Y+4, r24 ; 0x04 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 buffer[MCP_EID8] = (uint8_t) (canid >> 8); 9c6: 9b 83 std Y+3, r25 ; 0x03 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516 canid = (uint16_t)(id >> 16); 9c8: cd 01 movw r24, r26 9ca: aa 27 eor r26, r26 9cc: bb 27 eor r27, r27 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517 buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); 9ce: 28 2f mov r18, r24 9d0: 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; 9d2: 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); 9d4: 38 2f mov r19, r24 9d6: 33 0f add r19, r19 9d8: 33 0f add r19, r19 9da: 33 0f add r19, r19 9dc: 30 7e andi r19, 0xE0 ; 224 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 buffer[MCP_SIDL] |= TXB_EXIDE_MASK; 9de: 23 2b or r18, r19 9e0: 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); 9e2: 35 e0 ldi r19, 0x05 ; 5 9e4: 96 95 lsr r25 9e6: 87 95 ror r24 9e8: 3a 95 dec r19 9ea: e1 f7 brne .-8 ; 0x9e4 9ec: 89 83 std Y+1, r24 ; 0x01 9ee: 10 91 34 3c lds r17, 0x3C34 ; 0x803c34 <_frame+0x4> _ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.part.3.constprop.22(): 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; 9f2: 81 2f mov r24, r17 9f4: cd 28 or r12, r13 9f6: ce 28 or r12, r14 9f8: cf 28 or r12, r15 9fa: 09 f0 breq .+2 ; 0x9fe 9fc: 80 64 ori r24, 0x40 ; 64 9fe: 8d 83 std Y+5, r24 ; 0x05 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:597 memcpy(&data[MCP_DATA], frame->data, frame->can_dlc); a00: 41 2f mov r20, r17 a02: 50 e0 ldi r21, 0x00 ; 0 a04: 68 e3 ldi r22, 0x38 ; 56 a06: 7c e3 ldi r23, 0x3C ; 60 a08: ce 01 movw r24, r28 a0a: 06 96 adiw r24, 0x06 ; 6 a0c: 58 d3 rcall .+1712 ; 0x10be C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599 setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc); a0e: 45 e0 ldi r20, 0x05 ; 5 a10: 41 0f add r20, r17 a12: be 01 movw r22, r28 a14: 6f 5f subi r22, 0xFF ; 255 a16: 7f 4f sbci r23, 0xFF ; 255 a18: 81 e4 ldi r24, 0x41 ; 65 a1a: 6e de rcall .-804 ; 0x6f8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:601 modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ); a1c: 48 e0 ldi r20, 0x08 ; 8 a1e: 68 e0 ldi r22, 0x08 ; 8 a20: 80 e4 ldi r24, 0x40 ; 64 a22: 89 de rcall .-750 ; 0x736 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:603 uint8_t ctrl = readRegister(txbuf->CTRL); a24: 80 e4 ldi r24, 0x40 ; 64 a26: 9a de rcall .-716 ; 0x75c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:604 if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) { a28: 80 77 andi r24, 0x70 ; 112 a2a: e1 f0 breq .+56 ; 0xa64 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:605 return ERROR_FAILTX; a2c: 84 e0 ldi r24, 0x04 ; 4 a2e: 90 e0 ldi r25, 0x00 ; 0 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:608 } return ERROR_OK; } a30: 2d 96 adiw r28, 0x0d ; 13 a32: cd bf out 0x3d, r28 ; 61 a34: de bf out 0x3e, r29 ; 62 a36: df 91 pop r29 a38: cf 91 pop r28 a3a: 1f 91 pop r17 a3c: 0f 91 pop r16 a3e: ff 90 pop r15 a40: ef 90 pop r14 a42: df 90 pop r13 a44: cf 90 pop r12 a46: 08 95 ret prepareId(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); buffer[MCP_SIDL] |= TXB_EXIDE_MASK; buffer[MCP_SIDH] = (uint8_t) (canid >> 5); } else { buffer[MCP_SIDH] = (uint8_t) (canid >> 3); a48: 9c 01 movw r18, r24 a4a: 93 e0 ldi r25, 0x03 ; 3 a4c: 36 95 lsr r19 a4e: 27 95 ror r18 a50: 9a 95 dec r25 a52: e1 f7 brne .-8 ; 0xa4c a54: 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); a56: 82 95 swap r24 a58: 88 0f add r24, r24 a5a: 80 7e andi r24, 0xE0 ; 224 a5c: 8a 83 std Y+2, r24 ; 0x02 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 buffer[MCP_EID0] = 0; a5e: 1c 82 std Y+4, r1 ; 0x04 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 buffer[MCP_EID8] = 0; a60: 1b 82 std Y+3, r1 ; 0x03 a62: c5 cf rjmp .-118 ; 0x9ee _ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.part.3.constprop.22(): 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; a64: 90 e0 ldi r25, 0x00 ; 0 a66: 80 e0 ldi r24, 0x00 ; 0 a68: e3 cf rjmp .-58 ; 0xa30 00000a6a <__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 { a6a: 1f 92 push r1 a6c: 0f 92 push r0 a6e: 0f b6 in r0, 0x3f ; 63 a70: 0f 92 push r0 a72: 11 24 eor r1, r1 a74: 8f 93 push r24 a76: 9f 93 push r25 a78: af 93 push r26 a7a: 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++; a7c: 80 91 2b 3c lds r24, 0x3C2B ; 0x803c2b a80: 90 91 2c 3c lds r25, 0x3C2C ; 0x803c2c a84: a0 91 2d 3c lds r26, 0x3C2D ; 0x803c2d a88: b0 91 2e 3c lds r27, 0x3C2E ; 0x803c2e a8c: 01 96 adiw r24, 0x01 ; 1 a8e: a1 1d adc r26, r1 a90: b1 1d adc r27, r1 a92: 80 93 2b 3c sts 0x3C2B, r24 ; 0x803c2b a96: 90 93 2c 3c sts 0x3C2C, r25 ; 0x803c2c a9a: a0 93 2d 3c sts 0x3C2D, r26 ; 0x803c2d a9e: b0 93 2e 3c sts 0x3C2E, r27 ; 0x803c2e 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; aa2: 81 e0 ldi r24, 0x01 ; 1 aa4: 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 } aa8: bf 91 pop r27 aaa: af 91 pop r26 aac: 9f 91 pop r25 aae: 8f 91 pop r24 ab0: 0f 90 pop r0 ab2: 0f be out 0x3f, r0 ; 63 ab4: 0f 90 pop r0 ab6: 1f 90 pop r1 ab8: 18 95 reti 00000aba : _GLOBAL__I_65535_0_UPSoftware.ino.cpp.o.2731(): aba: e0 e4 ldi r30, 0x40 ; 64 abc: fc e3 ldi r31, 0x3C ; 60 abe: 84 e0 ldi r24, 0x04 ; 4 ac0: 81 83 std Z+1, r24 ; 0x01 ac2: 81 e3 ldi r24, 0x31 ; 49 ac4: 80 83 st Z, r24 ac6: e2 e4 ldi r30, 0x42 ; 66 ac8: fc e3 ldi r31, 0x3C ; 60 aca: 15 82 std Z+5, r1 ; 0x05 acc: 14 82 std Z+4, r1 ; 0x04 ace: 3c db rcall .-2440 ; 0x148 ad0: 83 e0 ldi r24, 0x03 ; 3 ad2: 80 93 81 3c sts 0x3C81, r24 ; 0x803c81 ad6: 61 e0 ldi r22, 0x01 ; 1 ad8: 09 db rcall .-2542 ; 0xec ada: ed cb rjmp .-2086 ; 0x2b6 00000adc
: main(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:29 void setupUSB() __attribute__((weak)); void setupUSB() {} int main(void) { adc: cf 93 push r28 ade: df 93 push r29 ae0: cd b7 in r28, 0x3d ; 61 ae2: de b7 in r29, 0x3e ; 62 ae4: a2 97 sbiw r28, 0x22 ; 34 ae6: cd bf out 0x3d, r28 ; 61 ae8: de bf out 0x3e, r29 ; 62 init(): 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)); aea: 91 e0 ldi r25, 0x01 ; 1 aec: 88 ed ldi r24, 0xD8 ; 216 aee: 84 bf out 0x34, r24 ; 52 af0: 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; af4: 80 91 02 06 lds r24, 0x0602 ; 0x800602 af8: 85 60 ori r24, 0x05 ; 5 afa: 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; afe: 80 91 00 06 lds r24, 0x0600 ; 0x800600 b02: 81 60 ori r24, 0x01 ; 1 b04: 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... b08: 80 91 02 06 lds r24, 0x0602 ; 0x800602 b0c: 8f 7c andi r24, 0xCF ; 207 b0e: 80 65 ori r24, 0x50 ; 80 b10: 80 93 02 06 sts 0x0602, r24 ; 0x800602 init(): 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; b14: 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; b18: 82 e0 ldi r24, 0x02 ; 2 b1a: 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; b1e: 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; b22: 8e ef ldi r24, 0xFE ; 254 b24: 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 = b28: 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; b2c: 80 e8 ldi r24, 0x80 ; 128 b2e: 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 = b32: 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 = b36: 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 = b3a: 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 = b3e: 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 = b42: 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); b46: 89 e0 ldi r24, 0x09 ; 9 b48: 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 b4c: 87 e0 ldi r24, 0x07 ; 7 b4e: 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; b52: e0 e8 ldi r30, 0x80 ; 128 b54: 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); b56: 17 e0 ldi r17, 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; b58: 9e ef ldi r25, 0xFE ; 254 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519 // default duty 50%, set when output enabled timer_B->CCMPH = PWM_TIMER_COMPARE; b5a: 80 e8 ldi r24, 0x80 ; 128 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523 // Use TCA clock (250kHz) and enable // (sync update commented out, might try to synchronize later timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) b5c: 05 e0 ldi r16, 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); b5e: 11 83 std Z+1, r17 ; 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; b60: 94 87 std Z+12, r25 ; 0x0c C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519 // default duty 50%, set when output enabled timer_B->CCMPH = PWM_TIMER_COMPARE; b62: 85 87 std Z+13, r24 ; 0x0d C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523 // Use TCA clock (250kHz) and enable // (sync update commented out, might try to synchronize later timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) b64: 00 83 st Z, r16 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++; b66: 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); b68: e0 3c cpi r30, 0xC0 ; 192 b6a: 2a e0 ldi r18, 0x0A ; 10 b6c: f2 07 cpc r31, r18 b6e: b9 f7 brne .-18 ; 0xb5e init(): 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; b70: 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; b74: 8f e3 ldi r24, 0x3F ; 63 b76: 9f e1 ldi r25, 0x1F ; 31 b78: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac b7c: 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; b80: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 b84: 81 60 ori r24, 0x01 ; 1 b86: 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 */ b8a: 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 */ b8e: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 b92: 81 60 ori r24, 0x01 ; 1 b94: 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(); b98: 78 94 sei setup(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:34 int PinCount = 8; PinState PinPD2[8]; byte DeviceId[2]; void setup() { SPI.begin(); b9a: d6 da rcall .-2644 ; 0x148 _ZN8PinState4InitEih(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 byte meyPinId; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; b9c: 85 e1 ldi r24, 0x15 ; 21 b9e: 90 e0 ldi r25, 0x00 ; 0 ba0: 80 93 03 3c sts 0x3C03, r24 ; 0x803c03 ba4: 90 93 04 3c sts 0x3C04, r25 ; 0x803c04 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 this->pin_state = true; ba8: 81 e0 ldi r24, 0x01 ; 1 baa: 80 93 05 3c sts 0x3C05, r24 ; 0x803c05 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 this->is_input = true; bae: 80 93 06 3c sts 0x3C06, r24 ; 0x803c06 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 this->meyPinId = meyPinId; bb2: 80 93 07 3c sts 0x3C07, r24 ; 0x803c07 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 byte meyPinId; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; bb6: 26 e1 ldi r18, 0x16 ; 22 bb8: 30 e0 ldi r19, 0x00 ; 0 bba: 20 93 08 3c sts 0x3C08, r18 ; 0x803c08 bbe: 30 93 09 3c sts 0x3C09, r19 ; 0x803c09 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 this->pin_state = true; bc2: 80 93 0a 3c sts 0x3C0A, r24 ; 0x803c0a C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 this->is_input = true; bc6: 80 93 0b 3c sts 0x3C0B, r24 ; 0x803c0b C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 this->meyPinId = meyPinId; bca: 92 e0 ldi r25, 0x02 ; 2 bcc: 90 93 0c 3c sts 0x3C0C, r25 ; 0x803c0c C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 byte meyPinId; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; bd0: 27 e1 ldi r18, 0x17 ; 23 bd2: 30 e0 ldi r19, 0x00 ; 0 bd4: 20 93 0d 3c sts 0x3C0D, r18 ; 0x803c0d bd8: 30 93 0e 3c sts 0x3C0E, r19 ; 0x803c0e C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 this->pin_state = true; bdc: 80 93 0f 3c sts 0x3C0F, r24 ; 0x803c0f C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 this->is_input = true; be0: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 this->meyPinId = meyPinId; be4: 93 e0 ldi r25, 0x03 ; 3 be6: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 byte meyPinId; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; bea: 28 e1 ldi r18, 0x18 ; 24 bec: 30 e0 ldi r19, 0x00 ; 0 bee: 20 93 12 3c sts 0x3C12, r18 ; 0x803c12 bf2: 30 93 13 3c sts 0x3C13, r19 ; 0x803c13 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 this->pin_state = true; bf6: 80 93 14 3c sts 0x3C14, r24 ; 0x803c14 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 this->is_input = true; bfa: 80 93 15 3c sts 0x3C15, r24 ; 0x803c15 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 this->meyPinId = meyPinId; bfe: 94 e0 ldi r25, 0x04 ; 4 c00: 90 93 16 3c sts 0x3C16, r25 ; 0x803c16 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 byte meyPinId; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; c04: 2c e1 ldi r18, 0x1C ; 28 c06: 30 e0 ldi r19, 0x00 ; 0 c08: 20 93 17 3c sts 0x3C17, r18 ; 0x803c17 c0c: 30 93 18 3c sts 0x3C18, r19 ; 0x803c18 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 this->pin_state = true; c10: 80 93 19 3c sts 0x3C19, r24 ; 0x803c19 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 this->is_input = true; c14: 80 93 1a 3c sts 0x3C1A, r24 ; 0x803c1a C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 this->meyPinId = meyPinId; c18: 00 93 1b 3c sts 0x3C1B, r16 ; 0x803c1b C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 byte meyPinId; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; c1c: 2b e1 ldi r18, 0x1B ; 27 c1e: 30 e0 ldi r19, 0x00 ; 0 c20: 20 93 1c 3c sts 0x3C1C, r18 ; 0x803c1c c24: 30 93 1d 3c sts 0x3C1D, r19 ; 0x803c1d C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 this->pin_state = true; c28: 80 93 1e 3c sts 0x3C1E, r24 ; 0x803c1e C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 this->is_input = true; c2c: 80 93 1f 3c sts 0x3C1F, r24 ; 0x803c1f C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 this->meyPinId = meyPinId; c30: 96 e0 ldi r25, 0x06 ; 6 c32: 90 93 20 3c sts 0x3C20, r25 ; 0x803c20 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 byte meyPinId; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; c36: 2a e1 ldi r18, 0x1A ; 26 c38: 30 e0 ldi r19, 0x00 ; 0 c3a: 20 93 21 3c sts 0x3C21, r18 ; 0x803c21 c3e: 30 93 22 3c sts 0x3C22, r19 ; 0x803c22 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 this->pin_state = true; c42: 80 93 23 3c sts 0x3C23, r24 ; 0x803c23 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 this->is_input = true; c46: 80 93 24 3c sts 0x3C24, r24 ; 0x803c24 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 this->meyPinId = meyPinId; c4a: 10 93 25 3c sts 0x3C25, r17 ; 0x803c25 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 byte meyPinId; PinState() {} void Init(int pin_id, byte meyPinId) { this->pin_id = pin_id; c4e: 29 e1 ldi r18, 0x19 ; 25 c50: 30 e0 ldi r19, 0x00 ; 0 c52: 20 93 26 3c sts 0x3C26, r18 ; 0x803c26 c56: 30 93 27 3c sts 0x3C27, r19 ; 0x803c27 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 this->pin_state = true; c5a: 80 93 28 3c sts 0x3C28, r24 ; 0x803c28 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 this->is_input = true; c5e: 80 93 29 3c sts 0x3C29, r24 ; 0x803c29 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 this->meyPinId = meyPinId; c62: 88 e0 ldi r24, 0x08 ; 8 c64: 80 93 2a 3c sts 0x3C2A, r24 ; 0x803c2a setup(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:63 PinPD2[7] = PinState(); PinPD2[7].Init(PIN_PD3, (byte) 8); _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); c68: 80 91 60 00 lds r24, 0x0060 ; 0x800060 c6c: 80 68 ori r24, 0x80 ; 128 c6e: 90 e0 ldi r25, 0x00 ; 0 c70: 28 ed ldi r18, 0xD8 ; 216 c72: 24 bf out 0x34, r18 ; 52 c74: 80 93 60 00 sts 0x0060, r24 ; 0x800060 reset(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:36 SPI.endTransaction(); } MCP2515::ERROR MCP2515::reset(void) { startSPI(); c78: 7e dc rcall .-1796 ; 0x576 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:37 SPI.transfer(INSTRUCTION_RESET); c7a: 80 ec ldi r24, 0xC0 ; 192 c7c: 2d da rcall .-2982 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38 endSPI(); c7e: 1b db rcall .-2506 ; 0x2b6 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:40 delay(10); c80: 6a e0 ldi r22, 0x0A ; 10 c82: 70 e0 ldi r23, 0x00 ; 0 c84: 80 e0 ldi r24, 0x00 ; 0 c86: 90 e0 ldi r25, 0x00 ; 0 c88: eb db rcall .-2090 ; 0x460 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:43 uint8_t zeros[14]; memset(zeros, 0, sizeof(zeros)); c8a: 8e 01 movw r16, r28 c8c: 0f 5f subi r16, 0xFF ; 255 c8e: 1f 4f sbci r17, 0xFF ; 255 c90: 8e e0 ldi r24, 0x0E ; 14 c92: f8 01 movw r30, r16 c94: 11 92 st Z+, r1 c96: 8a 95 dec r24 c98: e9 f7 brne .-6 ; 0xc94 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:44 setRegisters(MCP_TXB0CTRL, zeros, 14); c9a: 4e e0 ldi r20, 0x0E ; 14 c9c: b8 01 movw r22, r16 c9e: 80 e3 ldi r24, 0x30 ; 48 ca0: 2b dd rcall .-1450 ; 0x6f8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:45 setRegisters(MCP_TXB1CTRL, zeros, 14); ca2: 4e e0 ldi r20, 0x0E ; 14 ca4: b8 01 movw r22, r16 ca6: 80 e4 ldi r24, 0x40 ; 64 ca8: 27 dd rcall .-1458 ; 0x6f8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:46 setRegisters(MCP_TXB2CTRL, zeros, 14); caa: 4e e0 ldi r20, 0x0E ; 14 cac: b8 01 movw r22, r16 cae: 80 e5 ldi r24, 0x50 ; 80 cb0: 23 dd rcall .-1466 ; 0x6f8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:48 setRegister(MCP_RXB0CTRL, 0); cb2: 60 e0 ldi r22, 0x00 ; 0 cb4: 80 e6 ldi r24, 0x60 ; 96 cb6: 9b dd rcall .-1226 ; 0x7ee C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:49 setRegister(MCP_RXB1CTRL, 0); cb8: 60 e0 ldi r22, 0x00 ; 0 cba: 80 e7 ldi r24, 0x70 ; 112 cbc: 98 dd rcall .-1232 ; 0x7ee C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:51 setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF); cbe: 63 ea ldi r22, 0xA3 ; 163 cc0: 8b e2 ldi r24, 0x2B ; 43 cc2: 95 dd rcall .-1238 ; 0x7ee 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, cc4: 44 e0 ldi r20, 0x04 ; 4 cc6: 67 e6 ldi r22, 0x67 ; 103 cc8: 80 e6 ldi r24, 0x60 ; 96 cca: 35 dd rcall .-1430 ; 0x736 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, ccc: 41 e0 ldi r20, 0x01 ; 1 cce: 67 e6 ldi r22, 0x67 ; 103 cd0: 80 e7 ldi r24, 0x70 ; 112 cd2: 31 dd rcall .-1438 ; 0x736 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}; cd4: 8c e0 ldi r24, 0x0C ; 12 cd6: e4 ed ldi r30, 0xD4 ; 212 cd8: f0 e5 ldi r31, 0x50 ; 80 cda: de 01 movw r26, r28 cdc: 1f 96 adiw r26, 0x0f ; 15 cde: 01 90 ld r0, Z+ ce0: 0d 92 st X+, r0 ce2: 8a 95 dec r24 ce4: e1 f7 brne .-8 ; 0xcde ce6: 5e 01 movw r10, r28 ce8: ff e0 ldi r31, 0x0F ; 15 cea: af 0e add r10, r31 cec: b1 1c adc r11, r1 main(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 for (int i=0; i<6; i++) { cee: d1 2c mov r13, r1 cf0: c1 2c mov r12, 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; cf2: b8 e0 ldi r27, 0x08 ; 8 cf4: 9b 2e mov r9, r27 reset(): 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); cf6: f5 01 movw r30, r10 cf8: 01 91 ld r16, Z+ cfa: 11 91 ld r17, Z+ cfc: 5f 01 movw r10, r30 setConfigMode(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 return i; } MCP2515::ERROR MCP2515::setConfigMode() { return setMode(CANCTRL_REQOP_CONFIG); cfe: 80 e8 ldi r24, 0x80 ; 128 d00: 3b dd rcall .-1418 ; 0x778 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) { d02: 89 2b or r24, r25 d04: 71 f4 brne .+28 ; 0xd22 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 return res; } REGISTER reg; switch (num) { d06: 02 30 cpi r16, 0x02 ; 2 d08: 11 05 cpc r17, r1 d0a: 09 f4 brne .+2 ; 0xd0e d0c: 75 c1 rjmp .+746 ; 0xff8 d0e: 08 f0 brcs .+2 ; 0xd12 d10: 2c c1 rjmp .+600 ; 0xf6a d12: 01 15 cp r16, r1 d14: 11 05 cpc r17, r1 d16: 09 f4 brne .+2 ; 0xd1a d18: 34 c1 rjmp .+616 ; 0xf82 d1a: 01 30 cpi r16, 0x01 ; 1 d1c: 11 05 cpc r17, r1 d1e: 09 f4 brne .+2 ; 0xd22 d20: 71 c1 rjmp .+738 ; 0x1004 setConfigMode(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 return i; } MCP2515::ERROR MCP2515::setConfigMode() { return setMode(CANCTRL_REQOP_CONFIG); d22: 80 e8 ldi r24, 0x80 ; 128 d24: 29 dd rcall .-1454 ; 0x778 setBitrate(): 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) { d26: 89 2b or r24, r25 d28: 49 f4 brne .+18 ; 0xd3c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:477 set = 0; break; } if (set) { setRegister(MCP_CNF1, cfg1); d2a: 60 e0 ldi r22, 0x00 ; 0 d2c: 8a e2 ldi r24, 0x2A ; 42 d2e: 5f dd rcall .-1346 ; 0x7ee C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:478 setRegister(MCP_CNF2, cfg2); d30: 60 e9 ldi r22, 0x90 ; 144 d32: 89 e2 ldi r24, 0x29 ; 41 d34: 5c dd rcall .-1352 ; 0x7ee C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:479 setRegister(MCP_CNF3, cfg3); d36: 62 e8 ldi r22, 0x82 ; 130 d38: 88 e2 ldi r24, 0x28 ; 40 d3a: 59 dd rcall .-1358 ; 0x7ee setNormalMode(): 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); d3c: 80 e0 ldi r24, 0x00 ; 0 d3e: 1c dd rcall .-1480 ; 0x778 d40: fb e2 ldi r31, 0x2B ; 43 d42: cf 2e mov r12, r31 d44: fc e3 ldi r31, 0x3C ; 60 d46: df 2e mov r13, r31 d48: 03 e0 ldi r16, 0x03 ; 3 d4a: 1c e3 ldi r17, 0x3C ; 60 setup(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:70 mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz mcp2515.setNormalMode(); for (int i = 0; i <= PinCount - 1; i++) { pinMode(PinPD2[i].pin_id, INPUT_PULLUP); d4c: f8 01 movw r30, r16 d4e: 80 81 ld r24, Z pinMode(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 #include "wiring_private.h" #include "pins_arduino.h" void pinMode(uint8_t pin, uint8_t mode) { uint8_t bit_mask = digitalPinToBitMask(pin); d50: 89 32 cpi r24, 0x29 ; 41 d52: 10 f4 brcc .+4 ; 0xd58 d54: 62 e0 ldi r22, 0x02 ; 2 d56: ca d9 rcall .-3180 ; 0xec setup(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:71 PinPD2[i].pin_state = ReadPin(&PinPD2[i]); d58: c8 01 movw r24, r16 d5a: ae db rcall .-2212 ; 0x4b8 d5c: f8 01 movw r30, r16 d5e: 82 83 std Z+2, r24 ; 0x02 d60: 0b 5f subi r16, 0xFB ; 251 d62: 1f 4f sbci r17, 0xFF ; 255 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:68 _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); mcp2515.reset(); mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz mcp2515.setNormalMode(); for (int i = 0; i <= PinCount - 1; i++) d64: c0 16 cp r12, r16 d66: d1 06 cpc r13, r17 d68: 89 f7 brne .-30 ; 0xd4c GetDeviceIdLow(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:204 { return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; } byte GetDeviceIdLow() { return (SIGROW.SERNUM0 ^ d6a: 50 91 03 11 lds r21, 0x1103 ; 0x801103 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:205 CircularShift(SIGROW.SERNUM2) << 1 ^ d6e: 90 91 05 11 lds r25, 0x1105 ; 0x801105 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:206 CircularShift( CircularShift(SIGROW.SERNUM4)) ^ d72: 40 91 07 11 lds r20, 0x1107 ; 0x801107 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:207 CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ d76: 30 91 09 11 lds r19, 0x1109 ; 0x801109 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:208 CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); d7a: 20 91 0b 11 lds r18, 0x110B ; 0x80110b CircularShift(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 } byte CircularShift(byte b) { return (b << 1) | (b >> 7 & 1); d7e: 89 2f mov r24, r25 d80: 88 0f add r24, r24 d82: 81 1d adc r24, r1 GetDeviceIdLow(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:205 return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; } byte GetDeviceIdLow() { return (SIGROW.SERNUM0 ^ CircularShift(SIGROW.SERNUM2) << 1 ^ d84: 88 0f add r24, r24 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:204 { return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; } byte GetDeviceIdLow() { return (SIGROW.SERNUM0 ^ d86: 85 27 eor r24, r21 CircularShift(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 } byte CircularShift(byte b) { return (b << 1) | (b >> 7 & 1); d88: 94 2f mov r25, r20 d8a: 99 0f add r25, r25 d8c: 91 1d adc r25, r1 d8e: 99 0f add r25, r25 d90: 91 1d adc r25, r1 GetDeviceIdLow(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:205 return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; } byte GetDeviceIdLow() { return (SIGROW.SERNUM0 ^ CircularShift(SIGROW.SERNUM2) << 1 ^ d92: 89 27 eor r24, r25 CircularShift(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 } byte CircularShift(byte b) { return (b << 1) | (b >> 7 & 1); d94: 93 2f mov r25, r19 d96: 92 95 swap r25 d98: 90 fb bst r25, 0 d9a: 97 95 ror r25 d9c: 97 f9 bld r25, 7 GetDeviceIdLow(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:206 } byte GetDeviceIdLow() { return (SIGROW.SERNUM0 ^ CircularShift(SIGROW.SERNUM2) << 1 ^ CircularShift( CircularShift(SIGROW.SERNUM4)) ^ d9e: 89 27 eor r24, r25 CircularShift(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 } byte CircularShift(byte b) { return (b << 1) | (b >> 7 & 1); da0: 92 2f mov r25, r18 da2: 92 95 swap r25 GetDeviceIdLow(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:207 byte GetDeviceIdLow() { return (SIGROW.SERNUM0 ^ CircularShift(SIGROW.SERNUM2) << 1 ^ CircularShift( CircularShift(SIGROW.SERNUM4)) ^ CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ da4: 89 27 eor r24, r25 setup(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:75 pinMode(PinPD2[i].pin_id, INPUT_PULLUP); PinPD2[i].pin_state = ReadPin(&PinPD2[i]); } DeviceId[0] = GetDeviceIdLow(); da6: 80 93 00 3c sts 0x3C00, r24 ; 0x803c00 <__DATA_REGION_ORIGIN__> GetDeviceIdHigh(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:212 CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); } byte GetDeviceIdHigh() { return (SIGROW.SERNUM1 ^ daa: 50 91 04 11 lds r21, 0x1104 ; 0x801104 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:213 CircularShift(SIGROW.SERNUM3) << 1 ^ dae: 40 91 06 11 lds r20, 0x1106 ; 0x801106 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:214 CircularShift( CircularShift(SIGROW.SERNUM5)) ^ db2: 30 91 08 11 lds r19, 0x1108 ; 0x801108 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:215 CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ db6: 20 91 0a 11 lds r18, 0x110A ; 0x80110a C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:216 CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); dba: 90 91 0c 11 lds r25, 0x110C ; 0x80110c CircularShift(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 } byte CircularShift(byte b) { return (b << 1) | (b >> 7 & 1); dbe: 44 0f add r20, r20 dc0: 41 1d adc r20, r1 GetDeviceIdHigh(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:213 CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); } byte GetDeviceIdHigh() { return (SIGROW.SERNUM1 ^ CircularShift(SIGROW.SERNUM3) << 1 ^ dc2: 44 0f add r20, r20 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:212 CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); } byte GetDeviceIdHigh() { return (SIGROW.SERNUM1 ^ dc4: 45 27 eor r20, r21 CircularShift(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 } byte CircularShift(byte b) { return (b << 1) | (b >> 7 & 1); dc6: 33 0f add r19, r19 dc8: 31 1d adc r19, r1 dca: 33 0f add r19, r19 dcc: 31 1d adc r19, r1 GetDeviceIdHigh(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:213 CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); } byte GetDeviceIdHigh() { return (SIGROW.SERNUM1 ^ CircularShift(SIGROW.SERNUM3) << 1 ^ dce: 43 27 eor r20, r19 CircularShift(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 } byte CircularShift(byte b) { return (b << 1) | (b >> 7 & 1); dd0: 22 95 swap r18 dd2: 20 fb bst r18, 0 dd4: 27 95 ror r18 dd6: 27 f9 bld r18, 7 GetDeviceIdHigh(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:214 } byte GetDeviceIdHigh() { return (SIGROW.SERNUM1 ^ CircularShift(SIGROW.SERNUM3) << 1 ^ CircularShift( CircularShift(SIGROW.SERNUM5)) ^ dd8: 42 27 eor r20, r18 CircularShift(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 } byte CircularShift(byte b) { return (b << 1) | (b >> 7 & 1); dda: 92 95 swap r25 GetDeviceIdHigh(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:215 byte GetDeviceIdHigh() { return (SIGROW.SERNUM1 ^ CircularShift(SIGROW.SERNUM3) << 1 ^ CircularShift( CircularShift(SIGROW.SERNUM5)) ^ CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ ddc: 49 27 eor r20, r25 setup(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:76 PinPD2[i].pin_state = ReadPin(&PinPD2[i]); } DeviceId[0] = GetDeviceIdLow(); DeviceId[1] = GetDeviceIdHigh(); dde: 40 93 01 3c sts 0x3C01, r20 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> CreateCanId(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:200 return (canFrameId / 0x10000) & 0xFFF; } uint32_t CreateCanId(uint32_t commandId) { return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; de2: 90 e0 ldi r25, 0x00 ; 0 de4: 98 2f mov r25, r24 de6: 88 27 eor r24, r24 de8: 09 2e mov r0, r25 dea: 00 0c add r0, r0 dec: aa 0b sbc r26, r26 dee: bb 0b sbc r27, r27 df0: 50 e0 ldi r21, 0x00 ; 0 df2: 70 e0 ldi r23, 0x00 ; 0 df4: 60 e0 ldi r22, 0x00 ; 0 df6: 6f 6f ori r22, 0xFF ; 255 df8: 7f 68 ori r23, 0x8F ; 143 dfa: 84 2b or r24, r20 dfc: 95 2b or r25, r21 dfe: a6 2b or r26, r22 e00: b7 2b or r27, r23 SendSerialPackage(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:128 } void SendSerialPackage() { _frame.can_id = CreateCanId(0xFFFF); e02: 80 93 30 3c sts 0x3C30, r24 ; 0x803c30 <_frame> e06: 90 93 31 3c sts 0x3C31, r25 ; 0x803c31 <_frame+0x1> e0a: a0 93 32 3c sts 0x3C32, r26 ; 0x803c32 <_frame+0x2> e0e: b0 93 33 3c sts 0x3C33, r27 ; 0x803c33 <_frame+0x3> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:129 _frame.can_dlc = 4; e12: 84 e0 ldi r24, 0x04 ; 4 e14: 80 93 34 3c sts 0x3C34, r24 ; 0x803c34 <_frame+0x4> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:131 _frame.data[0] = SoftwareVersionHigh; e18: 81 e0 ldi r24, 0x01 ; 1 e1a: 80 93 38 3c sts 0x3C38, r24 ; 0x803c38 <_frame+0x8> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:132 _frame.data[1] = SoftwareVersionLow; e1e: 10 92 39 3c sts 0x3C39, r1 ; 0x803c39 <_frame+0x9> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:133 _frame.data[2] = HardwareVersionHigh; e22: 82 e0 ldi r24, 0x02 ; 2 e24: 80 93 3a 3c sts 0x3C3A, r24 ; 0x803c3a <_frame+0xa> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:134 _frame.data[3] = HardwareVersionLow; e28: 10 92 3b 3c sts 0x3C3B, r1 ; 0x803c3b <_frame+0xb> sendMessage(): e2c: 96 dd rcall .-1236 ; 0x95a loop(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:93 SendSwitchedTriggeredCanPackage(PinPD2[i].meyPinId, PinPD2[i].pin_state); } if (mcp2515.readMessage(&_frame) == MCP2515::ERROR_OK) { debugFlag ^= true; e2e: 99 24 eor r9, r9 e30: 93 94 inc r9 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:104 PinState *adressedPin; for (int i = 0; i <= PinCount - 1; i++) if (PinPD2[i].meyPinId == meyPinId) { adressedPin = &PinPD2[i]; e32: 65 e0 ldi r22, 0x05 ; 5 e34: 86 2e mov r8, r22 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(); e36: 70 e0 ldi r23, 0x00 ; 0 e38: a7 2e mov r10, r23 e3a: 70 e0 ldi r23, 0x00 ; 0 e3c: b7 2e mov r11, r23 SendSwitchedTriggeredCanPackage(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:142 void SendSwitchedTriggeredCanPackage(byte pinId, int state) { _frame.can_id = CreateCanId(0x050); _frame.can_dlc = 2; e3e: e2 e0 ldi r30, 0x02 ; 2 e40: 7e 2e mov r7, r30 setNormalMode(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:170 e42: 33 e0 ldi r19, 0x03 ; 3 e44: c3 2e mov r12, r19 e46: 3c e3 ldi r19, 0x3C ; 60 e48: d3 2e mov r13, r19 CheckPinStatus(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:221 CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); } bool CheckPinStatus(PinState * state) { if (!state->is_input) e4a: f6 01 movw r30, r12 e4c: 83 81 ldd r24, Z+3 ; 0x03 e4e: 88 23 and r24, r24 e50: c1 f1 breq .+112 ; 0xec2 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:224 return false; bool newValue = ReadPin(state); e52: c6 01 movw r24, r12 e54: 31 db rcall .-2462 ; 0x4b8 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:227 if (newValue != state->pin_state) e56: f6 01 movw r30, r12 e58: 92 81 ldd r25, Z+2 ; 0x02 e5a: 89 17 cp r24, r25 e5c: 91 f1 breq .+100 ; 0xec2 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:229 { delay(10); e5e: 6a e0 ldi r22, 0x0A ; 10 e60: 70 e0 ldi r23, 0x00 ; 0 e62: 80 e0 ldi r24, 0x00 ; 0 e64: 90 e0 ldi r25, 0x00 ; 0 e66: fc da rcall .-2568 ; 0x460 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:230 newValue = ReadPin(state); e68: c6 01 movw r24, r12 e6a: 26 db rcall .-2484 ; 0x4b8 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:231 if (newValue != state->pin_state) e6c: f6 01 movw r30, r12 e6e: 92 81 ldd r25, Z+2 ; 0x02 e70: 89 17 cp r24, r25 e72: 39 f1 breq .+78 ; 0xec2 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:233 { state->pin_state = newValue; e74: 82 83 std Z+2, r24 ; 0x02 loop(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:88 void loop() { for (int i = 0; i <= PinCount - 1; i++) { if (CheckPinStatus(&PinPD2[i])) SendSwitchedTriggeredCanPackage(PinPD2[i].meyPinId, PinPD2[i].pin_state); e76: 94 81 ldd r25, Z+4 ; 0x04 CreateCanId(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:200 return (canFrameId / 0x10000) & 0xFFF; } uint32_t CreateCanId(uint32_t commandId) { return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; e78: 40 91 00 3c lds r20, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__> e7c: 50 e0 ldi r21, 0x00 ; 0 e7e: 54 2f mov r21, r20 e80: 44 27 eor r20, r20 e82: 05 2e mov r0, r21 e84: 00 0c add r0, r0 e86: 66 0b sbc r22, r22 e88: 77 0b sbc r23, r23 e8a: 20 90 01 3c lds r2, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> e8e: 31 2c mov r3, r1 e90: 51 2c mov r5, r1 e92: 41 2c mov r4, r1 e94: f0 e5 ldi r31, 0x50 ; 80 e96: 4f 2a or r4, r31 e98: 68 94 set e9a: 57 f8 bld r5, 7 e9c: 42 29 or r20, r2 e9e: 53 29 or r21, r3 ea0: 64 29 or r22, r4 ea2: 75 29 or r23, r5 SendSwitchedTriggeredCanPackage(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:141 } void SendSwitchedTriggeredCanPackage(byte pinId, int state) { _frame.can_id = CreateCanId(0x050); ea4: 40 93 30 3c sts 0x3C30, r20 ; 0x803c30 <_frame> ea8: 50 93 31 3c sts 0x3C31, r21 ; 0x803c31 <_frame+0x1> eac: 60 93 32 3c sts 0x3C32, r22 ; 0x803c32 <_frame+0x2> eb0: 70 93 33 3c sts 0x3C33, r23 ; 0x803c33 <_frame+0x3> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:142 _frame.can_dlc = 2; eb4: 70 92 34 3c sts 0x3C34, r7 ; 0x803c34 <_frame+0x4> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:143 _frame.data[0] = pinId; eb8: 90 93 38 3c sts 0x3C38, r25 ; 0x803c38 <_frame+0x8> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:144 _frame.data[1] = state; ebc: 80 93 39 3c sts 0x3C39, r24 ; 0x803c39 <_frame+0x9> sendMessage(): ec0: 4c dd rcall .-1384 ; 0x95a ec2: 25 e0 ldi r18, 0x05 ; 5 ec4: c2 0e add r12, r18 ec6: d1 1c adc r13, r1 loop(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:85 bool debugFlag = false; void loop() { for (int i = 0; i <= PinCount - 1; i++) ec8: c0 16 cp r12, r16 eca: d1 06 cpc r13, r17 ecc: 09 f0 breq .+2 ; 0xed0 ece: bd cf rjmp .-134 ; 0xe4a getStatus(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:140 endSPI(); } uint8_t MCP2515::getStatus(void) { startSPI(); ed0: 52 db rcall .-2396 ; 0x576 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:141 SPI.transfer(INSTRUCTION_READ_STATUS); ed2: 80 ea ldi r24, 0xA0 ; 160 ed4: 01 d9 rcall .-3582 ; 0xd8 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:142 uint8_t i = SPI.transfer(0x00); ed6: 80 e0 ldi r24, 0x00 ; 0 ed8: ff d8 rcall .-3586 ; 0xd8 eda: d8 2e mov r13, r24 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:143 endSPI(); edc: ec d9 rcall .-3112 ; 0x2b6 readMessage(): 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); ede: 90 e0 ldi r25, 0x00 ; 0 ee0: 80 e0 ldi r24, 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 ) { ee2: d0 fc sbrc r13, 0 ee4: 04 c0 rjmp .+8 ; 0xeee C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:673 rc = readMessage(RXB0, frame); } else if ( stat & STAT_RX1IF ) { ee6: d1 fe sbrs r13, 1 ee8: 35 c0 rjmp .+106 ; 0xf54 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:674 rc = readMessage(RXB1, frame); eea: 81 e0 ldi r24, 0x01 ; 1 eec: 90 e0 ldi r25, 0x00 ; 0 eee: ad dc rcall .-1702 ; 0x84a loop(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:91 { if (CheckPinStatus(&PinPD2[i])) SendSwitchedTriggeredCanPackage(PinPD2[i].meyPinId, PinPD2[i].pin_state); } if (mcp2515.readMessage(&_frame) == MCP2515::ERROR_OK) ef0: 89 2b or r24, r25 ef2: 81 f5 brne .+96 ; 0xf54 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:93 { debugFlag ^= true; ef4: 80 91 02 3c lds r24, 0x3C02 ; 0x803c02 ef8: 89 25 eor r24, r9 efa: 80 93 02 3c sts 0x3C02, r24 ; 0x803c02 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:97 int meyPinId = _frame.data[0]; efe: 20 91 38 3c lds r18, 0x3C38 ; 0x803c38 <_frame+0x8> C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:98 bool state = _frame.data[1] > 0; f02: dd 24 eor r13, r13 f04: d3 94 inc r13 f06: 80 91 39 3c lds r24, 0x3C39 ; 0x803c39 <_frame+0x9> f0a: 81 11 cpse r24, r1 f0c: 01 c0 rjmp .+2 ; 0xf10 f0e: d1 2c mov r13, r1 f10: e3 e0 ldi r30, 0x03 ; 3 f12: fc e3 ldi r31, 0x3C ; 60 main(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:101 PinState *adressedPin; for (int i = 0; i <= PinCount - 1; i++) f14: 90 e0 ldi r25, 0x00 ; 0 f16: 80 e0 ldi r24, 0x00 ; 0 loop(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:102 if (PinPD2[i].meyPinId == meyPinId) f18: 34 81 ldd r19, Z+4 ; 0x04 f1a: 23 13 cpse r18, r19 f1c: 84 c0 rjmp .+264 ; 0x1026 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:104 { adressedPin = &PinPD2[i]; f1e: 88 9e mul r8, r24 f20: 90 01 movw r18, r0 f22: 89 9e mul r8, r25 f24: 30 0d add r19, r0 f26: 11 24 eor r1, r1 f28: c9 01 movw r24, r18 f2a: 8d 5f subi r24, 0xFD ; 253 f2c: 93 4c sbci r25, 0xC3 ; 195 f2e: 7c 01 movw r14, r24 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:110 break; } if (adressedPin != NULL) { if (adressedPin->is_input == true) f30: f7 01 movw r30, r14 f32: 83 81 ldd r24, Z+3 ; 0x03 f34: 88 23 and r24, r24 f36: 39 f0 breq .+14 ; 0xf46 f38: 80 81 ld r24, Z pinMode(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 f3a: 89 32 cpi r24, 0x29 ; 41 f3c: 10 f4 brcc .+4 ; 0xf42 f3e: 61 e0 ldi r22, 0x01 ; 1 f40: d5 d8 rcall .-3670 ; 0xec loop(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:113 { pinMode(adressedPin->pin_id, OUTPUT); adressedPin->is_input = false; f42: f7 01 movw r30, r14 f44: 13 82 std Z+3, r1 ; 0x03 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:115 } adressedPin->pin_state = state; f46: f7 01 movw r30, r14 f48: d2 82 std Z+2, r13 ; 0x02 C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:116 digitalWrite(adressedPin->pin_id, state); f4a: 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); f4c: 89 32 cpi r24, 0x29 ; 41 f4e: 10 f4 brcc .+4 ; 0xf54 f50: 6d 2d mov r22, r13 f52: 73 d9 rcall .-3354 ; 0x23a loop(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:122 } } delay(20); f54: 64 e1 ldi r22, 0x14 ; 20 f56: 70 e0 ldi r23, 0x00 ; 0 f58: 80 e0 ldi r24, 0x00 ; 0 f5a: 90 e0 ldi r25, 0x00 ; 0 f5c: 81 da rcall .-2814 ; 0x460 main(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43 f5e: a1 14 cp r10, r1 f60: b1 04 cpc r11, r1 f62: 09 f4 brne .+2 ; 0xf66 f64: 6e cf rjmp .-292 ; 0xe42 f66: 4c d8 rcall .-3944 ; 0x0 <__vectors> f68: 6c cf rjmp .-296 ; 0xe42 setFilter(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 return res; } REGISTER reg; switch (num) { f6a: 04 30 cpi r16, 0x04 ; 4 f6c: 11 05 cpc r17, r1 f6e: 09 f4 brne .+2 ; 0xf72 f70: 47 c0 rjmp .+142 ; 0x1000 f72: 08 f4 brcc .+2 ; 0xf76 f74: 43 c0 rjmp .+134 ; 0xffc f76: 05 30 cpi r16, 0x05 ; 5 f78: 11 05 cpc r17, r1 f7a: 09 f0 breq .+2 ; 0xf7e f7c: d2 ce rjmp .-604 ; 0xd22 main(): 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; f7e: 88 e1 ldi r24, 0x18 ; 24 f80: 01 c0 rjmp .+2 ; 0xf84 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562 } REGISTER reg; switch (num) { case RXF0: reg = MCP_RXF0SIDH; break; f82: 80 e0 ldi r24, 0x00 ; 0 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) { f84: f1 e0 ldi r31, 0x01 ; 1 f86: cf 16 cp r12, r31 f88: d1 04 cpc r13, r1 f8a: f1 f5 brne .+124 ; 0x1008 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); f8c: 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); f8e: 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; f90: 9c 8e std Y+28, r9 ; 0x1c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 buffer[MCP_SIDH] = (uint8_t) (canid >> 5); f92: 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); f94: 44 e0 ldi r20, 0x04 ; 4 f96: be 01 movw r22, r28 f98: 65 5e subi r22, 0xE5 ; 229 f9a: 7f 4f sbci r23, 0xFF ; 255 f9c: ad db rcall .-2214 ; 0x6f8 reset(): 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++) { f9e: 2f ef ldi r18, 0xFF ; 255 fa0: c2 1a sub r12, r18 fa2: d2 0a sbc r13, r18 fa4: 86 e0 ldi r24, 0x06 ; 6 fa6: c8 16 cp r12, r24 fa8: d1 04 cpc r13, r1 faa: 09 f0 breq .+2 ; 0xfae fac: a4 ce rjmp .-696 ; 0xcf6 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74 if (result != ERROR_OK) { return result; } } MASK masks[] = {MASK0, MASK1}; fae: 1f 8e std Y+31, r1 ; 0x1f fb0: 18 a2 std Y+32, r1 ; 0x20 fb2: 81 e0 ldi r24, 0x01 ; 1 fb4: 90 e0 ldi r25, 0x00 ; 0 fb6: 89 a3 std Y+33, r24 ; 0x21 fb8: 9a a3 std Y+34, r25 ; 0x22 fba: 8e 01 movw r16, r28 fbc: 01 5e subi r16, 0xE1 ; 225 fbe: 1f 4f sbci r17, 0xFF ; 255 fc0: 5e 01 movw r10, r28 fc2: 93 e2 ldi r25, 0x23 ; 35 fc4: a9 0e add r10, r25 fc6: b1 1c adc r11, 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; fc8: a8 e0 ldi r26, 0x08 ; 8 fca: 9a 2e mov r9, r26 reset(): 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); fcc: f8 01 movw r30, r16 fce: c1 90 ld r12, Z+ fd0: d1 90 ld r13, Z+ fd2: 8f 01 movw r16, r30 setConfigMode(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 return i; } MCP2515::ERROR MCP2515::setConfigMode() { return setMode(CANCTRL_REQOP_CONFIG); fd4: 80 e8 ldi r24, 0x80 ; 128 fd6: d0 db rcall .-2144 ; 0x778 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) { fd8: 89 2b or r24, r25 fda: 09 f0 breq .+2 ; 0xfde fdc: a2 ce rjmp .-700 ; 0xd22 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); fde: 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); fe0: 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; fe2: 9c 8e std Y+28, r9 ; 0x1c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 buffer[MCP_SIDH] = (uint8_t) (canid >> 5); fe4: 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) { fe6: c1 14 cp r12, r1 fe8: d1 04 cpc r13, r1 fea: 99 f0 breq .+38 ; 0x1012 fec: ca 94 dec r12 fee: cd 28 or r12, r13 ff0: 09 f0 breq .+2 ; 0xff4 ff2: 97 ce rjmp .-722 ; 0xd22 main(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:542 case MASK0: reg = MCP_RXM0SIDH; break; case MASK1: reg = MCP_RXM1SIDH; break; ff4: 84 e2 ldi r24, 0x24 ; 36 ff6: 0e c0 rjmp .+28 ; 0x1014 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; ff8: 88 e0 ldi r24, 0x08 ; 8 ffa: c4 cf rjmp .-120 ; 0xf84 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:565 case RXF3: reg = MCP_RXF3SIDH; break; ffc: 80 e1 ldi r24, 0x10 ; 16 ffe: c2 cf rjmp .-124 ; 0xf84 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:566 case RXF4: reg = MCP_RXF4SIDH; break; 1000: 84 e1 ldi r24, 0x14 ; 20 1002: c0 cf rjmp .-128 ; 0xf84 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; 1004: 84 e0 ldi r24, 0x04 ; 4 1006: be cf rjmp .-132 ; 0xf84 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); 1008: 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); 100a: 1c 8e std Y+28, r1 ; 0x1c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 buffer[MCP_EID0] = 0; 100c: 1e 8e std Y+30, r1 ; 0x1e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 buffer[MCP_EID8] = 0; 100e: 1d 8e std Y+29, r1 ; 0x1d 1010: c1 cf rjmp .-126 ; 0xf94 main(): 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; 1012: 80 e2 ldi r24, 0x20 ; 32 setFilterMask(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:547 case MASK1: reg = MCP_RXM1SIDH; break; default: return ERROR_FAIL; } setRegisters(reg, tbufdata, 4); 1014: 44 e0 ldi r20, 0x04 ; 4 1016: be 01 movw r22, r28 1018: 65 5e subi r22, 0xE5 ; 229 101a: 7f 4f sbci r23, 0xFF ; 255 101c: 6d db rcall .-2342 ; 0x6f8 reset(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:75 return result; } } MASK masks[] = {MASK0, MASK1}; for (int i=0; i<2; i++) { 101e: 0a 15 cp r16, r10 1020: 1b 05 cpc r17, r11 1022: a1 f6 brne .-88 ; 0xfcc 1024: 7e ce rjmp .-772 ; 0xd22 loop(): C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:101 int meyPinId = _frame.data[0]; bool state = _frame.data[1] > 0; PinState *adressedPin; for (int i = 0; i <= PinCount - 1; i++) 1026: 01 96 adiw r24, 0x01 ; 1 1028: 35 96 adiw r30, 0x05 ; 5 102a: 88 30 cpi r24, 0x08 ; 8 102c: 91 05 cpc r25, r1 102e: 09 f0 breq .+2 ; 0x1032 1030: 73 cf rjmp .-282 ; 0xf18 1032: 7e cf rjmp .-260 ; 0xf30 00001034 <__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 1034: 38 d0 rcall .+112 ; 0x10a6 <__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 1036: 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 1038: 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 103a: 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 103c: 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 103e: 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 1040: 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 1042: 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 1044: 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 1046: 08 95 ret 00001048 <__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 1048: 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 104a: 10 94 com r1 0000104c <__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 104c: 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 104e: 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 1050: 98 f0 brcs .+38 ; 0x1078 <__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 1052: 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 1054: 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 1056: 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 1058: 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 105a: 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 105c: 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 105e: 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 1060: 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 1062: 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 1064: f4 cf rjmp .-24 ; 0x104e <__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 1066: 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 1068: 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 106a: 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 106c: 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 106e: 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 1070: 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 1072: 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 1074: 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 1076: 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 1078: 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 107a: aa f7 brpl .-22 ; 0x1066 <__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 107c: 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 107e: 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 1080: 08 95 ret 00001082 <__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 1082: 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 1084: 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 1086: 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 1088: 2a 17 cp r18, r26 108a: 30 05 cpc r19, r0 108c: 40 05 cpc r20, r0 108e: 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 1090: 60 05 cpc r22, r0 1092: 70 05 cpc r23, r0 1094: 80 05 cpc r24, r0 1096: 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 1098: 08 95 ret 0000109a <__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 109a: 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 109c: 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 109e: 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 10a0: 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 10a2: 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 10a4: 09 94 ijmp 000010a6 <__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 10a6: 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 10a8: 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 10aa: 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 10ac: 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 10ae: 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 10b0: 01 d0 rcall .+2 ; 0x10b4 <__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 10b2: 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 10b4: 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 10b6: 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 10b8: 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 10ba: 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 10bc: 08 95 ret 000010be : memcpy(): 10be: fb 01 movw r30, r22 10c0: dc 01 movw r26, r24 10c2: 02 c0 rjmp .+4 ; 0x10c8 10c4: 01 90 ld r0, Z+ 10c6: 0d 92 st X+, r0 10c8: 41 50 subi r20, 0x01 ; 1 10ca: 50 40 sbci r21, 0x00 ; 0 10cc: d8 f7 brcc .-10 ; 0x10c4 10ce: 08 95 ret 000010d0 <_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 10d0: f8 94 cli 000010d2 <__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 10d2: ff cf rjmp .-2 ; 0x10d2 <__stop_program>