Files
info.linkwitz.ha_pcb/Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.lst
2022-09-21 07:36:42 +02:00

4405 lines
194 KiB
Plaintext

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 <main>
../../../../../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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>:
_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 <MCP2515::RXB+0x7fb740>
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 <MCP2515::RXB+0x7fb73f>
e2: 87 ff sbrs r24, 7
e4: fc cf rjmp .-8 ; 0xde <SPIClass::transfer(unsigned char) [clone .constprop.31]+0x6>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:308
return SPI0.DATA; // read data back
e6: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 <MCP2515::RXB+0x7fb740>
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>:
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 <SPIClass::begin() [clone .constprop.8]>:
_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 <SPI+0x5>
14c: 81 11 cpse r24, r1
14e: 17 c0 rjmp .+46 ; 0x17e <SPIClass::begin() [clone .constprop.8]+0x36>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:133
return;
interruptMode = SPI_IMODE_NONE;
150: 10 92 48 3c sts 0x3C48, r1 ; 0x803c48 <SPI+0x6>
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 <SPI+0x7>
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 <SPI+0x8>
15c: 10 92 4b 3c sts 0x3C4B, r1 ; 0x803c4b <SPI+0x9>
160: 10 92 4c 3c sts 0x3C4C, r1 ; 0x803c4c <SPI+0xa>
164: 10 92 4d 3c sts 0x3C4D, r1 ; 0x803c4d <SPI+0xb>
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 <SPI+0xc>
16c: 10 92 4f 3c sts 0x3C4F, r1 ; 0x803c4f <SPI+0xd>
170: 10 92 50 3c sts 0x3C50, r1 ; 0x803c50 <SPI+0xe>
174: 10 92 51 3c sts 0x3C51, r1 ; 0x803c51 <SPI+0xf>
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 <SPI+0x5>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:99
void SPIClass::begin()
{
init();
PORTMUX.TWISPIROUTEA = _uc_mux | (PORTMUX.TWISPIROUTEA & ~3);
17e: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 <MCP2515::RXB+0x7fb45f>
182: 8c 7f andi r24, 0xFC ; 252
184: 90 91 46 3c lds r25, 0x3C46 ; 0x803c46 <SPI+0x4>
188: 89 2b or r24, r25
18a: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 <MCP2515::RXB+0x7fb45f>
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 <SPIClass::begin() [clone .constprop.8]+0x7c>
pinMode():
192: 61 e0 ldi r22, 0x01 ; 1
194: 84 e0 ldi r24, 0x04 ; 4
196: aa df rcall .-172 ; 0xec <pinMode.part.1>
198: 61 e0 ldi r22, 0x01 ; 1
19a: 86 e0 ldi r24, 0x06 ; 6
19c: a7 df rcall .-178 ; 0xec <pinMode.part.1>
_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 <MCP2515::RXB+0x7fb73d>
1a2: 84 60 ori r24, 0x04 ; 4
1a4: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <MCP2515::RXB+0x7fb73d>
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 <MCP2515::RXB+0x7fb73c>
1ac: 81 62 ori r24, 0x21 ; 33
1ae: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 <MCP2515::RXB+0x7fb73c>
1b2: 90 91 40 3c lds r25, 0x3C40 ; 0x803c40 <DEFAULT_SPI_SETTINGS>
1b6: 80 91 41 3c lds r24, 0x3C41 ; 0x803c41 <DEFAULT_SPI_SETTINGS+0x1>
config():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142
initialized = true;
}
void SPIClass::config(SPISettings settings)
{
SPI0.CTRLA = settings.ctrla;
1ba: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 <MCP2515::RXB+0x7fb73c>
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 <MCP2515::RXB+0x7fb73d>
_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 <SPIClass::begin() [clone .constprop.8]+0x8c>
pinMode():
1c8: 61 e0 ldi r22, 0x01 ; 1
1ca: 8e e0 ldi r24, 0x0E ; 14
1cc: 8f df rcall .-226 ; 0xec <pinMode.part.1>
1ce: 61 e0 ldi r22, 0x01 ; 1
1d0: 80 e1 ldi r24, 0x10 ; 16
1d2: e4 cf rjmp .-56 ; 0x19c <SPIClass::begin() [clone .constprop.8]+0x54>
_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 <SPIClass::begin() [clone .constprop.8]+0x56>
pinMode():
1d8: 61 e0 ldi r22, 0x01 ; 1
1da: 8e e1 ldi r24, 0x1E ; 30
1dc: 87 df rcall .-242 ; 0xec <pinMode.part.1>
1de: 61 e0 ldi r22, 0x01 ; 1
1e0: 80 e2 ldi r24, 0x20 ; 32
1e2: dc cf rjmp .-72 ; 0x19c <SPIClass::begin() [clone .constprop.8]+0x54>
000001e4 <turnOffPWM.part.0>:
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 <turnOffPWM.part.0+0x54>
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 <turnOffPWM.part.0+0x1a>
1f6: 00 f1 brcs .+64 ; 0x238 <turnOffPWM.part.0+0x54>
1f8: e6 30 cpi r30, 0x06 ; 6
1fa: a8 f0 brcs .+42 ; 0x226 <turnOffPWM.part.0+0x42>
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 <turnOffPWM.part.0+0x28>
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 <MCP2515::RXB+0x7fb87d>
210: 81 e0 ldi r24, 0x01 ; 1
212: 90 e0 ldi r25, 0x00 ; 0
214: 01 c0 rjmp .+2 ; 0x218 <turnOffPWM.part.0+0x34>
216: 88 0f add r24, r24
218: 2a 95 dec r18
21a: ea f7 brpl .-6 ; 0x216 <turnOffPWM.part.0+0x32>
21c: 80 95 com r24
21e: 83 23 and r24, r19
220: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 <MCP2515::RXB+0x7fb87d>
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>:
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 <digitalWrite.part.2+0x3e>
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 <digitalWrite.part.2+0x20>
258: c5 df rcall .-118 ; 0x1e4 <turnOffPWM.part.0>
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 <digitalWrite.part.2+0x4c>
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 <digitalWrite.part.2+0x48>
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 <digitalWrite.part.2+0x3e>
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 <digitalWrite.part.2+0x72>
290: 8f 3f cpi r24, 0xFF ; 255
292: 61 f0 breq .+24 ; 0x2ac <digitalWrite.part.2+0x72>
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 <digitalWrite.part.2+0x78>
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 <digitalWrite.part.2+0x3e>
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 <digitalWrite.part.2+0x60>
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 <digitalWrite.part.2+0x6c>
000002b6 <MCP2515::endSPI() [clone .constprop.32]>:
_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 <mcp2515>
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 <MCP2515::endSPI() [clone .constprop.32]+0x22>
2d4: 61 e0 ldi r22, 0x01 ; 1
2d6: b1 df rcall .-158 ; 0x23a <digitalWrite.part.2>
endTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:265
config(settings);
}
void SPIClass::endTransaction(void)
{
if (interruptMode != SPI_IMODE_NONE)
2d8: 80 91 48 3c lds r24, 0x3C48 ; 0x803c48 <SPI+0x6>
2dc: 88 23 and r24, r24
2de: 19 f0 breq .+6 ; 0x2e6 <MCP2515::endSPI() [clone .constprop.32]+0x30>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:267
{
if (interruptMode & SPI_IMODE_GLOBAL)
2e0: 81 ff sbrs r24, 1
2e2: 0d c0 rjmp .+26 ; 0x2fe <MCP2515::endSPI() [clone .constprop.32]+0x48>
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 <MCP2515::endSPI() [clone .constprop.32]+0x30>
reattachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:225
shift++;
}
}
void SPIClass::reattachMaskedInterrupts() {
uint64_t temp = interruptMask_lo;
302: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a <SPI+0x8>
306: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b <SPI+0x9>
30a: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c <SPI+0xa>
30e: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d <SPI+0xb>
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 <MCP2515::endSPI() [clone .constprop.32]+0xd2>
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 <MCP2515::endSPI() [clone .constprop.32]+0xba>
_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 <MCP2515::endSPI() [clone .constprop.32]+0xaa>
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 <MCP2515::endSPI() [clone .constprop.32]+0x64>
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 <SPI+0xc>
38c: 90 90 4f 3c lds r9, 0x3C4F ; 0x803c4f <SPI+0xd>
390: a0 90 50 3c lds r10, 0x3C50 ; 0x803c50 <SPI+0xe>
394: b0 90 51 3c lds r11, 0x3C51 ; 0x803c51 <SPI+0xf>
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 <MCP2515::endSPI() [clone .constprop.32]+0xfa>
3ae: 9b cf rjmp .-202 ; 0x2e6 <MCP2515::endSPI() [clone .constprop.32]+0x30>
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 <MCP2515::endSPI() [clone .constprop.32]+0x142>
_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 <MCP2515::endSPI() [clone .constprop.32]+0x132>
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 <MCP2515::endSPI() [clone .constprop.32]+0xea>
00000410 <micros>:
micros():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:103
{
uint32_t m;
uint16_t t;
/* Save current state and disable interrupts */
uint8_t status = SREG;
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 <timer_millis>
418: 30 91 2c 3c lds r19, 0x3C2C ; 0x803c2c <timer_millis+0x1>
41c: 40 91 2d 3c lds r20, 0x3C2D ; 0x803c2d <timer_millis+0x2>
420: 50 91 2e 3c lds r21, 0x3C2E ; 0x803c2e <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:108
t = _timer->CNT;
424: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa <MCP2515::RXB+0x7fb926>
428: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab <MCP2515::RXB+0x7fb927>
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 <MCP2515::RXB+0x7fb922>
430: 90 ff sbrs r25, 0
432: 08 c0 rjmp .+16 ; 0x444 <micros+0x34>
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 <MCP2515::RXB+0x7fb926>
440: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab <MCP2515::RXB+0x7fb927>
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 <micros+0x3e>
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>:
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 <micros>
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 <delay+0x3a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:156
{
/* Wait until micros overflows */
while (micros() > return_time)
496: bc df rcall .-136 ; 0x410 <micros>
498: f9 cf rjmp .-14 ; 0x48c <delay+0x2c>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:161
;
}
/* Wait until return time */
while (micros() < return_time)
49a: ba df rcall .-140 ; 0x410 <micros>
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 <delay+0x3a>
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 <ReadPin(PinState*)>:
_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 <ReadPin(PinState*)+0x22>
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 <ReadPin(PinState*)+0x32>
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 <ReadPin(PinState*)+0x1a>
_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 <ReadPin(PinState*)+0x40>
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 <ReadPin(PinState*)+0x1a>
_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 <ReadPin(PinState*)+0x4c>
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 <ReadPin(PinState*)+0x1a>
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 <ReadPin(PinState*)+0x5c>
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 <ReadPin(PinState*)+0x1a>
_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 <ReadPin(PinState*)+0x6c>
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 <ReadPin(PinState*)+0x1a>
_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 <ReadPin(PinState*)+0x7a>
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 <ReadPin(PinState*)+0x1a>
_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 <ReadPin(PinState*)+0x8a>
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 <ReadPin(PinState*)+0x1a>
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 <ReadPin(PinState*)+0xba>
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 <ReadPin(PinState*)+0xba>
turnOffPWM():
556: 46 de rcall .-884 ; 0x1e4 <turnOffPWM.part.0>
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 <ReadPin(PinState*)+0x48>
_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 <ReadPin(PinState*)+0x48>
00000576 <MCP2515::startSPI() [clone .constprop.26]>:
_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 <SPI+0x6>
590: 88 23 and r24, r24
592: 19 f0 breq .+6 ; 0x59a <MCP2515::startSPI() [clone .constprop.26]+0x24>
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 <MCP2515::startSPI() [clone .constprop.26]+0x54>
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 <MCP2515::RXB+0x7fb73c>
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 <MCP2515::RXB+0x7fb73d>
_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 <mcp2515>
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 <MCP2515::startSPI() [clone .constprop.26]+0x3a>
5ae: 98 c0 rjmp .+304 ; 0x6e0 <MCP2515::startSPI() [clone .constprop.26]+0x16a>
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 <digitalWrite.part.2>
beginTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:255
{
if (interruptMode & SPI_IMODE_GLOBAL)
{
noInterrupts();
}
else if (interruptMode & SPI_IMODE_EXTINT)
5ca: 80 ff sbrs r24, 0
5cc: e6 cf rjmp .-52 ; 0x59a <MCP2515::startSPI() [clone .constprop.26]+0x24>
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 <SPI+0x8>
5d2: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b <SPI+0x9>
5d6: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c <SPI+0xa>
5da: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d <SPI+0xb>
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 <MCP2515::startSPI() [clone .constprop.26]+0xe0>
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 <MCP2515::startSPI() [clone .constprop.26]+0xc8>
_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 <MCP2515::startSPI() [clone .constprop.26]+0xb6>
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 <MCP2515::startSPI() [clone .constprop.26]+0x70>
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 <SPI+0xc>
65a: 90 90 4f 3c lds r9, 0x3C4F ; 0x803c4f <SPI+0xd>
65e: a0 90 50 3c lds r10, 0x3C50 ; 0x803c50 <SPI+0xe>
662: b0 90 51 3c lds r11, 0x3C51 ; 0x803c51 <SPI+0xf>
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 <MCP2515::startSPI() [clone .constprop.26]+0x108>
67c: 8e cf rjmp .-228 ; 0x59a <MCP2515::startSPI() [clone .constprop.26]+0x24>
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 <MCP2515::startSPI() [clone .constprop.26]+0x152>
_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 <MCP2515::startSPI() [clone .constprop.26]+0x140>
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 <MCP2515::startSPI() [clone .constprop.26]+0xf8>
_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 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]>:
_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 <MCP2515::startSPI() [clone .constprop.26]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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<n; i++) {
71e: c0 17 cp r28, r16
720: d1 07 cpc r29, r17
722: 19 f0 breq .+6 ; 0x72a <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]+0x32>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
728: fa cf rjmp .-12 ; 0x71e <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]+0x26>
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<n; i++) {
SPI.transfer(values[i]);
}
endSPI();
734: c0 cd rjmp .-1152 ; 0x2b6 <MCP2515::endSPI() [clone .constprop.32]>
00000736 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.24]>:
_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 <MCP2515::startSPI() [clone .constprop.26]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <MCP2515::endSPI() [clone .constprop.32]>
0000075c <MCP2515::readRegister(MCP2515::REGISTER) [clone .constprop.23]>:
_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 <MCP2515::startSPI() [clone .constprop.26]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
76e: c8 2f mov r28, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91
endSPI();
770: a2 dd rcall .-1212 ; 0x2b6 <MCP2515::endSPI() [clone .constprop.32]>
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 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.20]>:
_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 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.24]>
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 <timer_millis>
794: d0 90 2c 3c lds r13, 0x3C2C ; 0x803c2c <timer_millis+0x1>
798: e0 90 2d 3c lds r14, 0x3C2D ; 0x803c2d <timer_millis+0x2>
79c: f0 90 2e 3c lds r15, 0x3C2E ; 0x803c2e <timer_millis+0x3>
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 <timer_millis>
7b4: 90 91 2c 3c lds r25, 0x3C2C ; 0x803c2c <timer_millis+0x1>
7b8: a0 91 2d 3c lds r26, 0x3C2D ; 0x803c2d <timer_millis+0x2>
7bc: b0 91 2e 3c lds r27, 0x3C2E ; 0x803c2e <timer_millis+0x3>
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 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.20]+0x72>
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 <MCP2515::readRegister(MCP2515::REGISTER) [clone .constprop.23]>
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 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.20]+0x34>
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 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.20]+0x60>
000007ee <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.18]>:
_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 <MCP2515::startSPI() [clone .constprop.26]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <MCP2515::endSPI() [clone .constprop.32]>
0000080a <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char) [clone .constprop.7]>:
_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 <MCP2515::startSPI() [clone .constprop.26]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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<n; i++) {
830: c0 17 cp r28, r16
832: d1 07 cpc r29, r17
834: 21 f0 breq .+8 ; 0x83e <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char) [clone .constprop.7]+0x34>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
83a: 89 93 st Y+, r24
83c: f9 cf rjmp .-14 ; 0x830 <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char) [clone .constprop.7]+0x26>
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<n; i++) {
values[i] = SPI.transfer(0x00);
}
endSPI();
848: 36 cd rjmp .-1428 ; 0x2b6 <MCP2515::endSPI() [clone .constprop.32]>
0000084a <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.6]>:
_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 <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char) [clone .constprop.7]>
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 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.6]+0x4a>
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 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.6]+0xa2>
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 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.6]+0x64>
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 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.6]+0xf6>
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 <MCP2515::readRegister(MCP2515::REGISTER) [clone .constprop.23]>
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 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.6]+0xc4>
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 <MCP2515::readRegisters(MCP2515::REGISTER, unsigned char*, unsigned char) [clone .constprop.7]>
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 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.24]>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]>:
_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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0x5c>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0x6a>
9c2: 42 c0 rjmp .+132 ; 0xa48 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0xee>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0x8a>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0xa4>
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 <memcpy>
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 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]>
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 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.24]>
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 <MCP2515::readRegister(MCP2515::REGISTER) [clone .constprop.23]>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0x10a>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0xf2>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0x94>
_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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]+0xd6>
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 <timer_millis>
a80: 90 91 2c 3c lds r25, 0x3C2C ; 0x803c2c <timer_millis+0x1>
a84: a0 91 2d 3c lds r26, 0x3C2D ; 0x803c2d <timer_millis+0x2>
a88: b0 91 2e 3c lds r27, 0x3C2E ; 0x803c2e <timer_millis+0x3>
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 <timer_millis>
a96: 90 93 2c 3c sts 0x3C2C, r25 ; 0x803c2c <timer_millis+0x1>
a9a: a0 93 2d 3c sts 0x3C2D, r26 ; 0x803c2d <timer_millis+0x2>
a9e: b0 93 2e 3c sts 0x3C2E, r27 ; 0x803c2e <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:78
/* Clear flag */
_timer->INTFLAGS = TCB_CAPT_bm;
aa2: 81 e0 ldi r24, 0x01 ; 1
aa4: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 <MCP2515::RXB+0x7fb922>
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 constructors keyed to 65535_0_UPSoftware.ino.cpp.o.2731>:
_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 <SPIClass::begin() [clone .constprop.8]>
ad0: 83 e0 ldi r24, 0x03 ; 3
ad2: 80 93 81 3c sts 0x3C81, r24 ; 0x803c81 <mcp2515>
ad6: 61 e0 ldi r22, 0x01 ; 1
ad8: 09 db rcall .-2542 ; 0xec <pinMode.part.1>
ada: ed cb rjmp .-2086 ; 0x2b6 <MCP2515::endSPI() [clone .constprop.32]>
00000adc <main>:
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 <MCP2515::RXB+0x7faedd>
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 <MCP2515::RXB+0x7fb47e>
af8: 85 60 ori r24, 0x05 ; 5
afa: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <MCP2515::RXB+0x7fb47e>
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 <MCP2515::RXB+0x7fb47c>
b02: 81 60 ori r24, 0x01 ; 1
b04: 80 93 00 06 sts 0x0600, r24 ; 0x800600 <MCP2515::RXB+0x7fb47c>
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 <MCP2515::RXB+0x7fb47e>
b0c: 8f 7c andi r24, 0xCF ; 207
b0e: 80 65 ori r24, 0x50 ; 80
b10: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <MCP2515::RXB+0x7fb47e>
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 <MCP2515::RXB+0x7fb45e>
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 <MCP2515::RXB+0x7fb460>
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 <MCP2515::RXB+0x7fb87f>
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 <MCP2515::RXB+0x7fb8a3>
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 <MCP2515::RXB+0x7fb8a2>
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 <MCP2515::RXB+0x7fb8a9>
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 <MCP2515::RXB+0x7fb8a7>
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 <MCP2515::RXB+0x7fb8a5>
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 <MCP2515::RXB+0x7fb8a8>
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 <MCP2515::RXB+0x7fb8a6>
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 <MCP2515::RXB+0x7fb8a4>
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 <MCP2515::RXB+0x7fb87c>
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 <MCP2515::RXB+0x7fb461>
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 <main+0x82>
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 <MCP2515::RXB+0x7fb91d>
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 <MCP2515::RXB+0x7fb928>
b7c: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad <MCP2515::RXB+0x7fb929>
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 <MCP2515::RXB+0x7fb921>
b84: 81 60 ori r24, 0x01 ; 1
b86: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 <MCP2515::RXB+0x7fb921>
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 <MCP2515::RXB+0x7fb91c>
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 <MCP2515::RXB+0x7fb91c>
b92: 81 60 ori r24, 0x01 ; 1
b94: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 <MCP2515::RXB+0x7fb91c>
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 <SPIClass::begin() [clone .constprop.8]>
_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 <PinPD2>
ba4: 90 93 04 3c sts 0x3C04, r25 ; 0x803c04 <PinPD2+0x1>
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 <PinPD2+0x2>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24
this->is_input = true;
bae: 80 93 06 3c sts 0x3C06, r24 ; 0x803c06 <PinPD2+0x3>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25
this->meyPinId = meyPinId;
bb2: 80 93 07 3c sts 0x3C07, r24 ; 0x803c07 <PinPD2+0x4>
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 <PinPD2+0x5>
bbe: 30 93 09 3c sts 0x3C09, r19 ; 0x803c09 <PinPD2+0x6>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23
this->pin_state = true;
bc2: 80 93 0a 3c sts 0x3C0A, r24 ; 0x803c0a <PinPD2+0x7>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24
this->is_input = true;
bc6: 80 93 0b 3c sts 0x3C0B, r24 ; 0x803c0b <PinPD2+0x8>
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 <PinPD2+0x9>
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 <PinPD2+0xa>
bd8: 30 93 0e 3c sts 0x3C0E, r19 ; 0x803c0e <PinPD2+0xb>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23
this->pin_state = true;
bdc: 80 93 0f 3c sts 0x3C0F, r24 ; 0x803c0f <PinPD2+0xc>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24
this->is_input = true;
be0: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 <PinPD2+0xd>
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 <PinPD2+0xe>
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 <PinPD2+0xf>
bf2: 30 93 13 3c sts 0x3C13, r19 ; 0x803c13 <PinPD2+0x10>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23
this->pin_state = true;
bf6: 80 93 14 3c sts 0x3C14, r24 ; 0x803c14 <PinPD2+0x11>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24
this->is_input = true;
bfa: 80 93 15 3c sts 0x3C15, r24 ; 0x803c15 <PinPD2+0x12>
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 <PinPD2+0x13>
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 <PinPD2+0x14>
c0c: 30 93 18 3c sts 0x3C18, r19 ; 0x803c18 <PinPD2+0x15>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23
this->pin_state = true;
c10: 80 93 19 3c sts 0x3C19, r24 ; 0x803c19 <PinPD2+0x16>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24
this->is_input = true;
c14: 80 93 1a 3c sts 0x3C1A, r24 ; 0x803c1a <PinPD2+0x17>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25
this->meyPinId = meyPinId;
c18: 00 93 1b 3c sts 0x3C1B, r16 ; 0x803c1b <PinPD2+0x18>
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 <PinPD2+0x19>
c24: 30 93 1d 3c sts 0x3C1D, r19 ; 0x803c1d <PinPD2+0x1a>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23
this->pin_state = true;
c28: 80 93 1e 3c sts 0x3C1E, r24 ; 0x803c1e <PinPD2+0x1b>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24
this->is_input = true;
c2c: 80 93 1f 3c sts 0x3C1F, r24 ; 0x803c1f <PinPD2+0x1c>
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 <PinPD2+0x1d>
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 <PinPD2+0x1e>
c3e: 30 93 22 3c sts 0x3C22, r19 ; 0x803c22 <PinPD2+0x1f>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23
this->pin_state = true;
c42: 80 93 23 3c sts 0x3C23, r24 ; 0x803c23 <PinPD2+0x20>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24
this->is_input = true;
c46: 80 93 24 3c sts 0x3C24, r24 ; 0x803c24 <PinPD2+0x21>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25
this->meyPinId = meyPinId;
c4a: 10 93 25 3c sts 0x3C25, r17 ; 0x803c25 <PinPD2+0x22>
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 <PinPD2+0x23>
c56: 30 93 27 3c sts 0x3C27, r19 ; 0x803c27 <PinPD2+0x24>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23
this->pin_state = true;
c5a: 80 93 28 3c sts 0x3C28, r24 ; 0x803c28 <PinPD2+0x25>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24
this->is_input = true;
c5e: 80 93 29 3c sts 0x3C29, r24 ; 0x803c29 <PinPD2+0x26>
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 <PinPD2+0x27>
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 <MCP2515::RXB+0x7faedc>
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 <MCP2515::RXB+0x7faedc>
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 <MCP2515::startSPI() [clone .constprop.26]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38
endSPI();
c7e: 1b db rcall .-2506 ; 0x2b6 <MCP2515::endSPI() [clone .constprop.32]>
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 <delay>
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 <main+0x1b8>
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 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]>
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 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]>
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 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]>
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 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.18]>
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 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.18]>
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 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.18]>
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 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.24]>
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 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.24]>
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 <main+0x202>
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 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.20]>
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 <main+0x246>
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 <main+0x232>
d0c: 75 c1 rjmp .+746 ; 0xff8 <main+0x51c>
d0e: 08 f0 brcs .+2 ; 0xd12 <main+0x236>
d10: 2c c1 rjmp .+600 ; 0xf6a <main+0x48e>
d12: 01 15 cp r16, r1
d14: 11 05 cpc r17, r1
d16: 09 f4 brne .+2 ; 0xd1a <main+0x23e>
d18: 34 c1 rjmp .+616 ; 0xf82 <main+0x4a6>
d1a: 01 30 cpi r16, 0x01 ; 1
d1c: 11 05 cpc r17, r1
d1e: 09 f4 brne .+2 ; 0xd22 <main+0x246>
d20: 71 c1 rjmp .+738 ; 0x1004 <main+0x528>
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 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.20]>
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 <main+0x260>
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 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.18]>
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 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.18]>
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 <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.18]>
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 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.20]>
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 <main+0x27c>
d54: 62 e0 ldi r22, 0x02 ; 2
d56: ca d9 rcall .-3180 ; 0xec <pinMode.part.1>
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 <ReadPin(PinState*)>
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 <main+0x270>
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 <MCP2515::RXB+0x7fbf7f>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:205
CircularShift(SIGROW.SERNUM2) << 1 ^
d6e: 90 91 05 11 lds r25, 0x1105 ; 0x801105 <MCP2515::RXB+0x7fbf81>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:206
CircularShift( CircularShift(SIGROW.SERNUM4)) ^
d72: 40 91 07 11 lds r20, 0x1107 ; 0x801107 <MCP2515::RXB+0x7fbf83>
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 <MCP2515::RXB+0x7fbf85>
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 <MCP2515::RXB+0x7fbf87>
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 <MCP2515::RXB+0x7fbf80>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:213
CircularShift(SIGROW.SERNUM3) << 1 ^
dae: 40 91 06 11 lds r20, 0x1106 ; 0x801106 <MCP2515::RXB+0x7fbf82>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:214
CircularShift( CircularShift(SIGROW.SERNUM5)) ^
db2: 30 91 08 11 lds r19, 0x1108 ; 0x801108 <MCP2515::RXB+0x7fbf84>
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 <MCP2515::RXB+0x7fbf86>
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 <MCP2515::RXB+0x7fbf88>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]>
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 <main+0x3e6>
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 <ReadPin(PinState*)>
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 <main+0x3e6>
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 <delay>
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 <ReadPin(PinState*)>
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 <main+0x3e6>
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 <MCP2515::sendMessage(MCP2515::TXBn, can_frame const*) [clone .part.3] [clone .constprop.22]>
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 <main+0x3f4>
ece: bd cf rjmp .-134 ; 0xe4a <main+0x36e>
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 <MCP2515::startSPI() [clone .constprop.26]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
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 <SPIClass::transfer(unsigned char) [clone .constprop.31]>
eda: d8 2e mov r13, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:143
endSPI();
edc: ec d9 rcall .-3112 ; 0x2b6 <MCP2515::endSPI() [clone .constprop.32]>
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 <main+0x412>
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 <main+0x478>
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 <MCP2515::readMessage(MCP2515::RXBn, can_frame*) [clone .constprop.6]>
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 <main+0x478>
C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:93
{
debugFlag ^= true;
ef4: 80 91 02 3c lds r24, 0x3C02 ; 0x803c02 <debugFlag>
ef8: 89 25 eor r24, r9
efa: 80 93 02 3c sts 0x3C02, r24 ; 0x803c02 <debugFlag>
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 <main+0x434>
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 <main+0x54a>
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 <main+0x46a>
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 <main+0x466>
f3e: 61 e0 ldi r22, 0x01 ; 1
f40: d5 d8 rcall .-3670 ; 0xec <pinMode.part.1>
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 <main+0x478>
f50: 6d 2d mov r22, r13
f52: 73 d9 rcall .-3354 ; 0x23a <digitalWrite.part.2>
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 <delay>
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 <main+0x48a>
f64: 6e cf rjmp .-292 ; 0xe42 <main+0x366>
f66: 4c d8 rcall .-3944 ; 0x0 <__vectors>
f68: 6c cf rjmp .-296 ; 0xe42 <main+0x366>
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 <main+0x496>
f70: 47 c0 rjmp .+142 ; 0x1000 <main+0x524>
f72: 08 f4 brcc .+2 ; 0xf76 <main+0x49a>
f74: 43 c0 rjmp .+134 ; 0xffc <main+0x520>
f76: 05 30 cpi r16, 0x05 ; 5
f78: 11 05 cpc r17, r1
f7a: 09 f0 breq .+2 ; 0xf7e <main+0x4a2>
f7c: d2 ce rjmp .-604 ; 0xd22 <main+0x246>
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 <main+0x4a8>
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 <main+0x52c>
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 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]>
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 <main+0x4d2>
fac: a4 ce rjmp .-696 ; 0xcf6 <main+0x21a>
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 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.20]>
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 <main+0x502>
fdc: a2 ce rjmp .-700 ; 0xd22 <main+0x246>
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 <main+0x536>
fec: ca 94 dec r12
fee: cd 28 or r12, r13
ff0: 09 f0 breq .+2 ; 0xff4 <main+0x518>
ff2: 97 ce rjmp .-722 ; 0xd22 <main+0x246>
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 <main+0x538>
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 <main+0x4a8>
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 <main+0x4a8>
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 <main+0x4a8>
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 <main+0x4a8>
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+0x4b8>
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 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.25]>
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 <main+0x4f0>
1024: 7e ce rjmp .-772 ; 0xd22 <main+0x246>
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 <main+0x556>
1030: 73 cf rjmp .-282 ; 0xf18 <main+0x43c>
1032: 7e cf rjmp .-260 ; 0xf30 <main+0x454>
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>:
memcpy():
10be: fb 01 movw r30, r22
10c0: dc 01 movw r26, r24
10c2: 02 c0 rjmp .+4 ; 0x10c8 <memcpy+0xa>
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 <memcpy+0x6>
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>