Advertisement
Guest User

blink objdump

a guest
Mar 18th, 2024
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. sketch_mar18a.ino.elf:     file format elf32-avr
  3.  
  4.  
  5. Disassembly of section .text:
  6.  
  7. 00000000 <__vectors>:
  8.    0:   0c 94 5c 00     jmp 0xb8    ; 0xb8 <__ctors_end>
  9.    4:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  10.    8:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  11.    c:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  12.   10:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  13.   14:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  14.   18:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  15.   1c:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  16.   20:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  17.   24:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  18.   28:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  19.   2c:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  20.   30:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  21.   34:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  22.   38:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  23.   3c:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  24.   40:   0c 94 13 01     jmp 0x226   ; 0x226 <__vector_16>
  25.   44:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  26.   48:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  27.   4c:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  28.   50:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  29.   54:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  30.   58:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  31.   5c:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  32.   60:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  33.   64:   0c 94 6e 00     jmp 0xdc    ; 0xdc <__bad_interrupt>
  34.  
  35. 00000068 <port_to_mode_PGM>:
  36.   68:   00 00 00 00 24 00 27 00 2a 00                       ....$.'.*.
  37.  
  38. 00000072 <port_to_output_PGM>:
  39.   72:   00 00 00 00 25 00 28 00 2b 00                       ....%.(.+.
  40.  
  41. 0000007c <digital_pin_to_port_PGM>:
  42.   7c:   04 04 04 04 04 04 04 04 02 02 02 02 02 02 03 03     ................
  43.   8c:   03 03 03 03                                         ....
  44.  
  45. 00000090 <digital_pin_to_bit_mask_PGM>:
  46.   90:   01 02 04 08 10 20 40 80 01 02 04 08 10 20 01 02     ..... @...... ..
  47.   a0:   04 08 10 20                                         ...
  48.  
  49. 000000a4 <digital_pin_to_timer_PGM>:
  50.   a4:   00 00 00 08 00 02 01 00 00 03 04 07 00 00 00 00     ................
  51.   b4:   00 00 00 00                                         ....
  52.  
  53. 000000b8 <__ctors_end>:
  54.   b8:   11 24           eor r1, r1
  55.   ba:   1f be           out 0x3f, r1    ; 63
  56.   bc:   cf ef           ldi r28, 0xFF   ; 255
  57.   be:   d8 e0           ldi r29, 0x08   ; 8
  58.   c0:   de bf           out 0x3e, r29   ; 62
  59.   c2:   cd bf           out 0x3d, r28   ; 61
  60.  
  61. 000000c4 <__do_clear_bss>:
  62.   c4:   21 e0           ldi r18, 0x01   ; 1
  63.   c6:   a0 e0           ldi r26, 0x00   ; 0
  64.   c8:   b1 e0           ldi r27, 0x01   ; 1
  65.   ca:   01 c0           rjmp    .+2         ; 0xce <.do_clear_bss_start>
  66.  
  67. 000000cc <.do_clear_bss_loop>:
  68.   cc:   1d 92           st  X+, r1
  69.  
  70. 000000ce <.do_clear_bss_start>:
  71.   ce:   a9 30           cpi r26, 0x09   ; 9
  72.   d0:   b2 07           cpc r27, r18
  73.   d2:   e1 f7           brne    .-8         ; 0xcc <.do_clear_bss_loop>
  74.   d4:   0e 94 5d 01     call    0x2ba   ; 0x2ba <main>
  75.   d8:   0c 94 cc 01     jmp 0x398   ; 0x398 <_exit>
  76.  
  77. 000000dc <__bad_interrupt>:
  78.   dc:   0c 94 00 00     jmp 0   ; 0x0 <__vectors>
  79.  
  80. 000000e0 <digitalWrite.constprop.0>:
  81.     }
  82. }
  83.  
  84. void digitalWrite(uint8_t pin, uint8_t val)
  85. {
  86.     uint8_t timer = digitalPinToTimer(pin);
  87.   e0:   eb ea           ldi r30, 0xAB   ; 171
  88.   e2:   f0 e0           ldi r31, 0x00   ; 0
  89.   e4:   24 91           lpm r18, Z
  90.     uint8_t bit = digitalPinToBitMask(pin);
  91.   e6:   e7 e9           ldi r30, 0x97   ; 151
  92.   e8:   f0 e0           ldi r31, 0x00   ; 0
  93.   ea:   94 91           lpm r25, Z
  94.     uint8_t port = digitalPinToPort(pin);
  95.   ec:   e3 e8           ldi r30, 0x83   ; 131
  96.   ee:   f0 e0           ldi r31, 0x00   ; 0
  97.   f0:   e4 91           lpm r30, Z
  98.     volatile uint8_t *out;
  99.  
  100.     if (port == NOT_A_PIN) return;
  101.   f2:   ee 23           and r30, r30
  102.   f4:   c9 f0           breq    .+50        ; 0x128 <digitalWrite.constprop.0+0x48>
  103.  
  104.     // If the pin that support PWM output, we need to turn it off
  105.     // before doing a digital write.
  106.     if (timer != NOT_ON_TIMER) turnOffPWM(timer);
  107.   f6:   22 23           and r18, r18
  108.   f8:   39 f0           breq    .+14        ; 0x108 <digitalWrite.constprop.0+0x28>
  109.     switch (timer)
  110.   fa:   23 30           cpi r18, 0x03   ; 3
  111.   fc:   01 f1           breq    .+64        ; 0x13e <digitalWrite.constprop.0+0x5e>
  112.   fe:   a8 f4           brcc    .+42        ; 0x12a <digitalWrite.constprop.0+0x4a>
  113.  100:   21 30           cpi r18, 0x01   ; 1
  114.  102:   19 f1           breq    .+70        ; 0x14a <digitalWrite.constprop.0+0x6a>
  115.  104:   22 30           cpi r18, 0x02   ; 2
  116.  106:   29 f1           breq    .+74        ; 0x152 <digitalWrite.constprop.0+0x72>
  117.  
  118.     out = portOutputRegister(port);
  119.  108:   f0 e0           ldi r31, 0x00   ; 0
  120.  10a:   ee 0f           add r30, r30
  121.  10c:   ff 1f           adc r31, r31
  122.  10e:   ee 58           subi    r30, 0x8E   ; 142
  123.  110:   ff 4f           sbci    r31, 0xFF   ; 255
  124.  112:   a5 91           lpm r26, Z+
  125.  114:   b4 91           lpm r27, Z
  126.  
  127.     uint8_t oldSREG = SREG;
  128.  116:   2f b7           in  r18, 0x3f   ; 63
  129.     cli();
  130.  118:   f8 94           cli
  131.  
  132.     if (val == LOW) {
  133.         *out &= ~bit;
  134.  11a:   ec 91           ld  r30, X
  135.     if (val == LOW) {
  136.  11c:   81 11           cpse    r24, r1
  137.  11e:   26 c0           rjmp    .+76        ; 0x16c <digitalWrite.constprop.0+0x8c>
  138.         *out &= ~bit;
  139.  120:   90 95           com r25
  140.  122:   9e 23           and r25, r30
  141.     } else {
  142.         *out |= bit;
  143.  124:   9c 93           st  X, r25
  144.     }
  145.  
  146.     SREG = oldSREG;
  147.  126:   2f bf           out 0x3f, r18   ; 63
  148. }
  149.  128:   08 95           ret
  150.     switch (timer)
  151.  12a:   27 30           cpi r18, 0x07   ; 7
  152.  12c:   a9 f0           breq    .+42        ; 0x158 <digitalWrite.constprop.0+0x78>
  153.  12e:   28 30           cpi r18, 0x08   ; 8
  154.  130:   c9 f0           breq    .+50        ; 0x164 <digitalWrite.constprop.0+0x84>
  155.  132:   24 30           cpi r18, 0x04   ; 4
  156.  134:   49 f7           brne    .-46        ; 0x108 <digitalWrite.constprop.0+0x28>
  157.         case TIMER1B:   cbi(TCCR1A, COM1B1);    break;
  158.  136:   20 91 80 00     lds r18, 0x0080 ; 0x800080 <__DATA_REGION_ORIGIN__+0x20>
  159.  13a:   2f 7d           andi    r18, 0xDF   ; 223
  160.  13c:   03 c0           rjmp    .+6         ; 0x144 <digitalWrite.constprop.0+0x64>
  161.         case TIMER1A:   cbi(TCCR1A, COM1A1);    break;
  162.  13e:   20 91 80 00     lds r18, 0x0080 ; 0x800080 <__DATA_REGION_ORIGIN__+0x20>
  163.  142:   2f 77           andi    r18, 0x7F   ; 127
  164.         case TIMER1B:   cbi(TCCR1A, COM1B1);    break;
  165.  144:   20 93 80 00     sts 0x0080, r18 ; 0x800080 <__DATA_REGION_ORIGIN__+0x20>
  166.  148:   df cf           rjmp    .-66        ; 0x108 <digitalWrite.constprop.0+0x28>
  167.         case  TIMER0A:  cbi(TCCR0A, COM0A1);    break;
  168.  14a:   24 b5           in  r18, 0x24   ; 36
  169.  14c:   2f 77           andi    r18, 0x7F   ; 127
  170.         case  TIMER0B:  cbi(TCCR0A, COM0B1);    break;
  171.  14e:   24 bd           out 0x24, r18   ; 36
  172.  150:   db cf           rjmp    .-74        ; 0x108 <digitalWrite.constprop.0+0x28>
  173.  152:   24 b5           in  r18, 0x24   ; 36
  174.  154:   2f 7d           andi    r18, 0xDF   ; 223
  175.  156:   fb cf           rjmp    .-10        ; 0x14e <digitalWrite.constprop.0+0x6e>
  176.         case  TIMER2A:  cbi(TCCR2A, COM2A1);    break;
  177.  158:   20 91 b0 00     lds r18, 0x00B0 ; 0x8000b0 <__DATA_REGION_ORIGIN__+0x50>
  178.  15c:   2f 77           andi    r18, 0x7F   ; 127
  179.         case  TIMER2B:  cbi(TCCR2A, COM2B1);    break;
  180.  15e:   20 93 b0 00     sts 0x00B0, r18 ; 0x8000b0 <__DATA_REGION_ORIGIN__+0x50>
  181.  162:   d2 cf           rjmp    .-92        ; 0x108 <digitalWrite.constprop.0+0x28>
  182.  164:   20 91 b0 00     lds r18, 0x00B0 ; 0x8000b0 <__DATA_REGION_ORIGIN__+0x50>
  183.  168:   2f 7d           andi    r18, 0xDF   ; 223
  184.  16a:   f9 cf           rjmp    .-14        ; 0x15e <digitalWrite.constprop.0+0x7e>
  185.         *out |= bit;
  186.  16c:   9e 2b           or  r25, r30
  187.  16e:   da cf           rjmp    .-76        ; 0x124 <digitalWrite.constprop.0+0x44>
  188.  
  189. 00000170 <micros>:
  190.     return m;
  191. }
  192.  
  193. unsigned long micros() {
  194.     unsigned long m;
  195.     uint8_t oldSREG = SREG, t;
  196.  170:   3f b7           in  r19, 0x3f   ; 63
  197.    
  198.     cli();
  199.  172:   f8 94           cli
  200.     m = timer0_overflow_count;
  201.  174:   80 91 05 01     lds r24, 0x0105 ; 0x800105 <timer0_overflow_count>
  202.  178:   90 91 06 01     lds r25, 0x0106 ; 0x800106 <timer0_overflow_count+0x1>
  203.  17c:   a0 91 07 01     lds r26, 0x0107 ; 0x800107 <timer0_overflow_count+0x2>
  204.  180:   b0 91 08 01     lds r27, 0x0108 ; 0x800108 <timer0_overflow_count+0x3>
  205. #if defined(TCNT0)
  206.     t = TCNT0;
  207.  184:   26 b5           in  r18, 0x26   ; 38
  208. #else
  209.     #error TIMER 0 not defined
  210. #endif
  211.  
  212. #ifdef TIFR0
  213.     if ((TIFR0 & _BV(TOV0)) && (t < 255))
  214.  186:   a8 9b           sbis    0x15, 0 ; 21
  215.  188:   05 c0           rjmp    .+10        ; 0x194 <micros+0x24>
  216.  18a:   2f 3f           cpi r18, 0xFF   ; 255
  217.  18c:   19 f0           breq    .+6         ; 0x194 <micros+0x24>
  218.         m++;
  219.  18e:   01 96           adiw    r24, 0x01   ; 1
  220.  190:   a1 1d           adc r26, r1
  221.  192:   b1 1d           adc r27, r1
  222. #else
  223.     if ((TIFR & _BV(TOV0)) && (t < 255))
  224.         m++;
  225. #endif
  226.  
  227.     SREG = oldSREG;
  228.  194:   3f bf           out 0x3f, r19   ; 63
  229.    
  230.     return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
  231.  196:   ba 2f           mov r27, r26
  232.  198:   a9 2f           mov r26, r25
  233.  19a:   98 2f           mov r25, r24
  234.  19c:   88 27           eor r24, r24
  235.  19e:   bc 01           movw    r22, r24
  236.  1a0:   cd 01           movw    r24, r26
  237.  1a2:   62 0f           add r22, r18
  238.  1a4:   71 1d           adc r23, r1
  239.  1a6:   81 1d           adc r24, r1
  240.  1a8:   91 1d           adc r25, r1
  241.  1aa:   42 e0           ldi r20, 0x02   ; 2
  242.  1ac:   66 0f           add r22, r22
  243.  1ae:   77 1f           adc r23, r23
  244.  1b0:   88 1f           adc r24, r24
  245.  1b2:   99 1f           adc r25, r25
  246.  1b4:   4a 95           dec r20
  247.  1b6:   d1 f7           brne    .-12        ; 0x1ac <micros+0x3c>
  248. }
  249.  1b8:   08 95           ret
  250.  
  251. 000001ba <delay.constprop.1>:
  252.  
  253. void delay(unsigned long ms)
  254.  1ba:   8f 92           push    r8
  255.  1bc:   9f 92           push    r9
  256.  1be:   af 92           push    r10
  257.  1c0:   bf 92           push    r11
  258.  1c2:   cf 92           push    r12
  259.  1c4:   df 92           push    r13
  260.  1c6:   ef 92           push    r14
  261.  1c8:   ff 92           push    r15
  262. {
  263.     uint32_t start = micros();
  264.  1ca:   0e 94 b8 00     call    0x170   ; 0x170 <micros>
  265.  1ce:   4b 01           movw    r8, r22
  266.  1d0:   5c 01           movw    r10, r24
  267.  1d2:   88 ee           ldi r24, 0xE8   ; 232
  268.  1d4:   c8 2e           mov r12, r24
  269.  1d6:   83 e0           ldi r24, 0x03   ; 3
  270.  1d8:   d8 2e           mov r13, r24
  271.  1da:   e1 2c           mov r14, r1
  272.  1dc:   f1 2c           mov r15, r1
  273.  
  274.     while (ms > 0) {
  275.         yield();
  276.         while ( ms > 0 && (micros() - start) >= 1000) {
  277.  1de:   0e 94 b8 00     call    0x170   ; 0x170 <micros>
  278.  1e2:   68 19           sub r22, r8
  279.  1e4:   79 09           sbc r23, r9
  280.  1e6:   8a 09           sbc r24, r10
  281.  1e8:   9b 09           sbc r25, r11
  282.  1ea:   68 3e           cpi r22, 0xE8   ; 232
  283.  1ec:   73 40           sbci    r23, 0x03   ; 3
  284.  1ee:   81 05           cpc r24, r1
  285.  1f0:   91 05           cpc r25, r1
  286.  1f2:   a8 f3           brcs    .-22        ; 0x1de <delay.constprop.1+0x24>
  287.             ms--;
  288.  1f4:   21 e0           ldi r18, 0x01   ; 1
  289.  1f6:   c2 1a           sub r12, r18
  290.  1f8:   d1 08           sbc r13, r1
  291.  1fa:   e1 08           sbc r14, r1
  292.  1fc:   f1 08           sbc r15, r1
  293.             start += 1000;
  294.  1fe:   88 ee           ldi r24, 0xE8   ; 232
  295.  200:   88 0e           add r8, r24
  296.  202:   83 e0           ldi r24, 0x03   ; 3
  297.  204:   98 1e           adc r9, r24
  298.  206:   a1 1c           adc r10, r1
  299.  208:   b1 1c           adc r11, r1
  300.         while ( ms > 0 && (micros() - start) >= 1000) {
  301.  20a:   c1 14           cp  r12, r1
  302.  20c:   d1 04           cpc r13, r1
  303.  20e:   e1 04           cpc r14, r1
  304.  210:   f1 04           cpc r15, r1
  305.  212:   29 f7           brne    .-54        ; 0x1de <delay.constprop.1+0x24>
  306.         }
  307.     }
  308. }
  309.  214:   ff 90           pop r15
  310.  216:   ef 90           pop r14
  311.  218:   df 90           pop r13
  312.  21a:   cf 90           pop r12
  313.  21c:   bf 90           pop r11
  314.  21e:   af 90           pop r10
  315.  220:   9f 90           pop r9
  316.  222:   8f 90           pop r8
  317.  224:   08 95           ret
  318.  
  319. 00000226 <__vector_16>:
  320. {
  321.  226:   1f 92           push    r1
  322.  228:   0f 92           push    r0
  323.  22a:   0f b6           in  r0, 0x3f    ; 63
  324.  22c:   0f 92           push    r0
  325.  22e:   11 24           eor r1, r1
  326.  230:   2f 93           push    r18
  327.  232:   3f 93           push    r19
  328.  234:   8f 93           push    r24
  329.  236:   9f 93           push    r25
  330.  238:   af 93           push    r26
  331.  23a:   bf 93           push    r27
  332.     unsigned long m = timer0_millis;
  333.  23c:   80 91 01 01     lds r24, 0x0101 ; 0x800101 <timer0_millis>
  334.  240:   90 91 02 01     lds r25, 0x0102 ; 0x800102 <timer0_millis+0x1>
  335.  244:   a0 91 03 01     lds r26, 0x0103 ; 0x800103 <timer0_millis+0x2>
  336.  248:   b0 91 04 01     lds r27, 0x0104 ; 0x800104 <timer0_millis+0x3>
  337.     unsigned char f = timer0_fract;
  338.  24c:   30 91 00 01     lds r19, 0x0100 ; 0x800100 <timer0_fract>
  339.     f += FRACT_INC;
  340.  250:   23 e0           ldi r18, 0x03   ; 3
  341.  252:   23 0f           add r18, r19
  342.     if (f >= FRACT_MAX) {
  343.  254:   2d 37           cpi r18, 0x7D   ; 125
  344.  256:   58 f5           brcc    .+86        ; 0x2ae <__vector_16+0x88>
  345.     m += MILLIS_INC;
  346.  258:   01 96           adiw    r24, 0x01   ; 1
  347.  25a:   a1 1d           adc r26, r1
  348.  25c:   b1 1d           adc r27, r1
  349.     timer0_fract = f;
  350.  25e:   20 93 00 01     sts 0x0100, r18 ; 0x800100 <timer0_fract>
  351.     timer0_millis = m;
  352.  262:   80 93 01 01     sts 0x0101, r24 ; 0x800101 <timer0_millis>
  353.  266:   90 93 02 01     sts 0x0102, r25 ; 0x800102 <timer0_millis+0x1>
  354.  26a:   a0 93 03 01     sts 0x0103, r26 ; 0x800103 <timer0_millis+0x2>
  355.  26e:   b0 93 04 01     sts 0x0104, r27 ; 0x800104 <timer0_millis+0x3>
  356.     timer0_overflow_count++;
  357.  272:   80 91 05 01     lds r24, 0x0105 ; 0x800105 <timer0_overflow_count>
  358.  276:   90 91 06 01     lds r25, 0x0106 ; 0x800106 <timer0_overflow_count+0x1>
  359.  27a:   a0 91 07 01     lds r26, 0x0107 ; 0x800107 <timer0_overflow_count+0x2>
  360.  27e:   b0 91 08 01     lds r27, 0x0108 ; 0x800108 <timer0_overflow_count+0x3>
  361.  282:   01 96           adiw    r24, 0x01   ; 1
  362.  284:   a1 1d           adc r26, r1
  363.  286:   b1 1d           adc r27, r1
  364.  288:   80 93 05 01     sts 0x0105, r24 ; 0x800105 <timer0_overflow_count>
  365.  28c:   90 93 06 01     sts 0x0106, r25 ; 0x800106 <timer0_overflow_count+0x1>
  366.  290:   a0 93 07 01     sts 0x0107, r26 ; 0x800107 <timer0_overflow_count+0x2>
  367.  294:   b0 93 08 01     sts 0x0108, r27 ; 0x800108 <timer0_overflow_count+0x3>
  368. }
  369.  298:   bf 91           pop r27
  370.  29a:   af 91           pop r26
  371.  29c:   9f 91           pop r25
  372.  29e:   8f 91           pop r24
  373.  2a0:   3f 91           pop r19
  374.  2a2:   2f 91           pop r18
  375.  2a4:   0f 90           pop r0
  376.  2a6:   0f be           out 0x3f, r0    ; 63
  377.  2a8:   0f 90           pop r0
  378.  2aa:   1f 90           pop r1
  379.  2ac:   18 95           reti
  380.         f -= FRACT_MAX;
  381.  2ae:   26 e8           ldi r18, 0x86   ; 134
  382.  2b0:   23 0f           add r18, r19
  383.         m += 1;
  384.  2b2:   02 96           adiw    r24, 0x02   ; 2
  385.  2b4:   a1 1d           adc r26, r1
  386.  2b6:   b1 1d           adc r27, r1
  387.  2b8:   d2 cf           rjmp    .-92        ; 0x25e <__vector_16+0x38>
  388.  
  389. 000002ba <main>:
  390.  
  391. void init()
  392. {
  393.     // this needs to be called before setup() or some functions won't
  394.     // work there
  395.     sei();
  396.  2ba:   78 94           sei
  397.    
  398.     // on the ATmega168, timer 0 is also used for fast hardware pwm
  399.     // (using phase-correct PWM would mean that timer 0 overflowed half as often
  400.     // resulting in different millis() behavior on the ATmega8 and ATmega168)
  401. #if defined(TCCR0A) && defined(WGM01)
  402.     sbi(TCCR0A, WGM01);
  403.  2bc:   84 b5           in  r24, 0x24   ; 36
  404.  2be:   82 60           ori r24, 0x02   ; 2
  405.  2c0:   84 bd           out 0x24, r24   ; 36
  406.     sbi(TCCR0A, WGM00);
  407.  2c2:   84 b5           in  r24, 0x24   ; 36
  408.  2c4:   81 60           ori r24, 0x01   ; 1
  409.  2c6:   84 bd           out 0x24, r24   ; 36
  410.     // this combination is for the standard atmega8
  411.     sbi(TCCR0, CS01);
  412.     sbi(TCCR0, CS00);
  413. #elif defined(TCCR0B) && defined(CS01) && defined(CS00)
  414.     // this combination is for the standard 168/328/1280/2560
  415.     sbi(TCCR0B, CS01);
  416.  2c8:   85 b5           in  r24, 0x25   ; 37
  417.  2ca:   82 60           ori r24, 0x02   ; 2
  418.  2cc:   85 bd           out 0x25, r24   ; 37
  419.     sbi(TCCR0B, CS00);
  420.  2ce:   85 b5           in  r24, 0x25   ; 37
  421.  2d0:   81 60           ori r24, 0x01   ; 1
  422.  2d2:   85 bd           out 0x25, r24   ; 37
  423.  
  424.     // enable timer 0 overflow interrupt
  425. #if defined(TIMSK) && defined(TOIE0)
  426.     sbi(TIMSK, TOIE0);
  427. #elif defined(TIMSK0) && defined(TOIE0)
  428.     sbi(TIMSK0, TOIE0);
  429.  2d4:   80 91 6e 00     lds r24, 0x006E ; 0x80006e <__DATA_REGION_ORIGIN__+0xe>
  430.  2d8:   81 60           ori r24, 0x01   ; 1
  431.  2da:   80 93 6e 00     sts 0x006E, r24 ; 0x80006e <__DATA_REGION_ORIGIN__+0xe>
  432.     // this is better for motors as it ensures an even waveform
  433.     // note, however, that fast pwm mode can achieve a frequency of up
  434.     // 8 MHz (with a 16 MHz clock) at 50% duty cycle
  435.  
  436. #if defined(TCCR1B) && defined(CS11) && defined(CS10)
  437.     TCCR1B = 0;
  438.  2de:   10 92 81 00     sts 0x0081, r1  ; 0x800081 <__DATA_REGION_ORIGIN__+0x21>
  439.  
  440.     // set timer 1 prescale factor to 64
  441.     sbi(TCCR1B, CS11);
  442.  2e2:   80 91 81 00     lds r24, 0x0081 ; 0x800081 <__DATA_REGION_ORIGIN__+0x21>
  443.  2e6:   82 60           ori r24, 0x02   ; 2
  444.  2e8:   80 93 81 00     sts 0x0081, r24 ; 0x800081 <__DATA_REGION_ORIGIN__+0x21>
  445. #if F_CPU >= 8000000L
  446.     sbi(TCCR1B, CS10);
  447.  2ec:   80 91 81 00     lds r24, 0x0081 ; 0x800081 <__DATA_REGION_ORIGIN__+0x21>
  448.  2f0:   81 60           ori r24, 0x01   ; 1
  449.  2f2:   80 93 81 00     sts 0x0081, r24 ; 0x800081 <__DATA_REGION_ORIGIN__+0x21>
  450.     sbi(TCCR1, CS10);
  451. #endif
  452. #endif
  453.     // put timer 1 in 8-bit phase correct pwm mode
  454. #if defined(TCCR1A) && defined(WGM10)
  455.     sbi(TCCR1A, WGM10);
  456.  2f6:   80 91 80 00     lds r24, 0x0080 ; 0x800080 <__DATA_REGION_ORIGIN__+0x20>
  457.  2fa:   81 60           ori r24, 0x01   ; 1
  458.  2fc:   80 93 80 00     sts 0x0080, r24 ; 0x800080 <__DATA_REGION_ORIGIN__+0x20>
  459.  
  460.     // set timer 2 prescale factor to 64
  461. #if defined(TCCR2) && defined(CS22)
  462.     sbi(TCCR2, CS22);
  463. #elif defined(TCCR2B) && defined(CS22)
  464.     sbi(TCCR2B, CS22);
  465.  300:   80 91 b1 00     lds r24, 0x00B1 ; 0x8000b1 <__DATA_REGION_ORIGIN__+0x51>
  466.  304:   84 60           ori r24, 0x04   ; 4
  467.  306:   80 93 b1 00     sts 0x00B1, r24 ; 0x8000b1 <__DATA_REGION_ORIGIN__+0x51>
  468.  
  469.     // configure timer 2 for phase correct pwm (8-bit)
  470. #if defined(TCCR2) && defined(WGM20)
  471.     sbi(TCCR2, WGM20);
  472. #elif defined(TCCR2A) && defined(WGM20)
  473.     sbi(TCCR2A, WGM20);
  474.  30a:   80 91 b0 00     lds r24, 0x00B0 ; 0x8000b0 <__DATA_REGION_ORIGIN__+0x50>
  475.  30e:   81 60           ori r24, 0x01   ; 1
  476.  310:   80 93 b0 00     sts 0x00B0, r24 ; 0x8000b0 <__DATA_REGION_ORIGIN__+0x50>
  477. #endif
  478.  
  479. #if defined(ADCSRA)
  480.     // set a2d prescaler so we are inside the desired 50-200 KHz range.
  481.     #if F_CPU >= 16000000 // 16 MHz / 128 = 125 KHz
  482.         sbi(ADCSRA, ADPS2);
  483.  314:   80 91 7a 00     lds r24, 0x007A ; 0x80007a <__DATA_REGION_ORIGIN__+0x1a>
  484.  318:   84 60           ori r24, 0x04   ; 4
  485.  31a:   80 93 7a 00     sts 0x007A, r24 ; 0x80007a <__DATA_REGION_ORIGIN__+0x1a>
  486.         sbi(ADCSRA, ADPS1);
  487.  31e:   80 91 7a 00     lds r24, 0x007A ; 0x80007a <__DATA_REGION_ORIGIN__+0x1a>
  488.  322:   82 60           ori r24, 0x02   ; 2
  489.  324:   80 93 7a 00     sts 0x007A, r24 ; 0x80007a <__DATA_REGION_ORIGIN__+0x1a>
  490.         sbi(ADCSRA, ADPS0);
  491.  328:   80 91 7a 00     lds r24, 0x007A ; 0x80007a <__DATA_REGION_ORIGIN__+0x1a>
  492.  32c:   81 60           ori r24, 0x01   ; 1
  493.  32e:   80 93 7a 00     sts 0x007A, r24 ; 0x80007a <__DATA_REGION_ORIGIN__+0x1a>
  494.         cbi(ADCSRA, ADPS2);
  495.         cbi(ADCSRA, ADPS1);
  496.         sbi(ADCSRA, ADPS0);
  497.     #endif
  498.     // enable a2d conversions
  499.     sbi(ADCSRA, ADEN);
  500.  332:   80 91 7a 00     lds r24, 0x007A ; 0x80007a <__DATA_REGION_ORIGIN__+0x1a>
  501.  336:   80 68           ori r24, 0x80   ; 128
  502.  338:   80 93 7a 00     sts 0x007A, r24 ; 0x80007a <__DATA_REGION_ORIGIN__+0x1a>
  503.     // here so they can be used as normal digital i/o; they will be
  504.     // reconnected in Serial.begin()
  505. #if defined(UCSRB)
  506.     UCSRB = 0;
  507. #elif defined(UCSR0B)
  508.     UCSR0B = 0;
  509.  33c:   10 92 c1 00     sts 0x00C1, r1  ; 0x8000c1 <__DATA_REGION_ORIGIN__+0x61>
  510.     uint8_t bit = digitalPinToBitMask(pin);
  511.  340:   e7 e9           ldi r30, 0x97   ; 151
  512.  342:   f0 e0           ldi r31, 0x00   ; 0
  513.  344:   24 91           lpm r18, Z
  514.     uint8_t port = digitalPinToPort(pin);
  515.  346:   e3 e8           ldi r30, 0x83   ; 131
  516.  348:   f0 e0           ldi r31, 0x00   ; 0
  517.  34a:   84 91           lpm r24, Z
  518.     if (port == NOT_A_PIN) return;
  519.  34c:   88 23           and r24, r24
  520.  34e:   99 f0           breq    .+38        ; 0x376 <main+0xbc>
  521.     reg = portModeRegister(port);
  522.  350:   90 e0           ldi r25, 0x00   ; 0
  523.  352:   88 0f           add r24, r24
  524.  354:   99 1f           adc r25, r25
  525.  356:   fc 01           movw    r30, r24
  526.  358:   e8 59           subi    r30, 0x98   ; 152
  527.  35a:   ff 4f           sbci    r31, 0xFF   ; 255
  528.  35c:   a5 91           lpm r26, Z+
  529.  35e:   b4 91           lpm r27, Z
  530.     out = portOutputRegister(port);
  531.  360:   fc 01           movw    r30, r24
  532.  362:   ee 58           subi    r30, 0x8E   ; 142
  533.  364:   ff 4f           sbci    r31, 0xFF   ; 255
  534.  366:   85 91           lpm r24, Z+
  535.  368:   94 91           lpm r25, Z
  536.         uint8_t oldSREG = SREG;
  537.  36a:   8f b7           in  r24, 0x3f   ; 63
  538.                 cli();
  539.  36c:   f8 94           cli
  540.         *reg |= bit;
  541.  36e:   ec 91           ld  r30, X
  542.  370:   e2 2b           or  r30, r18
  543.  372:   ec 93           st  X, r30
  544.         SREG = oldSREG;
  545.  374:   8f bf           out 0x3f, r24   ; 63
  546.    
  547.     setup();
  548.    
  549.     for (;;) {
  550.         loop();
  551.         if (serialEventRun) serialEventRun();
  552.  376:   c0 e0           ldi r28, 0x00   ; 0
  553.  378:   d0 e0           ldi r29, 0x00   ; 0
  554. void setup() {
  555.     pinMode(LED, OUTPUT);
  556. }
  557.  
  558. void loop() {
  559.     digitalWrite(LED, HIGH);
  560.  37a:   81 e0           ldi r24, 0x01   ; 1
  561.  37c:   0e 94 70 00     call    0xe0    ; 0xe0 <digitalWrite.constprop.0>
  562.     delay(1000);
  563.  380:   0e 94 dd 00     call    0x1ba   ; 0x1ba <delay.constprop.1>
  564.     digitalWrite(LED, LOW);
  565.  384:   80 e0           ldi r24, 0x00   ; 0
  566.  386:   0e 94 70 00     call    0xe0    ; 0xe0 <digitalWrite.constprop.0>
  567.     delay(1000);
  568.  38a:   0e 94 dd 00     call    0x1ba   ; 0x1ba <delay.constprop.1>
  569.  38e:   20 97           sbiw    r28, 0x00   ; 0
  570.  390:   a1 f3           breq    .-24        ; 0x37a <main+0xc0>
  571.  392:   0e 94 00 00     call    0   ; 0x0 <__vectors>
  572.  396:   f1 cf           rjmp    .-30        ; 0x37a <main+0xc0>
  573.  
  574. 00000398 <_exit>:
  575.  398:   f8 94           cli
  576.  
  577. 0000039a <__stop_program>:
  578.  39a:   ff cf           rjmp    .-2         ; 0x39a <__stop_program>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement