Subversion Repositories svnkaklik

Rev

Rev 174 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

GAS LISTING /tmp/ccAE2QZt.s                     page 1


   1                            .file   "CamInterface.c"
   2                            .arch atmega8
   3                    __SREG__ = 0x3f
   4                    __SP_H__ = 0x3e
   5                    __SP_L__ = 0x3d
   6                    __tmp_reg__ = 0
   7                    __zero_reg__ = 1
   8                            .global __do_copy_data
   9                            .global __do_clear_bss
  10                            .stabs  "/home/kaklik/projects/roboti/istrobot/2007/ATmega8/AVRcam/",100,0,2,.Ltext0
  11                            .stabs  "CamInterface.c",100,0,2,.Ltext0
  12                            .text
  13                    .Ltext0:
  14                            .stabs  "gcc2_compiled.",60,0,0,0
  15                            .stabs  "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0
  16                            .stabs  "char:t(0,2)=@s8;r(0,2);0;255;",128,0,0,0
  17                            .stabs  "long int:t(0,3)=@s32;r(0,3);020000000000;017777777777;",128,0,0,0
  18                            .stabs  "unsigned int:t(0,4)=r(0,4);0;0177777;",128,0,0,0
  19                            .stabs  "long unsigned int:t(0,5)=@s32;r(0,5);0;037777777777;",128,0,0,0
  20                            .stabs  "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,
  21                            .stabs  "long long unsigned int:t(0,7)=@s64;r(0,7);0;01777777777777777777777;",128,0,0,0
  22                            .stabs  "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0
  23                            .stabs  "short unsigned int:t(0,9)=r(0,9);0;0177777;",128,0,0,0
  24                            .stabs  "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0
  25                            .stabs  "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0
  26                            .stabs  "float:t(0,12)=r(0,1);4;0;",128,0,0,0
  27                            .stabs  "double:t(0,13)=r(0,1);4;0;",128,0,0,0
  28                            .stabs  "long double:t(0,14)=r(0,1);4;0;",128,0,0,0
  29                            .stabs  "void:t(0,15)=(0,15)",128,0,0,0
  30                            .stabs  "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/interrupt.h",130,0,0,0
  31                            .stabs  "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/io.h",130,0,0,0
  32                            .stabs  "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/sfr_defs.h",130,0,0,0
  33                            .stabs  "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/inttypes.h",130,0,0,0
  34                            .stabs  "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/stdint.h",130,0,0,0
  35                            .stabs  "int8_t:t(5,1)=(0,10)",128,0,116,0
  36                            .stabs  "uint8_t:t(5,2)=(0,11)",128,0,117,0
  37                            .stabs  "int16_t:t(5,3)=(0,1)",128,0,118,0
  38                            .stabs  "uint16_t:t(5,4)=(0,4)",128,0,119,0
  39                            .stabs  "int32_t:t(5,5)=(0,3)",128,0,120,0
  40                            .stabs  "uint32_t:t(5,6)=(0,5)",128,0,121,0
  41                            .stabs  "int64_t:t(5,7)=(0,6)",128,0,122,0
  42                            .stabs  "uint64_t:t(5,8)=(0,7)",128,0,123,0
  43                            .stabs  "intptr_t:t(5,9)=(5,3)",128,0,135,0
  44                            .stabs  "uintptr_t:t(5,10)=(5,4)",128,0,140,0
  45                            .stabs  "int_least8_t:t(5,11)=(5,1)",128,0,152,0
  46                            .stabs  "uint_least8_t:t(5,12)=(5,2)",128,0,157,0
  47                            .stabs  "int_least16_t:t(5,13)=(5,3)",128,0,162,0
  48                            .stabs  "uint_least16_t:t(5,14)=(5,4)",128,0,167,0
  49                            .stabs  "int_least32_t:t(5,15)=(5,5)",128,0,172,0
  50                            .stabs  "uint_least32_t:t(5,16)=(5,6)",128,0,177,0
  51                            .stabs  "int_least64_t:t(5,17)=(5,7)",128,0,182,0
  52                            .stabs  "uint_least64_t:t(5,18)=(5,8)",128,0,187,0
  53                            .stabs  "int_fast8_t:t(5,19)=(5,1)",128,0,200,0
  54                            .stabs  "uint_fast8_t:t(5,20)=(5,2)",128,0,205,0
  55                            .stabs  "int_fast16_t:t(5,21)=(5,3)",128,0,210,0
  56                            .stabs  "uint_fast16_t:t(5,22)=(5,4)",128,0,215,0
  57                            .stabs  "int_fast32_t:t(5,23)=(5,5)",128,0,220,0
GAS LISTING /tmp/ccAE2QZt.s                    page 2


  58                            .stabs  "uint_fast32_t:t(5,24)=(5,6)",128,0,225,0
  59                            .stabs  "int_fast64_t:t(5,25)=(5,7)",128,0,230,0
  60                            .stabs  "uint_fast64_t:t(5,26)=(5,8)",128,0,235,0
  61                            .stabs  "intmax_t:t(5,27)=(5,7)",128,0,249,0
  62                            .stabs  "uintmax_t:t(5,28)=(5,8)",128,0,254,0
  63                            .stabn  162,0,0,0
  64                            .stabs  "int_farptr_t:t(4,1)=(5,5)",128,0,76,0
  65                            .stabs  "uint_farptr_t:t(4,2)=(5,6)",128,0,80,0
  66                            .stabn  162,0,0,0
  67                            .stabn  162,0,0,0
  68                            .stabn  162,0,0,0
  69                            .stabn  162,0,0,0
  70                            .stabs  "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h",130,0,0,0
  71                            .stabs  "/usr/lib/gcc/avr/4.1.0/include/stddef.h",130,0,0,0
  72                            .stabs  "size_t:t(7,1)=(0,4)",128,0,214,0
  73                            .stabn  162,0,0,0
  74                            .stabn  162,0,0,0
  75                            .stabs  "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/stdlib.h",130,0,0,0
  76                            .stabs  "/usr/lib/gcc/avr/4.1.0/include/stddef.h",130,0,0,0
  77                            .stabs  "wchar_t:t(9,1)=(0,1)",128,0,326,0
  78                            .stabn  162,0,0,0
  79                            .stabs  "div_t:t(8,1)=(8,2)=s4quot:(0,1),0,16;rem:(0,1),16,16;;",128,0,69,0
  80                            .stabs  "ldiv_t:t(8,3)=(8,4)=s8quot:(0,3),0,32;rem:(0,3),32,32;;",128,0,75,0
  81                            .stabs  "__compar_fn_t:t(8,5)=(8,6)=*(8,7)=f(0,1)",128,0,78,0
  82                            .stabn  162,0,0,0
  83                            .stabs  "CommonDefs.h",130,0,0,0
  84                            .stabs  "bool_t:t(10,1)=(0,11)",128,0,56,0
  85                            .stabn  162,0,0,0
  86                            .stabs  "CamInt_resetCam:F(0,15)",36,0,226,CamInt_resetCam
  87                    .global CamInt_resetCam
  88                            .type   CamInt_resetCam, @function
  89                    CamInt_resetCam:
  90                            .stabd  46,0,0
   1:CamInterface.c **** /*
   2:CamInterface.c ****     Copyright (C) 2004    John Orlando
   3:CamInterface.c ****     
   4:CamInterface.c ****    AVRcam: a small real-time image processing engine.
   5:CamInterface.c **** 
   6:CamInterface.c ****     This program is free software; you can redistribute it and/or
   7:CamInterface.c ****     modify it under the terms of the GNU General Public
   8:CamInterface.c ****     License as published by the Free Software Foundation; either
   9:CamInterface.c ****     version 2 of the License, or (at your option) any later version.
  10:CamInterface.c **** 
  11:CamInterface.c ****     This program is distributed in the hope that it will be useful,
  12:CamInterface.c ****     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13:CamInterface.c ****     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14:CamInterface.c ****     General Public License for more details.
  15:CamInterface.c **** 
  16:CamInterface.c ****     You should have received a copy of the GNU General Public
  17:CamInterface.c ****     License along with this program; if not, write to the Free Software
  18:CamInterface.c ****     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19:CamInterface.c **** 
  20:CamInterface.c ****    For more information on the AVRcam, please contact:
  21:CamInterface.c **** 
  22:CamInterface.c ****    john@jrobot.net
  23:CamInterface.c **** 
  24:CamInterface.c ****    or go to www.jrobot.net for more details regarding the system.
GAS LISTING /tmp/ccAE2QZt.s                    page 3


  25:CamInterface.c **** */
  26:CamInterface.c **** /***********************************************************
  27:CamInterface.c ****        Module Name: CamInterface.c
  28:CamInterface.c ****        Module Date: 04/12/2004
  29:CamInterface.c ****        Module Auth: John Orlando
  30:CamInterface.c ****        
  31:CamInterface.c ****        Description: This file is responsible for providing an
  32:CamInterface.c ****        interface to the OV6620 camera hardware.  This includes
  33:CamInterface.c ****        an interface to CamInterface.S for certain low-level,
  34:CamInterface.c ****        optimized camera access routines.
  35:CamInterface.c ****     
  36:CamInterface.c ****     Revision History:
  37:CamInterface.c ****     Date        Rel Ver.    Notes
  38:CamInterface.c ****     4/10/2004      0.1     Module created
  39:CamInterface.c ****     6/30/2004      1.0     Initial release for Circuit Cellar
  40:CamInterface.c ****                            contest.
  41:CamInterface.c ****     11/15/2004     1.2     ifdef'd out the resetCam routine, since
  42:CamInterface.c ****                            resetting the cam now causes the OV6620's
  43:CamInterface.c ****                            clock to not be output (we have to start
  44:CamInterface.c ****                            it up after each reset with the external
  45:CamInterface.c ****                            tiny12 processor).
  46:CamInterface.c ****     1/16/2005      1.4     Ensure that the TCCR1B register is set so
  47:CamInterface.c ****                            nothing is clocking timer1 at startup.                             
  48:CamInterface.c **** ***********************************************************/
  49:CamInterface.c **** 
  50:CamInterface.c **** /*     Includes */
  51:CamInterface.c **** #include <avr/interrupt.h>
  52:CamInterface.c **** #include <avr/signal.h>
  53:CamInterface.c **** #include <avr/sleep.h>
  54:CamInterface.c **** #include <avr/eeprom.h>
  55:CamInterface.c **** #include <stdlib.h>
  56:CamInterface.c **** #include <string.h>
  57:CamInterface.c **** #include "CommonDefs.h"
  58:CamInterface.c **** #include "CamInterface.h"
  59:CamInterface.c **** #include "Utility.h"
  60:CamInterface.c **** #include "UIMgr.h"
  61:CamInterface.c **** #include "Executive.h"
  62:CamInterface.c **** #include "UartInterface.h"
  63:CamInterface.c **** 
  64:CamInterface.c **** /*  Local Variables */
  65:CamInterface.c **** 
  66:CamInterface.c **** /*     Local Structures and Typedefs */
  67:CamInterface.c **** 
  68:CamInterface.c **** /*  Definitions */
  69:CamInterface.c **** //#define OUTPUT_INITIAL_COLOR_MAP 1
  70:CamInterface.c **** 
  71:CamInterface.c **** #define FAST_ACQUIRE 1
  72:CamInterface.c **** #define CAM_G_BUS              PINB
  73:CamInterface.c **** #define CAM_G_BUS_DIR          DDRB
  74:CamInterface.c **** #define CAM_RB_BUS          PINC
  75:CamInterface.c **** #define CAM_RB_BUS_DIR                 DDRC
  76:CamInterface.c **** 
  77:CamInterface.c **** #define CAM_CONTROL_PORT     PORTD
  78:CamInterface.c **** #define CAM_CONTROL_PORT_DIR DDRD
  79:CamInterface.c **** #define CAM_RESET_LINE       BIT7
  80:CamInterface.c **** #define CAM_PIXEL_CLK_COUNT  BIT5
  81:CamInterface.c **** #define CAM_HREF             BIT4
GAS LISTING /tmp/ccAE2QZt.s                    page 4


  82:CamInterface.c **** #define CAM_PIXEL_CLK_INT    BIT3
  83:CamInterface.c **** #define CAM_VSYNC            BIT2
  84:CamInterface.c **** 
  85:CamInterface.c **** /*  Global Variables */
  86:CamInterface.c **** /* NOTE: This file MUST appear first in the Makefile for these variables to
  87:CamInterface.c **** be placed properly in RAM */
  88:CamInterface.c **** 
  89:CamInterface.c **** /* The colorMap[] table provides the membership lookup table to convert 
  90:CamInterface.c **** RGB or YUV pixel values into actual colors.  The membership table contains
  91:CamInterface.c **** 16 elements for each color channel, concatenated together.  The Red (or Y)
  92:CamInterface.c **** value is located in the first 16 bytes, the G (or U) value is located in
  93:CamInterface.c **** the second 16 bytes, and the B (or V) value is located in the last 16 bytes:
  94:CamInterface.c **** 
  95:CamInterface.c ****     ----------------------------------------------------------------------------------
  96:CamInterface.c ****     |red0|red1|red2|...|red15|green0|green1|green2|...|green15|blue0|blue1|...|blue15|
  97:CamInterface.c **** mem:|0x00 0x01 0x02     0x15   0x16   0x17   0x18       0x31   0x32  0x33       0x47 |
  98:CamInterface.c ****     ---------------------------------------------------------------------------------
  99:CamInterface.c **** Thus, the red lookup is accessed at colorMap+0, the green lookup is accessed 
 100:CamInterface.c **** at colorMap+16, and the blue lookup is accessed at colorMap+32.  */    
 101:CamInterface.c **** unsigned char colorMap[NUM_ELEMENTS_IN_COLOR_MAP] __attribute__ ((section (".noinit")));
 102:CamInterface.c **** 
 103:CamInterface.c **** /*  Extern Variables */
 104:CamInterface.c **** /* These two buffers hold the current and previous lines
 105:CamInterface.c **** of pixel data.  They are sized to the worst case scenario,
 106:CamInterface.c **** where the color changes between every pixel (unrealistic).
 107:CamInterface.c **** The format of each buffer is for all the even bytes to hold
 108:CamInterface.c **** the run-length, and the odd bytes to hold the color data. */
 109:CamInterface.c **** 
 110:CamInterface.c **** /* In addition, if we are in frameDump mode, we use these buffers
 111:CamInterface.c **** to store the acquired line data...we are actually grabbing ALL of the
 112:CamInterface.c **** pixels in a line (176) instead of the 88 we get normally during tracking.
 113:CamInterface.c **** But since we have enough to hold 88-RLE blocks, we already have the 176
 114:CamInterface.c **** allocated for this... */
 115:CamInterface.c **** unsigned char currentLineBuffer[LENGTH_OF_LINE_BUFFER];
 116:CamInterface.c **** unsigned char previousLineBuffer[LENGTH_OF_LINE_BUFFER];
 117:CamInterface.c **** 
 118:CamInterface.c **** /*  Extern Functions */
 119:CamInterface.c **** /* These functions are located in assembly files, and thus
 120:CamInterface.c **** must be externed here so they can be referenced in the source below. */
 121:CamInterface.c **** extern void CamIntAsm_waitForNewTrackingFrame(unsigned char *pBuffer, unsigned char *pMemLookup);
 122:CamInterface.c **** extern void CamIntAsm_waitForNewDumpFrame(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);
 123:CamInterface.c **** extern void CamIntAsm_acquireTrackingLine(unsigned char *pBuffer, unsigned char *pMemLookup);
 124:CamInterface.c **** extern void CamIntAsm_acquireDumpLine(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);
 125:CamInterface.c **** 
 126:CamInterface.c **** /***********************************************************
 127:CamInterface.c ****        Function Name: CamInt_init
 128:CamInterface.c ****        Function Description: This function is responsible
 129:CamInterface.c ****        for initializing the camera interface.  This includes
 130:CamInterface.c ****        setting up the i/o ports that are used to read the
 131:CamInterface.c ****        camera busses, as well as resetting the camera.
 132:CamInterface.c ****        Inputs:  none
 133:CamInterface.c ****        Outputs: none
 134:CamInterface.c **** ***********************************************************/   
 135:CamInterface.c **** void CamInt_init(void)
 136:CamInterface.c **** {
 137:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP
 138:CamInterface.c ****        unsigned char asciiBuffer[5];
GAS LISTING /tmp/ccAE2QZt.s                    page 5


 139:CamInterface.c ****     unsigned char i;
 140:CamInterface.c **** #endif    
 141:CamInterface.c ****     
 142:CamInterface.c ****        /* set up the mega8 ports that will be interfacing
 143:CamInterface.c ****        with the camera */      
 144:CamInterface.c ****        CAM_CONTROL_PORT_DIR |= (1<<CAM_RESET_LINE); /* cam reset is output */
 145:CamInterface.c ****        CAM_CONTROL_PORT_DIR |= 0x80;   /* set just the MSB as an output */
 146:CamInterface.c ****        CAM_CONTROL_PORT_DIR &= 0xFB;   /* make sure bit2 is clear (input) */
 147:CamInterface.c ****        CAM_CONTROL_PORT &= 0x7F;   /* set reset line low */
 148:CamInterface.c ****        CAM_G_BUS_DIR &= 0xF0;  /* 4-bit G bus all inputs */
 149:CamInterface.c ****     CAM_G_BUS_DIR |= 0xF0;  /* disable the pull-up on PB4 and PB5 */
 150:CamInterface.c ****        CAM_RB_BUS_DIR &= 0xF0;  /* 4-bit RB bus all inputs */
 151:CamInterface.c ****        
 152:CamInterface.c ****     /* ensure that timer1 is disabled to start...eventually, when PCLK needs
 153:CamInterface.c ****     to feed timer1 through the external counter, it will be enabled on an
 154:CamInterface.c ****     "as needed" basis...*/
 155:CamInterface.c ****        TCCR1B &= ~( (1<<CS12)|(1<<CS11)|(1<<CS10) );
 156:CamInterface.c ****        
 157:CamInterface.c ****        /* we'll turn on the interrupt after we assign the initial TCNT value */
 158:CamInterface.c ****        
 159:CamInterface.c ****        /* set up External Interrupt1 to interrupt us on rising edges (HREF)...
 160:CamInterface.c ****        this is needed to indicate when the first pixel of each line is about to start, so
 161:CamInterface.c ****        we can synch up with it...this interrupt will be disabled once HREF goes high */
 162:CamInterface.c ****        
 163:CamInterface.c ****        MCUCR |= (1<<ISC11) | (1<<ISC10);  /* rising edge interrupt */
 164:CamInterface.c ****        /* the interrupt will be enabled when we are ready to detect the rising edge of
 165:CamInterface.c ****        HREF...its now primed and ready to go */
 166:CamInterface.c ****        
 167:CamInterface.c ****        /* set up External Interrupt0 to interrupt us on rising edges (VSYNC) */
 168:CamInterface.c ****        MCUCR |= (1<<ISC01) | (1<<ISC00);       /* rising edge interrupt */ 
 169:CamInterface.c ****        GICR  |= (1<<INT0);    /* interrupt request enabled */
 170:CamInterface.c ****        
 171:CamInterface.c ****        /* set up TimerO to count and be clocked from an external pulse source
 172:CamInterface.c ****        (HREF) on falling edges...eventually, we need to enable the interrupt
 173:CamInterface.c ****        for this!  FIX THIS */
 174:CamInterface.c ****        TCCR0 = (1<<CS02)|(1<<CS01)|(0<<CS00);
 175:CamInterface.c ****        
 176:CamInterface.c ****        /* setting up the PCLK counter with Timer1 will be done right after
 177:CamInterface.c ****        we start receiving pixels in each line...we sacrifice the first pixel
 178:CamInterface.c ****        in each line, but we'll account for it...*/
 179:CamInterface.c ****        
 180:CamInterface.c ****        /* set up the mega8 so that its sleep mode puts it in an IDLE sleep
 181:CamInterface.c ****        mode, where it can wake up as fast as possible */
 182:CamInterface.c ****        set_sleep_mode(SLEEP_MODE_IDLE);
 183:CamInterface.c ****        /* umm....we need to actually enable the sleep mode...*/
 184:CamInterface.c ****        MCUCR |= 0x80;
 185:CamInterface.c ****        
 186:CamInterface.c ****        /* initialize the memLookup table */
 187:CamInterface.c ****        memset(colorMap,0x00,NUM_ELEMENTS_IN_COLOR_MAP);   
 188:CamInterface.c ****        
 189:CamInterface.c ****        /* read the color map out of EEPROM */
 190:CamInterface.c ****        eeprom_read_block(colorMap, (unsigned char*)0x01,NUM_ELEMENTS_IN_COLOR_MAP);
 191:CamInterface.c **** 
 192:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP    
 193:CamInterface.c ****     UIMgr_txBuffer("\r\n",2);
 194:CamInterface.c ****     for (i=0; i<NUM_ELEMENTS_IN_COLOR_MAP; i++)
 195:CamInterface.c ****        {
GAS LISTING /tmp/ccAE2QZt.s                    page 6


 196:CamInterface.c ****                memset(asciiBuffer,0x00,5);
 197:CamInterface.c ****                itoa(colorMap[i],asciiBuffer,10);
 198:CamInterface.c ****                UIMgr_txBuffer(asciiBuffer,3);
 199:CamInterface.c ****                UIMgr_txBuffer(" ",1);
 200:CamInterface.c ****                if (i==15 || i == 31)
 201:CamInterface.c ****                {
 202:CamInterface.c ****                        /* break up the output */
 203:CamInterface.c ****                        UIMgr_txBuffer("\r\n",2);
 204:CamInterface.c ****                }
 205:CamInterface.c ****        }
 206:CamInterface.c **** #endif    
 207:CamInterface.c **** 
 208:CamInterface.c **** #ifndef NO_CRYSTAL
 209:CamInterface.c ****        CamInt_resetCam();      
 210:CamInterface.c **** #endif    
 211:CamInterface.c **** }
 212:CamInterface.c **** 
 213:CamInterface.c **** /***********************************************************
 214:CamInterface.c ****        Function Name: CamInt_resetCam
 215:CamInterface.c ****        Function Description: This function is responsible
 216:CamInterface.c ****        for resetting the camera.  This is accomplished by
 217:CamInterface.c ****        toggling the reset line on the OV6620 for ~100 mS.
 218:CamInterface.c ****        Inputs:  none
 219:CamInterface.c ****        Outputs: none
 220:CamInterface.c ****     IMPORTANT NOTE: This function has effectively been removed
 221:CamInterface.c ****     since resetting the camera now causes the camera to not
 222:CamInterface.c ****     output the clock signal.  Thus, if we reset the cam, the
 223:CamInterface.c ****     AVR has no clock, and thus doesn't run...
 224:CamInterface.c **** ***********************************************************/   
 225:CamInterface.c **** void CamInt_resetCam(void)
 226:CamInterface.c **** {
  91                            .stabn  68,0,226,.LM0-CamInt_resetCam
  92                    .LM0:
  93                    /* prologue: frame size=0 */
  94                    /* prologue end (size=0) */
  95                    /* epilogue: frame size=0 */
  96 0000 0895                  ret
  97                    /* epilogue end (size=1) */
  98                    /* function CamInt_resetCam size 1 (0) */
  99                            .size   CamInt_resetCam, .-CamInt_resetCam
 100                    .Lscope0:
 101                            .stabs  "",36,0,0,.Lscope0-CamInt_resetCam
 102                            .stabd  78,0,0
 103                            .stabs  "CamInt_init:F(0,15)",36,0,136,CamInt_init
 104                    .global CamInt_init
 105                            .type   CamInt_init, @function
 106                    CamInt_init:
 107                            .stabd  46,0,0
 108                            .stabn  68,0,136,.LM1-CamInt_init
 109                    .LM1:
 110                    /* prologue: frame size=0 */
 111                    /* prologue end (size=0) */
 112                            .stabn  68,0,144,.LM2-CamInt_init
 113                    .LM2:
 114 0002 8F9A                  sbi 49-0x20,7
 115                            .stabn  68,0,145,.LM3-CamInt_init
 116                    .LM3:
GAS LISTING /tmp/ccAE2QZt.s                    page 7


 117 0004 8F9A                  sbi 49-0x20,7
 118                            .stabn  68,0,146,.LM4-CamInt_init
 119                    .LM4:
 120 0006 8A98                  cbi 49-0x20,2
 121                            .stabn  68,0,147,.LM5-CamInt_init
 122                    .LM5:
 123 0008 9798                  cbi 50-0x20,7
 124                            .stabn  68,0,148,.LM6-CamInt_init
 125                    .LM6:
 126 000a 87B3                  in r24,55-0x20
 127 000c 807F                  andi r24,lo8(-16)
 128 000e 87BB                  out 55-0x20,r24
 129                            .stabn  68,0,149,.LM7-CamInt_init
 130                    .LM7:
 131 0010 87B3                  in r24,55-0x20
 132 0012 806F                  ori r24,lo8(-16)
 133 0014 87BB                  out 55-0x20,r24
 134                            .stabn  68,0,150,.LM8-CamInt_init
 135                    .LM8:
 136 0016 84B3                  in r24,52-0x20
 137 0018 807F                  andi r24,lo8(-16)
 138 001a 84BB                  out 52-0x20,r24
 139                            .stabn  68,0,155,.LM9-CamInt_init
 140                    .LM9:
 141 001c 8EB5                  in r24,78-0x20
 142 001e 887F                  andi r24,lo8(-8)
 143 0020 8EBD                  out 78-0x20,r24
 144                            .stabn  68,0,163,.LM10-CamInt_init
 145                    .LM10:
 146 0022 85B7                  in r24,85-0x20
 147 0024 8C60                  ori r24,lo8(12)
 148 0026 85BF                  out 85-0x20,r24
 149                            .stabn  68,0,168,.LM11-CamInt_init
 150                    .LM11:
 151 0028 85B7                  in r24,85-0x20
 152 002a 8360                  ori r24,lo8(3)
 153 002c 85BF                  out 85-0x20,r24
 154                            .stabn  68,0,169,.LM12-CamInt_init
 155                    .LM12:
 156 002e 8BB7                  in r24,91-0x20
 157 0030 8064                  ori r24,lo8(64)
 158 0032 8BBF                  out 91-0x20,r24
 159                            .stabn  68,0,174,.LM13-CamInt_init
 160                    .LM13:
 161 0034 86E0                  ldi r24,lo8(6)
 162 0036 83BF                  out 83-0x20,r24
 163                            .stabn  68,0,182,.LM14-CamInt_init
 164                    .LM14:
 165 0038 85B7                  in r24,85-0x20
 166 003a 8F78                  andi r24,lo8(-113)
 167 003c 85BF                  out 85-0x20,r24
 168                            .stabn  68,0,184,.LM15-CamInt_init
 169                    .LM15:
 170 003e 85B7                  in r24,85-0x20
 171 0040 8068                  ori r24,lo8(-128)
 172 0042 85BF                  out 85-0x20,r24
 173                            .stabn  68,0,187,.LM16-CamInt_init
GAS LISTING /tmp/ccAE2QZt.s                    page 8


 174                    .LM16:
 175 0044 E0E0                  ldi r30,lo8(colorMap)
 176 0046 F0E0                  ldi r31,hi8(colorMap)
 177 0048 80E3                  ldi r24,lo8(48)
 178 004a DF01                  movw r26,r30
 179 004c 982F                  mov r25,r24
 180 004e 1D92                  st X+,__zero_reg__
 181 0050 9A95                  dec r25
 182 0052 E9F7                  brne .-6
 183                    .LBB6:
 184                    .LBB7:
 185                    .LBB8:
 186                            .stabs  "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h",132,0,0,.Ltext1
 187                    .Ltext1:
   1:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /* Copyright (c) 2002, 2003, 2004 Marek Michalkiewicz
   2:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    Copyright (c) 2005, 2006 Bjoern Haase
   3:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    All rights reserved.
   4:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
   5:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    Redistribution and use in source and binary forms, with or without
   6:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    modification, are permitted provided that the following conditions are met:
   7:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
   8:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    * Redistributions of source code must retain the above copyright
   9:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      notice, this list of conditions and the following disclaimer.
  10:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  11:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    * Redistributions in binary form must reproduce the above copyright
  12:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      notice, this list of conditions and the following disclaimer in
  13:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      the documentation and/or other materials provided with the
  14:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      distribution.
  15:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  16:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    * Neither the name of the copyright holders nor the names of
  17:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      contributors may be used to endorse or promote products derived
  18:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      from this software without specific prior written permission.
  19:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  20:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  24:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   POSSIBILITY OF SUCH DAMAGE. */
  31:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  32:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /* $Id: eeprom.h,v 1.17.2.1 2006/02/26 21:51:04 aesok Exp $ */
  33:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  34:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /*
  35:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    eeprom.h
  36:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  37:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    Contributors:
  38:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      Created by Marek Michalkiewicz <marekm@linux.org.pl>
  39:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      eeprom_write_word and eeprom_write_block added by Artur Lipowski 
  40:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      <LAL@pro.onet.pl>
  41:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      Complete rewrite using the original interface by Bjoern Haase 
  42:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      <bjoern.haase@de.bosch.com>. 
  43:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****  */
GAS LISTING /tmp/ccAE2QZt.s                    page 9


  44:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  45:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifndef _EEPROM_H_
  46:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _EEPROM_H_ 1
  47:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  48:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define __need_size_t
  49:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #include <stddef.h>
  50:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #include <inttypes.h>
  51:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  52:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  53:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifdef __AVR_MEGA__
  54:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define XCALL "call"
  55:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #else
  56:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define XCALL "rcall"
  57:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #endif
  58:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  59:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #include <avr/io.h>
  60:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifndef __EEPROM_REG_LOCATIONS__
  61:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def __EEPROM_REG_LOCATIONS__
  62:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
  63:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      In order to be able to work without a requiring a multilib 
  64:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      approach for dealing with controllers having the EEPROM registers
  65:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      at different positions in memory space, the eeprom functions evaluate
  66:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      __EEPROM_REG_LOCATIONS__: It is assumed to be defined by
  67:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      the device io header and contains 6 uppercase hex digits encoding the 
  68:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      addresses of EECR,EEDR and EEAR. 
  69:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      First two letters:  EECR address.
  70:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      Second two letters: EEDR address.
  71:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      Last two letters:   EEAR address.
  72:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      The default 1C1D1E corresponds to the
  73:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      register location that is valid for most controllers. The value
  74:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      of this define symbol is used for appending it to the base name of the
  75:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      assembler functions.  */
  76:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define __EEPROM_REG_LOCATIONS__ 1C1D1E
  77:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #endif
  78:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _STR2(EXP) _STR1(EXP)
  79:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _STR1(EXP) #EXP
  80:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _REG_LOCATION_SUFFIX _STR2(__EEPROM_REG_LOCATIONS__)
  81:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  82:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifndef CR_TAB
  83:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define CR_TAB "\n\t"
  84:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #endif
  85:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  86:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  87:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
  88:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \code #include <avr/eeprom.h> \endcode
  89:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  90:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     This header file declares the interface to some simple library
  91:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     routines suitable for handling the data EEPROM contained in the
  92:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     AVR microcontrollers.  The implementation uses a simple polled
  93:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     mode interface.  Applications that require interrupt-controlled
  94:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     EEPROM access to ensure that no time will be wasted in spinloops
  95:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     will have to deploy their own implementation.
  96:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
  97:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \note All of the read/write functions first make sure the EEPROM
  98:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      is ready to be accessed.  Since this may cause long delays if a
  99:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      write operation is still pending, time-critical applications
 100:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      should first poll the EEPROM e. g. using eeprom_is_ready() before
GAS LISTING /tmp/ccAE2QZt.s                    page 10


 101:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      attempting any actual I/O.
 102:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 103:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \note This header file declares inline functions that call the
 104:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      assembler subroutines directly. This prevents that the compiler
 105:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      generates push/pops for the call-clobbered registers. This way
 106:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      also a specific calling convention could be used for the eeprom
 107:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      routines e.g. by passing values in __tmp_reg__, eeprom addresses in
 108:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      X and memory addresses in Z registers. Method is optimized for code 
 109:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      size.
 110:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 111:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \note Presently supported are two locations of the EEPROM register
 112:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      set: 0x1F,0x20,0x21 and 0x1C,0x1D,0x1E 
 113:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      (see ::__EEPROM_REG_LOCATIONS__).
 114:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 115:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \note As these functions modify IO registers, they are known to be
 116:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      non-reentrant.  If any of these functions are used from both,
 117:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      standard and interrupt context, the applications must ensure
 118:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      proper protection (e.g. by disabling interrupts before accessing
 119:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      them).
 120:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 121:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** */
 122:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 123:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 124:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /* forward declarations of the inline functions so that doxygen does
 125:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****    not get confused by the attribute expression.  */
 126:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 127:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline uint8_t __attribute__ ((always_inline))
 128:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr);
 129:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 130:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline uint16_t __attribute__ ((always_inline)) 
 131:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr);
 132:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 133:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
 134:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,
 135:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    const void *pointer_eeprom,
 136:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    size_t size);
 137:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 138:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
 139:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_write_byte (uint8_t *addr,uint8_t value);
 140:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 141:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
 142:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_write_word (uint16_t *addr,uint16_t value);
 143:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 144:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
 145:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_write_block (const void *pointer_ram,
 146:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                     void *pointer_eeprom,
 147:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                     size_t size);
 148:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 149:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \name avr-libc declarations */
 150:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 151:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /*@{*/
 152:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 153:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def EEMEM
 154:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
 155:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Attribute expression causing a variable to be allocated within the .eeprom
 156:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****      section.  */
 157:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define EEMEM __attribute__((section(".eeprom")))
