591 lines
25 KiB
Plaintext
591 lines
25 KiB
Plaintext
|
|
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 <main>
|
|
../../../../../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>:
|
|
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+0x76>
|
|
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 <main+0xd2>
|
|
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 <main+0xbe>
|
|
1e0: 0f df rcall .-482 ; 0x0 <__vectors>
|
|
1e2: f6 cf rjmp .-20 ; 0x1d0 <main+0xbe>
|
|
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 <main+0xca>
|
|
|
|
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>
|