GAS LISTING /tmp/cca440Fs.s page 1 1 .file "main.c" 2 __SREG__ = 0x3f 3 __SP_H__ = 0x3e 4 __SP_L__ = 0x3d 5 __CCP__ = 0x34 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 8 .global __do_copy_data 9 .global __do_clear_bss 12 .text 13 .Ltext0: 96 .data 97 .LC0: 98 0000 2564 0A00 .string "%d\n" 99 .LC1: 100 0004 2530 3278 .string "%02x " 100 2000 101 .LC2: 102 000a 0A00 .string "\n" 103 .text 105 .global main 107 main: 108 .stabd 46,0,0 0:main.c **** /* General demo program, Public Domain 2008-2010 Charles Lohr */ 1:main.c **** 2:main.c **** #include 3:main.c **** #include 4:main.c **** #include 5:main.c **** #include 6:main.c **** #include "serialprintf.h" 7:main.c **** //#include "continuousadc.h" 8:main.c **** #include "wifi.h" 9:main.c **** 10:main.c **** #define SENDER 11:main.c **** 12:main.c **** 13:main.c **** volatile unsigned char ct; 14:main.c **** 15:main.c **** unsigned char rss; 16:main.c **** int main() { 110 .LM0: 111 .LFBB1: 112 0000 2F92 push r2 113 0002 3F92 push r3 114 0004 4F92 push r4 115 0006 5F92 push r5 116 0008 6F92 push r6 117 000a 7F92 push r7 118 000c 8F92 push r8 119 000e 9F92 push r9 120 0010 BF92 push r11 121 0012 CF92 push r12 122 0014 DF92 push r13 123 0016 EF92 push r14 124 0018 FF92 push r15 125 001a 0F93 push r16 126 001c 1F93 push r17 GAS LISTING /tmp/cca440Fs.s page 2 127 001e CF93 push r28 128 0020 DF93 push r29 129 /* prologue: function */ 130 /* frame size = 0 */ 17:main.c **** int i; 18:main.c **** 19:main.c **** DDRC = 0xfc; 132 .LM1: 133 0022 8CEF ldi r24,lo8(-4) 134 0024 87B9 out 39-32,r24 20:main.c **** PORTC=0xfF; 136 .LM2: 137 0026 8FEF ldi r24,lo8(-1) 138 0028 88B9 out 40-32,r24 21:main.c **** DDRB = 0x02; 140 .LM3: 141 002a 82E0 ldi r24,lo8(2) 142 002c 84B9 out 36-32,r24 22:main.c **** DDRD = 0x02; 144 .LM4: 145 002e 8AB9 out 42-32,r24 23:main.c **** PORTD = 0x02; 147 .LM5: 148 0030 8BB9 out 43-32,r24 24:main.c **** PORTB = 0x00; 150 .LM6: 151 0032 15B8 out 37-32,__zero_reg__ 25:main.c **** SetupSerialPrintf(); 153 .LM7: 154 0034 00D0 rcall SetupSerialPrintf 26:main.c **** WIFI_Init(); 156 .LM8: 157 0036 00D0 rcall WIFI_Init 27:main.c **** // SetupADC(); 28:main.c **** sei(); 159 .LM9: 160 /* #APP */ 161 ; 29 "main.c" 1 162 0038 7894 sei 163 ; 0 "" 2 164 /* #NOAPP */ 165 .LBB99: 166 .LBB100: 168 .Ltext1: 0:wifi.h **** #ifndef _WIFI_H 1:wifi.h **** #define _WIFI_H 2:wifi.h **** 3:wifi.h **** #include 4:wifi.h **** 5:wifi.h **** #ifndef NOOP 6:wifi.h **** #define NOOP asm volatile("nop" ::) 7:wifi.h **** #endif 8:wifi.h **** 9:wifi.h **** #define WIFI_CE_PORT PORTC 10:wifi.h **** #define WIFI_CE_DDR DDRC 11:wifi.h **** #define WIFI_CE_PIN 5 12:wifi.h **** GAS LISTING /tmp/cca440Fs.s page 3 13:wifi.h **** #define WIFI_CLK_PORT PORTC 14:wifi.h **** #define WIFI_CLK_DDR DDRC 15:wifi.h **** #define WIFI_CLK_PIN 3 16:wifi.h **** 17:wifi.h **** #define WIFI_MISO_PORTI PINC 18:wifi.h **** #define WIFI_MISO_DDR DDRC 19:wifi.h **** #define WIFI_MISO_PIN 1 20:wifi.h **** 21:wifi.h **** #define WIFI_MOSI_PORT PORTC 22:wifi.h **** #define WIFI_MOSI_DDR DDRC 23:wifi.h **** #define WIFI_MOSI_PIN 2 24:wifi.h **** 25:wifi.h **** #define WIFI_CSN_PORT PORTC 26:wifi.h **** #define WIFI_CSN_DDR DDRC 27:wifi.h **** #define WIFI_CSN_PIN 4 28:wifi.h **** 29:wifi.h **** #define WIFI_IRQ_PORTI PIND 30:wifi.h **** #define WIFI_IRQ_DDR DDRD 31:wifi.h **** #define WIFI_IRQ_PIN 2 32:wifi.h **** 33:wifi.h **** #define WIFI_GLUE( x, y ) x ## y 34:wifi.h **** 35:wifi.h **** void WIFI_Init(); 36:wifi.h **** 37:wifi.h **** //Internal Functions 38:wifi.h **** inline void WIFI_CSN_LOW() { WIFI_CSN_PORT &= ~(1< 250 ) 132:main.c **** { 133:main.c **** sweep=0; 134:main.c **** //Print all registers 135:main.c **** for( d = 0; d <= 0x1D; d++ ) 136:main.c **** { 137:main.c **** _delay_ms(3); 138:main.c **** WIFI_CSN_LOW(); 139:main.c **** c = WIFI_SPI_SR( d ); 140:main.c **** c = WIFI_SPI_SR( 0x00 ); 141:main.c **** serprintf( "%02x ", c ); 142:main.c **** WIFI_CSN_HIGH(); 143:main.c **** } 144:main.c **** serprintf( "\n" ); 145:main.c **** } 146:main.c **** #endif 147:main.c **** 148:main.c **** 149:main.c **** 150:main.c **** #ifdef SENDER 151:main.c **** WIFI_CSN_LOW(); GAS LISTING /tmp/cca440Fs.s page 9 152:main.c **** c = WIFI_SPI_SR( 0xa0 ); //send w/0 ack (0xb0) or with ack (0xa0) 153:main.c **** for( d = 0; d < 30; d++ ) //25 byte payload 154:main.c **** { 155:main.c **** WIFI_SPI_S( sweep+d );//(sweep<<4) + d ); 156:main.c **** } 157:main.c **** WIFI_CSN_HIGH(); 158:main.c **** 159:main.c **** if( sweep == 200 ) sweep = 0; 160:main.c **** if( sweep == 1 ) 161:main.c **** _delay_us(8000); 162:main.c **** _delay_us(550); 163:main.c **** 164:main.c **** // WIFI_CE_HIGH(); 165:main.c **** 166:main.c **** // _delay_ms(200); 167:main.c **** 168:main.c **** 169:main.c **** // _delay_ms(500); 170:main.c **** // WIFI_CE_LOW(); 171:main.c **** // _delay_ms(400); 172:main.c **** #endif 173:main.c **** 174:main.c **** sweep++; 175:main.c **** 176:main.c **** // _delay_ms(10); 177:main.c **** 178:main.c **** 179:main.c **** do 180:main.c **** { 181:main.c **** unsigned char fifo_info = 0; 182:main.c **** WIFI_CSN_LOW(); 183:main.c **** c = WIFI_SPI_SR( 0x17 ); 184:main.c **** fifo_info = WIFI_SPI_SR( 0x00 ); 185:main.c **** WIFI_CSN_HIGH(); 186:main.c **** if( fifo_info & 1 ) 187:main.c **** break; 188:main.c **** 189:main.c **** #ifndef SENDER 190:main.c **** sweep = 0; 191:main.c **** #endif 192:main.c **** 193:main.c **** unsigned char bytes_to_read = 0; 194:main.c **** unsigned char i; 195:main.c **** WIFI_CSN_LOW(); 196:main.c **** c = WIFI_SPI_SR( 0x60 ); 197:main.c **** bytes_to_read = WIFI_SPI_SR( 0x00 ); 198:main.c **** WIFI_CSN_HIGH(); 199:main.c **** 200:main.c **** NOOP; NOOP; 201:main.c **** WIFI_CSN_LOW(); 202:main.c **** c = WIFI_SPI_SR( 0x61 ); 203:main.c **** c = WIFI_SPI_SR( 0x00 ); 204:main.c **** if( c == 1 ) 205:main.c **** { 206:main.c **** serprintf( "%d\n",ct ); 405 .LM44: 406 00a2 50E0 ldi r21,lo8(SERIALPFtempbuffer) GAS LISTING /tmp/cca440Fs.s page 10 407 00a4 C52E mov r12,r21 408 00a6 50E0 ldi r21,hi8(SERIALPFtempbuffer) 409 00a8 D52E mov r13,r21 410 00aa 40E2 ldi r20,lo8(32) 411 00ac E42E mov r14,r20 412 00ae F12C mov r15,__zero_reg__ 413 00b0 30E0 ldi r19,lo8(.LC0) 414 00b2 232E mov r2,r19 415 00b4 30E0 ldi r19,hi8(.LC0) 416 00b6 332E mov r3,r19 207:main.c **** ct=0; 208:main.c **** } 209:main.c **** #ifdef SENDER 210:main.c **** serprintf( "%02x ", c ); 418 .LM45: 419 00b8 20E0 ldi r18,lo8(.LC1) 420 00ba 822E mov r8,r18 421 00bc 20E0 ldi r18,hi8(.LC1) 422 00be 922E mov r9,r18 423 .LBB138: 424 .LBB139: 425 .LBB140: 426 .LBB141: 428 .Ltext21: 0:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz 1:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** Copyright (c) 2007 Joerg Wunsch 2:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** All rights reserved. 3:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 4:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** Redistribution and use in source and binary forms, with or without 5:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** modification, are permitted provided that the following conditions are met: 6:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 7:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** * Redistributions of source code must retain the above copyright 8:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer. 9:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 10:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** * Redistributions in binary form must reproduce the above copyright 11:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer in 12:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** the documentation and/or other materials provided with the 13:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** distribution. 14:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 15:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** * Neither the name of the copyright holders nor the names of 16:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** contributors may be used to endorse or promote products derived 17:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** from this software without specific prior written permission. 18:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 19:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** POSSIBILITY OF SUCH DAMAGE. */ 30:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 31:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1 2007/05/13 21:23:20 joerg_wunsch Exp $ */ 32:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** GAS LISTING /tmp/cca440Fs.s page 11 33:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_ 34:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1 35:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 36:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** #include 37:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 38:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** /** \file */ 39:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic : Basic busy-wait delay loops 40:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** \code 41:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** #include 42:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** \endcode 43:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 44:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** The functions in this header file implement simple delay loops 45:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** that perform a busy-waiting. They are typically used to 46:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** facilitate short delays in the program execution. They are 47:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** implemented as count-down loops with a well-known CPU cycle 48:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** count per loop iteration. As such, no other processing can 49:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** occur simultaneously. It should be kept in mind that the 50:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** functions described here do not disable interrupts. 51:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 52:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** In general, for long delays, the use of hardware timers is 53:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** much preferrable, as they free the CPU, and allow for 54:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** concurrent processing of other events while the timer is 55:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** running. However, in particular for very short delays, the 56:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** overhead of setting up a hardware timer is too much compared 57:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** to the overall delay time. 58:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 59:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** Two inline functions are provided for the actual delay algorithms. 60:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 61:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** */ 62:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 63:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__) 64:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline)); 65:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline)); 66:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** #endif 67:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 68:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic 69:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 70:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** Delay loop using an 8-bit counter \c __count, so up to 256 71:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** iterations are possible. (The value 256 would have to be passed 72:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** as 0.) The loop executes three CPU cycles per iteration, not 73:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** including the overhead the compiler needs to setup the counter 74:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** register. 75:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 76:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds 77:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** can be achieved. 78:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** */ 79:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** void 80:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count) 81:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** { 82:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** __asm__ volatile ( 83:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** "1: dec %0" "\n\t" 84:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** "brne 1b" 85:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** : "=r" (__count) 86:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** : "0" (__count) 87:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** ); 88:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** } 89:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** GAS LISTING /tmp/cca440Fs.s page 12 90:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic 91:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 92:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** Delay loop using a 16-bit counter \c __count, so up to 65536 93:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** iterations are possible. (The value 65536 would have to be 94:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** passed as 0.) The loop executes four CPU cycles per iteration, 95:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** not including the overhead the compiler requires to setup the 96:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** counter register pair. 97:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** 98:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1 99:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** milliseconds can be achieved. 100:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** */ 101:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** void 102:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** _delay_loop_2(uint16_t __count) 103:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** { 104:/usr/lib/gcc/avr/4.3.4/../../../avr/include/util/delay_basic.h **** __asm__ volatile ( 430 .LM46: 431 00c0 98E9 ldi r25,lo8(15000) 432 00c2 492E mov r4,r25 433 00c4 9AE3 ldi r25,hi8(15000) 434 00c6 592E mov r5,r25 435 .LBE141: 436 .LBE140: 437 .LBE139: 438 .LBE138: 440 .Ltext22: 211:main.c **** #endif 212:main.c **** // serprintf( "%d\n",c ); 213:main.c **** for( i = 0; i < bytes_to_read-1; i++ ) 214:main.c **** { 215:main.c **** #ifdef SENDER 216:main.c **** c = WIFI_SPI_SR( 0x00 ); 217:main.c **** _delay_ms(3); 218:main.c **** serprintf( "%02x ",c ); 219:main.c **** #else 220:main.c **** WIFI_SPI_S(); 221:main.c **** #endif 222:main.c **** } 223:main.c **** #ifdef SENDER 224:main.c **** serprintf( "\n" ); 442 .LM47: 443 00c8 80E0 ldi r24,lo8(.LC2) 444 00ca 682E mov r6,r24 445 00cc 80E0 ldi r24,hi8(.LC2) 446 00ce 782E mov r7,r24 447 .L6: 448 .LBE133: 449 .LBB158: 450 .LBB159: 452 .Ltext23: 39:wifi.h **** inline void WIFI_CSN_LOW() { WIFI_CSN_PORT &= ~(1<>=1 ) 10:wifi.c **** { 11:wifi.c **** if( in & bits ) 106 .LM2: 107 000c 892F mov r24,r25 108 000e 8523 and r24,r21 109 0010 01F0 breq .L2 12:wifi.c **** WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); 111 .LM3: 112 0012 429A sbi 40-32,2 113 0014 00C0 rjmp .L3 114 .L2: 13:wifi.c **** else 14:wifi.c **** WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN ); 116 .LM4: 117 0016 4298 cbi 40-32,2 118 .L3: 15:wifi.c **** 16:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 120 .LM5: 121 0018 439A sbi 40-32,3 17:wifi.c **** GAS LISTING /tmp/cca440Fs.s page 2 18:wifi.c **** if( WIFI_MISO_PORTI & _BV( WIFI_MISO_PIN ) ) 123 .LM6: 124 001a 3199 sbic 38-32,1 19:wifi.c **** ret |= bits; 126 .LM7: 127 001c 492B or r20,r25 128 .L4: 20:wifi.c **** 21:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 130 .LM8: 131 001e 4398 cbi 40-32,3 10:wifi.c **** for( bits = 0x80; bits; bits>>=1 ) 133 .LM9: 134 0020 9695 lsr r25 135 0022 2F5F subi r18,lo8(-(1)) 136 0024 3F4F sbci r19,hi8(-(1)) 137 0026 2830 cpi r18,8 138 0028 3105 cpc r19,__zero_reg__ 139 002a 01F4 brne .L5 22:wifi.c **** } 23:wifi.c **** return ret; 24:wifi.c **** } 141 .LM10: 142 002c 842F mov r24,r20 143 /* epilogue start */ 144 002e 0895 ret 150 .Lscope1: 152 .stabd 78,0,0 155 .global WIFI_SPI_S 157 WIFI_SPI_S: 158 .stabd 46,0,0 25:wifi.c **** 26:wifi.c **** 27:wifi.c **** void WIFI_SPI_S( unsigned char in ) 28:wifi.c **** { 160 .LM11: 161 .LFBB2: 162 /* prologue: function */ 163 /* frame size = 0 */ 29:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 165 .LM12: 166 0030 4398 cbi 40-32,3 30:wifi.c **** if( in & 128 ) WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); else WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN 168 .LM13: 169 0032 87FF sbrs r24,7 170 0034 00C0 rjmp .L9 171 0036 429A sbi 40-32,2 172 0038 00C0 rjmp .L10 173 .L9: 174 003a 4298 cbi 40-32,2 175 .L10: 31:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 177 .LM14: 178 003c 439A sbi 40-32,3 32:wifi.c **** 33:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 180 .LM15: GAS LISTING /tmp/cca440Fs.s page 3 181 003e 4398 cbi 40-32,3 34:wifi.c **** if( in & 64 ) WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); else WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN ) 183 .LM16: 184 0040 86FF sbrs r24,6 185 0042 00C0 rjmp .L11 186 0044 429A sbi 40-32,2 187 0046 00C0 rjmp .L12 188 .L11: 189 0048 4298 cbi 40-32,2 190 .L12: 35:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 192 .LM17: 193 004a 439A sbi 40-32,3 36:wifi.c **** 37:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 195 .LM18: 196 004c 4398 cbi 40-32,3 38:wifi.c **** if( in & 32 ) WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); else WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN ) 198 .LM19: 199 004e 85FF sbrs r24,5 200 0050 00C0 rjmp .L13 201 0052 429A sbi 40-32,2 202 0054 00C0 rjmp .L14 203 .L13: 204 0056 4298 cbi 40-32,2 205 .L14: 39:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 207 .LM20: 208 0058 439A sbi 40-32,3 40:wifi.c **** 41:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 210 .LM21: 211 005a 4398 cbi 40-32,3 42:wifi.c **** if( in & 16 ) WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); else WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN ) 213 .LM22: 214 005c 84FF sbrs r24,4 215 005e 00C0 rjmp .L15 216 0060 429A sbi 40-32,2 217 0062 00C0 rjmp .L16 218 .L15: 219 0064 4298 cbi 40-32,2 220 .L16: 43:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 222 .LM23: 223 0066 439A sbi 40-32,3 44:wifi.c **** 45:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 225 .LM24: 226 0068 4398 cbi 40-32,3 46:wifi.c **** if( in & 8 ) WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); else WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN ); 228 .LM25: 229 006a 83FF sbrs r24,3 230 006c 00C0 rjmp .L17 231 006e 429A sbi 40-32,2 232 0070 00C0 rjmp .L18 233 .L17: 234 0072 4298 cbi 40-32,2 GAS LISTING /tmp/cca440Fs.s page 4 235 .L18: 47:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 237 .LM26: 238 0074 439A sbi 40-32,3 48:wifi.c **** 49:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 240 .LM27: 241 0076 4398 cbi 40-32,3 50:wifi.c **** if( in & 4 ) WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); else WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN ); 243 .LM28: 244 0078 82FF sbrs r24,2 245 007a 00C0 rjmp .L19 246 007c 429A sbi 40-32,2 247 007e 00C0 rjmp .L20 248 .L19: 249 0080 4298 cbi 40-32,2 250 .L20: 51:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 252 .LM29: 253 0082 439A sbi 40-32,3 52:wifi.c **** 53:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 255 .LM30: 256 0084 4398 cbi 40-32,3 54:wifi.c **** if( in & 2 ) WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); else WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN ); 258 .LM31: 259 0086 81FF sbrs r24,1 260 0088 00C0 rjmp .L21 261 008a 429A sbi 40-32,2 262 008c 00C0 rjmp .L22 263 .L21: 264 008e 4298 cbi 40-32,2 265 .L22: 55:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 267 .LM32: 268 0090 439A sbi 40-32,3 56:wifi.c **** 57:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 270 .LM33: 271 0092 4398 cbi 40-32,3 58:wifi.c **** if( in & 1 ) WIFI_MOSI_PORT |= _BV( WIFI_MOSI_PIN ); else WIFI_MOSI_PORT &= ~_BV( WIFI_MOSI_PIN ); 273 .LM34: 274 0094 80FF sbrs r24,0 275 0096 00C0 rjmp .L23 276 0098 429A sbi 40-32,2 277 009a 00C0 rjmp .L24 278 .L23: 279 009c 4298 cbi 40-32,2 280 .L24: 59:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 282 .LM35: 283 009e 439A sbi 40-32,3 284 /* epilogue start */ 60:wifi.c **** } 286 .LM36: 287 00a0 0895 ret 289 .Lscope2: GAS LISTING /tmp/cca440Fs.s page 5 291 .stabd 78,0,0 293 .global WIFI_SPI_R 295 WIFI_SPI_R: 296 .stabd 46,0,0 61:wifi.c **** 62:wifi.c **** unsigned char WIFI_SPI_R( ) 63:wifi.c **** { 298 .LM37: 299 .LFBB3: 300 /* prologue: function */ 301 /* frame size = 0 */ 64:wifi.c **** unsigned char bits; 65:wifi.c **** unsigned char ret = 0; 66:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 303 .LM38: 304 00a2 4398 cbi 40-32,3 305 00a4 90E8 ldi r25,lo8(-128) 306 00a6 80E0 ldi r24,lo8(0) 307 00a8 20E0 ldi r18,lo8(0) 308 00aa 30E0 ldi r19,hi8(0) 309 .L28: 67:wifi.c **** 68:wifi.c **** for( bits = 0x80; bits; bits>>=1 ) 69:wifi.c **** { 70:wifi.c **** WIFI_CLK_PORT |= _BV( WIFI_CLK_PIN ); 311 .LM39: 312 00ac 439A sbi 40-32,3 71:wifi.c **** 72:wifi.c **** if( WIFI_MISO_PORTI & _BV( WIFI_MISO_PIN ) ) 314 .LM40: 315 00ae 3199 sbic 38-32,1 73:wifi.c **** ret |= bits; 317 .LM41: 318 00b0 892B or r24,r25 319 .L27: 74:wifi.c **** 75:wifi.c **** WIFI_CLK_PORT &= ~_BV( WIFI_CLK_PIN ); 321 .LM42: 322 00b2 4398 cbi 40-32,3 69:wifi.c **** for( bits = 0x80; bits; bits>>=1 ) 324 .LM43: 325 00b4 9695 lsr r25 326 00b6 2F5F subi r18,lo8(-(1)) 327 00b8 3F4F sbci r19,hi8(-(1)) 328 00ba 2830 cpi r18,8 329 00bc 3105 cpc r19,__zero_reg__ 330 00be 01F4 brne .L28 331 /* epilogue start */ 76:wifi.c **** } 77:wifi.c **** return ret; 78:wifi.c **** } 333 .LM44: 334 00c0 0895 ret 340 .Lscope3: 342 .stabd 78,0,0 343 .data 344 .LC0: GAS LISTING /tmp/cca440Fs.s page 6 345 0000 5354 3A20 .string "ST: %02X %02X\n" 345 2530 3258 345 2025 3032 345 580A 00 346 .LC1: 347 000f 5354 3A20 .string "ST: %02X %02X %02X %02x\n" 347 2530 3258 347 2025 3032 347 5820 2530 347 3258 2025 348 .text 350 .global WIFI_Init 352 WIFI_Init: 353 .stabd 46,0,0 79:wifi.c **** 80:wifi.c **** 81:wifi.c **** void WIFI_Init() 82:wifi.c **** { 355 .LM45: 356 .LFBB4: 357 00c2 BF92 push r11 358 00c4 CF92 push r12 359 00c6 DF92 push r13 360 00c8 EF92 push r14 361 00ca FF92 push r15 362 00cc 0F93 push r16 363 00ce 1F93 push r17 364 /* prologue: function */ 365 /* frame size = 0 */ 366 .LBB14: 367 .LBB15: 369 .Ltext1: 0:wifi.h **** #ifndef _WIFI_H 1:wifi.h **** #define _WIFI_H 2:wifi.h **** 3:wifi.h **** #include 4:wifi.h **** 5:wifi.h **** #ifndef NOOP 6:wifi.h **** #define NOOP asm volatile("nop" ::) 7:wifi.h **** #endif 8:wifi.h **** 9:wifi.h **** #define WIFI_CE_PORT PORTC 10:wifi.h **** #define WIFI_CE_DDR DDRC 11:wifi.h **** #define WIFI_CE_PIN 5 12:wifi.h **** 13:wifi.h **** #define WIFI_CLK_PORT PORTC 14:wifi.h **** #define WIFI_CLK_DDR DDRC 15:wifi.h **** #define WIFI_CLK_PIN 3 16:wifi.h **** 17:wifi.h **** #define WIFI_MISO_PORTI PINC 18:wifi.h **** #define WIFI_MISO_DDR DDRC 19:wifi.h **** #define WIFI_MISO_PIN 1 20:wifi.h **** 21:wifi.h **** #define WIFI_MOSI_PORT PORTC 22:wifi.h **** #define WIFI_MOSI_DDR DDRC 23:wifi.h **** #define WIFI_MOSI_PIN 2 24:wifi.h **** GAS LISTING /tmp/cca440Fs.s page 7 25:wifi.h **** #define WIFI_CSN_PORT PORTC 26:wifi.h **** #define WIFI_CSN_DDR DDRC 27:wifi.h **** #define WIFI_CSN_PIN 4 28:wifi.h **** 29:wifi.h **** #define WIFI_IRQ_PORTI PIND 30:wifi.h **** #define WIFI_IRQ_DDR DDRD 31:wifi.h **** #define WIFI_IRQ_PIN 2 32:wifi.h **** 33:wifi.h **** #define WIFI_GLUE( x, y ) x ## y 34:wifi.h **** 35:wifi.h **** void WIFI_Init(); 36:wifi.h **** 37:wifi.h **** //Internal Functions 38:wifi.h **** inline void WIFI_CSN_LOW() { WIFI_CSN_PORT &= ~(1< 2:serialprintf.c **** #include 3:serialprintf.c **** #include 4:serialprintf.c **** 5:serialprintf.c **** 6:serialprintf.c **** unsigned char SERIALPFbufferwrite = 0; 7:serialprintf.c **** unsigned char SERIALPFbufferread = 0; 8:serialprintf.c **** unsigned char SERIALPFbuffer[SERIALPF_OVERALL_BUFFER_SIZE]; 9:serialprintf.c **** unsigned char SERIALPFtempbuffer[SERIALPF_TEMP_BUFFER_SIZE]; 10:serialprintf.c **** 11:serialprintf.c **** #define DEFAULT_BAUD 9600 12:serialprintf.c **** 13:serialprintf.c **** void SetupSerialPrintf() 14:serialprintf.c **** { 87 .LM0: 88 .LFBB1: 89 /* prologue: function */ 90 /* frame size = 0 */ 15:serialprintf.c **** UBRR0H = (((F_CPU/16)/DEFAULT_BAUD-1)>>8); // The high byte, UBRR0H 92 .LM1: 93 0000 1092 C500 sts 197,__zero_reg__ 16:serialprintf.c **** UBRR0L = ((F_CPU/16)/DEFAULT_BAUD-1); // The low byte, UBRR0L 95 .LM2: 96 0004 81E8 ldi r24,lo8(-127) 97 0006 8093 C400 sts 196,r24 17:serialprintf.c **** UCSR0B = (1<= SERIALPF_OVERALL_BUFFER_SIZE ) 33:serialprintf.c **** target = 0; 34:serialprintf.c **** if( target != SERIALPFbufferread ) 35:serialprintf.c **** { 36:serialprintf.c **** SERIALPFbufferwrite = target; 37:serialprintf.c **** SERIALPFbuffer[SERIALPFbufferwrite] = u; 38:serialprintf.c **** } 39:serialprintf.c **** } 40:serialprintf.c **** 41:serialprintf.c **** //DO NOT PUSH 0! 42:serialprintf.c **** void SERIALPFPushCH( unsigned char c ) 43:serialprintf.c **** { 44:serialprintf.c **** while ( !( UCSR0A & (1<= SERIALPF_OVERALL_BUFFER_SIZE ) 196 .LM16: 197 0056 E034 cpi r30,lo8(64) 198 0058 00F0 brlo .L10 199 005a E0E0 ldi r30,lo8(0) 200 .L10: 35:serialprintf.c **** if( target != SERIALPFbufferread ) 202 .LM17: 203 005c 8091 0000 lds r24,SERIALPFbufferread 204 0060 E817 cp r30,r24 205 0062 01F0 breq .L12 37:serialprintf.c **** SERIALPFbufferwrite = target; 207 .LM18: 208 0064 E093 0000 sts SERIALPFbufferwrite,r30 38:serialprintf.c **** SERIALPFbuffer[SERIALPFbufferwrite] = u; 210 .LM19: 211 0068 F0E0 ldi r31,lo8(0) 212 006a E050 subi r30,lo8(-(SERIALPFbuffer)) 213 006c F040 sbci r31,hi8(-(SERIALPFbuffer)) 214 006e 9083 st Z,r25 215 .L12: 216 /* epilogue start */ 40:serialprintf.c **** } GAS LISTING /tmp/cca440Fs.s page 4 218 .LM20: 219 0070 FF91 pop r31 220 0072 EF91 pop r30 221 0074 9F91 pop r25 222 0076 8F91 pop r24 223 0078 0F90 pop r0 224 007a 0FBE out __SREG__,r0 225 007c 0F90 pop r0 226 007e 1F90 pop __zero_reg__ 227 0080 1895 reti 233 .Lscope3: 235 .stabd 78,0,0 238 .global SERIALPFPushCH 240 SERIALPFPushCH: 241 .stabd 46,0,0 44:serialprintf.c **** { 243 .LM21: 244 .LFBB4: 245 /* prologue: function */ 246 /* frame size = 0 */ 247 0082 982F mov r25,r24 248 .L14: 45:serialprintf.c **** while ( !( UCSR0A & (1<= SERIALPF_OVERALL_BUFFER_SIZE ) 290 .LM28: 291 00aa 8034 cpi r24,lo8(64) 292 00ac 00F0 brlo .L20 56:serialprintf.c **** SERIALPFbufferread = 0; 294 .LM29: 295 00ae 1092 0000 sts SERIALPFbufferread,__zero_reg__ 296 .L20: 57:serialprintf.c **** 58:serialprintf.c **** return SERIALPFbuffer[SERIALPFbufferread]; 298 .LM30: 299 00b2 E091 0000 lds r30,SERIALPFbufferread 300 00b6 F0E0 ldi r31,lo8(0) 301 00b8 E050 subi r30,lo8(-(SERIALPFbuffer)) 302 00ba F040 sbci r31,hi8(-(SERIALPFbuffer)) 303 00bc 8081 ld r24,Z 59:serialprintf.c **** } 305 .LM31: 306 00be 0895 ret 308 .Lscope5: 310 .stabd 78,0,0 311 .global SERIALPFbufferwrite 312 .global SERIALPFbufferwrite 313 .section .bss 316 SERIALPFbufferwrite: 317 0000 00 .skip 1,0 318 .global SERIALPFbufferread 319 .global SERIALPFbufferread 322 SERIALPFbufferread: 323 0001 00 .skip 1,0 324 .comm SERIALPFbuffer,64,1 325 .comm SERIALPFtempbuffer,32,1 330 .text 332 .Letext0: GAS LISTING /tmp/cca440Fs.s page 6 DEFINED SYMBOLS *ABS*:00000000 serialprintf.c /tmp/cca440Fs.s:2 *ABS*:0000003f __SREG__ /tmp/cca440Fs.s:3 *ABS*:0000003e __SP_H__ /tmp/cca440Fs.s:4 *ABS*:0000003d __SP_L__ /tmp/cca440Fs.s:5 *ABS*:00000034 __CCP__ /tmp/cca440Fs.s:6 *ABS*:00000000 __tmp_reg__ /tmp/cca440Fs.s:7 *ABS*:00000001 __zero_reg__ /tmp/cca440Fs.s:84 .text:00000000 SetupSerialPrintf /tmp/cca440Fs.s:117 .text:00000018 TackSERIALPF *COM*:00000020 SERIALPFtempbuffer /tmp/cca440Fs.s:172 .text:0000003a __vector_18 /tmp/cca440Fs.s:316 .bss:00000000 SERIALPFbufferwrite /tmp/cca440Fs.s:322 .bss:00000001 SERIALPFbufferread *COM*:00000040 SERIALPFbuffer /tmp/cca440Fs.s:240 .text:00000082 SERIALPFPushCH /tmp/cca440Fs.s:268 .text:00000092 SERIALPFGetCH UNDEFINED SYMBOLS __do_copy_data __do_clear_bss GAS LISTING /tmp/cca440Fs.s page 1 1 .file "continuousadc.c" 2 __SREG__ = 0x3f 3 __SP_H__ = 0x3e 4 __SP_L__ = 0x3d 5 __CCP__ = 0x34 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 8 .global __do_copy_data 9 .global __do_clear_bss 12 .text 13 .Ltext0: 72 .global __vector_21 74 __vector_21: 75 .stabd 46,0,0 0:continuousadc.c **** #include "continuousadc.h" 1:continuousadc.c **** #include 2:continuousadc.c **** #include 3:continuousadc.c **** #include 4:continuousadc.c **** 5:continuousadc.c **** volatile unsigned short ADCBuffer[BUFFERSIZE]; 6:continuousadc.c **** volatile unsigned char ADCSendPos = 0; 7:continuousadc.c **** 8:continuousadc.c **** ISR(ADC_vect) 9:continuousadc.c **** { 77 .LM0: 78 .LFBB1: 79 0000 1F92 push __zero_reg__ 80 0002 0F92 push r0 81 0004 0FB6 in r0,__SREG__ 82 0006 0F92 push r0 83 0008 1124 clr __zero_reg__ 84 000a 8F93 push r24 85 000c 9F93 push r25 86 000e EF93 push r30 87 0010 FF93 push r31 88 /* prologue: Signal */ 89 /* frame size = 0 */ 10:continuousadc.c **** ADCBuffer[ADCSendPos] = ADC; 91 .LM1: 92 0012 E091 0000 lds r30,ADCSendPos 93 0016 F0E0 ldi r31,lo8(0) 94 0018 8091 7800 lds r24,120 95 001c 9091 7900 lds r25,(120)+1 96 0020 EE0F lsl r30 97 0022 FF1F rol r31 98 0024 E050 subi r30,lo8(-(ADCBuffer)) 99 0026 F040 sbci r31,hi8(-(ADCBuffer)) 100 0028 9183 std Z+1,r25 101 002a 8083 st Z,r24 11:continuousadc.c **** ADCSendPos = (ADCSendPos + 1)&BUFFERMASK; 103 .LM2: 104 002c 8091 0000 lds r24,ADCSendPos 105 0030 8F5F subi r24,lo8(-(1)) 106 0032 8F77 andi r24,lo8(127) 107 0034 8093 0000 sts ADCSendPos,r24 108 /* epilogue start */ 12:continuousadc.c **** } GAS LISTING /tmp/cca440Fs.s page 2 110 .LM3: 111 0038 FF91 pop r31 112 003a EF91 pop r30 113 003c 9F91 pop r25 114 003e 8F91 pop r24 115 0040 0F90 pop r0 116 0042 0FBE out __SREG__,r0 117 0044 0F90 pop r0 118 0046 1F90 pop __zero_reg__ 119 0048 1895 reti 121 .Lscope1: 123 .stabd 78,0,0 125 .global SetupADC 127 SetupADC: 128 .stabd 46,0,0 13:continuousadc.c **** 14:continuousadc.c **** void SetupADC() 15:continuousadc.c **** { 130 .LM4: 131 .LFBB2: 132 /* prologue: function */ 133 /* frame size = 0 */ 16:continuousadc.c **** unsigned char port = 7; //ADC7 is dedicated 17:continuousadc.c **** // DDRA &= ~(0x03); //Those two pins are now input. 18:continuousadc.c **** // DIDR0 = 0x03; //Disable digital inputs on the two pins we care about. 19:continuousadc.c **** 20:continuousadc.c **** ADMUX = (1<