GAS LISTING /tmp/ccAE2QZt.s                    page 11


 158:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 159:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_is_ready
 160:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
 161:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \returns 1 if EEPROM is ready for a new read/write operation, 0 if not. */
 162:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 163:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #if defined(__DOXYGEN__)
 164:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready()
 165:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #elif defined(EEWE)
 166:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEWE)
 167:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #elif defined(EEPE)
 168:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEPE)
 169:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #elif defined(DEECR) && defined(EEL)
 170:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(DEECR, EEL)
 171:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #else
 172:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** # error "No write enable bit known for this device's EEPROM."
 173:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #endif
 174:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 175:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_busy_wait
 176:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
 177:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 178:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Loops until the eeprom is no longer busy.
 179:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 180:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \returns Nothing. */
 181:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 182:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
 183:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 184:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 185:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
 186:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Read one byte from EEPROM address \c addr. */
 187:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 188:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** uint8_t 
 189:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr) 
 190:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** {
 191:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   uint8_t result;
 192:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   asm volatile
 193:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       ( XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
 194:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****         "mov %1,__tmp_reg__"
 195:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****        : "+x" (addr),
 196:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****          "=r" (result)
 197:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****        : );
 198:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   return result;
 199:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** }
 200:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 201:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
 202:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Read one 16-bit word (little endian) from EEPROM address \c addr. */
 203:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** uint16_t
 204:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr)
 205:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** {
 206:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   uint16_t result;
 207:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 208:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   asm ( 
 209:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****         XCALL " __eeprom_read_word_" _REG_LOCATION_SUFFIX CR_TAB
 210:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****        : "+x" (addr),
 211:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****          "=z" (result)
 212:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****        : );
 213:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   return result;
 214:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** }
