
main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000001c6  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  000001c6  0000025a  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000015  00800060  00800060  0000025a  2**0
                  ALLOC
  3 .noinit       00000000  00800075  00800075  0000025a  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  0000025a  2**0
                  CONTENTS
  5 .stab         00000984  00000000  00000000  0000025c  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      000007cf  00000000  00000000  00000be0  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54 <__ctors_end>
   4:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   8:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  10:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  14:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  18:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  1c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  20:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  24:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  28:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  2c:	0c 94 47 00 	jmp	0x8e <__vector_11>
  30:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  34:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  38:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  3c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  40:	0c 94 bc 00 	jmp	0x178 <__vector_16>
  44:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  48:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  4c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  50:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d8 e0       	ldi	r29, 0x08	; 8
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	e6 ec       	ldi	r30, 0xC6	; 198
  68:	f1 e0       	ldi	r31, 0x01	; 1
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a0 36       	cpi	r26, 0x60	; 96
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a0 e6       	ldi	r26, 0x60	; 96
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a5 37       	cpi	r26, 0x75	; 117
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 8d 00 	jmp	0x11a <main>

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0x0 <__heap_end>

0000008e <__vector_11>:
   REFERNENCE ASSEMBLER OUTPUT WHEN MODIFYING
               THIS PWM FUNCTION
                    gcc -O1
**********************************************************/
SIGNAL (SIG_OVERFLOW0) {
  8e:	1f 92       	push	r1
  90:	0f 92       	push	r0
  92:	0f b6       	in	r0, 0x3f	; 63
  94:	0f 92       	push	r0
  96:	11 24       	eor	r1, r1
  98:	8f 93       	push	r24
  9a:	9f 93       	push	r25
 if (++pwmcount == 0){
  9c:	80 91 73 00 	lds	r24, 0x0073
  a0:	98 2f       	mov	r25, r24
  a2:	9f 5f       	subi	r25, 0xFF	; 255
  a4:	90 93 73 00 	sts	0x0073, r25
  a8:	99 23       	and	r25, r25
  aa:	21 f4       	brne	.+8      	; 0xb4 <__vector_11+0x26>
  SetBit(PWM1BIT, PWM1PORT);
  ac:	c0 9a       	sbi	0x18, 0	; 24
  SetBit(PWM2BIT, PWM2PORT);
  ae:	c1 9a       	sbi	0x18, 1	; 24
  SetBit(PWM3BIT, PWM3PORT);
  b0:	c2 9a       	sbi	0x18, 2	; 24
  SetBit(PWM4BIT, PWM4PORT);
  b2:	c3 9a       	sbi	0x18, 3	; 24
 };

 if ((pwm1 ^ pwmcount) == 0) { ClearBit(PWM1BIT, PWM1PORT); }
  b4:	80 91 60 00 	lds	r24, 0x0060
  b8:	98 17       	cp	r25, r24
  ba:	09 f4       	brne	.+2      	; 0xbe <__vector_11+0x30>
  bc:	c0 98       	cbi	0x18, 0	; 24
 if ((pwm2 ^ pwmcount) == 0) { ClearBit(PWM2BIT, PWM2PORT); }
  be:	80 91 61 00 	lds	r24, 0x0061
  c2:	98 17       	cp	r25, r24
  c4:	09 f4       	brne	.+2      	; 0xc8 <__vector_11+0x3a>
  c6:	c1 98       	cbi	0x18, 1	; 24
 if ((pwm3 ^ pwmcount) == 0) { ClearBit(PWM3BIT, PWM3PORT); }
  c8:	80 91 74 00 	lds	r24, 0x0074
  cc:	98 17       	cp	r25, r24
  ce:	09 f4       	brne	.+2      	; 0xd2 <__vector_11+0x44>
  d0:	c2 98       	cbi	0x18, 2	; 24
 if ((pwm4 ^ pwmcount) == 0) { ClearBit(PWM4BIT, PWM4PORT); }
  d2:	80 91 72 00 	lds	r24, 0x0072
  d6:	98 17       	cp	r25, r24
  d8:	09 f4       	brne	.+2      	; 0xdc <__vector_11+0x4e>
  da:	c3 98       	cbi	0x18, 3	; 24
  dc:	9f 91       	pop	r25
  de:	8f 91       	pop	r24
  e0:	0f 90       	pop	r0
  e2:	0f be       	out	0x3f, r0	; 63
  e4:	0f 90       	pop	r0
  e6:	1f 90       	pop	r1
  e8:	18 95       	reti

000000ea <timerInit>:
 
}

void timerInit(void) {

  // set prescaler to /1
  TCCR0 = (0 << FOC0 | 0 << WGM00 |0 << COM01 |0 << COM00 |0 << WGM01 |0 << CS02 |0 << CS01 |1 << CS00);
  ea:	81 e0       	ldi	r24, 0x01	; 1
  ec:	83 bf       	out	0x33, r24	; 51
  
  // set interrupt mask register 
  TIMSK |= (1<<TOIE0);  
  ee:	89 b7       	in	r24, 0x39	; 57
  f0:	81 60       	ori	r24, 0x01	; 1
  f2:	89 bf       	out	0x39, r24	; 57
  f4:	08 95       	ret

000000f6 <AnalogInit>:

}

