diff --git a/Meycad-backups/Meycad-2022-08-07_174813.zip b/Meycad-backups/Meycad-2022-08-07_174813.zip deleted file mode 100644 index 218464d..0000000 Binary files a/Meycad-backups/Meycad-2022-08-07_174813.zip and /dev/null differ diff --git a/Meycad-backups/Meycad-2022-08-08_210235.zip b/Meycad-backups/Meycad-2022-08-08_210235.zip deleted file mode 100644 index dae045c..0000000 Binary files a/Meycad-backups/Meycad-2022-08-08_210235.zip and /dev/null differ diff --git a/Meycad-backups/Meycad-2022-08-08_211408.zip b/Meycad-backups/Meycad-2022-08-08_211408.zip deleted file mode 100644 index fb5a96c..0000000 Binary files a/Meycad-backups/Meycad-2022-08-08_211408.zip and /dev/null differ diff --git a/Meycad-backups/Meycad-2022-08-29_174622.zip b/Meycad-backups/Meycad-2022-08-29_174622.zip new file mode 100644 index 0000000..798143f Binary files /dev/null and b/Meycad-backups/Meycad-2022-08-29_174622.zip differ diff --git a/Meycad-backups/Meycad-2022-08-29_194736.zip b/Meycad-backups/Meycad-2022-08-29_194736.zip new file mode 100644 index 0000000..798143f Binary files /dev/null and b/Meycad-backups/Meycad-2022-08-29_194736.zip differ diff --git a/Meycad-backups/Meycad-2022-08-31_052208.zip b/Meycad-backups/Meycad-2022-08-31_052208.zip new file mode 100644 index 0000000..798143f Binary files /dev/null and b/Meycad-backups/Meycad-2022-08-31_052208.zip differ diff --git a/Meycad.kicad_prl b/Meycad.kicad_prl index 1071e4d..a91303a 100644 --- a/Meycad.kicad_prl +++ b/Meycad.kicad_prl @@ -62,7 +62,7 @@ 35, 36 ], - "visible_layers": "fff1820_7fffffff", + "visible_layers": "fff1020_7fffffff", "zone_display_mode": 0 }, "meta": { diff --git a/Software/UPSoftware/sketch_jun30b.ino b/Software/UPSoftware/sketch_jun30b.ino new file mode 100644 index 0000000..aac4aa7 --- /dev/null +++ b/Software/UPSoftware/sketch_jun30b.ino @@ -0,0 +1,137 @@ +#include ; +#include ; + +struct can_frame _frame; +MCP2515 mcp2515(PIN_PA3); + +typedef struct +{ + int pin_id; + bool pin_state; + short pin_wait; + bool pin_send_wait; + bool is_input; + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + this->pin_state = true; + this->pin_wait = 0; + this->is_input = true; + this->meyPinId = meyPinId; + } +} PinState; + +int PinCount = 8; +PinState PinPD2[8]; + + + +void setup() { + SPI.begin(); + + + PinPD2[0] = PinState(); + PinPD2[0].Init(PIN_PD2, (byte) 4); + + PinPD2[1] = PinState(); + PinPD2[1].Init(PIN_PC7, (byte) 1); + + PinPD2[2] = PinState(); + PinPD2[2].Init(PIN_PD1, (byte) 3); + + PinPD2[3] = PinState(); + PinPD2[3].Init(PIN_PD0, (byte) 2); + + PinPD2[4] = PinState(); + PinPD2[4].Init(PIN_PD6, (byte) 5); + + PinPD2[5] = PinState(); + PinPD2[5].Init(PIN_PD5, (byte) 6); + + PinPD2[6] = PinState(); + PinPD2[6].Init(PIN_PD4, (byte) 7); + + PinPD2[7] = PinState(); + PinPD2[7].Init(PIN_PD3, (byte) 8); + + _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); + mcp2515.reset(); + mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz + mcp2515.setNormalMode(); + + for (int i = 0; i <= PinCount - 1; i++) + { + pinMode(PinPD2[i].pin_id, INPUT_PULLUP); + } +} + + +void loop() +{ + for (int i = 0; i <= PinCount - 1; i++) + { + if (CheckPinStatus(&PinPD2[i])) + SendCanPackage(&PinPD2[i]); + } +} + +void SendCanPackage(PinState *state) +{ + _frame.can_id = 0x001; + _frame.can_dlc = 4; + _frame.data[0] = state->meyPinId; + _frame.data[1] = state->pin_state; + _frame.data[2] = 0x00; + _frame.data[3] = 0x00; + mcp2515.sendMessage(&_frame); +} + +bool ReadPin(PinState *state) +{ + if (state->pin_id == PIN_PD2) + return digitalReadFast(PIN_PD2); + else if (state->pin_id == PIN_PC7) + return digitalReadFast(PIN_PC7); + else if (state->pin_id == PIN_PD1) + return digitalReadFast(PIN_PD1); + else if (state->pin_id == PIN_PD0) + return digitalReadFast(PIN_PD0); + else if (state->pin_id == PIN_PD6) + return digitalReadFast(PIN_PD6); + else if (state->pin_id == PIN_PD5) + return digitalReadFast(PIN_PD5); + else if (state->pin_id == PIN_PD4) + return digitalReadFast(PIN_PD4); + else if (state->pin_id == PIN_PD3) + return digitalReadFast(PIN_PD3); + else + return digitalRead(state->pin_id); + +} + +bool CheckPinStatus(PinState *state) +{ + if (!state->is_input) + return false; + + bool newValue = ReadPin(state); + + + if (newValue != state->pin_state) + { + delay(10); + newValue = ReadPin(state); + if (newValue != state->pin_state) + { + state->pin_state = newValue; + state->pin_wait = 2048; // block this pin for 16 loops (debouncer) + state->pin_send_wait = true; + return true; + } + } + return false; + +} diff --git a/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.hex b/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.hex new file mode 100644 index 0000000..1c4f338 --- /dev/null +++ b/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.hex @@ -0,0 +1,33 @@ +:100000004FC000005DC000005BC0000059C0000090 +:1000100057C0000055C0000053C0000051C0000090 +:100020004FC000004DC000004BC0000049C00000A0 +:1000300047C0000045C0000043C0000041C00000B0 +:100040003FC000003DC000003BC0000039C00000C0 +:1000500037C0000035C0000033C0000031C00000D0 +:100060002FC000002EC000002BC0000029C00000DF +:1000700027C0000025C0000023C0000021C00000F0 +:100080001FC000001DC000001BC0000019C0000000 +:1000900017C0000015C0000013C0000011C0000010 +:1000A00011241FBECFEFCDBFDFE3DEBF2CE3A0E006 +:1000B000BCE301C01D92A430B207E1F72AD09BC077 +:1000C0009FCF1F920F920FB60F9211248F939F9381 +:1000D000AF93BF938091003C9091013CA091023C72 +:1000E000B091033C0196A11DB11D8093003C9093FB +:1000F000013CA093023CB093033C81E08093A60AAC +:10010000BF91AF919F918F910F900FBE0F901F9055 +:10011000189588ED90E084BF90936100809102066D +:1001200086608093020680910006816080930006BD +:10013000809102068F7C8065809302061092E20512 +:1001400082E08093E40581E08093030A8EEF809340 +:10015000270A8093260A80E880932D0A80932B0A31 +:100160008093290A80932C0A80932A0A8093280A74 +:100170008BE08093000A87E08093E505E0E8FAE0F1 +:1001800037E02EEF90E885E03183248795878083E0 +:100190007096E03C4AE0F407B9F71092A10A8FE7A5 +:1001A0009EE38093AC0A9093AD0A8091A50A81608A +:1001B0008093A50A1092A00A8091A00A8160809382 +:1001C000A00A789482E08093010412E0C0E0D0E0BD +:1001D0008091000481FF06C0109305042097C1F3AD +:1001E0000FDFF6CF9FB7F894809111048860809359 +:0A01F00011049FBFF3CFF894FFCF76 +:00000001FF diff --git a/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.lst b/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.lst new file mode 100644 index 0000000..a9bc5bc --- /dev/null +++ b/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.lst @@ -0,0 +1,590 @@ + +C:\Users\Martin\AppData\Local\Temp\arduino_build_659813/sketch_jun30b.ino.elf: file format elf32-avr + + +Disassembly of section .text: + +00000000 <__vectors>: +__vectors(): +../../../../../crt1/gcrt1.S:61 + 0: 4f c0 rjmp .+158 ; 0xa0 <__ctors_end> + 2: 00 00 nop +../../../../../crt1/gcrt1.S:67 + 4: 5d c0 rjmp .+186 ; 0xc0 <__bad_interrupt> + 6: 00 00 nop +../../../../../crt1/gcrt1.S:68 + 8: 5b c0 rjmp .+182 ; 0xc0 <__bad_interrupt> + a: 00 00 nop +../../../../../crt1/gcrt1.S:69 + c: 59 c0 rjmp .+178 ; 0xc0 <__bad_interrupt> + e: 00 00 nop +../../../../../crt1/gcrt1.S:70 + 10: 57 c0 rjmp .+174 ; 0xc0 <__bad_interrupt> + 12: 00 00 nop +../../../../../crt1/gcrt1.S:71 + 14: 55 c0 rjmp .+170 ; 0xc0 <__bad_interrupt> + 16: 00 00 nop +../../../../../crt1/gcrt1.S:72 + 18: 53 c0 rjmp .+166 ; 0xc0 <__bad_interrupt> + 1a: 00 00 nop +../../../../../crt1/gcrt1.S:73 + 1c: 51 c0 rjmp .+162 ; 0xc0 <__bad_interrupt> + 1e: 00 00 nop +../../../../../crt1/gcrt1.S:74 + 20: 4f c0 rjmp .+158 ; 0xc0 <__bad_interrupt> + 22: 00 00 nop +../../../../../crt1/gcrt1.S:75 + 24: 4d c0 rjmp .+154 ; 0xc0 <__bad_interrupt> + 26: 00 00 nop +../../../../../crt1/gcrt1.S:76 + 28: 4b c0 rjmp .+150 ; 0xc0 <__bad_interrupt> + 2a: 00 00 nop +../../../../../crt1/gcrt1.S:77 + 2c: 49 c0 rjmp .+146 ; 0xc0 <__bad_interrupt> + 2e: 00 00 nop +../../../../../crt1/gcrt1.S:78 + 30: 47 c0 rjmp .+142 ; 0xc0 <__bad_interrupt> + 32: 00 00 nop +../../../../../crt1/gcrt1.S:79 + 34: 45 c0 rjmp .+138 ; 0xc0 <__bad_interrupt> + 36: 00 00 nop +../../../../../crt1/gcrt1.S:80 + 38: 43 c0 rjmp .+134 ; 0xc0 <__bad_interrupt> + 3a: 00 00 nop +../../../../../crt1/gcrt1.S:81 + 3c: 41 c0 rjmp .+130 ; 0xc0 <__bad_interrupt> + 3e: 00 00 nop +../../../../../crt1/gcrt1.S:82 + 40: 3f c0 rjmp .+126 ; 0xc0 <__bad_interrupt> + 42: 00 00 nop +../../../../../crt1/gcrt1.S:83 + 44: 3d c0 rjmp .+122 ; 0xc0 <__bad_interrupt> + 46: 00 00 nop +../../../../../crt1/gcrt1.S:84 + 48: 3b c0 rjmp .+118 ; 0xc0 <__bad_interrupt> + 4a: 00 00 nop +../../../../../crt1/gcrt1.S:85 + 4c: 39 c0 rjmp .+114 ; 0xc0 <__bad_interrupt> + 4e: 00 00 nop +../../../../../crt1/gcrt1.S:86 + 50: 37 c0 rjmp .+110 ; 0xc0 <__bad_interrupt> + 52: 00 00 nop +../../../../../crt1/gcrt1.S:87 + 54: 35 c0 rjmp .+106 ; 0xc0 <__bad_interrupt> + 56: 00 00 nop +../../../../../crt1/gcrt1.S:88 + 58: 33 c0 rjmp .+102 ; 0xc0 <__bad_interrupt> + 5a: 00 00 nop +../../../../../crt1/gcrt1.S:89 + 5c: 31 c0 rjmp .+98 ; 0xc0 <__bad_interrupt> + 5e: 00 00 nop +../../../../../crt1/gcrt1.S:90 + 60: 2f c0 rjmp .+94 ; 0xc0 <__bad_interrupt> + 62: 00 00 nop +../../../../../crt1/gcrt1.S:91 + 64: 2e c0 rjmp .+92 ; 0xc2 <__vector_25> + 66: 00 00 nop +../../../../../crt1/gcrt1.S:92 + 68: 2b c0 rjmp .+86 ; 0xc0 <__bad_interrupt> + 6a: 00 00 nop +../../../../../crt1/gcrt1.S:93 + 6c: 29 c0 rjmp .+82 ; 0xc0 <__bad_interrupt> + 6e: 00 00 nop +../../../../../crt1/gcrt1.S:94 + 70: 27 c0 rjmp .+78 ; 0xc0 <__bad_interrupt> + 72: 00 00 nop +../../../../../crt1/gcrt1.S:95 + 74: 25 c0 rjmp .+74 ; 0xc0 <__bad_interrupt> + 76: 00 00 nop +../../../../../crt1/gcrt1.S:96 + 78: 23 c0 rjmp .+70 ; 0xc0 <__bad_interrupt> + 7a: 00 00 nop +../../../../../crt1/gcrt1.S:97 + 7c: 21 c0 rjmp .+66 ; 0xc0 <__bad_interrupt> + 7e: 00 00 nop +../../../../../crt1/gcrt1.S:98 + 80: 1f c0 rjmp .+62 ; 0xc0 <__bad_interrupt> + 82: 00 00 nop +../../../../../crt1/gcrt1.S:99 + 84: 1d c0 rjmp .+58 ; 0xc0 <__bad_interrupt> + 86: 00 00 nop +../../../../../crt1/gcrt1.S:100 + 88: 1b c0 rjmp .+54 ; 0xc0 <__bad_interrupt> + 8a: 00 00 nop +../../../../../crt1/gcrt1.S:101 + 8c: 19 c0 rjmp .+50 ; 0xc0 <__bad_interrupt> + 8e: 00 00 nop +../../../../../crt1/gcrt1.S:102 + 90: 17 c0 rjmp .+46 ; 0xc0 <__bad_interrupt> + 92: 00 00 nop +../../../../../crt1/gcrt1.S:103 + 94: 15 c0 rjmp .+42 ; 0xc0 <__bad_interrupt> + 96: 00 00 nop +../../../../../crt1/gcrt1.S:104 + 98: 13 c0 rjmp .+38 ; 0xc0 <__bad_interrupt> + 9a: 00 00 nop +../../../../../crt1/gcrt1.S:105 + 9c: 11 c0 rjmp .+34 ; 0xc0 <__bad_interrupt> + ... + +000000a0 <__ctors_end>: +__trampolines_start(): +../../../../../crt1/gcrt1.S:230 + a0: 11 24 eor r1, r1 +../../../../../crt1/gcrt1.S:231 + a2: 1f be out 0x3f, r1 ; 63 +../../../../../crt1/gcrt1.S:232 + a4: cf ef ldi r28, 0xFF ; 255 +../../../../../crt1/gcrt1.S:234 + a6: cd bf out 0x3d, r28 ; 61 +../../../../../crt1/gcrt1.S:236 + a8: df e3 ldi r29, 0x3F ; 63 +../../../../../crt1/gcrt1.S:237 + aa: de bf out 0x3e, r29 ; 62 + +000000ac <__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 + ac: 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 + ae: 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 + b0: 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 + b2: 01 c0 rjmp .+2 ; 0xb6 <.do_clear_bss_start> + +000000b4 <.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 + b4: 1d 92 st X+, r1 + +000000b6 <.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 + b6: a4 30 cpi r26, 0x04 ; 4 +/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 + b8: 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 + ba: e1 f7 brne .-8 ; 0xb4 <.do_clear_bss_loop> +.do_clear_bss_start(): +../../../../../crt1/gcrt1.S:314 + bc: 2a d0 rcall .+84 ; 0x112
+../../../../../crt1/gcrt1.S:315 + be: 9b c0 rjmp .+310 ; 0x1f6 <_exit> + +000000c0 <__bad_interrupt>: +__vector_38(): +../../../../../crt1/gcrt1.S:209 + c0: 9f cf rjmp .-194 ; 0x0 <__vectors> + +000000c2 <__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 +{ + c2: 1f 92 push r1 + c4: 0f 92 push r0 + c6: 0f b6 in r0, 0x3f ; 63 + c8: 0f 92 push r0 + ca: 11 24 eor r1, r1 + cc: 8f 93 push r24 + ce: 9f 93 push r25 + d0: af 93 push r26 + d2: 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++; + d4: 80 91 00 3c lds r24, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__> + d8: 90 91 01 3c lds r25, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> + dc: a0 91 02 3c lds r26, 0x3C02 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> + e0: b0 91 03 3c lds r27, 0x3C03 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> + e4: 01 96 adiw r24, 0x01 ; 1 + e6: a1 1d adc r26, r1 + e8: b1 1d adc r27, r1 + ea: 80 93 00 3c sts 0x3C00, r24 ; 0x803c00 <__DATA_REGION_ORIGIN__> + ee: 90 93 01 3c sts 0x3C01, r25 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> + f2: a0 93 02 3c sts 0x3C02, r26 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> + f6: b0 93 03 3c sts 0x3C03, r27 ; 0x803c03 <__DATA_REGION_ORIGIN__+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; + fa: 81 e0 ldi r24, 0x01 ; 1 + fc: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 <__RODATA_PM_OFFSET__+0x7fcaa6> +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:79 +} + 100: bf 91 pop r27 + 102: af 91 pop r26 + 104: 9f 91 pop r25 + 106: 8f 91 pop r24 + 108: 0f 90 pop r0 + 10a: 0f be out 0x3f, r0 ; 63 + 10c: 0f 90 pop r0 + 10e: 1f 90 pop r1 + 110: 18 95 reti + +00000112
: +main(): +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:355 +#if (F_CPU == 20000000L) + /* No division on clock */ + _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, 0x00); +#elif (F_CPU == 16000000L) + /* No division on clock */ + _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, 0x00); + 112: 88 ed ldi r24, 0xD8 ; 216 + 114: 90 e0 ldi r25, 0x00 ; 0 + 116: 84 bf out 0x34, r24 ; 52 + 118: 90 93 61 00 sts 0x0061, r25 ; 0x800061 <__RODATA_PM_OFFSET__+0x7fc061> +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:388 + /* ADC clock between 50-200 kHz */ + +#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; + 11c: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <__RODATA_PM_OFFSET__+0x7fc602> + 120: 86 60 ori r24, 0x06 ; 6 + 122: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <__RODATA_PM_OFFSET__+0x7fc602> +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; + 126: 80 91 00 06 lds r24, 0x0600 ; 0x800600 <__RODATA_PM_OFFSET__+0x7fc600> + 12a: 81 60 ori r24, 0x01 ; 1 + 12c: 80 93 00 06 sts 0x0600, r24 ; 0x800600 <__RODATA_PM_OFFSET__+0x7fc600> +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... + 130: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <__RODATA_PM_OFFSET__+0x7fc602> + 134: 8f 7c andi r24, 0xCF ; 207 + 136: 80 65 ori r24, 0x50 ; 80 + 138: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <__RODATA_PM_OFFSET__+0x7fc602> +main(): +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; + 13c: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 <__RODATA_PM_OFFSET__+0x7fc5e2> +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; + 140: 82 e0 ldi r24, 0x02 ; 2 + 142: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 <__RODATA_PM_OFFSET__+0x7fc5e4> +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; + 146: 81 e0 ldi r24, 0x01 ; 1 + 148: 80 93 03 0a sts 0x0A03, r24 ; 0x800a03 <__RODATA_PM_OFFSET__+0x7fca03> +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; + 14c: 8e ef ldi r24, 0xFE ; 254 + 14e: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 <__RODATA_PM_OFFSET__+0x7fca27> +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 = + 152: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 <__RODATA_PM_OFFSET__+0x7fca26> +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; + 156: 80 e8 ldi r24, 0x80 ; 128 + 158: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d <__RODATA_PM_OFFSET__+0x7fca2d> +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 = + 15c: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b <__RODATA_PM_OFFSET__+0x7fca2b> +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 = + 160: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 <__RODATA_PM_OFFSET__+0x7fca29> +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 = + 164: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c <__RODATA_PM_OFFSET__+0x7fca2c> +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 = + 168: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a <__RODATA_PM_OFFSET__+0x7fca2a> +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 = + 16c: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 <__RODATA_PM_OFFSET__+0x7fca28> +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:474 +#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); +#else + // Use DIV64 prescaler (giving 250kHz clock on 16MHz), enable TCA timer + TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV64_gc) | (TCA_SPLIT_ENABLE_bm); + 170: 8b e0 ldi r24, 0x0B ; 11 + 172: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 <__RODATA_PM_OFFSET__+0x7fca00> +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 + 176: 87 e0 ldi r24, 0x07 ; 7 + 178: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 <__RODATA_PM_OFFSET__+0x7fc5e5> +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; + 17c: e0 e8 ldi r30, 0x80 ; 128 + 17e: 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); + 180: 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; + 182: 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; + 184: 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) + 186: 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); + 188: 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; + 18a: 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; + 18c: 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) + 18e: 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++; + 190: 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); + 192: e0 3c cpi r30, 0xC0 ; 192 + 194: 4a e0 ldi r20, 0x0A ; 10 + 196: f4 07 cpc r31, r20 + 198: b9 f7 brne .-18 ; 0x188 +main(): +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; + 19a: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 <__RODATA_PM_OFFSET__+0x7fcaa1> +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; + 19e: 8f e7 ldi r24, 0x7F ; 127 + 1a0: 9e e3 ldi r25, 0x3E ; 62 + 1a2: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac <__RODATA_PM_OFFSET__+0x7fcaac> + 1a6: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad <__RODATA_PM_OFFSET__+0x7fcaad> +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; + 1aa: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 <__RODATA_PM_OFFSET__+0x7fcaa5> + 1ae: 81 60 ori r24, 0x01 ; 1 + 1b0: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 <__RODATA_PM_OFFSET__+0x7fcaa5> +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 */ + 1b4: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 <__RODATA_PM_OFFSET__+0x7fcaa0> +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 */ + 1b8: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 <__RODATA_PM_OFFSET__+0x7fcaa0> + 1bc: 81 60 ori r24, 0x01 ; 1 + 1be: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 <__RODATA_PM_OFFSET__+0x7fcaa0> +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:438 + + /*************************** ENABLE GLOBAL INTERRUPTS *************************/ + + sei(); + 1c2: 78 94 sei +pinMode(): +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:43 + return; + + if (mode == OUTPUT) + { + /* Configure direction as output */ + port->DIRSET = bit_mask; + 1c4: 82 e0 ldi r24, 0x02 ; 2 + 1c6: 80 93 01 04 sts 0x0401, r24 ; 0x800401 <__RODATA_PM_OFFSET__+0x7fc401> +digitalWrite(): +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; + 1ca: 12 e0 ldi r17, 0x02 ; 2 +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(); + 1cc: c0 e0 ldi r28, 0x00 ; 0 + 1ce: d0 e0 ldi r29, 0x00 ; 0 +digitalWrite(): +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:153 + + /* Get port */ + PORT_t *port = digitalPinToPortStruct(pin); + + /* Output direction */ + if (port->DIR & bit_mask) + 1d0: 80 91 00 04 lds r24, 0x0400 ; 0x800400 <__RODATA_PM_OFFSET__+0x7fc400> + 1d4: 81 ff sbrs r24, 1 + 1d6: 06 c0 rjmp .+12 ; 0x1e4 +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; + 1d8: 10 93 05 04 sts 0x0405, r17 ; 0x800405 <__RODATA_PM_OFFSET__+0x7fc405> +main(): +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/main.cpp:43 + 1dc: 20 97 sbiw r28, 0x00 ; 0 + 1de: c1 f3 breq .-16 ; 0x1d0 + 1e0: 0f df rcall .-482 ; 0x0 <__vectors> + 1e2: f6 cf rjmp .-20 ; 0x1d0 +digitalWrite(): +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:186 + + /* Calculate where pin control register is */ + volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); + + /* Save system status and disable interrupts */ + uint8_t status = SREG; + 1e4: 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(); + 1e6: f8 94 cli +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; + 1e8: 80 91 11 04 lds r24, 0x0411 ; 0x800411 <__RODATA_PM_OFFSET__+0x7fc411> + 1ec: 88 60 ori r24, 0x08 ; 8 + 1ee: 80 93 11 04 sts 0x0411, r24 ; 0x800411 <__RODATA_PM_OFFSET__+0x7fc411> +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; + 1f2: 9f bf out 0x3f, r25 ; 63 + 1f4: f3 cf rjmp .-26 ; 0x1dc + +000001f6 <_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 + 1f6: f8 94 cli + +000001f8 <__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 + 1f8: ff cf rjmp .-2 ; 0x1f8 <__stop_program> diff --git a/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.hex b/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.hex new file mode 100644 index 0000000..6bc7ffe --- /dev/null +++ b/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.hex @@ -0,0 +1,221 @@ +:1000000050C0000068C0000066C0000064C000006E +:1000100062C0000060C000005EC000005CC0000064 +:100020005AC0000058C0000056C0000054C0000074 +:1000300052C0000050C000004EC000004CC0000084 +:100040004AC0000048C0000046C0000044C0000094 +:1000500042C0000040C000003EC000003CC00000A4 +:100060003AC0000069C3000036C0000034C0000080 +:1000700032C0000030C000002EC000002CC00000C4 +:100080002AC0000028C0000026C0000024C00000D4 +:1000900022C0000020C000001EC000001CC00000E4 +:1000A000C40311241FBECFEFCDBFDFE3DEBF2CE3BF +:1000B000A0E0BCE301C01D92A838B207E1F710E050 +:1000C000C1E5D0E003C02197FE01F8D5C035D107C6 +:1000D000D1F7B9D30EC694CF00008093C4088091A5 +:1000E000C30887FFFCCF8091C4080895282F30E013 +:1000F000F901ED57F24B40814F3F09F450C089326E +:1001000058F4F901E85FF24BE081EE2329F0E13089 +:1001100099F010F0E63020F1F901E65AF24BE08157 +:10012000A0E2EA9FF0011124FC5F8081842321F189 +:10013000611120C046830895F901EF5CF24B5081B4 +:10014000533008F05F5F7091010A81E090E001C0D8 +:10015000880F5A95EAF7809587238093010ADCCFB0 +:1001600080E1E89FF0011124E05AF54F81818F7EF4 +:100170008183D2CF458308952F5C324BD9018C9176 +:10018000309771F08F3F61F07096E80FF11D9FB7C7 +:10019000F8948081611107C0877F80839FBF089595 +:1001A000F0E0E0E0F4CF8860F8CF8F929F92AF92BA +:1001B000BF92CF92DF92EF92FF920F93CF93DF9394 +:1001C0008091853C893210F461E090DF80911C3C85 +:1001D000882319F081FF0DC07894DF91CF910F91A2 +:1001E000FF90EF90DF90CF90BF90AF909F908F9057 +:1001F000089580FFF2CF80901E3C90901F3CA0900D +:10020000203CB090213CC12CD12C7601E0E094013F +:10021000A501B601C701A0E045D581F1217030E00C +:1002200040E050E060E070E080E090E03BD5D1F04D +:10023000B0E0A0E0E03370F4AE2FA695A695A695A9 +:1002400080E2A89FD0011124A05FBB4F8E2F877042 +:10025000A80FB11DCE2FD0E0CA5ED34C88899C91E7 +:10026000892B8C939401A501B601C70101E0FFD44D +:1002700049015A016B017C01EF5FC9CF8090223C9C +:100280009090233CA090243CB090253CC12CD12CD4 +:100290007601E0E29401A501B601C701A0E002D514 +:1002A00009F49BCF217030E040E050E060E070E066 +:1002B00080E090E0F7D4D1F0B0E0A0E0E03370F45B +:1002C000AE2FA695A695A69580E2A89FD0011124F1 +:1002D000A05FBB4F8E2F8770A80FB11DCE2FD0E02F +:1002E000CA5ED34C88899C91892B8C939401A5017B +:1002F000B601C70101E0BBD449015A016B017C0181 +:10030000EF5FC8CFCF93DF9390E0FC01ED57F24B46 +:1003100020812F3F61F0FC01E65AF24BE08130E290 +:10032000E39FF0011124FC5F613021F42183DF9110 +:10033000CF9108958F5C924BEC01A881AF3F69F09B +:10034000CF014096A80FB92FB11D9FB7F894228313 +:100350008C9188608C939FBFEACFB0E0A0E0F5CF8E +:1003600080911B3C811117C010921C3C10921D3CC7 +:1003700010921E3C10921F3C1092203C1092213C87 +:100380001092223C1092233C1092243C1092253C67 +:1003900081E080931B3C8091E3058C7F90911A3C17 +:1003A000892B8093E305911119C061E084E0AADFF5 +:1003B00061E086E0A7DF8091C10884608093C10876 +:1003C0008091C00881628093C0089091143C809114 +:1003D000153C9093C0088093C1080895913031F482 +:1003E00061E08EE08FDF61E080E1E4CF923019F7C9 +:1003F00061E08EE187DF61E080E2DCCF8FB7F894C7 +:100400002091103C3091113C4091123C5091133C92 +:10041000E091AA0AF091AB0A9091A60A90FF08C059 +:100420002F5F3F4F4F4F5F4FE091AA0AF091AB0A09 +:100430008FBFA8EEB3E00FD423E0F695E7952A9599 +:10044000E1F76E0F7F1F811D911D08958F929F927E +:10045000AF92BF92CF92DF92EF92FF924B015C017D +:10046000CDDF6B017C01A8EEB3E0A5019401F3D3CD +:10047000C60ED71EE81EF91EC616D706E806F906F0 +:1004800010F4BCDFF9CFBADF6C157D058E059F0532 +:10049000D0F3FF90EF90DF90CF90BF90AF909F9000 +:1004A0008F9008958F929F92AF92BF92CF92DF92DA +:1004B000EF92FF920F93CF93DF9380911C3C8823A0 +:1004C00019F081FF19C0F89481E38093C00884E09B +:1004D0008093C1088091853C893208F098C060E023 +:1004E000DF91CF910F91FF90EF90DF90CF90BF9071 +:1004F000AF909F908F90FACD80FFE6CF80901E3C0A +:1005000090901F3CA090203CB090213CC12CD12C5D +:100510007601E0E09401A501B601C701A0E0C2D3D5 +:1005200089F1217030E040E050E060E070E080E070 +:1005300090E0B8D3D9F0B0E0A0E0E03370F4AE2F93 +:10054000A695A695A69580E2A89FD0011124A05F4C +:10055000BB4F8E2F8770A80FB11DCE2FD0E08C918E +:10056000CA5ED34C888B8C91887F8C939401A501B3 +:10057000B601C70101E07BD349015A016B017C013F +:10058000EF5FC8CF8090223C9090233CA090243C09 +:10059000B090253CC12CD12C7601E0E29401A5015C +:1005A000B601C701A0E07ED309F48ECF217030E000 +:1005B00040E050E060E070E080E090E073D3D9F07C +:1005C000B0E0A0E0E03370F4AE2FA695A695A69516 +:1005D00080E2A89FD0011124A05FBB4F8E2F8770AF +:1005E000A80FB11DCE2FD0E08C91CA5ED34C888B62 +:1005F0008C91887F8C939401A501B601C70101E01D +:1006000036D349015A016B017C01EF5FC7CFDF91FF +:10061000CF910F91FF90EF90DF90CF90BF90AF9070 +:100620009F908F900895CF93C82F3CDF83E054DDD7 +:100630008C2F52DD80E050DDC82FB7DD8C2FCF919D +:100640000895FF920F931F93CF93DF93C82FF62E39 +:10065000172F042F27DF82E03FDD8C2F3DDDCF2DCC +:10066000D12F0C0F1D2F111DC017D10719F0899123 +:1006700033DDFACFDF91CF911F910F91FF9095CD90 +:100680001F93CF93DF93182FD62FC42F0BDF85E056 +:1006900023DD812F21DD8D2F1FDD8C2F1DDDDF91CF +:1006A000CF911F9182CDCF92DF92EF92FF92CF93A5 +:1006B000C82F482F60EE8FE0E3DF8FB7F894C0902B +:1006C000103CD090113CE090123CF090133C8FBF56 +:1006D0008AE0C80ED11CE11CF11C2FB7F894809160 +:1006E000103C9091113CA091123CB091133C2FBF53 +:1006F0008C159D05AE05BF0578F48EE094DF807EF5 +:10070000C813EBCF81E091E0892790E0CF91FF9073 +:10071000EF90DF90CF90089580E0F5CFCF93DF93F7 +:10072000D82FC62FBFDE82E0D7DC8D2FD5DC8C2FF3 +:10073000D3DCDF91CF9139CD1F920F920FB60F927C +:1007400011248F939F93AF93BF938091103C90910E +:10075000113CA091123CB091133C0196A11DB11D1A +:100760008093103C9093113CA093123CB093133CA7 +:1007700081E08093A60ABF91AF919F918F910F90D6 +:100780000FBE0F901F901895CF93DF93E4E1FCE329 +:10079000C4E0C18381E38083E6E1FCE31582148237 +:1007A000DFDDD3E0D093853C61E083E0ABDDFDDCB1 +:1007B000E5E5FCE385E190E080839183128213827A +:1007C00081E08483858326E130E0268337831086A9 +:1007D0001186828792E0938727E130E0248735876E +:1007E00016861786808BD18B28E130E0228B338BE5 +:1007F000148A158A868BC78B2CE130E0208F318FCD +:10080000128E138E848F95E0958F2BE130E0268F2A +:10081000378F10A211A282A396E093A32AE130E0C1 +:1008200024A335A316A217A280A797E091A729E1D8 +:1008300030E022A733A714A615A686A788E087A7CD +:10084000DF91CF910895CF93DF93CDB7DEB7A9970E +:10085000CDBFDEBF91E088ED84BF909361008091B1 +:100860000206856080930206809100068160809375 +:100870000006809102068F7C8065809302061092AC +:10088000E20582E08093E4059093030A8EEF809363 +:10089000270A8093260A80E880932D0A80932B0AEA +:1008A0008093290A80932C0A80932A0A8093280A2D +:1008B00089E08093000A87E08093E505E0E8FAE0AC +:1008C00037E02EEF90E885E0318324879587808399 +:1008D0007096E03C4AE0F407B9F71092A10A8FE362 +:1008E0009FE18093AC0A9093AD0A8091A50A816044 +:1008F0008093A50A1092A00A8091A00A816080933B +:10090000A00A78942DDD80916000806890E028ED49 +:1009100024BF80936000C6DD80ECDEDB46DC6AE04D +:1009200070E080E090E092DDCE0101967C018EE0E7 +:10093000D7011D928A95E9F74EE0B70180E381DE89 +:100940004EE0B70180E47DDE4EE0B70180E579DE60 +:1009500060E080E6E3DE60E080E7E0DE63EA8BE211 +:10096000DDDE44E067E680E68BDE41E067E680E7B7 +:1009700087DE8CE0E6EFFCE4DE011F9601900D922D +:100980008A95E1F74E01BFE08B0E911CD12CC12C52 +:10099000A82C99A698E0B92EF401019111914F016C +:1009A00080E881DE892B61F40230110509F47BC0F7 +:1009B000A0F501151105E1F10130110509F479C027 +:1009C00080E871DE892B49F460E08AE2A7DE60E905 +:1009D00089E2A4DE62E888E2A1DE80E064DE60ED08 +:1009E00077E080E090E032DDA5E5CA2EACE3DA2EB8 +:1009F000412C512C32014394FE017596EBA3FCA3CC +:100A0000FFE6CF16FDE3DF0609F064C000E010E06A +:100A100001151105E9F3F4DAFBCF0430110509F4EF +:100A200046C008F442C00530110551F688E101C006 +:100A300080E0F1E0CF16D104F1F51E8E1D8EBC8E44 +:100A40001B8E44E0BE01655E7F4FFBDD4FEFC41A95 +:100A5000D40A86E0C816D10409F09ECF1F8E18A2D2 +:100A600081E090E089A39AA38E01015E1F4F6E0181 +:100A700093E2C90ED11C88E0B82ED8018D909D90CC +:100A80008D0180E810DE892B09F09ACF1E8E1D8E15 +:100A9000BC8E1B8E8114910499F08A94892809F0E8 +:100AA0008FCF84E20EC088E0C4CF80E1C2CF84E162 +:100AB000C0CF84E0BECF1B8E1C8E1E8E1D8EC1CF7C +:100AC00080E244E0BE01655E7F4FBBDDC016D1060B +:100AD000A1F676CF4092003C5092013C6092023CDD +:100AE0007092033C44E04093043C87E48093083CCC +:100AF00091E19093093CA8E0A0930A3CB5E1B09342 +:100B00000B3C86E0E2E0FDE4DE011F9601900D92D1 +:100B10008A95E1F70A2D19A5F801819091908F012E +:100B20001401220C331CF101E80DF91DE455F24BC0 +:100B3000B0808B2D78DD83FD87C01091043C193087 +:100B400008F063C04091003C5091013C6091023C30 +:100B50007091033CDB01CA018827B7FD8395992773 +:100B6000AA27BB27282FDB01CA0188279927AA2794 +:100B7000B0748DA39EA3AFA3B8A78FEF9FEFAFEF85 +:100B8000BFE1211104C08FEF97E0A0E0B0E0842323 +:100B90009523A623B723222309F446C08C839B8385 +:100BA000CD01AA27BB27282F220F220F220F207E3C +:100BB000382F33703860232B2A8335E0969587953C +:100BC0003A95E1F789838DA19EA1AFA1B8A5892BA4 +:100BD0008A2B8B2BB9F1812F80648D83412F50E0BC +:100BE00068E07CE3CE0106967BD045E0410FF10141 +:100BF000E80DF91DE455F24BB701818122DD48E093 +:100C000068E08B2D3DDD8B2D0EDD68EE73E080E01E +:100C100090E01CDCF6018081893210F462E072DB26 +:100C2000F6E0CF0ED11CECCE9C0193E036952795D3 +:100C30009A95E1F729838295880F807E8A831C82AA +:100C40001B82C1CF812FC9CFABA1BCA10A171B0743 +:100C500009F062CFDACF38D0A59F900DB49F900DE8 +:100C6000A49F800D911D1124089597FD1094002ECE +:100C7000083098F00850232F342F452F562F672F18 +:100C8000782F892F912DF4CF159497958795779587 +:100C9000679557954795379527950A95AAF7112493 +:100CA000002D08950024A7FD00942A173005400563 +:100CB000500560057005800590050895EE0FFF1F33 +:100CC0000590F491E02D0994A29FB001B39FC0015B +:100CD000A39F01D0B29F700D811D1124911D089515 +:100CE000FB01DC0102C001900D9241505040D8F749 +:060CF0000895F894FFCF07 +:100CF60000000100020003000400050000000100DE +:100D060002000000000000000000000000000005D6 +:100D160001010101010100000000000000000000C7 +:100D260000000000000000000203000001020304AE +:100D36000506070001020304050001020304050677 +:100D46000700010203040506070001020300010271 +:100D56000304050600000000000000000101010177 +:100D66000101020202020202020203030303030359 +:100D7600030304040404050505050505050102042D +:100D86000810204080010204081020010204081007 +:100D9600204080010204081020408001020408015E +:0F0DA6000204081020403031364041465051566B +:00000001FF diff --git a/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.lst b/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.lst new file mode 100644 index 0000000..8b4b796 --- /dev/null +++ b/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.lst @@ -0,0 +1,3265 @@ + +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
+../../../../../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 : +_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 +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 + e2: 87 ff sbrs r24, 7 + e4: fc cf rjmp .-8 ; 0xde +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 +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(): +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 + 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 + 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 + 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 : +_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 +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 + 1c8: 61 e0 ldi r22, 0x01 ; 1 + 1ca: 90 df rcall .-224 ; 0xec +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 + 1d0: 88 23 and r24, r24 + 1d2: 19 f0 breq .+6 ; 0x1da +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 +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 +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 + 1fa: 90 90 1f 3c lds r9, 0x3C1F ; 0x803c1f + 1fe: a0 90 20 3c lds r10, 0x3C20 ; 0x803c20 + 202: b0 90 21 3c lds r11, 0x3C21 ; 0x803c21 + 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 +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 +_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 + 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 +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 + 280: 90 90 23 3c lds r9, 0x3C23 ; 0x803c23 + 284: a0 90 24 3c lds r10, 0x3C24 ; 0x803c24 + 288: b0 90 25 3c lds r11, 0x3C25 ; 0x803c25 + 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 + 2a2: 9b cf rjmp .-202 ; 0x1da +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 +_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 + 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 + +00000304 : +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 +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 +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 + 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 +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 + +00000360 : +_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 + 364: 81 11 cpse r24, r1 + 366: 17 c0 rjmp .+46 ; 0x396 +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 +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 +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 + 374: 10 92 1f 3c sts 0x3C1F, r1 ; 0x803c1f + 378: 10 92 20 3c sts 0x3C20, r1 ; 0x803c20 + 37c: 10 92 21 3c sts 0x3C21, r1 ; 0x803c21 +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 + 384: 10 92 23 3c sts 0x3C23, r1 ; 0x803c23 + 388: 10 92 24 3c sts 0x3C24, r1 ; 0x803c24 + 38c: 10 92 25 3c sts 0x3C25, r1 ; 0x803c25 +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 +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 + 39a: 8c 7f andi r24, 0xFC ; 252 + 39c: 90 91 1a 3c lds r25, 0x3C1A ; 0x803c1a + 3a0: 89 2b or r24, r25 + 3a2: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 +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 +pinMode(): + 3aa: 61 e0 ldi r22, 0x01 ; 1 + 3ac: 84 e0 ldi r24, 0x04 ; 4 + 3ae: aa df rcall .-172 ; 0x304 + 3b0: 61 e0 ldi r22, 0x01 ; 1 + 3b2: 86 e0 ldi r24, 0x06 ; 6 + 3b4: a7 df rcall .-178 ; 0x304 +_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 + 3ba: 84 60 ori r24, 0x04 ; 4 + 3bc: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 +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 + 3c4: 81 62 ori r24, 0x21 ; 33 + 3c6: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 + 3ca: 90 91 14 3c lds r25, 0x3C14 ; 0x803c14 + 3ce: 80 91 15 3c lds r24, 0x3C15 ; 0x803c15 +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 +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 +_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 +pinMode(): + 3e0: 61 e0 ldi r22, 0x01 ; 1 + 3e2: 8e e0 ldi r24, 0x0E ; 14 + 3e4: 8f df rcall .-226 ; 0x304 + 3e6: 61 e0 ldi r22, 0x01 ; 1 + 3e8: 80 e1 ldi r24, 0x10 ; 16 + 3ea: e4 cf rjmp .-56 ; 0x3b4 +_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 +pinMode(): + 3f0: 61 e0 ldi r22, 0x01 ; 1 + 3f2: 8e e1 ldi r24, 0x1E ; 30 + 3f4: 87 df rcall .-242 ; 0x304 + 3f6: 61 e0 ldi r22, 0x01 ; 1 + 3f8: 80 e2 ldi r24, 0x20 ; 32 + 3fa: dc cf rjmp .-72 ; 0x3b4 + +000003fc : +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 + 404: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 + 408: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 + 40c: 50 91 13 3c lds r21, 0x3C13 ; 0x803c13 +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 + 414: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab +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 + 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 + 42c: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab +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(): +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 + 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 +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 + 484: f9 cf rjmp .-14 ; 0x478 +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 + 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 +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 : +_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 + 4be: 88 23 and r24, r24 + 4c0: 19 f0 breq .+6 ; 0x4c8 +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 +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 +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 +_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 +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 + 4dc: 98 c0 rjmp .+304 ; 0x60e + 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 +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 +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 + 500: 90 90 1f 3c lds r9, 0x3C1F ; 0x803c1f + 504: a0 90 20 3c lds r10, 0x3C20 ; 0x803c20 + 508: b0 90 21 3c lds r11, 0x3C21 ; 0x803c21 + 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 +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 +_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 + 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 +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 + 588: 90 90 23 3c lds r9, 0x3C23 ; 0x803c23 + 58c: a0 90 24 3c lds r10, 0x3C24 ; 0x803c24 + 590: b0 90 25 3c lds r11, 0x3C25 ; 0x803c25 + 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 + 5aa: 8e cf rjmp .-228 ; 0x4c8 +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 +_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 + 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 +_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 : +_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 +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 +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 +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 + 638: c8 2f mov r28, r24 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91 + endSPI(); + 63a: b7 dd rcall .-1170 ; 0x1aa +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 : +_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 +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 +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 + 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 +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 + 672: fa cf rjmp .-12 ; 0x668 +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 + +00000680 : +_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 +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 +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 +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 +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 +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 + +000006a6 : +_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 +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 + 6c2: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 + 6c6: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 + 6ca: f0 90 13 3c lds r15, 0x3C13 ; 0x803c13 +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 + 6e2: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 + 6e6: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 + 6ea: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 +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 +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 +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 +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 + +0000071c : +_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 +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 +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 +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 +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 + +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 + 74e: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 + 752: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 + 756: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 + 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 + 764: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 + 768: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 + 76c: b0 93 13 3c sts 0x3C13, r27 ; 0x803c13 +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 +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__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 + 7a2: d3 e0 ldi r29, 0x03 ; 3 + 7a4: d0 93 85 3c sts 0x3C85, r29 ; 0x803c85 + 7a8: 61 e0 ldi r22, 0x01 ; 1 + 7aa: 83 e0 ldi r24, 0x03 ; 3 + 7ac: ab dd rcall .-1194 ; 0x304 + 7ae: fd dc rcall .-1542 ; 0x1aa + 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(): +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 +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 + 862: 85 60 ori r24, 0x05 ; 5 + 864: 80 93 02 06 sts 0x0602, r24 ; 0x800602 +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 + 86c: 81 60 ori r24, 0x01 ; 1 + 86e: 80 93 00 06 sts 0x0600, r24 ; 0x800600 +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 + 876: 8f 7c andi r24, 0xCF ; 207 + 878: 80 65 ori r24, 0x50 ; 80 + 87a: 80 93 02 06 sts 0x0602, r24 ; 0x800602 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 + 8e6: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad +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 + 8ee: 81 60 ori r24, 0x01 ; 1 + 8f0: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 +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 +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 + 8fc: 81 60 ori r24, 0x01 ; 1 + 8fe: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 +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 +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 + 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 +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 +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 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38 + endSPI(); + 91c: 46 dc rcall .-1908 ; 0x1aa +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 + 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 +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 +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 + 9ae: 7b c0 rjmp .+246 ; 0xaa6 + 9b0: a0 f5 brcc .+104 ; 0xa1a + 9b2: 01 15 cp r16, r1 + 9b4: 11 05 cpc r17, r1 + 9b6: e1 f1 breq .+120 ; 0xa30 + 9b8: 01 30 cpi r16, 0x01 ; 1 + 9ba: 11 05 cpc r17, r1 + 9bc: 09 f4 brne .+2 ; 0x9c0 + 9be: 79 c0 rjmp .+242 ; 0xab2 +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 +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 +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 +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 +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 +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 +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 + 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 + a0a: 64 c0 rjmp .+200 ; 0xad4 +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 + a16: f4 da rcall .-2584 ; 0x0 <__vectors> + a18: fb cf rjmp .-10 ; 0xa10 +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 + a20: 46 c0 rjmp .+140 ; 0xaae + a22: 08 f4 brcc .+2 ; 0xa26 + a24: 42 c0 rjmp .+132 ; 0xaaa + a26: 05 30 cpi r16, 0x05 ; 5 + a28: 11 05 cpc r17, r1 + a2a: 51 f6 brne .-108 ; 0x9c0 +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 +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 +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 +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 + a5a: 9e cf rjmp .-196 ; 0x998 +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 +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 + a8a: 9a cf rjmp .-204 ; 0x9c0 +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 + a9a: 8a 94 dec r8 + a9c: 89 28 or r8, r9 + a9e: 09 f0 breq .+2 ; 0xaa2 + aa0: 8f cf rjmp .-226 ; 0x9c0 +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 +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 +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 +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 +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 +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(): +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 +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 + ad2: 76 cf rjmp .-276 ; 0x9c0 +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 + 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; iCTRL); + 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 +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 +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 + b42: 63 c0 rjmp .+198 ; 0xc0a +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(): + 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 + b9a: 46 c0 rjmp .+140 ; 0xc28 +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 + 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 + 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 +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 +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 +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 +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 +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 + c1c: 62 e0 ldi r22, 0x02 ; 2 + c1e: 72 db rcall .-2332 ; 0x304 + 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 +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 + 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 +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 +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 + c52: 62 cf rjmp .-316 ; 0xb18 + c54: da cf rjmp .-76 ; 0xc0a + +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(): + ce0: fb 01 movw r30, r22 + ce2: dc 01 movw r26, r24 + ce4: 02 c0 rjmp .+4 ; 0xcea + 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 + 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> diff --git a/SolidEdgeCase/dekel meycan v2.par b/SolidEdgeCase/dekel meycan v2.par index 5a024d0..37ad1fb 100644 Binary files a/SolidEdgeCase/dekel meycan v2.par and b/SolidEdgeCase/dekel meycan v2.par differ diff --git a/SolidEdgeCase/gehäuse MeyCanV2.par b/SolidEdgeCase/gehäuse MeyCanV2.par index e566b07..040d387 100644 Binary files a/SolidEdgeCase/gehäuse MeyCanV2.par and b/SolidEdgeCase/gehäuse MeyCanV2.par differ diff --git a/Switch1/Switch1-backups/Switch1-2022-08-22_100022.zip b/Switch1/Switch1-backups/Switch1-2022-08-22_100022.zip deleted file mode 100644 index 4267181..0000000 Binary files a/Switch1/Switch1-backups/Switch1-2022-08-22_100022.zip and /dev/null differ diff --git a/Switch1/Switch1-backups/Switch1-2022-08-27_141610.zip b/Switch1/Switch1-backups/Switch1-2022-08-27_141610.zip new file mode 100644 index 0000000..57c9268 Binary files /dev/null and b/Switch1/Switch1-backups/Switch1-2022-08-27_141610.zip differ