Files
info.linkwitz.ha_pcb/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.lst
2022-09-01 12:19:04 +02:00

3266 lines
142 KiB
Plaintext

C:\Users\Martin\AppData\Local\Temp\arduino_build_23468/sketch_jun30b.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: 69 c3 rjmp .+1746 ; 0x738 <__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: c4 03 fmuls r20, r20
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: f8 d5 rcall .+3056 ; 0xcbc <__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: b9 d3 rcall .+1906 ; 0x846 <main>
../../../../../crt1/gcrt1.S:315
d4: 0e c6 rjmp .+3100 ; 0xcf2 <_exit>
000000d6 <__bad_interrupt>:
__vector_38():
../../../../../crt1/gcrt1.S:209
d6: 94 cf rjmp .-216 ; 0x0 <__vectors>
000000d8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>:
_ZN8SPIClass8transferEh.constprop.25():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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.0.10\libraries\SPI\src/SPI.cpp:306
SPI0.DATA = data;
da: 80 93 c4 08 sts 0x08C4, r24 ; 0x8008c4 <MCP2515::TXB+0x7fbb18>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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::TXB+0x7fbb17>
e2: 87 ff sbrs r24, 7
e4: fc cf rjmp .-8 ; 0xde <SPIClass::transfer(unsigned char) [clone .constprop.25]+0x6>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:308
return SPI0.DATA; // read data back
e6: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 <MCP2515::TXB+0x7fbb18>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:309
}
ea: 08 95 ret
000000ec <digitalWrite.part.2>:
digitalWrite.part.2():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
ec: 28 2f mov r18, r24
ee: 30 e0 ldi r19, 0x00 ; 0
f0: f9 01 movw r30, r18
f2: ed 57 subi r30, 0x7D ; 125
f4: f2 4b sbci r31, 0xB2 ; 178
f6: 40 81 ld r20, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:138
if (bit_mask == NOT_A_PIN)
f8: 4f 3f cpi r20, 0xFF ; 255
fa: 09 f4 brne .+2 ; 0xfe <digitalWrite.part.2+0x12>
fc: 50 c0 rjmp .+160 ; 0x19e <__EEPROM_REGION_LENGTH__+0x9e>
turnOffPWM():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
fe: 89 32 cpi r24, 0x29 ; 41
100: 58 f4 brcc .+22 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18>
102: f9 01 movw r30, r18
104: e8 5f subi r30, 0xF8 ; 248
106: f2 4b sbci r31, 0xB2 ; 178
108: e0 81 ld r30, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:98
if (timer == NOT_ON_TIMER)
10a: ee 23 and r30, r30
10c: 29 f0 breq .+10 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:104
return;
uint8_t bit_pos;
TCB_t *timerB;
switch (timer)
10e: e1 30 cpi r30, 0x01 ; 1
110: 99 f0 breq .+38 ; 0x138 <__EEPROM_REGION_LENGTH__+0x38>
112: 10 f0 brcs .+4 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18>
114: e6 30 cpi r30, 0x06 ; 6
116: 20 f1 brcs .+72 ; 0x160 <__EEPROM_REGION_LENGTH__+0x60>
digitalWrite.part.2():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:150
turnOffPWM(pin);
/* Assuming the direction is already output !! */
/* Get port */
PORT_t *port = digitalPinToPortStruct(pin);
118: f9 01 movw r30, r18
11a: e6 5a subi r30, 0xA6 ; 166
11c: f2 4b sbci r31, 0xB2 ; 178
11e: e0 81 ld r30, Z
120: a0 e2 ldi r26, 0x20 ; 32
122: ea 9f mul r30, r26
124: f0 01 movw r30, r0
126: 11 24 eor r1, r1
128: fc 5f subi r31, 0xFC ; 252
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:153
/* Output direction */
if (port->DIR & bit_mask)
12a: 80 81 ld r24, Z
12c: 84 23 and r24, r20
12e: 21 f1 breq .+72 ; 0x178 <__EEPROM_REGION_LENGTH__+0x78>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:156
{
/* Set output to value */
if (val == LOW)
130: 61 11 cpse r22, r1
132: 20 c0 rjmp .+64 ; 0x174 <__EEPROM_REGION_LENGTH__+0x74>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:158
{ /* If LOW */
port->OUTCLR = bit_mask;
134: 46 83 std Z+6, r20 ; 0x06
136: 08 95 ret
turnOffPWM():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:109
switch (timer)
{
/* TCA0 */
case TIMERA0:
/* Bit position will give output channel */
bit_pos = digitalPinToBitPosition(pin);
138: f9 01 movw r30, r18
13a: ef 5c subi r30, 0xCF ; 207
13c: f2 4b sbci r31, 0xB2 ; 178
13e: 50 81 ld r21, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:112
/* Disable corresponding channel */
if (bit_pos >= 3) ++bit_pos; /* Upper 3 bits are shifted by 1 */
140: 53 30 cpi r21, 0x03 ; 3
142: 08 f0 brcs .+2 ; 0x146 <__EEPROM_REGION_LENGTH__+0x46>
144: 5f 5f subi r21, 0xFF ; 255
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:113
TCA0.SPLIT.CTRLB &= ~(1 << (TCA_SPLIT_LCMP0EN_bp + bit_pos));
146: 70 91 01 0a lds r23, 0x0A01 ; 0x800a01 <MCP2515::TXB+0x7fbc55>
14a: 81 e0 ldi r24, 0x01 ; 1
14c: 90 e0 ldi r25, 0x00 ; 0
14e: 01 c0 rjmp .+2 ; 0x152 <__EEPROM_REGION_LENGTH__+0x52>
150: 88 0f add r24, r24
152: 5a 95 dec r21
154: ea f7 brpl .-6 ; 0x150 <__EEPROM_REGION_LENGTH__+0x50>
156: 80 95 com r24
158: 87 23 and r24, r23
15a: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 <MCP2515::TXB+0x7fbc55>
15e: dc cf rjmp .-72 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:123
case TIMERB0:
case TIMERB1:
case TIMERB2:
case TIMERB3:
timerB = (TCB_t *)&TCB0 + (timer - TIMERB0);
160: 80 e1 ldi r24, 0x10 ; 16
162: e8 9f mul r30, r24
164: f0 01 movw r30, r0
166: 11 24 eor r1, r1
168: e0 5a subi r30, 0xA0 ; 160
16a: f5 4f sbci r31, 0xF5 ; 245
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:126
/* Disable TCB compare channel */
timerB->CTRLB &= ~(TCB_CCMPEN_bm);
16c: 81 81 ldd r24, Z+1 ; 0x01
16e: 8f 7e andi r24, 0xEF ; 239
170: 81 83 std Z+1, r24 ; 0x01
172: d2 cf rjmp .-92 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18>
digitalWrite.part.2():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:167
port->OUTTGL = bit_mask;
/* If HIGH OR > TOGGLE */
}
else
{
port->OUTSET = bit_mask;
174: 45 83 std Z+5, r20 ; 0x05
176: 08 95 ret
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
178: 2f 5c subi r18, 0xCF ; 207
17a: 32 4b sbci r19, 0xB2 ; 178
17c: d9 01 movw r26, r18
17e: 8c 91 ld r24, X
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:183
/* Calculate where pin control register is */
volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos);
180: 30 97 sbiw r30, 0x00 ; 0
182: 71 f0 breq .+28 ; 0x1a0 <__EEPROM_REGION_LENGTH__+0xa0>
184: 8f 3f cpi r24, 0xFF ; 255
186: 61 f0 breq .+24 ; 0x1a0 <__EEPROM_REGION_LENGTH__+0xa0>
188: 70 96 adiw r30, 0x10 ; 16
18a: e8 0f add r30, r24
18c: f1 1d adc r31, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:186
/* Save system status and disable interrupts */
uint8_t status = SREG;
18e: 9f b7 in r25, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:187
cli();
190: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:192
if (val == LOW)
{
/* Disable pullup */
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
192: 80 81 ld r24, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:189
/* Save system status and disable interrupts */
uint8_t status = SREG;
cli();
if (val == LOW)
194: 61 11 cpse r22, r1
196: 07 c0 rjmp .+14 ; 0x1a6 <__EEPROM_REGION_LENGTH__+0xa6>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:192
{
/* Disable pullup */
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
198: 87 7f andi r24, 0xF7 ; 247
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:197
}
else
{
/* Enable pull-up */
*pin_ctrl_reg |= PORT_PULLUPEN_bm;
19a: 80 83 st Z, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:201
}
/* Restore system status */
SREG = status;
19c: 9f bf out 0x3f, r25 ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:203
}
}
19e: 08 95 ret
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
1a0: f0 e0 ldi r31, 0x00 ; 0
1a2: e0 e0 ldi r30, 0x00 ; 0
1a4: f4 cf rjmp .-24 ; 0x18e <__EEPROM_REGION_LENGTH__+0x8e>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:197
*pin_ctrl_reg &= ~PORT_PULLUPEN_bm;
}
else
{
/* Enable pull-up */
*pin_ctrl_reg |= PORT_PULLUPEN_bm;
1a6: 88 60 ori r24, 0x08 ; 8
1a8: f8 cf rjmp .-16 ; 0x19a <__EEPROM_REGION_LENGTH__+0x9a>
000001aa <MCP2515::endSPI() [clone .constprop.31]>:
_ZN7MCP25156endSPIEv.constprop.31():
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() {
1aa: 8f 92 push r8
1ac: 9f 92 push r9
1ae: af 92 push r10
1b0: bf 92 push r11
1b2: cf 92 push r12
1b4: df 92 push r13
1b6: ef 92 push r14
1b8: ff 92 push r15
1ba: 0f 93 push r16
1bc: cf 93 push r28
1be: df 93 push r29
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:30
digitalWrite(SPICS, HIGH);
1c0: 80 91 85 3c lds r24, 0x3C85 ; 0x803c85 <mcp2515>
digitalWrite():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
1c4: 89 32 cpi r24, 0x29 ; 41
1c6: 10 f4 brcc .+4 ; 0x1cc <MCP2515::endSPI() [clone .constprop.31]+0x22>
1c8: 61 e0 ldi r22, 0x01 ; 1
1ca: 90 df rcall .-224 ; 0xec <digitalWrite.part.2>
endTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:265
config(settings);
}
void SPIClass::endTransaction(void)
{
if (interruptMode != SPI_IMODE_NONE)
1cc: 80 91 1c 3c lds r24, 0x3C1C ; 0x803c1c <SPI+0x6>
1d0: 88 23 and r24, r24
1d2: 19 f0 breq .+6 ; 0x1da <MCP2515::endSPI() [clone .constprop.31]+0x30>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:267
{
if (interruptMode & SPI_IMODE_GLOBAL)
1d4: 81 ff sbrs r24, 1
1d6: 0d c0 rjmp .+26 ; 0x1f2 <MCP2515::endSPI() [clone .constprop.31]+0x48>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:269
{
interrupts();
1d8: 78 94 sei
_ZN7MCP25156endSPIEv.constprop.31():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:32
SPI.endTransaction();
}
1da: df 91 pop r29
1dc: cf 91 pop r28
1de: 0f 91 pop r16
1e0: ff 90 pop r15
1e2: ef 90 pop r14
1e4: df 90 pop r13
1e6: cf 90 pop r12
1e8: bf 90 pop r11
1ea: af 90 pop r10
1ec: 9f 90 pop r9
1ee: 8f 90 pop r8
1f0: 08 95 ret
endTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:271
}
else if (interruptMode & SPI_IMODE_EXTINT)
1f2: 80 ff sbrs r24, 0
1f4: f2 cf rjmp .-28 ; 0x1da <MCP2515::endSPI() [clone .constprop.31]+0x30>
reattachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:225
shift++;
}
}
void SPIClass::reattachMaskedInterrupts() {
uint64_t temp = interruptMask_lo;
1f6: 80 90 1e 3c lds r8, 0x3C1E ; 0x803c1e <SPI+0x8>
1fa: 90 90 1f 3c lds r9, 0x3C1F ; 0x803c1f <SPI+0x9>
1fe: a0 90 20 3c lds r10, 0x3C20 ; 0x803c20 <SPI+0xa>
202: b0 90 21 3c lds r11, 0x3C21 ; 0x803c21 <SPI+0xb>
206: c1 2c mov r12, r1
208: d1 2c mov r13, r1
20a: 76 01 movw r14, r12
_ZN7MCP25156endSPIEv.constprop.31():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:226
uint8_t shift = 0;
20c: e0 e0 ldi r30, 0x00 ; 0
reattachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:227
while (temp != 0) {
20e: 94 01 movw r18, r8
210: a5 01 movw r20, r10
212: b6 01 movw r22, r12
214: c7 01 movw r24, r14
216: a0 e0 ldi r26, 0x00 ; 0
218: 45 d5 rcall .+2698 ; 0xca4 <__cmpdi2_s8>
21a: 81 f1 breq .+96 ; 0x27c <MCP2515::endSPI() [clone .constprop.31]+0xd2>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:228
if (temp & 1) {
21c: 21 70 andi r18, 0x01 ; 1
21e: 30 e0 ldi r19, 0x00 ; 0
220: 40 e0 ldi r20, 0x00 ; 0
222: 50 e0 ldi r21, 0x00 ; 0
224: 60 e0 ldi r22, 0x00 ; 0
226: 70 e0 ldi r23, 0x00 ; 0
228: 80 e0 ldi r24, 0x00 ; 0
22a: 90 e0 ldi r25, 0x00 ; 0
22c: 3b d5 rcall .+2678 ; 0xca4 <__cmpdi2_s8>
22e: d1 f0 breq .+52 ; 0x264 <MCP2515::endSPI() [clone .constprop.31]+0xba>
_ZN7MCP25156endSPIEv.constprop.31():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:229
volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8);
230: b0 e0 ldi r27, 0x00 ; 0
232: a0 e0 ldi r26, 0x00 ; 0
reattachMaskedInterrupts():
234: e0 33 cpi r30, 0x30 ; 48
236: 70 f4 brcc .+28 ; 0x254 <MCP2515::endSPI() [clone .constprop.31]+0xaa>
238: ae 2f mov r26, r30
23a: a6 95 lsr r26
23c: a6 95 lsr r26
23e: a6 95 lsr r26
240: 80 e2 ldi r24, 0x20 ; 32
242: a8 9f mul r26, r24
244: d0 01 movw r26, r0
246: 11 24 eor r1, r1
248: a0 5f subi r26, 0xF0 ; 240
24a: bb 4f sbci r27, 0xFB ; 251
24c: 8e 2f mov r24, r30
24e: 87 70 andi r24, 0x07 ; 7
250: a8 0f add r26, r24
252: b1 1d adc r27, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:230
*pin_ctrl_reg |= irqMap[shift];
254: ce 2f mov r28, r30
256: d0 e0 ldi r29, 0x00 ; 0
258: ca 5e subi r28, 0xEA ; 234
25a: d3 4c sbci r29, 0xC3 ; 195
25c: 88 89 ldd r24, Y+16 ; 0x10
25e: 9c 91 ld r25, X
260: 89 2b or r24, r25
262: 8c 93 st X, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:232
}
temp = temp >> 1;
264: 94 01 movw r18, r8
266: a5 01 movw r20, r10
268: b6 01 movw r22, r12
26a: c7 01 movw r24, r14
26c: 01 e0 ldi r16, 0x01 ; 1
26e: ff d4 rcall .+2558 ; 0xc6e <__lshrdi3>
270: 49 01 movw r8, r18
272: 5a 01 movw r10, r20
274: 6b 01 movw r12, r22
276: 7c 01 movw r14, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:233
shift++;
278: ef 5f subi r30, 0xFF ; 255
27a: c9 cf rjmp .-110 ; 0x20e <MCP2515::endSPI() [clone .constprop.31]+0x64>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:235
}
temp = interruptMask_hi;
27c: 80 90 22 3c lds r8, 0x3C22 ; 0x803c22 <SPI+0xc>
280: 90 90 23 3c lds r9, 0x3C23 ; 0x803c23 <SPI+0xd>
284: a0 90 24 3c lds r10, 0x3C24 ; 0x803c24 <SPI+0xe>
288: b0 90 25 3c lds r11, 0x3C25 ; 0x803c25 <SPI+0xf>
28c: c1 2c mov r12, r1
28e: d1 2c mov r13, r1
290: 76 01 movw r14, r12
_ZN7MCP25156endSPIEv.constprop.31():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:236
shift = 32;
292: e0 e2 ldi r30, 0x20 ; 32
reattachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:237
while (temp != 0) {
294: 94 01 movw r18, r8
296: a5 01 movw r20, r10
298: b6 01 movw r22, r12
29a: c7 01 movw r24, r14
29c: a0 e0 ldi r26, 0x00 ; 0
29e: 02 d5 rcall .+2564 ; 0xca4 <__cmpdi2_s8>
2a0: 09 f4 brne .+2 ; 0x2a4 <MCP2515::endSPI() [clone .constprop.31]+0xfa>
2a2: 9b cf rjmp .-202 ; 0x1da <MCP2515::endSPI() [clone .constprop.31]+0x30>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:238
if (temp & 1) {
2a4: 21 70 andi r18, 0x01 ; 1
2a6: 30 e0 ldi r19, 0x00 ; 0
2a8: 40 e0 ldi r20, 0x00 ; 0
2aa: 50 e0 ldi r21, 0x00 ; 0
2ac: 60 e0 ldi r22, 0x00 ; 0
2ae: 70 e0 ldi r23, 0x00 ; 0
2b0: 80 e0 ldi r24, 0x00 ; 0
2b2: 90 e0 ldi r25, 0x00 ; 0
2b4: f7 d4 rcall .+2542 ; 0xca4 <__cmpdi2_s8>
2b6: d1 f0 breq .+52 ; 0x2ec <MCP2515::endSPI() [clone .constprop.31]+0x142>
_ZN7MCP25156endSPIEv.constprop.31():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:239
volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8);
2b8: b0 e0 ldi r27, 0x00 ; 0
2ba: a0 e0 ldi r26, 0x00 ; 0
reattachMaskedInterrupts():
2bc: e0 33 cpi r30, 0x30 ; 48
2be: 70 f4 brcc .+28 ; 0x2dc <MCP2515::endSPI() [clone .constprop.31]+0x132>
2c0: ae 2f mov r26, r30
2c2: a6 95 lsr r26
2c4: a6 95 lsr r26
2c6: a6 95 lsr r26
2c8: 80 e2 ldi r24, 0x20 ; 32
2ca: a8 9f mul r26, r24
2cc: d0 01 movw r26, r0
2ce: 11 24 eor r1, r1
2d0: a0 5f subi r26, 0xF0 ; 240
2d2: bb 4f sbci r27, 0xFB ; 251
2d4: 8e 2f mov r24, r30
2d6: 87 70 andi r24, 0x07 ; 7
2d8: a8 0f add r26, r24
2da: b1 1d adc r27, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:240
*pin_ctrl_reg |= irqMap[shift];
2dc: ce 2f mov r28, r30
2de: d0 e0 ldi r29, 0x00 ; 0
2e0: ca 5e subi r28, 0xEA ; 234
2e2: d3 4c sbci r29, 0xC3 ; 195
2e4: 88 89 ldd r24, Y+16 ; 0x10
2e6: 9c 91 ld r25, X
2e8: 89 2b or r24, r25
2ea: 8c 93 st X, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:242
}
temp = temp >> 1;
2ec: 94 01 movw r18, r8
2ee: a5 01 movw r20, r10
2f0: b6 01 movw r22, r12
2f2: c7 01 movw r24, r14
2f4: 01 e0 ldi r16, 0x01 ; 1
2f6: bb d4 rcall .+2422 ; 0xc6e <__lshrdi3>
2f8: 49 01 movw r8, r18
2fa: 5a 01 movw r10, r20
2fc: 6b 01 movw r12, r22
2fe: 7c 01 movw r14, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:243
shift++;
300: ef 5f subi r30, 0xFF ; 255
302: c8 cf rjmp .-112 ; 0x294 <MCP2515::endSPI() [clone .constprop.31]+0xea>
00000304 <pinMode.part.1>:
pinMode.part.1():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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)
304: cf 93 push r28
306: df 93 push r29
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:31
{
uint8_t bit_mask = digitalPinToBitMask(pin);
308: 90 e0 ldi r25, 0x00 ; 0
30a: fc 01 movw r30, r24
30c: ed 57 subi r30, 0x7D ; 125
30e: f2 4b sbci r31, 0xB2 ; 178
310: 20 81 ld r18, Z
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:33
if ((bit_mask == NOT_A_PIN) || (mode > INPUT_PULLUP))
312: 2f 3f cpi r18, 0xFF ; 255
314: 61 f0 breq .+24 ; 0x32e <pinMode.part.1+0x2a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:36
return;
PORT_t *port = digitalPinToPortStruct(pin);
316: fc 01 movw r30, r24
318: e6 5a subi r30, 0xA6 ; 166
31a: f2 4b sbci r31, 0xB2 ; 178
31c: e0 81 ld r30, Z
31e: 30 e2 ldi r19, 0x20 ; 32
320: e3 9f mul r30, r19
322: f0 01 movw r30, r0
324: 11 24 eor r1, r1
326: fc 5f subi r31, 0xFC ; 252
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:40
if (port == NULL)
return;
if (mode == OUTPUT)
328: 61 30 cpi r22, 0x01 ; 1
32a: 21 f4 brne .+8 ; 0x334 <pinMode.part.1+0x30>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:43
{
/* Configure direction as output */
port->DIRSET = bit_mask;
32c: 21 83 std Z+1, r18 ; 0x01
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:75
}
/* Restore state */
SREG = status;
}
}
32e: df 91 pop r29
330: cf 91 pop r28
332: 08 95 ret
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:48
port->DIRSET = bit_mask;
}
else
{ /* mode == INPUT or INPUT_PULLUP */
uint8_t bit_pos = digitalPinToBitPosition(pin);
334: 8f 5c subi r24, 0xCF ; 207
336: 92 4b sbci r25, 0xB2 ; 178
338: ec 01 movw r28, r24
33a: a8 81 ld r26, Y
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:50
/* Calculate where pin control register is */
volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos);
33c: af 3f cpi r26, 0xFF ; 255
33e: 69 f0 breq .+26 ; 0x35a <pinMode.part.1+0x56>
340: cf 01 movw r24, r30
342: 40 96 adiw r24, 0x10 ; 16
344: a8 0f add r26, r24
346: b9 2f mov r27, r25
348: b1 1d adc r27, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:53
/* Save state */
uint8_t status = SREG;
34a: 9f b7 in r25, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:54
cli();
34c: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:57
/* Configure direction as input */
port->DIRCLR = bit_mask;
34e: 22 83 std Z+2, r18 ; 0x02
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:63
/* Configure pull-up resistor */
if (mode == INPUT_PULLUP)
{
/* Enable pull-up */
*pin_ctrl_reg |= PORT_PULLUPEN_bm;
350: 8c 91 ld r24, X
352: 88 60 ori r24, 0x08 ; 8
354: 8c 93 st X, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:73
/* Disable pull-up */
*pin_ctrl_reg &= ~(PORT_PULLUPEN_bm);
}
/* Restore state */
SREG = status;
356: 9f bf out 0x3f, r25 ; 63
358: ea cf rjmp .-44 ; 0x32e <pinMode.part.1+0x2a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
35a: b0 e0 ldi r27, 0x00 ; 0
35c: a0 e0 ldi r26, 0x00 ; 0
35e: f5 cf rjmp .-22 ; 0x34a <pinMode.part.1+0x46>
00000360 <SPIClass::begin() [clone .constprop.28]>:
_ZN8SPIClass5beginEv.constprop.28():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:131
config(DEFAULT_SPI_SETTINGS);
}
void SPIClass::init()
{
if (initialized)
360: 80 91 1b 3c lds r24, 0x3C1B ; 0x803c1b <SPI+0x5>
364: 81 11 cpse r24, r1
366: 17 c0 rjmp .+46 ; 0x396 <SPIClass::begin() [clone .constprop.28]+0x36>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:133
return;
interruptMode = SPI_IMODE_NONE;
368: 10 92 1c 3c sts 0x3C1C, r1 ; 0x803c1c <SPI+0x6>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:134
interruptSave = 0;
36c: 10 92 1d 3c sts 0x3C1D, r1 ; 0x803c1d <SPI+0x7>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:135
interruptMask_lo = 0;
370: 10 92 1e 3c sts 0x3C1E, r1 ; 0x803c1e <SPI+0x8>
374: 10 92 1f 3c sts 0x3C1F, r1 ; 0x803c1f <SPI+0x9>
378: 10 92 20 3c sts 0x3C20, r1 ; 0x803c20 <SPI+0xa>
37c: 10 92 21 3c sts 0x3C21, r1 ; 0x803c21 <SPI+0xb>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:136
interruptMask_hi = 0;
380: 10 92 22 3c sts 0x3C22, r1 ; 0x803c22 <SPI+0xc>
384: 10 92 23 3c sts 0x3C23, r1 ; 0x803c23 <SPI+0xd>
388: 10 92 24 3c sts 0x3C24, r1 ; 0x803c24 <SPI+0xe>
38c: 10 92 25 3c sts 0x3C25, r1 ; 0x803c25 <SPI+0xf>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:137
initialized = true;
390: 81 e0 ldi r24, 0x01 ; 1
392: 80 93 1b 3c sts 0x3C1B, r24 ; 0x803c1b <SPI+0x5>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:99
void SPIClass::begin()
{
init();
PORTMUX.TWISPIROUTEA = _uc_mux | (PORTMUX.TWISPIROUTEA & ~3);
396: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 <MCP2515::TXB+0x7fb837>
39a: 8c 7f andi r24, 0xFC ; 252
39c: 90 91 1a 3c lds r25, 0x3C1A ; 0x803c1a <SPI+0x4>
3a0: 89 2b or r24, r25
3a2: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 <MCP2515::TXB+0x7fb837>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:102
// MISO is set to input by the controller
if(_uc_mux == SPI_MUX)
3a6: 91 11 cpse r25, r1
3a8: 19 c0 rjmp .+50 ; 0x3dc <SPIClass::begin() [clone .constprop.28]+0x7c>
pinMode():
3aa: 61 e0 ldi r22, 0x01 ; 1
3ac: 84 e0 ldi r24, 0x04 ; 4
3ae: aa df rcall .-172 ; 0x304 <pinMode.part.1>
3b0: 61 e0 ldi r22, 0x01 ; 1
3b2: 86 e0 ldi r24, 0x06 ; 6
3b4: a7 df rcall .-178 ; 0x304 <pinMode.part.1>
_ZN8SPIClass5beginEv.constprop.28():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
3b6: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 <MCP2515::TXB+0x7fbb15>
3ba: 84 60 ori r24, 0x04 ; 4
3bc: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <MCP2515::TXB+0x7fbb15>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:124
SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm);
3c0: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 <MCP2515::TXB+0x7fbb14>
3c4: 81 62 ori r24, 0x21 ; 33
3c6: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 <MCP2515::TXB+0x7fbb14>
3ca: 90 91 14 3c lds r25, 0x3C14 ; 0x803c14 <DEFAULT_SPI_SETTINGS>
3ce: 80 91 15 3c lds r24, 0x3C15 ; 0x803c15 <DEFAULT_SPI_SETTINGS+0x1>
config():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:142
initialized = true;
}
void SPIClass::config(SPISettings settings)
{
SPI0.CTRLA = settings.ctrla;
3d2: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 <MCP2515::TXB+0x7fbb14>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:143
SPI0.CTRLB = settings.ctrlb;
3d6: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <MCP2515::TXB+0x7fbb15>
_ZN8SPIClass5beginEv.constprop.28():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
}
3da: 08 95 ret
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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)
3dc: 91 30 cpi r25, 0x01 ; 1
3de: 31 f4 brne .+12 ; 0x3ec <SPIClass::begin() [clone .constprop.28]+0x8c>
pinMode():
3e0: 61 e0 ldi r22, 0x01 ; 1
3e2: 8e e0 ldi r24, 0x0E ; 14
3e4: 8f df rcall .-226 ; 0x304 <pinMode.part.1>
3e6: 61 e0 ldi r22, 0x01 ; 1
3e8: 80 e1 ldi r24, 0x10 ; 16
3ea: e4 cf rjmp .-56 ; 0x3b4 <SPIClass::begin() [clone .constprop.28]+0x54>
_ZN8SPIClass5beginEv.constprop.28():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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)
3ec: 92 30 cpi r25, 0x02 ; 2
3ee: 19 f7 brne .-58 ; 0x3b6 <SPIClass::begin() [clone .constprop.28]+0x56>
pinMode():
3f0: 61 e0 ldi r22, 0x01 ; 1
3f2: 8e e1 ldi r24, 0x1E ; 30
3f4: 87 df rcall .-242 ; 0x304 <pinMode.part.1>
3f6: 61 e0 ldi r22, 0x01 ; 1
3f8: 80 e2 ldi r24, 0x20 ; 32
3fa: dc cf rjmp .-72 ; 0x3b4 <SPIClass::begin() [clone .constprop.28]+0x54>
000003fc <micros>:
micros():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:103
{
uint32_t m;
uint16_t t;
/* Save current state and disable interrupts */
uint8_t status = SREG;
3fc: 8f b7 in r24, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:104
cli();
3fe: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:107
/* Get current number of millis (i.e. overflows) and timer count */
m = timer_millis;
400: 20 91 10 3c lds r18, 0x3C10 ; 0x803c10 <timer_millis>
404: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 <timer_millis+0x1>
408: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 <timer_millis+0x2>
40c: 50 91 13 3c lds r21, 0x3C13 ; 0x803c13 <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:108
t = _timer->CNT;
410: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa <MCP2515::TXB+0x7fbcfe>
414: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab <MCP2515::TXB+0x7fbcff>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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)
418: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 <MCP2515::TXB+0x7fbcfa>
41c: 90 ff sbrs r25, 0
41e: 08 c0 rjmp .+16 ; 0x430 <__DATA_REGION_LENGTH__+0x30>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:114
{
m++;
420: 2f 5f subi r18, 0xFF ; 255
422: 3f 4f sbci r19, 0xFF ; 255
424: 4f 4f sbci r20, 0xFF ; 255
426: 5f 4f sbci r21, 0xFF ; 255
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:115
t = _timer->CNT;
428: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa <MCP2515::TXB+0x7fbcfe>
42c: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab <MCP2515::TXB+0x7fbcff>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:119
}
// Restore SREG
SREG = status;
430: 8f bf out 0x3f, r24 ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
432: a8 ee ldi r26, 0xE8 ; 232
434: b3 e0 ldi r27, 0x03 ; 3
436: 0f d4 rcall .+2078 ; 0xc56 <__muluhisi3>
438: 23 e0 ldi r18, 0x03 ; 3
43a: f6 95 lsr r31
43c: e7 95 ror r30
43e: 2a 95 dec r18
440: e1 f7 brne .-8 ; 0x43a <__DATA_REGION_LENGTH__+0x3a>
442: 6e 0f add r22, r30
444: 7f 1f adc r23, r31
446: 81 1d adc r24, r1
448: 91 1d adc r25, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:143
#elif (F_CPU == 1000000L)
return m * 1000 + t;
#else
return 0;
#endif
}
44a: 08 95 ret
0000044c <delay>:
delay():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:146
void delay(unsigned long ms)
{
44c: 8f 92 push r8
44e: 9f 92 push r9
450: af 92 push r10
452: bf 92 push r11
454: cf 92 push r12
456: df 92 push r13
458: ef 92 push r14
45a: ff 92 push r15
45c: 4b 01 movw r8, r22
45e: 5c 01 movw r10, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:147
uint32_t start_time = micros(), delay_time = 1000 * ms;
460: cd df rcall .-102 ; 0x3fc <micros>
462: 6b 01 movw r12, r22
464: 7c 01 movw r14, r24
466: a8 ee ldi r26, 0xE8 ; 232
468: b3 e0 ldi r27, 0x03 ; 3
46a: a5 01 movw r20, r10
46c: 94 01 movw r18, r8
46e: f3 d3 rcall .+2022 ; 0xc56 <__muluhisi3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:150
/* Calculate future time to return */
uint32_t return_time = start_time + delay_time;
470: c6 0e add r12, r22
472: d7 1e adc r13, r23
474: e8 1e adc r14, r24
476: f9 1e adc r15, r25
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:153
/* If return time overflows */
if (return_time < delay_time)
478: c6 16 cp r12, r22
47a: d7 06 cpc r13, r23
47c: e8 06 cpc r14, r24
47e: f9 06 cpc r15, r25
480: 10 f4 brcc .+4 ; 0x486 <delay+0x3a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:156
{
/* Wait until micros overflows */
while (micros() > return_time)
482: bc df rcall .-136 ; 0x3fc <micros>
484: f9 cf rjmp .-14 ; 0x478 <delay+0x2c>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:161
;
}
/* Wait until return time */
while (micros() < return_time)
486: ba df rcall .-140 ; 0x3fc <micros>
488: 6c 15 cp r22, r12
48a: 7d 05 cpc r23, r13
48c: 8e 05 cpc r24, r14
48e: 9f 05 cpc r25, r15
490: d0 f3 brcs .-12 ; 0x486 <delay+0x3a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:163
;
}
492: ff 90 pop r15
494: ef 90 pop r14
496: df 90 pop r13
498: cf 90 pop r12
49a: bf 90 pop r11
49c: af 90 pop r10
49e: 9f 90 pop r9
4a0: 8f 90 pop r8
4a2: 08 95 ret
000004a4 <MCP2515::startSPI() [clone .constprop.20]>:
_ZN7MCP25158startSPIEv.constprop.20():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24
SPICS = _CS;
pinMode(SPICS, OUTPUT);
endSPI();
}
void MCP2515::startSPI() {
4a4: 8f 92 push r8
4a6: 9f 92 push r9
4a8: af 92 push r10
4aa: bf 92 push r11
4ac: cf 92 push r12
4ae: df 92 push r13
4b0: ef 92 push r14
4b2: ff 92 push r15
4b4: 0f 93 push r16
4b6: cf 93 push r28
4b8: df 93 push r29
beginTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:249
}
}
void SPIClass::beginTransaction(SPISettings settings)
{
if (interruptMode != SPI_IMODE_NONE)
4ba: 80 91 1c 3c lds r24, 0x3C1C ; 0x803c1c <SPI+0x6>
4be: 88 23 and r24, r24
4c0: 19 f0 breq .+6 ; 0x4c8 <MCP2515::startSPI() [clone .constprop.20]+0x24>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:251
{
if (interruptMode & SPI_IMODE_GLOBAL)
4c2: 81 ff sbrs r24, 1
4c4: 19 c0 rjmp .+50 ; 0x4f8 <MCP2515::startSPI() [clone .constprop.20]+0x54>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:253
{
noInterrupts();
4c6: f8 94 cli
config():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:142
initialized = true;
}
void SPIClass::config(SPISettings settings)
{
SPI0.CTRLA = settings.ctrla;
4c8: 81 e3 ldi r24, 0x31 ; 49
4ca: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 <MCP2515::TXB+0x7fbb14>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:143
SPI0.CTRLB = settings.ctrlb;
4ce: 84 e0 ldi r24, 0x04 ; 4
4d0: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 <MCP2515::TXB+0x7fbb15>
_ZN7MCP25158startSPIEv.constprop.20():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:26
SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
digitalWrite(SPICS, LOW);
4d4: 80 91 85 3c lds r24, 0x3C85 ; 0x803c85 <mcp2515>
digitalWrite():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
4d8: 89 32 cpi r24, 0x29 ; 41
4da: 08 f0 brcs .+2 ; 0x4de <MCP2515::startSPI() [clone .constprop.20]+0x3a>
4dc: 98 c0 rjmp .+304 ; 0x60e <MCP2515::startSPI() [clone .constprop.20]+0x16a>
4de: 60 e0 ldi r22, 0x00 ; 0
_ZN7MCP25158startSPIEv.constprop.20():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27
}
4e0: df 91 pop r29
4e2: cf 91 pop r28
4e4: 0f 91 pop r16
4e6: ff 90 pop r15
4e8: ef 90 pop r14
4ea: df 90 pop r13
4ec: cf 90 pop r12
4ee: bf 90 pop r11
4f0: af 90 pop r10
4f2: 9f 90 pop r9
4f4: 8f 90 pop r8
digitalWrite():
4f6: fa cd rjmp .-1036 ; 0xec <digitalWrite.part.2>
beginTransaction():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:255
{
if (interruptMode & SPI_IMODE_GLOBAL)
{
noInterrupts();
}
else if (interruptMode & SPI_IMODE_EXTINT)
4f8: 80 ff sbrs r24, 0
4fa: e6 cf rjmp .-52 ; 0x4c8 <MCP2515::startSPI() [clone .constprop.20]+0x24>
detachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:200
#endif
}
}
void SPIClass::detachMaskedInterrupts() {
uint64_t temp = interruptMask_lo;
4fc: 80 90 1e 3c lds r8, 0x3C1E ; 0x803c1e <SPI+0x8>
500: 90 90 1f 3c lds r9, 0x3C1F ; 0x803c1f <SPI+0x9>
504: a0 90 20 3c lds r10, 0x3C20 ; 0x803c20 <SPI+0xa>
508: b0 90 21 3c lds r11, 0x3C21 ; 0x803c21 <SPI+0xb>
50c: c1 2c mov r12, r1
50e: d1 2c mov r13, r1
510: 76 01 movw r14, r12
_ZN7MCP25158startSPIEv.constprop.20():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:201
uint8_t shift = 0;
512: e0 e0 ldi r30, 0x00 ; 0
detachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:202
while (temp != 0) {
514: 94 01 movw r18, r8
516: a5 01 movw r20, r10
518: b6 01 movw r22, r12
51a: c7 01 movw r24, r14
51c: a0 e0 ldi r26, 0x00 ; 0
51e: c2 d3 rcall .+1924 ; 0xca4 <__cmpdi2_s8>
520: 89 f1 breq .+98 ; 0x584 <MCP2515::startSPI() [clone .constprop.20]+0xe0>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:203
if (temp & 1) {
522: 21 70 andi r18, 0x01 ; 1
524: 30 e0 ldi r19, 0x00 ; 0
526: 40 e0 ldi r20, 0x00 ; 0
528: 50 e0 ldi r21, 0x00 ; 0
52a: 60 e0 ldi r22, 0x00 ; 0
52c: 70 e0 ldi r23, 0x00 ; 0
52e: 80 e0 ldi r24, 0x00 ; 0
530: 90 e0 ldi r25, 0x00 ; 0
532: b8 d3 rcall .+1904 ; 0xca4 <__cmpdi2_s8>
534: d9 f0 breq .+54 ; 0x56c <MCP2515::startSPI() [clone .constprop.20]+0xc8>
_ZN7MCP25158startSPIEv.constprop.20():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:204
volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8);
536: b0 e0 ldi r27, 0x00 ; 0
538: a0 e0 ldi r26, 0x00 ; 0
detachMaskedInterrupts():
53a: e0 33 cpi r30, 0x30 ; 48
53c: 70 f4 brcc .+28 ; 0x55a <MCP2515::startSPI() [clone .constprop.20]+0xb6>
53e: ae 2f mov r26, r30
540: a6 95 lsr r26
542: a6 95 lsr r26
544: a6 95 lsr r26
546: 80 e2 ldi r24, 0x20 ; 32
548: a8 9f mul r26, r24
54a: d0 01 movw r26, r0
54c: 11 24 eor r1, r1
54e: a0 5f subi r26, 0xF0 ; 240
550: bb 4f sbci r27, 0xFB ; 251
552: 8e 2f mov r24, r30
554: 87 70 andi r24, 0x07 ; 7
556: a8 0f add r26, r24
558: b1 1d adc r27, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:205
irqMap[shift] = *pin_ctrl_reg;
55a: ce 2f mov r28, r30
55c: d0 e0 ldi r29, 0x00 ; 0
55e: 8c 91 ld r24, X
560: ca 5e subi r28, 0xEA ; 234
562: d3 4c sbci r29, 0xC3 ; 195
564: 88 8b std Y+16, r24 ; 0x10
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:206
*pin_ctrl_reg &= ~(PORT_ISC_gm);
566: 8c 91 ld r24, X
568: 88 7f andi r24, 0xF8 ; 248
56a: 8c 93 st X, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:208
}
temp = temp >> 1;
56c: 94 01 movw r18, r8
56e: a5 01 movw r20, r10
570: b6 01 movw r22, r12
572: c7 01 movw r24, r14
574: 01 e0 ldi r16, 0x01 ; 1
576: 7b d3 rcall .+1782 ; 0xc6e <__lshrdi3>
578: 49 01 movw r8, r18
57a: 5a 01 movw r10, r20
57c: 6b 01 movw r12, r22
57e: 7c 01 movw r14, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:209
shift++;
580: ef 5f subi r30, 0xFF ; 255
582: c8 cf rjmp .-112 ; 0x514 <MCP2515::startSPI() [clone .constprop.20]+0x70>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:211
}
temp = interruptMask_hi;
584: 80 90 22 3c lds r8, 0x3C22 ; 0x803c22 <SPI+0xc>
588: 90 90 23 3c lds r9, 0x3C23 ; 0x803c23 <SPI+0xd>
58c: a0 90 24 3c lds r10, 0x3C24 ; 0x803c24 <SPI+0xe>
590: b0 90 25 3c lds r11, 0x3C25 ; 0x803c25 <SPI+0xf>
594: c1 2c mov r12, r1
596: d1 2c mov r13, r1
598: 76 01 movw r14, r12
_ZN7MCP25158startSPIEv.constprop.20():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:212
shift = 32;
59a: e0 e2 ldi r30, 0x20 ; 32
detachMaskedInterrupts():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:213
while (temp != 0) {
59c: 94 01 movw r18, r8
59e: a5 01 movw r20, r10
5a0: b6 01 movw r22, r12
5a2: c7 01 movw r24, r14
5a4: a0 e0 ldi r26, 0x00 ; 0
5a6: 7e d3 rcall .+1788 ; 0xca4 <__cmpdi2_s8>
5a8: 09 f4 brne .+2 ; 0x5ac <MCP2515::startSPI() [clone .constprop.20]+0x108>
5aa: 8e cf rjmp .-228 ; 0x4c8 <MCP2515::startSPI() [clone .constprop.20]+0x24>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:214
if (temp & 1) {
5ac: 21 70 andi r18, 0x01 ; 1
5ae: 30 e0 ldi r19, 0x00 ; 0
5b0: 40 e0 ldi r20, 0x00 ; 0
5b2: 50 e0 ldi r21, 0x00 ; 0
5b4: 60 e0 ldi r22, 0x00 ; 0
5b6: 70 e0 ldi r23, 0x00 ; 0
5b8: 80 e0 ldi r24, 0x00 ; 0
5ba: 90 e0 ldi r25, 0x00 ; 0
5bc: 73 d3 rcall .+1766 ; 0xca4 <__cmpdi2_s8>
5be: d9 f0 breq .+54 ; 0x5f6 <MCP2515::startSPI() [clone .constprop.20]+0x152>
_ZN7MCP25158startSPIEv.constprop.20():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:215
volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8);
5c0: b0 e0 ldi r27, 0x00 ; 0
5c2: a0 e0 ldi r26, 0x00 ; 0
detachMaskedInterrupts():
5c4: e0 33 cpi r30, 0x30 ; 48
5c6: 70 f4 brcc .+28 ; 0x5e4 <MCP2515::startSPI() [clone .constprop.20]+0x140>
5c8: ae 2f mov r26, r30
5ca: a6 95 lsr r26
5cc: a6 95 lsr r26
5ce: a6 95 lsr r26
5d0: 80 e2 ldi r24, 0x20 ; 32
5d2: a8 9f mul r26, r24
5d4: d0 01 movw r26, r0
5d6: 11 24 eor r1, r1
5d8: a0 5f subi r26, 0xF0 ; 240
5da: bb 4f sbci r27, 0xFB ; 251
5dc: 8e 2f mov r24, r30
5de: 87 70 andi r24, 0x07 ; 7
5e0: a8 0f add r26, r24
5e2: b1 1d adc r27, r1
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:216
irqMap[shift] = *pin_ctrl_reg;
5e4: ce 2f mov r28, r30
5e6: d0 e0 ldi r29, 0x00 ; 0
5e8: 8c 91 ld r24, X
5ea: ca 5e subi r28, 0xEA ; 234
5ec: d3 4c sbci r29, 0xC3 ; 195
5ee: 88 8b std Y+16, r24 ; 0x10
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:217
*pin_ctrl_reg &= ~(PORT_ISC_gm);
5f0: 8c 91 ld r24, X
5f2: 88 7f andi r24, 0xF8 ; 248
5f4: 8c 93 st X, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:219
}
temp = temp >> 1;
5f6: 94 01 movw r18, r8
5f8: a5 01 movw r20, r10
5fa: b6 01 movw r22, r12
5fc: c7 01 movw r24, r14
5fe: 01 e0 ldi r16, 0x01 ; 1
600: 36 d3 rcall .+1644 ; 0xc6e <__lshrdi3>
602: 49 01 movw r8, r18
604: 5a 01 movw r10, r20
606: 6b 01 movw r12, r22
608: 7c 01 movw r14, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:220
shift++;
60a: ef 5f subi r30, 0xFF ; 255
60c: c7 cf rjmp .-114 ; 0x59c <MCP2515::startSPI() [clone .constprop.20]+0xf8>
_ZN7MCP25158startSPIEv.constprop.20():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27
60e: df 91 pop r29
610: cf 91 pop r28
612: 0f 91 pop r16
614: ff 90 pop r15
616: ef 90 pop r14
618: df 90 pop r13
61a: cf 90 pop r12
61c: bf 90 pop r11
61e: af 90 pop r10
620: 9f 90 pop r9
622: 8f 90 pop r8
624: 08 95 ret
00000626 <MCP2515::readRegister(MCP2515::REGISTER) [clone .constprop.19]>:
_ZN7MCP251512readRegisterENS_8REGISTERE.constprop.19():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:85
}
return ERROR_OK;
}
uint8_t MCP2515::readRegister(const REGISTER reg)
626: cf 93 push r28
628: c8 2f mov r28, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:87
{
startSPI();
62a: 3c df rcall .-392 ; 0x4a4 <MCP2515::startSPI() [clone .constprop.20]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:88
SPI.transfer(INSTRUCTION_READ);
62c: 83 e0 ldi r24, 0x03 ; 3
62e: 54 dd rcall .-1368 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:89
SPI.transfer(reg);
630: 8c 2f mov r24, r28
632: 52 dd rcall .-1372 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:90
uint8_t ret = SPI.transfer(0x00);
634: 80 e0 ldi r24, 0x00 ; 0
636: 50 dd rcall .-1376 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
638: c8 2f mov r28, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91
endSPI();
63a: b7 dd rcall .-1170 ; 0x1aa <MCP2515::endSPI() [clone .constprop.31]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:94
return ret;
}
63c: 8c 2f mov r24, r28
63e: cf 91 pop r28
640: 08 95 ret
00000642 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]>:
_ZN7MCP251512setRegistersENS_8REGISTEREPKhh.constprop.17():
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)
642: ff 92 push r15
644: 0f 93 push r16
646: 1f 93 push r17
648: cf 93 push r28
64a: df 93 push r29
64c: c8 2f mov r28, r24
64e: f6 2e mov r15, r22
650: 17 2f mov r17, r23
652: 04 2f mov r16, r20
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:119
{
startSPI();
654: 27 df rcall .-434 ; 0x4a4 <MCP2515::startSPI() [clone .constprop.20]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:120
SPI.transfer(INSTRUCTION_WRITE);
656: 82 e0 ldi r24, 0x02 ; 2
658: 3f dd rcall .-1410 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:121
SPI.transfer(reg);
65a: 8c 2f mov r24, r28
65c: 3d dd rcall .-1414 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
65e: cf 2d mov r28, r15
660: d1 2f mov r29, r17
662: 0c 0f add r16, r28
664: 1d 2f mov r17, r29
666: 11 1d adc r17, r1
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:122
for (uint8_t i=0; i<n; i++) {
668: c0 17 cp r28, r16
66a: d1 07 cpc r29, r17
66c: 19 f0 breq .+6 ; 0x674 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]+0x32>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:123
SPI.transfer(values[i]);
66e: 89 91 ld r24, Y+
670: 33 dd rcall .-1434 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
672: fa cf rjmp .-12 ; 0x668 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]+0x26>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:126
}
endSPI();
}
674: df 91 pop r29
676: cf 91 pop r28
678: 1f 91 pop r17
67a: 0f 91 pop r16
67c: 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();
67e: 95 cd rjmp .-1238 ; 0x1aa <MCP2515::endSPI() [clone .constprop.31]>
00000680 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.16]>:
_ZN7MCP251514modifyRegisterENS_8REGISTEREhh.constprop.16():
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)
680: 1f 93 push r17
682: cf 93 push r28
684: df 93 push r29
686: 18 2f mov r17, r24
688: d6 2f mov r29, r22
68a: c4 2f mov r28, r20
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:130
{
startSPI();
68c: 0b df rcall .-490 ; 0x4a4 <MCP2515::startSPI() [clone .constprop.20]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:131
SPI.transfer(INSTRUCTION_BITMOD);
68e: 85 e0 ldi r24, 0x05 ; 5
690: 23 dd rcall .-1466 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:132
SPI.transfer(reg);
692: 81 2f mov r24, r17
694: 21 dd rcall .-1470 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:133
SPI.transfer(mask);
696: 8d 2f mov r24, r29
698: 1f dd rcall .-1474 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:134
SPI.transfer(data);
69a: 8c 2f mov r24, r28
69c: 1d dd rcall .-1478 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:136
endSPI();
}
69e: df 91 pop r29
6a0: cf 91 pop r28
6a2: 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();
6a4: 82 cd rjmp .-1276 ; 0x1aa <MCP2515::endSPI() [clone .constprop.31]>
000006a6 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.11]>:
_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.11():
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)
6a6: cf 92 push r12
6a8: df 92 push r13
6aa: ef 92 push r14
6ac: ff 92 push r15
6ae: cf 93 push r28
6b0: c8 2f mov r28, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:175
{
modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode);
6b2: 48 2f mov r20, r24
6b4: 60 ee ldi r22, 0xE0 ; 224
6b6: 8f e0 ldi r24, 0x0F ; 15
6b8: e3 df rcall .-58 ; 0x680 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.16]>
millis():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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;
6ba: 8f b7 in r24, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:88
cli();
6bc: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:90
m = timer_millis;
6be: c0 90 10 3c lds r12, 0x3C10 ; 0x803c10 <timer_millis>
6c2: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 <timer_millis+0x1>
6c6: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 <timer_millis+0x2>
6ca: f0 90 13 3c lds r15, 0x3C13 ; 0x803c13 <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:92
SREG = status;
6ce: 8f bf out 0x3f, r24 ; 63
_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.11():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:177
unsigned long endTime = millis() + 10;
6d0: 8a e0 ldi r24, 0x0A ; 10
6d2: c8 0e add r12, r24
6d4: d1 1c adc r13, r1
6d6: e1 1c adc r14, r1
6d8: f1 1c adc r15, r1
millis():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:87
{
unsigned long m;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer_millis)
uint8_t status = SREG;
6da: 2f b7 in r18, 0x3f ; 63
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:88
cli();
6dc: f8 94 cli
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:90
m = timer_millis;
6de: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 <timer_millis>
6e2: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 <timer_millis+0x1>
6e6: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 <timer_millis+0x2>
6ea: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:92
SREG = status;
6ee: 2f bf out 0x3f, r18 ; 63
_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.11():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179
bool modeMatch = false;
while (millis() < endTime) {
6f0: 8c 15 cp r24, r12
6f2: 9d 05 cpc r25, r13
6f4: ae 05 cpc r26, r14
6f6: bf 05 cpc r27, r15
6f8: 78 f4 brcc .+30 ; 0x718 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.11]+0x72>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:180
uint8_t newmode = readRegister(MCP_CANSTAT);
6fa: 8e e0 ldi r24, 0x0E ; 14
6fc: 94 df rcall .-216 ; 0x626 <MCP2515::readRegister(MCP2515::REGISTER) [clone .constprop.19]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:181
newmode &= CANSTAT_OPMOD;
6fe: 80 7e andi r24, 0xE0 ; 224
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:185
modeMatch = newmode == mode;
if (modeMatch) {
700: c8 13 cpse r28, r24
702: eb cf rjmp .-42 ; 0x6da <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.11]+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;
704: 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;
706: 91 e0 ldi r25, 0x01 ; 1
708: 89 27 eor r24, r25
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:192
}
70a: 90 e0 ldi r25, 0x00 ; 0
70c: cf 91 pop r28
70e: ff 90 pop r15
710: ef 90 pop r14
712: df 90 pop r13
714: cf 90 pop r12
716: 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) {
718: 80 e0 ldi r24, 0x00 ; 0
71a: f5 cf rjmp .-22 ; 0x706 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.11]+0x60>
0000071c <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.9]>:
_ZN7MCP251511setRegisterENS_8REGISTEREh.constprop.9():
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)
71c: cf 93 push r28
71e: df 93 push r29
720: d8 2f mov r29, r24
722: c6 2f mov r28, r22
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:110
{
startSPI();
724: bf de rcall .-642 ; 0x4a4 <MCP2515::startSPI() [clone .constprop.20]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:111
SPI.transfer(INSTRUCTION_WRITE);
726: 82 e0 ldi r24, 0x02 ; 2
728: d7 dc rcall .-1618 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:112
SPI.transfer(reg);
72a: 8d 2f mov r24, r29
72c: d5 dc rcall .-1622 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:113
SPI.transfer(value);
72e: 8c 2f mov r24, r28
730: d3 dc rcall .-1626 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:115
endSPI();
}
732: df 91 pop r29
734: 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();
736: 39 cd rjmp .-1422 ; 0x1aa <MCP2515::endSPI() [clone .constprop.31]>
00000738 <__vector_25>:
__vector_25():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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
{
738: 1f 92 push r1
73a: 0f 92 push r0
73c: 0f b6 in r0, 0x3f ; 63
73e: 0f 92 push r0
740: 11 24 eor r1, r1
742: 8f 93 push r24
744: 9f 93 push r25
746: af 93 push r26
748: bf 93 push r27
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:75
timer_millis++;
74a: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 <timer_millis>
74e: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 <timer_millis+0x1>
752: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 <timer_millis+0x2>
756: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 <timer_millis+0x3>
75a: 01 96 adiw r24, 0x01 ; 1
75c: a1 1d adc r26, r1
75e: b1 1d adc r27, r1
760: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 <timer_millis>
764: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 <timer_millis+0x1>
768: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 <timer_millis+0x2>
76c: b0 93 13 3c sts 0x3C13, r27 ; 0x803c13 <timer_millis+0x3>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:78
/* Clear flag */
_timer->INTFLAGS = TCB_CAPT_bm;
770: 81 e0 ldi r24, 0x01 ; 1
772: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 <MCP2515::TXB+0x7fbcfa>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:79
}
776: bf 91 pop r27
778: af 91 pop r26
77a: 9f 91 pop r25
77c: 8f 91 pop r24
77e: 0f 90 pop r0
780: 0f be out 0x3f, r0 ; 63
782: 0f 90 pop r0
784: 1f 90 pop r1
786: 18 95 reti
00000788 <global constructors keyed to 65535_0_sketch_jun30b.ino.cpp.o.2661>:
_GLOBAL__I_65535_0_sketch_jun30b.ino.cpp.o.2661():
788: cf 93 push r28
78a: df 93 push r29
78c: e4 e1 ldi r30, 0x14 ; 20
78e: fc e3 ldi r31, 0x3C ; 60
790: c4 e0 ldi r28, 0x04 ; 4
792: c1 83 std Z+1, r28 ; 0x01
794: 81 e3 ldi r24, 0x31 ; 49
796: 80 83 st Z, r24
798: e6 e1 ldi r30, 0x16 ; 22
79a: fc e3 ldi r31, 0x3C ; 60
79c: 15 82 std Z+5, r1 ; 0x05
79e: 14 82 std Z+4, r1 ; 0x04
7a0: df dd rcall .-1090 ; 0x360 <SPIClass::begin() [clone .constprop.28]>
7a2: d3 e0 ldi r29, 0x03 ; 3
7a4: d0 93 85 3c sts 0x3C85, r29 ; 0x803c85 <mcp2515>
7a8: 61 e0 ldi r22, 0x01 ; 1
7aa: 83 e0 ldi r24, 0x03 ; 3
7ac: ab dd rcall .-1194 ; 0x304 <pinMode.part.1>
7ae: fd dc rcall .-1542 ; 0x1aa <MCP2515::endSPI() [clone .constprop.31]>
7b0: e5 e5 ldi r30, 0x55 ; 85
7b2: fc e3 ldi r31, 0x3C ; 60
7b4: 85 e1 ldi r24, 0x15 ; 21
7b6: 90 e0 ldi r25, 0x00 ; 0
7b8: 80 83 st Z, r24
7ba: 91 83 std Z+1, r25 ; 0x01
7bc: 12 82 std Z+2, r1 ; 0x02
7be: 13 82 std Z+3, r1 ; 0x03
7c0: 81 e0 ldi r24, 0x01 ; 1
7c2: 84 83 std Z+4, r24 ; 0x04
7c4: 85 83 std Z+5, r24 ; 0x05
7c6: 26 e1 ldi r18, 0x16 ; 22
7c8: 30 e0 ldi r19, 0x00 ; 0
7ca: 26 83 std Z+6, r18 ; 0x06
7cc: 37 83 std Z+7, r19 ; 0x07
7ce: 10 86 std Z+8, r1 ; 0x08
7d0: 11 86 std Z+9, r1 ; 0x09
7d2: 82 87 std Z+10, r24 ; 0x0a
7d4: 92 e0 ldi r25, 0x02 ; 2
7d6: 93 87 std Z+11, r25 ; 0x0b
7d8: 27 e1 ldi r18, 0x17 ; 23
7da: 30 e0 ldi r19, 0x00 ; 0
7dc: 24 87 std Z+12, r18 ; 0x0c
7de: 35 87 std Z+13, r19 ; 0x0d
7e0: 16 86 std Z+14, r1 ; 0x0e
7e2: 17 86 std Z+15, r1 ; 0x0f
7e4: 80 8b std Z+16, r24 ; 0x10
7e6: d1 8b std Z+17, r29 ; 0x11
7e8: 28 e1 ldi r18, 0x18 ; 24
7ea: 30 e0 ldi r19, 0x00 ; 0
7ec: 22 8b std Z+18, r18 ; 0x12
7ee: 33 8b std Z+19, r19 ; 0x13
7f0: 14 8a std Z+20, r1 ; 0x14
7f2: 15 8a std Z+21, r1 ; 0x15
7f4: 86 8b std Z+22, r24 ; 0x16
7f6: c7 8b std Z+23, r28 ; 0x17
7f8: 2c e1 ldi r18, 0x1C ; 28
7fa: 30 e0 ldi r19, 0x00 ; 0
7fc: 20 8f std Z+24, r18 ; 0x18
7fe: 31 8f std Z+25, r19 ; 0x19
800: 12 8e std Z+26, r1 ; 0x1a
802: 13 8e std Z+27, r1 ; 0x1b
804: 84 8f std Z+28, r24 ; 0x1c
806: 95 e0 ldi r25, 0x05 ; 5
808: 95 8f std Z+29, r25 ; 0x1d
80a: 2b e1 ldi r18, 0x1B ; 27
80c: 30 e0 ldi r19, 0x00 ; 0
80e: 26 8f std Z+30, r18 ; 0x1e
810: 37 8f std Z+31, r19 ; 0x1f
812: 10 a2 std Z+32, r1 ; 0x20
814: 11 a2 std Z+33, r1 ; 0x21
816: 82 a3 std Z+34, r24 ; 0x22
818: 96 e0 ldi r25, 0x06 ; 6
81a: 93 a3 std Z+35, r25 ; 0x23
81c: 2a e1 ldi r18, 0x1A ; 26
81e: 30 e0 ldi r19, 0x00 ; 0
820: 24 a3 std Z+36, r18 ; 0x24
822: 35 a3 std Z+37, r19 ; 0x25
824: 16 a2 std Z+38, r1 ; 0x26
826: 17 a2 std Z+39, r1 ; 0x27
828: 80 a7 std Z+40, r24 ; 0x28
82a: 97 e0 ldi r25, 0x07 ; 7
82c: 91 a7 std Z+41, r25 ; 0x29
82e: 29 e1 ldi r18, 0x19 ; 25
830: 30 e0 ldi r19, 0x00 ; 0
832: 22 a7 std Z+42, r18 ; 0x2a
834: 33 a7 std Z+43, r19 ; 0x2b
836: 14 a6 std Z+44, r1 ; 0x2c
838: 15 a6 std Z+45, r1 ; 0x2d
83a: 86 a7 std Z+46, r24 ; 0x2e
83c: 88 e0 ldi r24, 0x08 ; 8
83e: 87 a7 std Z+47, r24 ; 0x2f
840: df 91 pop r29
842: cf 91 pop r28
844: 08 95 ret
00000846 <main>:
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/main.cpp:29
void setupUSB() __attribute__((weak));
void setupUSB() {}
int main(void)
{
846: cf 93 push r28
848: df 93 push r29
84a: cd b7 in r28, 0x3d ; 61
84c: de b7 in r29, 0x3e ; 62
84e: a9 97 sbiw r28, 0x29 ; 41
850: cd bf out 0x3d, r28 ; 61
852: de bf out 0x3e, r29 ; 62
init():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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));
854: 91 e0 ldi r25, 0x01 ; 1
856: 88 ed ldi r24, 0xD8 ; 216
858: 84 bf out 0x34, r24 ; 52
85a: 90 93 61 00 sts 0x0061, r25 ; 0x800061 <MCP2515::TXB+0x7fb2b5>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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;
85e: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <MCP2515::TXB+0x7fb856>
862: 85 60 ori r24, 0x05 ; 5
864: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <MCP2515::TXB+0x7fb856>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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;
868: 80 91 00 06 lds r24, 0x0600 ; 0x800600 <MCP2515::TXB+0x7fb854>
86c: 81 60 ori r24, 0x01 ; 1
86e: 80 93 00 06 sts 0x0600, r24 ; 0x800600 <MCP2515::TXB+0x7fb854>
analogReference():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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...
872: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <MCP2515::TXB+0x7fb856>
876: 8f 7c andi r24, 0xCF ; 207
878: 80 65 ori r24, 0x50 ; 80
87a: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <MCP2515::TXB+0x7fb856>
init():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:407
analogReference(VDD);
#endif
PORTMUX.USARTROUTEA = 0;
87e: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 <MCP2515::TXB+0x7fb836>
setup_timers():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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;
882: 82 e0 ldi r24, 0x02 ; 2
884: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 <MCP2515::TXB+0x7fb838>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:449
// Enable split mode before anything else
TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm;
888: 90 93 03 0a sts 0x0A03, r25 ; 0x800a03 <MCP2515::TXB+0x7fbc57>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:453
// Period setting, two 8 bit registers
TCA0.SPLIT.LPER =
TCA0.SPLIT.HPER = PWM_TIMER_PERIOD;
88c: 8e ef ldi r24, 0xFE ; 254
88e: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 <MCP2515::TXB+0x7fbc7b>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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 =
892: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 <MCP2515::TXB+0x7fbc7a>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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;
896: 80 e8 ldi r24, 0x80 ; 128
898: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d <MCP2515::TXB+0x7fbc81>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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 =
89c: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b <MCP2515::TXB+0x7fbc7f>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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 =
8a0: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 <MCP2515::TXB+0x7fbc7d>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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 =
8a4: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c <MCP2515::TXB+0x7fbc80>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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 =
8a8: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a <MCP2515::TXB+0x7fbc7e>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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 =
8ac: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 <MCP2515::TXB+0x7fbc7c>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
8b0: 89 e0 ldi r24, 0x09 ; 9
8b2: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 <MCP2515::TXB+0x7fbc54>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:480
#endif
// TYPE B TIMERS
// Set up routing (defined in pins_arduino.h)
PORTMUX.TCBROUTEA = 0
8b6: 87 e0 ldi r24, 0x07 ; 7
8b8: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 <MCP2515::TXB+0x7fb839>
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:496
| TCB3_PINS
#endif
;
// Start with TCB0
TCB_t *timer_B = (TCB_t *)&TCB0;
8bc: e0 e8 ldi r30, 0x80 ; 128
8be: fa e0 ldi r31, 0x0A ; 10
setup_timers():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
8c0: 37 e0 ldi r19, 0x07 ; 7
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:516
// Assign 8-bit period
timer_B->CCMPL = PWM_TIMER_PERIOD;
8c2: 2e ef ldi r18, 0xFE ; 254
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:519
// default duty 50%, set when output enabled
timer_B->CCMPH = PWM_TIMER_COMPARE;
8c4: 90 e8 ldi r25, 0x80 ; 128
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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)
8c6: 85 e0 ldi r24, 0x05 ; 5
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
8c8: 31 83 std Z+1, r19 ; 0x01
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:516
// Assign 8-bit period
timer_B->CCMPL = PWM_TIMER_PERIOD;
8ca: 24 87 std Z+12, r18 ; 0x0c
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:519
// default duty 50%, set when output enabled
timer_B->CCMPH = PWM_TIMER_COMPARE;
8cc: 95 87 std Z+13, r25 ; 0x0d
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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)
8ce: 80 83 st Z, r24
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:528
//|(TCB_SYNCUPD_bm)
| (TCB_ENABLE_bm);
// Increment pointer to next TCB instance
timer_B++;
8d0: 70 96 adiw r30, 0x10 ; 16
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:531
// Stop when pointing to TCB3
} while (timer_B <= timer_B_end);
8d2: e0 3c cpi r30, 0xC0 ; 192
8d4: 4a e0 ldi r20, 0x0A ; 10
8d6: f4 07 cpc r31, r20
8d8: b9 f7 brne .-18 ; 0x8c8 <main+0x82>
init():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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;
8da: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 <MCP2515::TXB+0x7fbcf5>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:419
/* TOP value for overflow every N clock cycles */
_timer->CCMP = TIME_TRACKING_TIMER_COUNT - 1;
8de: 8f e3 ldi r24, 0x3F ; 63
8e0: 9f e1 ldi r25, 0x1F ; 31
8e2: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac <MCP2515::TXB+0x7fbd00>
8e6: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad <MCP2515::TXB+0x7fbd01>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:422
/* Enable TCB interrupt */
_timer->INTCTRL |= TCB_CAPT_bm;
8ea: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 <MCP2515::TXB+0x7fbcf9>
8ee: 81 60 ori r24, 0x01 ; 1
8f0: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 <MCP2515::TXB+0x7fbcf9>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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 */
8f4: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 <MCP2515::TXB+0x7fbcf4>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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 */
8f8: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 <MCP2515::TXB+0x7fbcf4>
8fc: 81 60 ori r24, 0x01 ; 1
8fe: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 <MCP2515::TXB+0x7fbcf4>
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:438
/*************************** ENABLE GLOBAL INTERRUPTS *************************/
sei();
902: 78 94 sei
setup():
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:50
PinState(PIN_PD3, 8)
};
void setup() {
SPI.begin();
904: 2d dd rcall .-1446 ; 0x360 <SPIClass::begin() [clone .constprop.28]>
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:52
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7);
906: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <MCP2515::TXB+0x7fb2b4>
90a: 80 68 ori r24, 0x80 ; 128
90c: 90 e0 ldi r25, 0x00 ; 0
90e: 28 ed ldi r18, 0xD8 ; 216
910: 24 bf out 0x34, r18 ; 52
912: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <MCP2515::TXB+0x7fb2b4>
reset():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:36
SPI.endTransaction();
}
MCP2515::ERROR MCP2515::reset(void)
{
startSPI();
916: c6 dd rcall .-1140 ; 0x4a4 <MCP2515::startSPI() [clone .constprop.20]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:37
SPI.transfer(INSTRUCTION_RESET);
918: 80 ec ldi r24, 0xC0 ; 192
91a: de db rcall .-2116 ; 0xd8 <SPIClass::transfer(unsigned char) [clone .constprop.25]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38
endSPI();
91c: 46 dc rcall .-1908 ; 0x1aa <MCP2515::endSPI() [clone .constprop.31]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:40
delay(10);
91e: 6a e0 ldi r22, 0x0A ; 10
920: 70 e0 ldi r23, 0x00 ; 0
922: 80 e0 ldi r24, 0x00 ; 0
924: 90 e0 ldi r25, 0x00 ; 0
926: 92 dd rcall .-1244 ; 0x44c <delay>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:43
uint8_t zeros[14];
memset(zeros, 0, sizeof(zeros));
928: ce 01 movw r24, r28
92a: 01 96 adiw r24, 0x01 ; 1
92c: 7c 01 movw r14, r24
92e: 8e e0 ldi r24, 0x0E ; 14
930: d7 01 movw r26, r14
932: 1d 92 st X+, r1
934: 8a 95 dec r24
936: e9 f7 brne .-6 ; 0x932 <main+0xec>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:44
setRegisters(MCP_TXB0CTRL, zeros, 14);
938: 4e e0 ldi r20, 0x0E ; 14
93a: b7 01 movw r22, r14
93c: 80 e3 ldi r24, 0x30 ; 48
93e: 81 de rcall .-766 ; 0x642 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:45
setRegisters(MCP_TXB1CTRL, zeros, 14);
940: 4e e0 ldi r20, 0x0E ; 14
942: b7 01 movw r22, r14
944: 80 e4 ldi r24, 0x40 ; 64
946: 7d de rcall .-774 ; 0x642 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:46
setRegisters(MCP_TXB2CTRL, zeros, 14);
948: 4e e0 ldi r20, 0x0E ; 14
94a: b7 01 movw r22, r14
94c: 80 e5 ldi r24, 0x50 ; 80
94e: 79 de rcall .-782 ; 0x642 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:48
setRegister(MCP_RXB0CTRL, 0);
950: 60 e0 ldi r22, 0x00 ; 0
952: 80 e6 ldi r24, 0x60 ; 96
954: e3 de rcall .-570 ; 0x71c <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.9]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:49
setRegister(MCP_RXB1CTRL, 0);
956: 60 e0 ldi r22, 0x00 ; 0
958: 80 e7 ldi r24, 0x70 ; 112
95a: e0 de rcall .-576 ; 0x71c <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.9]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:51
setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF);
95c: 63 ea ldi r22, 0xA3 ; 163
95e: 8b e2 ldi r24, 0x2B ; 43
960: dd de rcall .-582 ; 0x71c <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.9]>
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,
962: 44 e0 ldi r20, 0x04 ; 4
964: 67 e6 ldi r22, 0x67 ; 103
966: 80 e6 ldi r24, 0x60 ; 96
968: 8b de rcall .-746 ; 0x680 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.16]>
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,
96a: 41 e0 ldi r20, 0x01 ; 1
96c: 67 e6 ldi r22, 0x67 ; 103
96e: 80 e7 ldi r24, 0x70 ; 112
970: 87 de rcall .-754 ; 0x680 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.16]>
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};
972: 8c e0 ldi r24, 0x0C ; 12
974: e6 ef ldi r30, 0xF6 ; 246
976: fc e4 ldi r31, 0x4C ; 76
978: de 01 movw r26, r28
97a: 1f 96 adiw r26, 0x0f ; 15
97c: 01 90 ld r0, Z+
97e: 0d 92 st X+, r0
980: 8a 95 dec r24
982: e1 f7 brne .-8 ; 0x97c <main+0x136>
984: 4e 01 movw r8, r28
986: bf e0 ldi r27, 0x0F ; 15
988: 8b 0e add r8, r27
98a: 91 1c adc r9, r1
main():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66
for (int i=0; i<6; i++) {
98c: d1 2c mov r13, r1
98e: c1 2c mov r12, r1
990: a8 2c mov r10, r8
992: 99 a6 std Y+41, r9 ; 0x29
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;
994: 98 e0 ldi r25, 0x08 ; 8
996: b9 2e mov r11, r25
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);
998: f4 01 movw r30, r8
99a: 01 91 ld r16, Z+
99c: 11 91 ld r17, Z+
99e: 4f 01 movw r8, r30
setConfigMode():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150
return i;
}
MCP2515::ERROR MCP2515::setConfigMode()
{
return setMode(CANCTRL_REQOP_CONFIG);
9a0: 80 e8 ldi r24, 0x80 ; 128
9a2: 81 de rcall .-766 ; 0x6a6 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.11]>
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) {
9a4: 89 2b or r24, r25
9a6: 61 f4 brne .+24 ; 0x9c0 <main+0x17a>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561
return res;
}
REGISTER reg;
switch (num) {
9a8: 02 30 cpi r16, 0x02 ; 2
9aa: 11 05 cpc r17, r1
9ac: 09 f4 brne .+2 ; 0x9b0 <main+0x16a>
9ae: 7b c0 rjmp .+246 ; 0xaa6 <main+0x260>
9b0: a0 f5 brcc .+104 ; 0xa1a <main+0x1d4>
9b2: 01 15 cp r16, r1
9b4: 11 05 cpc r17, r1
9b6: e1 f1 breq .+120 ; 0xa30 <main+0x1ea>
9b8: 01 30 cpi r16, 0x01 ; 1
9ba: 11 05 cpc r17, r1
9bc: 09 f4 brne .+2 ; 0x9c0 <main+0x17a>
9be: 79 c0 rjmp .+242 ; 0xab2 <main+0x26c>
setConfigMode():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150
return i;
}
MCP2515::ERROR MCP2515::setConfigMode()
{
return setMode(CANCTRL_REQOP_CONFIG);
9c0: 80 e8 ldi r24, 0x80 ; 128
9c2: 71 de rcall .-798 ; 0x6a6 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.11]>
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) {
9c4: 89 2b or r24, r25
9c6: 49 f4 brne .+18 ; 0x9da <main+0x194>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:477
set = 0;
break;
}
if (set) {
setRegister(MCP_CNF1, cfg1);
9c8: 60 e0 ldi r22, 0x00 ; 0
9ca: 8a e2 ldi r24, 0x2A ; 42
9cc: a7 de rcall .-690 ; 0x71c <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.9]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:478
setRegister(MCP_CNF2, cfg2);
9ce: 60 e9 ldi r22, 0x90 ; 144
9d0: 89 e2 ldi r24, 0x29 ; 41
9d2: a4 de rcall .-696 ; 0x71c <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.9]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:479
setRegister(MCP_CNF3, cfg3);
9d4: 62 e8 ldi r22, 0x82 ; 130
9d6: 88 e2 ldi r24, 0x28 ; 40
9d8: a1 de rcall .-702 ; 0x71c <MCP2515::setRegister(MCP2515::REGISTER, unsigned char) [clone .constprop.9]>
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);
9da: 80 e0 ldi r24, 0x00 ; 0
9dc: 64 de rcall .-824 ; 0x6a6 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.11]>
setup():
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:58
mcp2515.reset();
mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
mcp2515.setNormalMode();
delay(2000);
9de: 60 ed ldi r22, 0xD0 ; 208
9e0: 77 e0 ldi r23, 0x07 ; 7
9e2: 80 e0 ldi r24, 0x00 ; 0
9e4: 90 e0 ldi r25, 0x00 ; 0
9e6: 32 dd rcall .-1436 ; 0x44c <delay>
9e8: a5 e5 ldi r26, 0x55 ; 85
9ea: ca 2e mov r12, r26
9ec: ac e3 ldi r26, 0x3C ; 60
9ee: da 2e mov r13, r26
SendDebugPkg():
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:107
}
void SendDebugPkg()
{ _frame.can_id = 0x001;
9f0: 41 2c mov r4, r1
9f2: 51 2c mov r5, r1
9f4: 32 01 movw r6, r4
9f6: 43 94 inc r4
9f8: fe 01 movw r30, r28
9fa: 75 96 adiw r30, 0x15 ; 21
9fc: eb a3 std Y+35, r30 ; 0x23
9fe: fc a3 std Y+36, r31 ; 0x24
setup():
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:59
mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
mcp2515.setNormalMode();
delay(2000);
for (int i = 0; i < sizeof(PinStates) - 1; i++)
a00: ff e6 ldi r31, 0x6F ; 111
a02: cf 16 cp r12, r31
a04: fd e3 ldi r31, 0x3D ; 61
a06: df 06 cpc r13, r31
a08: 09 f0 breq .+2 ; 0xa0c <main+0x1c6>
a0a: 64 c0 rjmp .+200 ; 0xad4 <main+0x28e>
main():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/main.cpp:43
setup();
for (;;)
{
loop();
if (serialEventRun) serialEventRun();
a0c: 00 e0 ldi r16, 0x00 ; 0
a0e: 10 e0 ldi r17, 0x00 ; 0
a10: 01 15 cp r16, r1
a12: 11 05 cpc r17, r1
a14: e9 f3 breq .-6 ; 0xa10 <main+0x1ca>
a16: f4 da rcall .-2584 ; 0x0 <__vectors>
a18: fb cf rjmp .-10 ; 0xa10 <main+0x1ca>
setFilter():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561
return res;
}
REGISTER reg;
switch (num) {
a1a: 04 30 cpi r16, 0x04 ; 4
a1c: 11 05 cpc r17, r1
a1e: 09 f4 brne .+2 ; 0xa22 <main+0x1dc>
a20: 46 c0 rjmp .+140 ; 0xaae <main+0x268>
a22: 08 f4 brcc .+2 ; 0xa26 <main+0x1e0>
a24: 42 c0 rjmp .+132 ; 0xaaa <main+0x264>
a26: 05 30 cpi r16, 0x05 ; 5
a28: 11 05 cpc r17, r1
a2a: 51 f6 brne .-108 ; 0x9c0 <main+0x17a>
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;
a2c: 88 e1 ldi r24, 0x18 ; 24
a2e: 01 c0 rjmp .+2 ; 0xa32 <main+0x1ec>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562
}
REGISTER reg;
switch (num) {
case RXF0: reg = MCP_RXF0SIDH; break;
a30: 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) {
a32: f1 e0 ldi r31, 0x01 ; 1
a34: cf 16 cp r12, r31
a36: d1 04 cpc r13, r1
a38: f1 f5 brne .+124 ; 0xab6 <main+0x270>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
a3a: 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);
a3c: 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;
a3e: bc 8e std Y+28, r11 ; 0x1c
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520
buffer[MCP_SIDH] = (uint8_t) (canid >> 5);
a40: 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);
a42: 44 e0 ldi r20, 0x04 ; 4
a44: be 01 movw r22, r28
a46: 65 5e subi r22, 0xE5 ; 229
a48: 7f 4f sbci r23, 0xFF ; 255
a4a: fb dd rcall .-1034 ; 0x642 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]>
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++) {
a4c: 4f ef ldi r20, 0xFF ; 255
a4e: c4 1a sub r12, r20
a50: d4 0a sbc r13, r20
a52: 86 e0 ldi r24, 0x06 ; 6
a54: c8 16 cp r12, r24
a56: d1 04 cpc r13, r1
a58: 09 f0 breq .+2 ; 0xa5c <main+0x216>
a5a: 9e cf rjmp .-196 ; 0x998 <main+0x152>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74
if (result != ERROR_OK) {
return result;
}
}
MASK masks[] = {MASK0, MASK1};
a5c: 1f 8e std Y+31, r1 ; 0x1f
a5e: 18 a2 std Y+32, r1 ; 0x20
a60: 81 e0 ldi r24, 0x01 ; 1
a62: 90 e0 ldi r25, 0x00 ; 0
a64: 89 a3 std Y+33, r24 ; 0x21
a66: 9a a3 std Y+34, r25 ; 0x22
a68: 8e 01 movw r16, r28
a6a: 01 5e subi r16, 0xE1 ; 225
a6c: 1f 4f sbci r17, 0xFF ; 255
a6e: 6e 01 movw r12, r28
a70: 93 e2 ldi r25, 0x23 ; 35
a72: c9 0e add r12, r25
a74: d1 1c adc r13, 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;
a76: 88 e0 ldi r24, 0x08 ; 8
a78: b8 2e mov r11, r24
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);
a7a: d8 01 movw r26, r16
a7c: 8d 90 ld r8, X+
a7e: 9d 90 ld r9, X+
a80: 8d 01 movw r16, r26
setConfigMode():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150
return i;
}
MCP2515::ERROR MCP2515::setConfigMode()
{
return setMode(CANCTRL_REQOP_CONFIG);
a82: 80 e8 ldi r24, 0x80 ; 128
a84: 10 de rcall .-992 ; 0x6a6 <MCP2515::setMode(MCP2515::CANCTRL_REQOP_MODE) [clone .constprop.11]>
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) {
a86: 89 2b or r24, r25
a88: 09 f0 breq .+2 ; 0xa8c <main+0x246>
a8a: 9a cf rjmp .-204 ; 0x9c0 <main+0x17a>
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);
a8c: 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);
a8e: 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;
a90: bc 8e std Y+28, r11 ; 0x1c
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520
buffer[MCP_SIDH] = (uint8_t) (canid >> 5);
a92: 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) {
a94: 81 14 cp r8, r1
a96: 91 04 cpc r9, r1
a98: 99 f0 breq .+38 ; 0xac0 <main+0x27a>
a9a: 8a 94 dec r8
a9c: 89 28 or r8, r9
a9e: 09 f0 breq .+2 ; 0xaa2 <main+0x25c>
aa0: 8f cf rjmp .-226 ; 0x9c0 <main+0x17a>
main():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:542
case MASK0: reg = MCP_RXM0SIDH; break;
case MASK1: reg = MCP_RXM1SIDH; break;
aa2: 84 e2 ldi r24, 0x24 ; 36
aa4: 0e c0 rjmp .+28 ; 0xac2 <main+0x27c>
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;
aa6: 88 e0 ldi r24, 0x08 ; 8
aa8: c4 cf rjmp .-120 ; 0xa32 <main+0x1ec>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:565
case RXF3: reg = MCP_RXF3SIDH; break;
aaa: 80 e1 ldi r24, 0x10 ; 16
aac: c2 cf rjmp .-124 ; 0xa32 <main+0x1ec>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:566
case RXF4: reg = MCP_RXF4SIDH; break;
aae: 84 e1 ldi r24, 0x14 ; 20
ab0: c0 cf rjmp .-128 ; 0xa32 <main+0x1ec>
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;
ab2: 84 e0 ldi r24, 0x04 ; 4
ab4: be cf rjmp .-132 ; 0xa32 <main+0x1ec>
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);
ab6: 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);
ab8: 1c 8e std Y+28, r1 ; 0x1c
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524
buffer[MCP_EID0] = 0;
aba: 1e 8e std Y+30, r1 ; 0x1e
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525
buffer[MCP_EID8] = 0;
abc: 1d 8e std Y+29, r1 ; 0x1d
abe: c1 cf rjmp .-126 ; 0xa42 <main+0x1fc>
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;
ac0: 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);
ac2: 44 e0 ldi r20, 0x04 ; 4
ac4: be 01 movw r22, r28
ac6: 65 5e subi r22, 0xE5 ; 229
ac8: 7f 4f sbci r23, 0xFF ; 255
aca: bb dd rcall .-1162 ; 0x642 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]>
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++) {
acc: c0 16 cp r12, r16
ace: d1 06 cpc r13, r17
ad0: a1 f6 brne .-88 ; 0xa7a <main+0x234>
ad2: 76 cf rjmp .-276 ; 0x9c0 <main+0x17a>
SendDebugPkg():
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:107
}
void SendDebugPkg()
{ _frame.can_id = 0x001;
ad4: 40 92 00 3c sts 0x3C00, r4 ; 0x803c00 <__DATA_REGION_ORIGIN__>
ad8: 50 92 01 3c sts 0x3C01, r5 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1>
adc: 60 92 02 3c sts 0x3C02, r6 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2>
ae0: 70 92 03 3c sts 0x3C03, r7 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3>
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:108
_frame.can_dlc = 4;
ae4: 44 e0 ldi r20, 0x04 ; 4
ae6: 40 93 04 3c sts 0x3C04, r20 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4>
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:109
_frame.data[0] = 0x47;
aea: 87 e4 ldi r24, 0x47 ; 71
aec: 80 93 08 3c sts 0x3C08, r24 ; 0x803c08 <__DATA_REGION_ORIGIN__+0x8>
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:110
_frame.data[1] = 0x11;
af0: 91 e1 ldi r25, 0x11 ; 17
af2: 90 93 09 3c sts 0x3C09, r25 ; 0x803c09 <__DATA_REGION_ORIGIN__+0x9>
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:111
_frame.data[2] = 0x08;
af6: a8 e0 ldi r26, 0x08 ; 8
af8: a0 93 0a 3c sts 0x3C0A, r26 ; 0x803c0a <__DATA_REGION_ORIGIN__+0xa>
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:112
_frame.data[3] = 0x15;
afc: b5 e1 ldi r27, 0x15 ; 21
afe: b0 93 0b 3c sts 0x3C0B, r27 ; 0x803c0b <__DATA_REGION_ORIGIN__+0xb>
sendMessage():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:616
{
if (frame->can_dlc > CAN_MAX_DLEN) {
return ERROR_FAILTX;
}
TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2};
b02: 86 e0 ldi r24, 0x06 ; 6
b04: e2 e0 ldi r30, 0x02 ; 2
b06: fd e4 ldi r31, 0x4D ; 77
b08: de 01 movw r26, r28
b0a: 1f 96 adiw r26, 0x0f ; 15
b0c: 01 90 ld r0, Z+
b0e: 0d 92 st X+, r0
b10: 8a 95 dec r24
b12: e1 f7 brne .-8 ; 0xb0c <main+0x2c6>
b14: 0a 2d mov r16, r10
b16: 19 a5 ldd r17, Y+41 ; 0x29
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:619
for (int i=0; i<N_TXBUFFERS; i++) {
const struct TXBn_REGS *txbuf = &TXB[txBuffers[i]];
b18: f8 01 movw r30, r16
b1a: 81 90 ld r8, Z+
b1c: 91 90 ld r9, Z+
b1e: 8f 01 movw r16, r30
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:620
uint8_t ctrlval = readRegister(txbuf->CTRL);
b20: 14 01 movw r2, r8
b22: 22 0c add r2, r2
b24: 33 1c adc r3, r3
b26: f1 01 movw r30, r2
b28: e8 0d add r30, r8
b2a: f9 1d adc r31, r9
b2c: e4 55 subi r30, 0x54 ; 84
b2e: f2 4b sbci r31, 0xB2 ; 178
b30: b0 80 ld r11, Z
b32: 8b 2d mov r24, r11
b34: 78 dd rcall .-1296 ; 0x626 <MCP2515::readRegister(MCP2515::REGISTER) [clone .constprop.19]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:621
if ( (ctrlval & TXB_TXREQ) == 0 ) {
b36: 83 fd sbrc r24, 3
b38: 87 c0 rjmp .+270 ; 0xc48 <main+0x402>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:581
return ERROR_OK;
}
MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame)
{
if (frame->can_dlc > CAN_MAX_DLEN) {
b3a: 10 91 04 3c lds r17, 0x3C04 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4>
b3e: 19 30 cpi r17, 0x09 ; 9
b40: 08 f0 brcs .+2 ; 0xb44 <main+0x2fe>
b42: 63 c0 rjmp .+198 ; 0xc0a <main+0x3c4>
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);
b44: 40 91 00 3c lds r20, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__>
b48: 50 91 01 3c lds r21, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1>
b4c: 60 91 02 3c lds r22, 0x3C02 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2>
b50: 70 91 03 3c lds r23, 0x3C03 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3>
b54: db 01 movw r26, r22
b56: ca 01 movw r24, r20
b58: 88 27 eor r24, r24
b5a: b7 fd sbrc r27, 7
b5c: 83 95 inc r24
b5e: 99 27 eor r25, r25
b60: aa 27 eor r26, r26
b62: bb 27 eor r27, r27
b64: 28 2f mov r18, r24
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590
bool rtr = (frame->can_id & CAN_RTR_FLAG);
b66: db 01 movw r26, r22
b68: ca 01 movw r24, r20
b6a: 88 27 eor r24, r24
b6c: 99 27 eor r25, r25
b6e: aa 27 eor r26, r26
b70: b0 74 andi r27, 0x40 ; 64
b72: 8d a3 std Y+37, r24 ; 0x25
b74: 9e a3 std Y+38, r25 ; 0x26
b76: af a3 std Y+39, r26 ; 0x27
b78: b8 a7 std Y+40, r27 ; 0x28
main():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:591
uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK));
b7a: 8f ef ldi r24, 0xFF ; 255
b7c: 9f ef ldi r25, 0xFF ; 255
b7e: af ef ldi r26, 0xFF ; 255
b80: bf e1 ldi r27, 0x1F ; 31
sendMessage():
b82: 21 11 cpse r18, r1
b84: 04 c0 rjmp .+8 ; 0xb8e <main+0x348>
main():
b86: 8f ef ldi r24, 0xFF ; 255
b88: 97 e0 ldi r25, 0x07 ; 7
b8a: a0 e0 ldi r26, 0x00 ; 0
b8c: b0 e0 ldi r27, 0x00 ; 0
sendMessage():
b8e: 84 23 and r24, r20
b90: 95 23 and r25, r21
b92: a6 23 and r26, r22
b94: b7 23 and r27, r23
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) {
b96: 22 23 and r18, r18
b98: 09 f4 brne .+2 ; 0xb9c <main+0x356>
b9a: 46 c0 rjmp .+140 ; 0xc28 <main+0x3e2>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
b9c: 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);
b9e: 9b 83 std Y+3, r25 ; 0x03
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516
canid = (uint16_t)(id >> 16);
ba0: cd 01 movw r24, r26
ba2: aa 27 eor r26, r26
ba4: bb 27 eor r27, r27
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:518
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
ba6: 28 2f mov r18, r24
ba8: 22 0f add r18, r18
baa: 22 0f add r18, r18
bac: 22 0f add r18, r18
bae: 20 7e andi r18, 0xE0 ; 224
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517
if (ext) {
buffer[MCP_EID0] = (uint8_t) (canid & 0xFF);
buffer[MCP_EID8] = (uint8_t) (canid >> 8);
canid = (uint16_t)(id >> 16);
buffer[MCP_SIDL] = (uint8_t) (canid & 0x03);
bb0: 38 2f mov r19, r24
bb2: 33 70 andi r19, 0x03 ; 3
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519
buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3);
buffer[MCP_SIDL] |= TXB_EXIDE_MASK;
bb4: 38 60 ori r19, 0x08 ; 8
bb6: 23 2b or r18, r19
bb8: 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);
bba: 35 e0 ldi r19, 0x05 ; 5
bbc: 96 95 lsr r25
bbe: 87 95 ror r24
bc0: 3a 95 dec r19
bc2: e1 f7 brne .-8 ; 0xbbc <main+0x376>
bc4: 89 83 std Y+1, r24 ; 0x01
sendMessage():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595
bool rtr = (frame->can_id & CAN_RTR_FLAG);
uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK));
prepareId(data, ext, id);
data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc;
bc6: 8d a1 ldd r24, Y+37 ; 0x25
bc8: 9e a1 ldd r25, Y+38 ; 0x26
bca: af a1 ldd r26, Y+39 ; 0x27
bcc: b8 a5 ldd r27, Y+40 ; 0x28
bce: 89 2b or r24, r25
bd0: 8a 2b or r24, r26
bd2: 8b 2b or r24, r27
bd4: b9 f1 breq .+110 ; 0xc44 <main+0x3fe>
bd6: 81 2f mov r24, r17
bd8: 80 64 ori r24, 0x40 ; 64
bda: 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);
bdc: 41 2f mov r20, r17
bde: 50 e0 ldi r21, 0x00 ; 0
be0: 68 e0 ldi r22, 0x08 ; 8
be2: 7c e3 ldi r23, 0x3C ; 60
be4: ce 01 movw r24, r28
be6: 06 96 adiw r24, 0x06 ; 6
be8: 7b d0 rcall .+246 ; 0xce0 <memcpy>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599
setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc);
bea: 45 e0 ldi r20, 0x05 ; 5
bec: 41 0f add r20, r17
bee: f1 01 movw r30, r2
bf0: e8 0d add r30, r8
bf2: f9 1d adc r31, r9
bf4: e4 55 subi r30, 0x54 ; 84
bf6: f2 4b sbci r31, 0xB2 ; 178
bf8: b7 01 movw r22, r14
bfa: 81 81 ldd r24, Z+1 ; 0x01
bfc: 22 dd rcall .-1468 ; 0x642 <MCP2515::setRegisters(MCP2515::REGISTER, unsigned char const*, unsigned char) [clone .constprop.17]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:601
modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ);
bfe: 48 e0 ldi r20, 0x08 ; 8
c00: 68 e0 ldi r22, 0x08 ; 8
c02: 8b 2d mov r24, r11
c04: 3d dd rcall .-1414 ; 0x680 <MCP2515::modifyRegister(MCP2515::REGISTER, unsigned char, unsigned char) [clone .constprop.16]>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:603
uint8_t ctrl = readRegister(txbuf->CTRL);
c06: 8b 2d mov r24, r11
c08: 0e dd rcall .-1508 ; 0x626 <MCP2515::readRegister(MCP2515::REGISTER) [clone .constprop.19]>
setup():
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:63
delay(2000);
for (int i = 0; i < sizeof(PinStates) - 1; i++)
{
SendDebugPkg();
delay(1000);
c0a: 68 ee ldi r22, 0xE8 ; 232
c0c: 73 e0 ldi r23, 0x03 ; 3
c0e: 80 e0 ldi r24, 0x00 ; 0
c10: 90 e0 ldi r25, 0x00 ; 0
c12: 1c dc rcall .-1992 ; 0x44c <delay>
C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:65
pinMode(PinStates[i].pin_id, INPUT_PULLUP);
c14: f6 01 movw r30, r12
c16: 80 81 ld r24, Z
pinMode():
C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\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);
c18: 89 32 cpi r24, 0x29 ; 41
c1a: 10 f4 brcc .+4 ; 0xc20 <main+0x3da>
c1c: 62 e0 ldi r22, 0x02 ; 2
c1e: 72 db rcall .-2332 ; 0x304 <pinMode.part.1>
c20: f6 e0 ldi r31, 0x06 ; 6
c22: cf 0e add r12, r31
c24: d1 1c adc r13, r1
c26: ec ce rjmp .-552 ; 0xa00 <main+0x1ba>
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);
c28: 9c 01 movw r18, r24
c2a: 93 e0 ldi r25, 0x03 ; 3
c2c: 36 95 lsr r19
c2e: 27 95 ror r18
c30: 9a 95 dec r25
c32: e1 f7 brne .-8 ; 0xc2c <main+0x3e6>
c34: 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);
c36: 82 95 swap r24
c38: 88 0f add r24, r24
c3a: 80 7e andi r24, 0xE0 ; 224
c3c: 8a 83 std Y+2, r24 ; 0x02
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524
buffer[MCP_EID0] = 0;
c3e: 1c 82 std Y+4, r1 ; 0x04
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525
buffer[MCP_EID8] = 0;
c40: 1b 82 std Y+3, r1 ; 0x03
c42: c1 cf rjmp .-126 ; 0xbc6 <main+0x380>
sendMessage():
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595
bool rtr = (frame->can_id & CAN_RTR_FLAG);
uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK));
prepareId(data, ext, id);
data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc;
c44: 81 2f mov r24, r17
c46: c9 cf rjmp .-110 ; 0xbda <main+0x394>
C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:618
return ERROR_FAILTX;
}
TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2};
for (int i=0; i<N_TXBUFFERS; i++) {
c48: ab a1 ldd r26, Y+35 ; 0x23
c4a: bc a1 ldd r27, Y+36 ; 0x24
c4c: 0a 17 cp r16, r26
c4e: 1b 07 cpc r17, r27
c50: 09 f0 breq .+2 ; 0xc54 <main+0x40e>
c52: 62 cf rjmp .-316 ; 0xb18 <main+0x2d2>
c54: da cf rjmp .-76 ; 0xc0a <main+0x3c4>
00000c56 <__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
c56: 38 d0 rcall .+112 ; 0xcc8 <__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
c58: 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
c5a: 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
c5c: 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
c5e: 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
c60: 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
c62: 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
c64: 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
c66: 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
c68: 08 95 ret
00000c6a <__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
c6a: 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
c6c: 10 94 com r1
00000c6e <__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
c6e: 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
c70: 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
c72: 98 f0 brcs .+38 ; 0xc9a <__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
c74: 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
c76: 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
c78: 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
c7a: 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
c7c: 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
c7e: 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
c80: 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
c82: 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
c84: 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
c86: f4 cf rjmp .-24 ; 0xc70 <__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
c88: 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
c8a: 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
c8c: 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
c8e: 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
c90: 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
c92: 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
c94: 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
c96: 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
c98: 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
c9a: 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
c9c: aa f7 brpl .-22 ; 0xc88 <__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
c9e: 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
ca0: 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
ca2: 08 95 ret
00000ca4 <__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
ca4: 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
ca6: 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
ca8: 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
caa: 2a 17 cp r18, r26
cac: 30 05 cpc r19, r0
cae: 40 05 cpc r20, r0
cb0: 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
cb2: 60 05 cpc r22, r0
cb4: 70 05 cpc r23, r0
cb6: 80 05 cpc r24, r0
cb8: 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
cba: 08 95 ret
00000cbc <__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
cbc: 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
cbe: 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
cc0: 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
cc2: 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
cc4: 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
cc6: 09 94 ijmp
00000cc8 <__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
cc8: 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
cca: 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
ccc: 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
cce: 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
cd0: 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
cd2: 01 d0 rcall .+2 ; 0xcd6 <__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
cd4: 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
cd6: 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
cd8: 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
cda: 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
cdc: 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
cde: 08 95 ret
00000ce0 <memcpy>:
memcpy():
ce0: fb 01 movw r30, r22
ce2: dc 01 movw r26, r24
ce4: 02 c0 rjmp .+4 ; 0xcea <memcpy+0xa>
ce6: 01 90 ld r0, Z+
ce8: 0d 92 st X+, r0
cea: 41 50 subi r20, 0x01 ; 1
cec: 50 40 sbci r21, 0x00 ; 0
cee: d8 f7 brcc .-10 ; 0xce6 <memcpy+0x6>
cf0: 08 95 ret
00000cf2 <_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
cf2: f8 94 cli
00000cf4 <__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
cf4: ff cf rjmp .-2 ; 0xcf4 <__stop_program>