1 .file "main.c" 2 __SP_L__ = 0x3d 3 __SREG__ = 0x3f 4 __tmp_reg__ = 0 5 __zero_reg__ = 1 6 .text 7 .Ltext0: 8 .cfi_sections .debug_frame 9 .global adc_setup 11 adc_setup: 12 .LFB0: 13 .file 1 "main.c" 1:main.c **** /* ******************************************************** * 2:main.c **** * 3:main.c **** * Simple program with avr-gcc and ATtiny13 4:main.c **** * -------------------------------------------------------- * 5:main.c **** * Created on: 07.06.2016 6:main.c **** * Author: Paolo Iocco 7:main.c **** * ******************************************************** */ 8:main.c **** /* ******************************************************** * 9:main.c **** ATtiny 13/45/85 Pin map 10:main.c **** +--\/--+ 11:main.c **** /Reset ADC0 PB5 -|1° 8|- Vcc 12:main.c **** ADC3 PB3 -|2 7|- PB2 ADC1 SCK 13:main.c **** ADC2 PB4 -|3 6|- PB1 OC0B MISO AIN1 14:main.c **** GND -|4 5|- PB0 OC0A MOSI AIN0 15:main.c **** +------+ 16:main.c **** * ********************************************************* */ 17:main.c **** 18:main.c **** #include "main.h" 19:main.c **** 20:main.c **** void adc_setup (void) 21:main.c **** { 14 .loc 1 21 0 15 .cfi_startproc 16 /* prologue: function */ 17 /* frame size = 0 */ 18 /* stack size = 0 */ 19 .L__stack_usage = 0 22:main.c **** // Set the ADC input to PB2/ADC1 23:main.c **** ADMUX |= (1 << MUX0); 20 .loc 1 23 0 21 0000 389A sbi 0x7,0 24:main.c **** ADMUX |= (1 << ADLAR); 22 .loc 1 24 0 23 0002 3D9A sbi 0x7,5 25:main.c **** // Set the prescaler to clock/128 & enable ADC 26:main.c **** ADCSRA |= (1 << ADPS1) | (1 << ADPS0) | (1 << ADEN); 24 .loc 1 26 0 25 0004 86B1 in r24,0x6 26 0006 8368 ori r24,lo8(-125) 27 0008 86B9 out 0x6,r24 28 000a 0895 ret 29 .cfi_endproc 30 .LFE0: 32 .global adc_read 34 adc_read: 35 .LFB1: 27:main.c **** } 28:main.c **** 29:main.c **** int adc_read (void) 30:main.c **** { 36 .loc 1 30 0 37 .cfi_startproc 38 /* prologue: function */ 39 /* frame size = 0 */ 40 /* stack size = 0 */ 41 .L__stack_usage = 0 31:main.c **** // Start the conversion 32:main.c **** ADCSRA |= (1 << ADSC); 42 .loc 1 32 0 43 000c 369A sbi 0x6,6 44 .L3: 33:main.c **** // Wait for it to finish 34:main.c **** while (ADCSRA & (1 << ADSC)); 45 .loc 1 34 0 discriminator 1 46 000e 3699 sbic 0x6,6 47 0010 00C0 rjmp .L3 35:main.c **** return ADCH; 48 .loc 1 35 0 49 0012 85B1 in r24,0x5 36:main.c **** } 50 .loc 1 36 0 51 0014 90E0 ldi r25,0 52 0016 0895 ret 53 .cfi_endproc 54 .LFE1: 56 .global pwm_setup 58 pwm_setup: 59 .LFB2: 37:main.c **** 38:main.c **** void pwm_setup (void) 39:main.c **** { 60 .loc 1 39 0 61 .cfi_startproc 62 /* prologue: function */ 63 /* frame size = 0 */ 64 /* stack size = 0 */ 65 .L__stack_usage = 0 40:main.c **** // Set Timer 0 prescaler to clock/8. 41:main.c **** // At 9.6 MHz this is 1.2 MHz. 42:main.c **** TCCR0B |= (1 << CS01) | (1 << CS00); 66 .loc 1 42 0 67 0018 83B7 in r24,0x33 68 001a 8360 ori r24,lo8(3) 69 001c 83BF out 0x33,r24 43:main.c **** // Set to 'Fast PWM' mode 44:main.c **** TCCR0A |= (1 << WGM01) | (1 << WGM00); 70 .loc 1 44 0 71 001e 8FB5 in r24,0x2f 72 0020 8360 ori r24,lo8(3) 73 0022 8FBD out 0x2f,r24 45:main.c **** // Clear OC0B output on compare match, upwards counting. 46:main.c **** TCCR0A |= (1 << COM0B1); 74 .loc 1 46 0 75 0024 8FB5 in r24,0x2f 76 0026 8062 ori r24,lo8(32) 77 0028 8FBD out 0x2f,r24 78 002a 0895 ret 79 .cfi_endproc 80 .LFE2: 82 .global pwm_write 84 pwm_write: 85 .LFB3: 47:main.c **** } 48:main.c **** 49:main.c **** void pwm_write (int val) 50:main.c **** { 86 .loc 1 50 0 87 .cfi_startproc 88 .LVL0: 89 /* prologue: function */ 90 /* frame size = 0 */ 91 /* stack size = 0 */ 92 .L__stack_usage = 0 51:main.c **** OCR0B = val; 93 .loc 1 51 0 94 002c 89BD out 0x29,r24 95 002e 0895 ret 96 .cfi_endproc 97 .LFE3: 99 .section .text.startup,"ax",@progbits 100 .global main 102 main: 103 .LFB4: 52:main.c **** } 53:main.c **** 54:main.c **** int main (void) 55:main.c **** { 104 .loc 1 55 0 105 .cfi_startproc 106 /* prologue: function */ 107 /* frame size = 0 */ 108 /* stack size = 0 */ 109 .L__stack_usage = 0 56:main.c **** int adc_in; 57:main.c **** // LED is an output. 58:main.c **** DDRB |= (1 << LED); 110 .loc 1 58 0 111 0000 BB9A sbi 0x17,3 59:main.c **** adc_setup(); 112 .loc 1 59 0 113 0002 00D0 rcall adc_setup 114 .LVL1: 60:main.c **** pwm_setup(); 115 .loc 1 60 0 116 0004 00D0 rcall pwm_setup 117 .LVL2: 118 .L9: 61:main.c **** while (1) { 62:main.c **** // Get the ADC value 63:main.c **** adc_in = adc_read(); 119 .loc 1 63 0 discriminator 1 120 0006 00D0 rcall adc_read 121 .LVL3: 122 .LBB4: 123 .LBB5: 51:main.c **** } 124 .loc 1 51 0 discriminator 1 125 0008 89BD out 0x29,r24 126 000a 00C0 rjmp .L9 127 .LBE5: 128 .LBE4: 129 .cfi_endproc 130 .LFE4: 132 .text 133 .Letext0: 134 .file 2 "a:\\hardware\\tools\\avr\\avr\\include\\stdint.h" DEFINED SYMBOLS *ABS*:00000000 main.c C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:2 *ABS*:0000003d __SP_L__ C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:3 *ABS*:0000003f __SREG__ C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:4 *ABS*:00000000 __tmp_reg__ C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:5 *ABS*:00000001 __zero_reg__ C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:11 .text:00000000 adc_setup C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:34 .text:0000000c adc_read C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:58 .text:00000018 pwm_setup C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:84 .text:0000002c pwm_write C:\Users\q242695\AppData\Local\Temp\ccY7rbVv.s:102 .text.startup:00000000 main NO UNDEFINED SYMBOLS