Rev 410 | Blame | Compare with Previous | Last modification | View Log | Download
GAS LISTING /tmp/ccnpicUY.s page 11 .file "CamInterface.c"2 __SREG__ = 0x3f3 __SP_H__ = 0x3e4 __SP_L__ = 0x3d5 __tmp_reg__ = 06 __zero_reg__ = 17 .global __do_copy_data8 .global __do_clear_bss9 .stabs "/home/kaklik/projects/programy/C/avr/AVRcam/",100,0,2,.Ltext010 .stabs "CamInterface.c",100,0,2,.Ltext011 .text12 .Ltext0:13 .stabs "gcc2_compiled.",60,0,0,014 .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,015 .stabs "char:t(0,2)=@s8;r(0,2);0;255;",128,0,0,016 .stabs "long int:t(0,3)=@s32;r(0,3);020000000000;017777777777;",128,0,0,017 .stabs "unsigned int:t(0,4)=r(0,4);0;0177777;",128,0,0,018 .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0;037777777777;",128,0,0,019 .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,20 .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0;01777777777777777777777;",128,0,0,021 .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,022 .stabs "short unsigned int:t(0,9)=r(0,9);0;0177777;",128,0,0,023 .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,024 .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,025 .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,026 .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,027 .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,028 .stabs "void:t(0,15)=(0,15)",128,0,0,029 .stabs "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/interrupt.h",130,0,0,030 .stabs "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/io.h",130,0,0,031 .stabs "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/sfr_defs.h",130,0,0,032 .stabs "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/inttypes.h",130,0,0,033 .stabs "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/stdint.h",130,0,0,034 .stabs "int8_t:t(5,1)=(0,10)",128,0,116,035 .stabs "uint8_t:t(5,2)=(0,11)",128,0,117,036 .stabs "int16_t:t(5,3)=(0,1)",128,0,118,037 .stabs "uint16_t:t(5,4)=(0,4)",128,0,119,038 .stabs "int32_t:t(5,5)=(0,3)",128,0,120,039 .stabs "uint32_t:t(5,6)=(0,5)",128,0,121,040 .stabs "int64_t:t(5,7)=(0,6)",128,0,122,041 .stabs "uint64_t:t(5,8)=(0,7)",128,0,123,042 .stabs "intptr_t:t(5,9)=(5,3)",128,0,135,043 .stabs "uintptr_t:t(5,10)=(5,4)",128,0,140,044 .stabs "int_least8_t:t(5,11)=(5,1)",128,0,152,045 .stabs "uint_least8_t:t(5,12)=(5,2)",128,0,157,046 .stabs "int_least16_t:t(5,13)=(5,3)",128,0,162,047 .stabs "uint_least16_t:t(5,14)=(5,4)",128,0,167,048 .stabs "int_least32_t:t(5,15)=(5,5)",128,0,172,049 .stabs "uint_least32_t:t(5,16)=(5,6)",128,0,177,050 .stabs "int_least64_t:t(5,17)=(5,7)",128,0,182,051 .stabs "uint_least64_t:t(5,18)=(5,8)",128,0,187,052 .stabs "int_fast8_t:t(5,19)=(5,1)",128,0,200,053 .stabs "uint_fast8_t:t(5,20)=(5,2)",128,0,205,054 .stabs "int_fast16_t:t(5,21)=(5,3)",128,0,210,055 .stabs "uint_fast16_t:t(5,22)=(5,4)",128,0,215,056 .stabs "int_fast32_t:t(5,23)=(5,5)",128,0,220,057 .stabs "uint_fast32_t:t(5,24)=(5,6)",128,0,225,0GAS LISTING /tmp/ccnpicUY.s page 258 .stabs "int_fast64_t:t(5,25)=(5,7)",128,0,230,059 .stabs "uint_fast64_t:t(5,26)=(5,8)",128,0,235,060 .stabs "intmax_t:t(5,27)=(5,7)",128,0,249,061 .stabs "uintmax_t:t(5,28)=(5,8)",128,0,254,062 .stabn 162,0,0,063 .stabs "int_farptr_t:t(4,1)=(5,5)",128,0,76,064 .stabs "uint_farptr_t:t(4,2)=(5,6)",128,0,80,065 .stabn 162,0,0,066 .stabn 162,0,0,067 .stabn 162,0,0,068 .stabn 162,0,0,069 .stabs "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h",130,0,0,070 .stabs "/usr/lib/gcc/avr/4.2.1/include/stddef.h",130,0,0,071 .stabs "size_t:t(7,1)=(0,4)",128,0,214,072 .stabn 162,0,0,073 .stabn 162,0,0,074 .stabs "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/stdlib.h",130,0,0,075 .stabs "/usr/lib/gcc/avr/4.2.1/include/stddef.h",130,0,0,076 .stabs "wchar_t:t(9,1)=(0,1)",128,0,326,077 .stabn 162,0,0,078 .stabs "div_t:t(8,1)=(8,2)=s4quot:(0,1),0,16;rem:(0,1),16,16;;",128,0,69,079 .stabs "ldiv_t:t(8,3)=(8,4)=s8quot:(0,3),0,32;rem:(0,3),32,32;;",128,0,75,080 .stabs "__compar_fn_t:t(8,5)=(8,6)=*(8,7)=f(0,1)",128,0,78,081 .stabn 162,0,0,082 .stabs "CommonDefs.h",130,0,0,083 .stabs "bool_t:t(10,1)=(0,11)",128,0,56,084 .stabn 162,0,0,085 .stabs "CamInt_resetCam:F(0,15)",36,0,225,CamInt_resetCam86 .global CamInt_resetCam87 .type CamInt_resetCam, @function88 CamInt_resetCam:89 .stabd 46,0,01:CamInterface.c **** /*2:CamInterface.c **** Copyright (C) 2004 John Orlando3: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/or7:CamInterface.c **** modify it under the terms of the GNU General Public8:CamInterface.c **** License as published by the Free Software Foundation; either9: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 of13:CamInterface.c **** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU14:CamInterface.c **** General Public License for more details.15:CamInterface.c ****16:CamInterface.c **** You should have received a copy of the GNU General Public17:CamInterface.c **** License along with this program; if not, write to the Free Software18:CamInterface.c **** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA19:CamInterface.c ****20:CamInterface.c **** For more information on the AVRcam, please contact:21:CamInterface.c ****22:CamInterface.c **** john@jrobot.net23:CamInterface.c ****24:CamInterface.c **** or go to www.jrobot.net for more details regarding the system.25:CamInterface.c **** */GAS LISTING /tmp/ccnpicUY.s page 326:CamInterface.c **** /***********************************************************27:CamInterface.c **** Module Name: CamInterface.c28:CamInterface.c **** Module Date: 04/12/200429:CamInterface.c **** Module Auth: John Orlando30:CamInterface.c ****31:CamInterface.c **** Description: This file is responsible for providing an32:CamInterface.c **** interface to the OV6620 camera hardware. This includes33: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. Notes38:CamInterface.c **** 4/10/2004 0.1 Module created39:CamInterface.c **** 6/30/2004 1.0 Initial release for Circuit Cellar40:CamInterface.c **** contest.41:CamInterface.c **** 11/15/2004 1.2 ifdef'd out the resetCam routine, since42:CamInterface.c **** resetting the cam now causes the OV6620's43:CamInterface.c **** clock to not be output (we have to start44:CamInterface.c **** it up after each reset with the external45:CamInterface.c **** tiny12 processor).46:CamInterface.c **** 1/16/2005 1.4 Ensure that the TCCR1B register is set so47: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/sleep.h>53:CamInterface.c **** #include <avr/eeprom.h>54:CamInterface.c **** #include <stdlib.h>55:CamInterface.c **** #include <string.h>56:CamInterface.c **** #include "CommonDefs.h"57:CamInterface.c **** #include "CamInterface.h"58:CamInterface.c **** #include "Utility.h"59:CamInterface.c **** #include "UIMgr.h"60:CamInterface.c **** #include "Executive.h"61:CamInterface.c **** #include "UartInterface.h"62:CamInterface.c ****63:CamInterface.c **** /* Local Variables */64:CamInterface.c ****65:CamInterface.c **** /* Local Structures and Typedefs */66:CamInterface.c ****67:CamInterface.c **** /* Definitions */68:CamInterface.c **** //#define OUTPUT_INITIAL_COLOR_MAP 169:CamInterface.c ****70:CamInterface.c **** #define FAST_ACQUIRE 171:CamInterface.c **** #define CAM_G_BUS PINB72:CamInterface.c **** #define CAM_G_BUS_DIR DDRB73:CamInterface.c **** #define CAM_RB_BUS PINC74:CamInterface.c **** #define CAM_RB_BUS_DIR DDRC75:CamInterface.c ****76:CamInterface.c **** #define CAM_CONTROL_PORT PORTD77:CamInterface.c **** #define CAM_CONTROL_PORT_DIR DDRD78:CamInterface.c **** #define CAM_RESET_LINE BIT779:CamInterface.c **** #define CAM_PIXEL_CLK_COUNT BIT580:CamInterface.c **** #define CAM_HREF BIT481:CamInterface.c **** #define CAM_PIXEL_CLK_INT BIT382:CamInterface.c **** #define CAM_VSYNC BIT2GAS LISTING /tmp/ccnpicUY.s page 483:CamInterface.c ****84:CamInterface.c **** /* Global Variables */85:CamInterface.c **** /* NOTE: This file MUST appear first in the Makefile for these variables to86:CamInterface.c **** be placed properly in RAM */87:CamInterface.c ****88:CamInterface.c **** /* The colorMap[] table provides the membership lookup table to convert89:CamInterface.c **** RGB or YUV pixel values into actual colors. The membership table contains90:CamInterface.c **** 16 elements for each color channel, concatenated together. The Red (or Y)91:CamInterface.c **** value is located in the first 16 bytes, the G (or U) value is located in92:CamInterface.c **** the second 16 bytes, and the B (or V) value is located in the last 16 bytes:93:CamInterface.c ****94:CamInterface.c **** ----------------------------------------------------------------------------------95:CamInterface.c **** |red0|red1|red2|...|red15|green0|green1|green2|...|green15|blue0|blue1|...|blue15|96:CamInterface.c **** mem:|0x00 0x01 0x02 0x15 0x16 0x17 0x18 0x31 0x32 0x33 0x47 |97:CamInterface.c **** ---------------------------------------------------------------------------------98:CamInterface.c **** Thus, the red lookup is accessed at colorMap+0, the green lookup is accessed99:CamInterface.c **** at colorMap+16, and the blue lookup is accessed at colorMap+32. */100:CamInterface.c **** unsigned char colorMap[NUM_ELEMENTS_IN_COLOR_MAP] __attribute__ ((section (".noinit")));101:CamInterface.c ****102:CamInterface.c **** /* Extern Variables */103:CamInterface.c **** /* These two buffers hold the current and previous lines104:CamInterface.c **** of pixel data. They are sized to the worst case scenario,105:CamInterface.c **** where the color changes between every pixel (unrealistic).106:CamInterface.c **** The format of each buffer is for all the even bytes to hold107:CamInterface.c **** the run-length, and the odd bytes to hold the color data. */108:CamInterface.c ****109:CamInterface.c **** /* In addition, if we are in frameDump mode, we use these buffers110:CamInterface.c **** to store the acquired line data...we are actually grabbing ALL of the111:CamInterface.c **** pixels in a line (176) instead of the 88 we get normally during tracking.112:CamInterface.c **** But since we have enough to hold 88-RLE blocks, we already have the 176113:CamInterface.c **** allocated for this... */114:CamInterface.c **** unsigned char currentLineBuffer[LENGTH_OF_LINE_BUFFER];115:CamInterface.c **** unsigned char previousLineBuffer[LENGTH_OF_LINE_BUFFER];116:CamInterface.c ****117:CamInterface.c **** /* Extern Functions */118:CamInterface.c **** /* These functions are located in assembly files, and thus119:CamInterface.c **** must be externed here so they can be referenced in the source below. */120:CamInterface.c **** extern void CamIntAsm_waitForNewTrackingFrame(unsigned char *pBuffer, unsigned char *pMemLookup);121:CamInterface.c **** extern void CamIntAsm_waitForNewDumpFrame(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);122:CamInterface.c **** extern void CamIntAsm_acquireTrackingLine(unsigned char *pBuffer, unsigned char *pMemLookup);123:CamInterface.c **** extern void CamIntAsm_acquireDumpLine(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);124:CamInterface.c ****125:CamInterface.c **** /***********************************************************126:CamInterface.c **** Function Name: CamInt_init127:CamInterface.c **** Function Description: This function is responsible128:CamInterface.c **** for initializing the camera interface. This includes129:CamInterface.c **** setting up the i/o ports that are used to read the130:CamInterface.c **** camera busses, as well as resetting the camera.131:CamInterface.c **** Inputs: none132:CamInterface.c **** Outputs: none133:CamInterface.c **** ***********************************************************/134:CamInterface.c **** void CamInt_init(void)135:CamInterface.c **** {136:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP137:CamInterface.c **** unsigned char asciiBuffer[5];138:CamInterface.c **** unsigned char i;139:CamInterface.c **** #endifGAS LISTING /tmp/ccnpicUY.s page 5140:CamInterface.c ****141:CamInterface.c **** /* set up the mega8 ports that will be interfacing142:CamInterface.c **** with the camera */143:CamInterface.c **** CAM_CONTROL_PORT_DIR |= (1<<CAM_RESET_LINE); /* cam reset is output */144:CamInterface.c **** CAM_CONTROL_PORT_DIR |= 0x80; /* set just the MSB as an output */145:CamInterface.c **** CAM_CONTROL_PORT_DIR &= 0xFB; /* make sure bit2 is clear (input) */146:CamInterface.c **** CAM_CONTROL_PORT &= 0x7F; /* set reset line low */147:CamInterface.c **** CAM_G_BUS_DIR &= 0xF0; /* 4-bit G bus all inputs */148:CamInterface.c **** CAM_G_BUS_DIR |= 0xF0; /* disable the pull-up on PB4 and PB5 */149:CamInterface.c **** CAM_RB_BUS_DIR &= 0xF0; /* 4-bit RB bus all inputs */150:CamInterface.c ****151:CamInterface.c **** /* ensure that timer1 is disabled to start...eventually, when PCLK needs152:CamInterface.c **** to feed timer1 through the external counter, it will be enabled on an153:CamInterface.c **** "as needed" basis...*/154:CamInterface.c **** TCCR1B &= ~( (1<<CS12)|(1<<CS11)|(1<<CS10) );155:CamInterface.c ****156:CamInterface.c **** /* we'll turn on the interrupt after we assign the initial TCNT value */157:CamInterface.c ****158:CamInterface.c **** /* set up External Interrupt1 to interrupt us on rising edges (HREF)...159:CamInterface.c **** this is needed to indicate when the first pixel of each line is about to start, so160:CamInterface.c **** we can synch up with it...this interrupt will be disabled once HREF goes high */161:CamInterface.c ****162:CamInterface.c **** MCUCR |= (1<<ISC11) | (1<<ISC10); /* rising edge interrupt */163:CamInterface.c **** /* the interrupt will be enabled when we are ready to detect the rising edge of164:CamInterface.c **** HREF...its now primed and ready to go */165:CamInterface.c ****166:CamInterface.c **** /* set up External Interrupt0 to interrupt us on rising edges (VSYNC) */167:CamInterface.c **** MCUCR |= (1<<ISC01) | (1<<ISC00); /* rising edge interrupt */168:CamInterface.c **** GICR |= (1<<INT0); /* interrupt request enabled */169:CamInterface.c ****170:CamInterface.c **** /* set up TimerO to count and be clocked from an external pulse source171:CamInterface.c **** (HREF) on falling edges...eventually, we need to enable the interrupt172:CamInterface.c **** for this! FIX THIS */173:CamInterface.c **** TCCR0 = (1<<CS02)|(1<<CS01)|(0<<CS00);174:CamInterface.c ****175:CamInterface.c **** /* setting up the PCLK counter with Timer1 will be done right after176:CamInterface.c **** we start receiving pixels in each line...we sacrifice the first pixel177:CamInterface.c **** in each line, but we'll account for it...*/178:CamInterface.c ****179:CamInterface.c **** /* set up the mega8 so that its sleep mode puts it in an IDLE sleep180:CamInterface.c **** mode, where it can wake up as fast as possible */181:CamInterface.c **** set_sleep_mode(SLEEP_MODE_IDLE);182:CamInterface.c **** /* umm....we need to actually enable the sleep mode...*/183:CamInterface.c **** MCUCR |= 0x80;184:CamInterface.c ****185:CamInterface.c **** /* initialize the memLookup table */186:CamInterface.c **** memset(colorMap,0x00,NUM_ELEMENTS_IN_COLOR_MAP);187:CamInterface.c ****188:CamInterface.c **** /* read the color map out of EEPROM */189:CamInterface.c **** eeprom_read_block(colorMap, (unsigned char*)0x01,NUM_ELEMENTS_IN_COLOR_MAP);190:CamInterface.c ****191:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP192:CamInterface.c **** UIMgr_txBuffer("\r\n",2);193:CamInterface.c **** for (i=0; i<NUM_ELEMENTS_IN_COLOR_MAP; i++)194:CamInterface.c **** {195:CamInterface.c **** memset(asciiBuffer,0x00,5);196:CamInterface.c **** itoa(colorMap[i],asciiBuffer,10);GAS LISTING /tmp/ccnpicUY.s page 6197:CamInterface.c **** UIMgr_txBuffer(asciiBuffer,3);198:CamInterface.c **** UIMgr_txBuffer(" ",1);199:CamInterface.c **** if (i==15 || i == 31)200:CamInterface.c **** {201:CamInterface.c **** /* break up the output */202:CamInterface.c **** UIMgr_txBuffer("\r\n",2);203:CamInterface.c **** }204:CamInterface.c **** }205:CamInterface.c **** #endif206:CamInterface.c ****207:CamInterface.c **** #ifndef NO_CRYSTAL208:CamInterface.c **** CamInt_resetCam();209:CamInterface.c **** #endif210:CamInterface.c **** }211:CamInterface.c ****212:CamInterface.c **** /***********************************************************213:CamInterface.c **** Function Name: CamInt_resetCam214:CamInterface.c **** Function Description: This function is responsible215:CamInterface.c **** for resetting the camera. This is accomplished by216:CamInterface.c **** toggling the reset line on the OV6620 for ~100 mS.217:CamInterface.c **** Inputs: none218:CamInterface.c **** Outputs: none219:CamInterface.c **** IMPORTANT NOTE: This function has effectively been removed220:CamInterface.c **** since resetting the camera now causes the camera to not221:CamInterface.c **** output the clock signal. Thus, if we reset the cam, the222:CamInterface.c **** AVR has no clock, and thus doesn't run...223:CamInterface.c **** ***********************************************************/224:CamInterface.c **** void CamInt_resetCam(void)225:CamInterface.c **** {90 .stabn 68,0,225,.LM0-.LFBB191 .LM0:92 .LFBB1:93 /* prologue: frame size=0 */94 /* prologue end (size=0) */95 /* epilogue: frame size=0 */96 0000 0895 ret97 /* epilogue end (size=1) */98 /* function CamInt_resetCam size 1 (0) */99 .size CamInt_resetCam, .-CamInt_resetCam100 .Lscope1:101 .stabs "",36,0,0,.Lscope1-.LFBB1102 .stabd 78,0,0103 .stabs "CamInt_init:F(0,15)",36,0,135,CamInt_init104 .global CamInt_init105 .type CamInt_init, @function106 CamInt_init:107 .stabd 46,0,0108 .stabn 68,0,135,.LM1-.LFBB2109 .LM1:110 .LFBB2:111 /* prologue: frame size=0 */112 /* prologue end (size=0) */113 .stabn 68,0,143,.LM2-.LFBB2114 .LM2:115 0002 8F9A sbi 49-0x20,7116 .stabn 68,0,144,.LM3-.LFBB2117 .LM3:GAS LISTING /tmp/ccnpicUY.s page 7118 0004 8F9A sbi 49-0x20,7119 .stabn 68,0,145,.LM4-.LFBB2120 .LM4:121 0006 8A98 cbi 49-0x20,2122 .stabn 68,0,146,.LM5-.LFBB2123 .LM5:124 0008 9798 cbi 50-0x20,7125 .stabn 68,0,147,.LM6-.LFBB2126 .LM6:127 000a 87B3 in r24,55-0x20128 000c 807F andi r24,lo8(-16)129 000e 87BB out 55-0x20,r24130 .stabn 68,0,148,.LM7-.LFBB2131 .LM7:132 0010 87B3 in r24,55-0x20133 0012 806F ori r24,lo8(-16)134 0014 87BB out 55-0x20,r24135 .stabn 68,0,149,.LM8-.LFBB2136 .LM8:137 0016 84B3 in r24,52-0x20138 0018 807F andi r24,lo8(-16)139 001a 84BB out 52-0x20,r24140 .stabn 68,0,154,.LM9-.LFBB2141 .LM9:142 001c 8EB5 in r24,78-0x20143 001e 887F andi r24,lo8(-8)144 0020 8EBD out 78-0x20,r24145 .stabn 68,0,162,.LM10-.LFBB2146 .LM10:147 0022 85B7 in r24,85-0x20148 0024 8C60 ori r24,lo8(12)149 0026 85BF out 85-0x20,r24150 .stabn 68,0,167,.LM11-.LFBB2151 .LM11:152 0028 85B7 in r24,85-0x20153 002a 8360 ori r24,lo8(3)154 002c 85BF out 85-0x20,r24155 .stabn 68,0,168,.LM12-.LFBB2156 .LM12:157 002e 8BB7 in r24,91-0x20158 0030 8064 ori r24,lo8(64)159 0032 8BBF out 91-0x20,r24160 .stabn 68,0,173,.LM13-.LFBB2161 .LM13:162 0034 86E0 ldi r24,lo8(6)163 0036 83BF out 83-0x20,r24164 .stabn 68,0,181,.LM14-.LFBB2165 .LM14:166 0038 85B7 in r24,85-0x20167 003a 8F78 andi r24,lo8(-113)168 003c 85BF out 85-0x20,r24169 .stabn 68,0,183,.LM15-.LFBB2170 .LM15:171 003e 85B7 in r24,85-0x20172 0040 8068 ori r24,lo8(-128)173 0042 85BF out 85-0x20,r24174 .stabn 68,0,186,.LM16-.LFBB2GAS LISTING /tmp/ccnpicUY.s page 8175 .LM16:176 0044 E0E0 ldi r30,lo8(colorMap)177 0046 F0E0 ldi r31,hi8(colorMap)178 0048 80E3 ldi r24,lo8(48)179 004a DF01 movw r26,r30180 004c 982F mov r25,r24181 004e 1D92 st X+,__zero_reg__182 0050 9A95 dec r25183 0052 01F4 brne .-6184 .LBB6:185 .LBB7:186 .LBB8:187 .stabs "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h",132,0,0,.Ltext1188 .Ltext1:1:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /* Copyright (c) 2002, 2003, 2004 Marek Michalkiewicz2:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Copyright (c) 2005, 2006 Bjoern Haase3:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** All rights reserved.4:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****5:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Redistribution and use in source and binary forms, with or without6:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** modification, are permitted provided that the following conditions are met:7:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****8:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** * Redistributions of source code must retain the above copyright9:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** notice, this list of conditions and the following disclaimer.10:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****11:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** * Redistributions in binary form must reproduce the above copyright12:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** notice, this list of conditions and the following disclaimer in13:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** the documentation and/or other materials provided with the14:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** distribution.15:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****16:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** * Neither the name of the copyright holders nor the names of17:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** contributors may be used to endorse or promote products derived18:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** from this software without specific prior written permission.19:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****20:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"21:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE22:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE23:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE24:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR25:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF26:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS27:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN28:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)29:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE30:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** POSSIBILITY OF SUCH DAMAGE. */31:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****32:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /* $Id: eeprom.h,v 1.17.2.3 2006/05/23 17:18:23 aesok Exp $ */33:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****34:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /*35:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom.h36:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****37:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Contributors:38:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Created by Marek Michalkiewicz <marekm@linux.org.pl>39:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_write_word and eeprom_write_block added by Artur Lipowski40:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** <LAL@pro.onet.pl>41:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Complete rewrite using the original interface by Bjoern Haase42:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** <bjoern.haase@de.bosch.com>.43:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** */GAS LISTING /tmp/ccnpicUY.s page 944:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****45:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #ifndef _EEPROM_H_46:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define _EEPROM_H_ 147:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****48:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define __need_size_t49:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #include <stddef.h>50:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #include <inttypes.h>51:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****52:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****53:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #ifdef __AVR_MEGA__54:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define XCALL "call"55:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #else56:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define XCALL "rcall"57:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #endif58:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****59:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #include <avr/io.h>60:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #ifndef __EEPROM_REG_LOCATIONS__61:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \def __EEPROM_REG_LOCATIONS__62:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \ingroup avr_eeprom63:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** In order to be able to work without a requiring a multilib64:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** approach for dealing with controllers having the EEPROM registers65:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** at different positions in memory space, the eeprom functions evaluate66:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** __EEPROM_REG_LOCATIONS__: It is assumed to be defined by67:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** the device io header and contains 6 uppercase hex digits encoding the68:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** addresses of EECR,EEDR and EEAR.69:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** First two letters: EECR address.70:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Second two letters: EEDR address.71:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Last two letters: EEAR address.72:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** The default 1C1D1E corresponds to the73:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** register location that is valid for most controllers. The value74:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** of this define symbol is used for appending it to the base name of the75:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** assembler functions. */76:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define __EEPROM_REG_LOCATIONS__ 1C1D1E77:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #endif78:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define _STR2(EXP) _STR1(EXP)79:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define _STR1(EXP) #EXP80:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define _REG_LOCATION_SUFFIX _STR2(__EEPROM_REG_LOCATIONS__)81:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****82:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #ifndef CR_TAB83:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define CR_TAB "\n\t"84:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #endif85:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****86:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****87:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling88:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \code #include <avr/eeprom.h> \endcode89:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****90:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** This header file declares the interface to some simple library91:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** routines suitable for handling the data EEPROM contained in the92:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** AVR microcontrollers. The implementation uses a simple polled93:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** mode interface. Applications that require interrupt-controlled94:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** EEPROM access to ensure that no time will be wasted in spinloops95:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** will have to deploy their own implementation.96:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****97:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \note All of the read/write functions first make sure the EEPROM98:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** is ready to be accessed. Since this may cause long delays if a99:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** write operation is still pending, time-critical applications100:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** should first poll the EEPROM e. g. using eeprom_is_ready() beforeGAS LISTING /tmp/ccnpicUY.s page 10101:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** attempting any actual I/O.102:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****103:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \note This header file declares inline functions that call the104:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** assembler subroutines directly. This prevents that the compiler105:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** generates push/pops for the call-clobbered registers. This way106:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** also a specific calling convention could be used for the eeprom107:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** routines e.g. by passing values in __tmp_reg__, eeprom addresses in108:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** X and memory addresses in Z registers. Method is optimized for code109:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** size.110:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****111:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \note Presently supported are two locations of the EEPROM register112:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** set: 0x1F,0x20,0x21 and 0x1C,0x1D,0x1E113:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** (see ::__EEPROM_REG_LOCATIONS__).114:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****115:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \note As these functions modify IO registers, they are known to be116:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** non-reentrant. If any of these functions are used from both,117:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** standard and interrupt context, the applications must ensure118:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** proper protection (e.g. by disabling interrupts before accessing119:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** them).120:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****121:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** */122:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****123:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****124:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /* forward declarations of the inline functions so that doxygen does125:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** not get confused by the attribute expression. */126:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****127:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline uint8_t __attribute__ ((always_inline))128:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr);129:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****130:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline uint16_t __attribute__ ((always_inline))131:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr);132:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****133:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))134:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,135:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** const void *pointer_eeprom,136:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** size_t size);137:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****138:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))139:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_write_byte (uint8_t *addr,uint8_t value);140:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****141:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))142:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_write_word (uint16_t *addr,uint16_t value);143:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****144:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))145:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_write_block (const void *pointer_ram,146:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** void *pointer_eeprom,147:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** size_t size);148:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****149:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \name avr-libc declarations */150:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****151:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /*@{*/152:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****153:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \def EEMEM154:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \ingroup avr_eeprom155:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Attribute expression causing a variable to be allocated within the .eeprom156:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** section. */157:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define EEMEM __attribute__((section(".eeprom")))GAS LISTING /tmp/ccnpicUY.s page 11158:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****159:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_is_ready160:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \ingroup avr_eeprom161:/usr/lib/gcc/avr/4.2.1/../../../../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.2.1/../../../../avr/include/avr/eeprom.h ****163:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #if defined(__DOXYGEN__)164:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready()165:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #elif defined(EEWE)166:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEWE)167:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #elif defined(EEPE)168:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEPE)169:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #elif defined(DEECR) && defined(EEL)170:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(DEECR, EEL)171:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #else172:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # error "No write enable bit known for this device's EEPROM."173:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #endif174:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****175:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_busy_wait176:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \ingroup avr_eeprom177:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****178:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Loops until the eeprom is no longer busy.179:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****180:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \returns Nothing. */181:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****182:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define eeprom_busy_wait() do {} while (!eeprom_is_ready())183:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****184:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****185:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom186:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Read one byte from EEPROM address \c addr. */187:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****188:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** uint8_t189:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr)190:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {191:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** uint8_t result;192:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** __asm__ __volatile__193:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** ( XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB194:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "mov %1,__tmp_reg__"195:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : "+x" (addr),196:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "=r" (result)197:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : );198:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** return result;199:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** }200:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****201:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom202:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Read one 16-bit word (little endian) from EEPROM address \c addr. */203:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** uint16_t204:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr)205:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {206:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** uint16_t result;207:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****208:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** __asm__ __volatile__ (209:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** XCALL " __eeprom_read_word_" _REG_LOCATION_SUFFIX CR_TAB210:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : "+x" (addr),211:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "=z" (result)212:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : );213:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** return result;214:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** }GAS LISTING /tmp/ccnpicUY.s page 12215:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****216:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom217:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** Read a block of \c n bytes from EEPROM address \c pointer_eeprom to218:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** \c pointer_ram. For constant n <= 256 bytes a library function is used.219:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** For block sizes unknown at compile time or block sizes > 256 an inline220:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** loop is expanded. */221:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****222:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** void223:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,224:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** const void *pointer_eeprom,225:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** size_t n)226:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {227:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** if (!__builtin_constant_p (n)228:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** || n > 256)229:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {230:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /* make sure size is a 16 bit variable. */231:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** uint16_t size = n;232:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****233:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** __asm__ __volatile__ (234:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** ".%=_start:" CR_TAB235:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "sbiw %2,1" CR_TAB236:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "brlt .%=_finished" CR_TAB237:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB238:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "st z+,__tmp_reg__" CR_TAB239:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "rjmp .%=_start" CR_TAB240:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** ".%=_finished:"241:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : "=x" (pointer_eeprom),242:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "=z" (pointer_ram),243:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "+w" (size)244:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : "x" (pointer_eeprom),245:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "z" (pointer_ram)246:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : "memory");247:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** }248:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** else249:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {250:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** if (n != 0)251:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {252:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** if (n == 256)253:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {254:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** __asm__ __volatile__ (255:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** XCALL " __eeprom_read_block_" _REG_LOCATION_SUFFIX256:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : "+x" (pointer_eeprom),257:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** "=z" (pointer_ram)258:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : "z" (pointer_ram)259:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** : "memory");260:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** }261:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** else262:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {263:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /* Needed in order to truncate to 8 bit. */264:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** uint8_t len;265:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** len = (uint8_t) n;266:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****267:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** __asm__ __volatile__ (189 .stabn 68,0,267,.LM17-.LFBB2190 .LM17:191 0054 A1E0 ldi r26,lo8(1)192 0056 B0E0 ldi r27,hi8(1)GAS LISTING /tmp/ccnpicUY.s page 13193 /* #APP */194 0058 182E mov __zero_reg__,r24195 005a 00D0 rcall __eeprom_read_block_1C1D1E196 /* #NOAPP */197 .LBE8:198 .LBE7:199 .LBE6:200 /* epilogue: frame size=0 */201 005c 0895 ret202 /* epilogue end (size=1) */203 /* function CamInt_init size 48 (47) */204 .size CamInt_init, .-CamInt_init205 .stabs "pointer_eeprom:r(0,16)=*(0,17)=k(0,15)",64,0,189,26206 .stabs "pointer_ram:r(0,18)=*(0,15)",64,0,189,30207 .stabn 192,0,0,.LBB6-.LFBB2208 .stabn 224,0,0,.LBE6-.LFBB2209 .Lscope2:210 .stabs "",36,0,0,.Lscope2-.LFBB2211 .stabd 78,0,0212 .comm currentLineBuffer,176,1213 .comm previousLineBuffer,176,1214 .global colorMap215 .section .noinit,"aw",@nobits216 .type colorMap, @object217 .size colorMap, 48218 colorMap:219 0000 0000 0000 .skip 48,0219 0000 0000219 0000 0000219 0000 0000219 0000 0000220 .stabs "currentLineBuffer:G(0,19)=ar(0,20)=r(0,20);0;0177777;;0;175;(0,11)",32,0,114,0221 .stabs "previousLineBuffer:G(0,19)",32,0,115,0222 .stabs "colorMap:G(0,21)=ar(0,20);0;47;(0,11)",32,0,100,0223 .text224 .stabs "",100,0,0,.Letext0225 .Letext0:226 /* File "CamInterface.c": code 49 = 0x0031 ( 47), prologues 0, epilogues 2 */GAS LISTING /tmp/ccnpicUY.s page 14DEFINED SYMBOLS*ABS*:00000000 CamInterface.c/tmp/ccnpicUY.s:2 *ABS*:0000003f __SREG__/tmp/ccnpicUY.s:3 *ABS*:0000003e __SP_H__/tmp/ccnpicUY.s:4 *ABS*:0000003d __SP_L__/tmp/ccnpicUY.s:5 *ABS*:00000000 __tmp_reg__/tmp/ccnpicUY.s:6 *ABS*:00000001 __zero_reg__/tmp/ccnpicUY.s:88 .text:00000000 CamInt_resetCam/tmp/ccnpicUY.s:106 .text:00000002 CamInt_init/tmp/ccnpicUY.s:218 .noinit:00000000 colorMap*COM*:000000b0 currentLineBuffer*COM*:000000b0 previousLineBufferUNDEFINED SYMBOLS__do_copy_data__do_clear_bss__eeprom_read_block_1C1D1E