void AnalogInit (void) {

  int i;

  // Activate ADC with Prescaler 
  ADCSRA =  1 << ADEN  |
  f6:	8c ec       	ldi	r24, 0xCC	; 204
  f8:	86 b9       	out	0x06, r24	; 6
  fa:	80 e0       	ldi	r24, 0x00	; 0
  fc:	90 e0       	ldi	r25, 0x00	; 0
  fe:	22 e6       	ldi	r18, 0x62	; 98
 100:	30 e0       	ldi	r19, 0x00	; 0
            1 << ADSC  | /* start a converstion, irq will take from here */
            0 << ADATE |
            0 << ADIF  |
            1 << ADIE  | /* enable interrupt */
            1 << ADPS2 |
            0 << ADPS1 |
            0 << ADPS0 ;
                        
            
  for (i = 0; i < 8; AdcValues[i++] = 0);
 102:	fc 01       	movw	r30, r24
 104:	ee 0f       	add	r30, r30
 106:	ff 1f       	adc	r31, r31
 108:	e2 0f       	add	r30, r18
 10a:	f3 1f       	adc	r31, r19
 10c:	11 82       	std	Z+1, r1	; 0x01
 10e:	10 82       	st	Z, r1
 110:	01 96       	adiw	r24, 0x01	; 1
 112:	88 30       	cpi	r24, 0x08	; 8
 114:	91 05       	cpc	r25, r1
 116:	a9 f7       	brne	.-22     	; 0x102 <AnalogInit+0xc>
 118:	08 95       	ret

0000011a <main>:
 11a:	cf e5       	ldi	r28, 0x5F	; 95
 11c:	d8 e0       	ldi	r29, 0x08	; 8
 11e:	de bf       	out	0x3e, r29	; 62
 120:	cd bf       	out	0x3d, r28	; 61
 122:	1a ba       	out	0x1a, r1	; 26
 124:	8f e0       	ldi	r24, 0x0F	; 15
 126:	87 bb       	out	0x17, r24	; 23
 128:	14 ba       	out	0x14, r1	; 20
 12a:	11 ba       	out	0x11, r1	; 17
 12c:	80 e4       	ldi	r24, 0x40	; 64
 12e:	80 93 60 00 	sts	0x0060, r24
 132:	10 92 61 00 	sts	0x0061, r1
 136:	10 92 74 00 	sts	0x0074, r1
 13a:	10 92 72 00 	sts	0x0072, r1
 13e:	0e 94 7b 00 	call	0xf6 <AnalogInit>
 142:	0e 94 75 00 	call	0xea <timerInit>
 146:	78 94       	sei
 148:	80 91 62 00 	lds	r24, 0x0062
 14c:	90 91 63 00 	lds	r25, 0x0063
 150:	99 23       	and	r25, r25
 152:	0c f4       	brge	.+2      	; 0x156 <main+0x3c>
 154:	03 96       	adiw	r24, 0x03	; 3
 156:	95 95       	asr	r25
 158:	87 95       	ror	r24
 15a:	95 95       	asr	r25
 15c:	87 95       	ror	r24
 15e:	80 93 60 00 	sts	0x0060, r24
 162:	f2 cf       	rjmp	.-28     	; 0x148 <main+0x2e>

00000164 <Analog>:
  
}

int Analog (int n) {
  return AdcValues[n & 7];
 164:	fc 01       	movw	r30, r24
 166:	e7 70       	andi	r30, 0x07	; 7
 168:	f0 70       	andi	r31, 0x00	; 0
 16a:	ee 0f       	add	r30, r30
 16c:	ff 1f       	adc	r31, r31
 16e:	ee 59       	subi	r30, 0x9E	; 158
 170:	ff 4f       	sbci	r31, 0xFF	; 255
 172:	80 81       	ld	r24, Z
 174:	91 81       	ldd	r25, Z+1	; 0x01
 176:	08 95       	ret

00000178 <__vector_16>:
}

SIGNAL(SIG_ADC) {
 178:	1f 92       	push	r1
 17a:	0f 92       	push	r0
 17c:	0f b6       	in	r0, 0x3f	; 63
 17e:	0f 92       	push	r0
 180:	11 24       	eor	r1, r1
 182:	2f 93       	push	r18
 184:	3f 93       	push	r19
 186:	8f 93       	push	r24
 188:	9f 93       	push	r25
 18a:	ef 93       	push	r30
 18c:	ff 93       	push	r31
  int i;
  
  i = ADMUX & 7;       // what channel we on?
 18e:	87 b1       	in	r24, 0x07	; 7
 190:	99 27       	eor	r25, r25
 192:	87 70       	andi	r24, 0x07	; 7
 194:	90 70       	andi	r25, 0x00	; 0
  AdcValues[i] = ADC;  // save value
 196:	24 b1       	in	r18, 0x04	; 4
 198:	35 b1       	in	r19, 0x05	; 5
 19a:	fc 01       	movw	r30, r24
 19c:	ee 0f       	add	r30, r30
 19e:	ff 1f       	adc	r31, r31
 1a0:	ee 59       	subi	r30, 0x9E	; 158
 1a2:	ff 4f       	sbci	r31, 0xFF	; 255
 1a4:	31 83       	std	Z+1, r19	; 0x01
 1a6:	20 83       	st	Z, r18
  i++;                 // next value
  ADMUX = i & 7;       // select channel
 1a8:	01 96       	adiw	r24, 0x01	; 1
 1aa:	87 70       	andi	r24, 0x07	; 7
 1ac:	87 b9       	out	0x07, r24	; 7
  ADCSRA |= _BV(ADSC); // start next conversion
 1ae:	36 9a       	sbi	0x06, 6	; 6
 1b0:	ff 91       	pop	r31
 1b2:	ef 91       	pop	r30
 1b4:	9f 91       	pop	r25
 1b6:	8f 91       	pop	r24
 1b8:	3f 91       	pop	r19
 1ba:	2f 91       	pop	r18
 1bc:	0f 90       	pop	r0
 1be:	0f be       	out	0x3f, r0	; 63
 1c0:	0f 90       	pop	r0
 1c2:	1f 90       	pop	r1
 1c4:	18 95       	reti