GAS LISTING /tmp/ccAE2QZt.s                    page 12


 215:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 216:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
 217:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     Read a block of \c n bytes from EEPROM address \c pointer_eeprom to
 218:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     \c pointer_ram.  For constant n <= 256 bytes a library function is used.
 219:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     For block sizes unknown at compile time or block sizes > 256 an inline
 220:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     loop is expanded. */
 221:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 222:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** void 
 223:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,
 224:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    const void *pointer_eeprom,
 225:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                    size_t n)
 226:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** {
 227:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   if (!__builtin_constant_p (n)
 228:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       || n > 256)
 229:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     {
 230:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       /* make sure size is a 16 bit variable.  */
 231:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       uint16_t size = n; 
 232:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 233:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       asm volatile ( 
 234:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             ".%=_start:" CR_TAB
 235:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "sbiw %2,1" CR_TAB
 236:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "brlt .%=_finished" CR_TAB
 237:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****              XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
 238:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "st z+,__tmp_reg__" CR_TAB
 239:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "rjmp .%=_start" CR_TAB
 240:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             ".%=_finished:" 
 241:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****           : "=x" (pointer_eeprom),
 242:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "=z" (pointer_ram),
 243:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             "+w" (size)
 244:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****            : "x" (pointer_eeprom), 
 245:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****              "z" (pointer_ram)
 246:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****            : "memory");
 247:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     }
 248:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****   else
 249:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****     {
 250:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****       if (n != 0)
 251:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****         {
 252:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****           if (n == 256)
 253:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             {
 254:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               asm volatile (
 255:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                   XCALL " __eeprom_read_block_" _REG_LOCATION_SUFFIX 
 256:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "+x" (pointer_eeprom),
 257:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                   "=z" (pointer_ram)
 258:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "z"  (pointer_ram)
 259:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****                 : "memory");
 260:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             }
 261:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****           else
 262:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****             {
 263:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               /* Needed in order to truncate to 8 bit.  */
 264:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               uint8_t len;
 265:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               len = (uint8_t) n; 
 266:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** 
 267:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****               asm volatile (
 188                            .stabn  68,0,267,.LM17-CamInt_init
 189                    .LM17:
 190 0054 A1E0                  ldi r26,lo8(1)
 191 0056 B0E0                  ldi r27,hi8(1)
GAS LISTING /tmp/ccAE2QZt.s                    page 13


 192                    /* #APP */
 193 0058 182E                  mov __zero_reg__,r24
 194 005a 00D0                  rcall __eeprom_read_block_1C1D1E
 195                    /* #NOAPP */
 196                    .LBE8:
 197                    .LBE7:
 198                    .LBE6:
 199                    /* epilogue: frame size=0 */
 200 005c 0895                  ret
 201                    /* epilogue end (size=1) */
 202                    /* function CamInt_init size 48 (47) */
 203                            .size   CamInt_init, .-CamInt_init
 204                            .stabs  "pointer_eeprom:r(0,16)=*(0,17)=k(0,15)",64,0,190,26
 205                            .stabs  "pointer_ram:r(0,18)=*(0,15)",64,0,190,30
 206                            .stabn  192,0,0,.LBB6-CamInt_init
 207                            .stabn  224,0,0,.LBE6-CamInt_init
 208                    .Lscope1:
 209                            .stabs  "",36,0,0,.Lscope1-CamInt_init
 210                            .stabd  78,0,0
 211                            .comm currentLineBuffer,176,1
 212                            .comm previousLineBuffer,176,1
 213                    .global colorMap
 214                            .section        .noinit,"aw",@nobits
 215                            .type   colorMap, @object
 216                            .size   colorMap, 48
 217                    colorMap:
 218 0000 0000 0000             .skip 48,0
 218      0000 0000 
 218      0000 0000 
 218      0000 0000 
 218      0000 0000 
 219                            .stabs  "currentLineBuffer:G(0,19)=ar(0,20)=r(0,20);0;0177777;;0;175;(0,11)",32,0,115,0
 220                            .stabs  "previousLineBuffer:G(0,19)",32,0,116,0
 221                            .stabs  "colorMap:G(0,21)=ar(0,20);0;47;(0,11)",32,0,101,0
 222                            .text
 223                            .stabs  "",100,0,0,.Letext0
 224                    .Letext0:
 225                    /* File "CamInterface.c": code   49 = 0x0031 (  47), prologues   0, epilogues   2 */
GAS LISTING /tmp/ccAE2QZt.s                    page 14


DEFINED SYMBOLS
                            *ABS*:00000000 CamInterface.c
     /tmp/ccAE2QZt.s:3      *ABS*:0000003f __SREG__
     /tmp/ccAE2QZt.s:4      *ABS*:0000003e __SP_H__
     /tmp/ccAE2QZt.s:5      *ABS*:0000003d __SP_L__
     /tmp/ccAE2QZt.s:6      *ABS*:00000000 __tmp_reg__
     /tmp/ccAE2QZt.s:7      *ABS*:00000001 __zero_reg__
     /tmp/ccAE2QZt.s:89     .text:00000000 CamInt_resetCam
     /tmp/ccAE2QZt.s:106    .text:00000002 CamInt_init
     /tmp/ccAE2QZt.s:217    .noinit:00000000 colorMap
                            *COM*:000000b0 currentLineBuffer
                            *COM*:000000b0 previousLineBuffer

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__eeprom_read_block_1C1D1E