0,0 → 1,780 |
GAS LISTING /tmp/cc4KZ7ps.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/programy/Atmel_C/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/cc4KZ7ps.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,225,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/cc4KZ7ps.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/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 1 |
69:CamInterface.c **** |
70:CamInterface.c **** #define FAST_ACQUIRE 1 |
71:CamInterface.c **** #define CAM_G_BUS PINB |
72:CamInterface.c **** #define CAM_G_BUS_DIR DDRB |
73:CamInterface.c **** #define CAM_RB_BUS PINC |
74:CamInterface.c **** #define CAM_RB_BUS_DIR DDRC |
75:CamInterface.c **** |
76:CamInterface.c **** #define CAM_CONTROL_PORT PORTD |
77:CamInterface.c **** #define CAM_CONTROL_PORT_DIR DDRD |
78:CamInterface.c **** #define CAM_RESET_LINE BIT7 |
79:CamInterface.c **** #define CAM_PIXEL_CLK_COUNT BIT5 |
80:CamInterface.c **** #define CAM_HREF BIT4 |
81:CamInterface.c **** #define CAM_PIXEL_CLK_INT BIT3 |
GAS LISTING /tmp/cc4KZ7ps.s page 4 |
|
|
82:CamInterface.c **** #define CAM_VSYNC BIT2 |
83:CamInterface.c **** |
84:CamInterface.c **** /* Global Variables */ |
85:CamInterface.c **** /* NOTE: This file MUST appear first in the Makefile for these variables to |
86:CamInterface.c **** be placed properly in RAM */ |
87:CamInterface.c **** |
88:CamInterface.c **** /* The colorMap[] table provides the membership lookup table to convert |
89:CamInterface.c **** RGB or YUV pixel values into actual colors. The membership table contains |
90: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 in |
92: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 accessed |
99: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 lines |
104: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 hold |
107: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 buffers |
110:CamInterface.c **** to store the acquired line data...we are actually grabbing ALL of the |
111: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 176 |
113: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 thus |
119: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_init |
127:CamInterface.c **** Function Description: This function is responsible |
128:CamInterface.c **** for initializing the camera interface. This includes |
129:CamInterface.c **** setting up the i/o ports that are used to read the |
130:CamInterface.c **** camera busses, as well as resetting the camera. |
131:CamInterface.c **** Inputs: none |
132:CamInterface.c **** Outputs: none |
133:CamInterface.c **** ***********************************************************/ |
134:CamInterface.c **** void CamInt_init(void) |
135:CamInterface.c **** { |
136:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP |
137:CamInterface.c **** unsigned char asciiBuffer[5]; |
138:CamInterface.c **** unsigned char i; |
GAS LISTING /tmp/cc4KZ7ps.s page 5 |
|
|
139:CamInterface.c **** #endif |
140:CamInterface.c **** |
141:CamInterface.c **** /* set up the mega8 ports that will be interfacing |
142: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 needs |
152:CamInterface.c **** to feed timer1 through the external counter, it will be enabled on an |
153: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, so |
160: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 of |
164: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 source |
171:CamInterface.c **** (HREF) on falling edges...eventually, we need to enable the interrupt |
172: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 after |
176:CamInterface.c **** we start receiving pixels in each line...we sacrifice the first pixel |
177: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 sleep |
180: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_MAP |
192: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); |
GAS LISTING /tmp/cc4KZ7ps.s page 6 |
|
|
196:CamInterface.c **** itoa(colorMap[i],asciiBuffer,10); |
197: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 **** #endif |
206:CamInterface.c **** |
207:CamInterface.c **** #ifndef NO_CRYSTAL |
208:CamInterface.c **** CamInt_resetCam(); |
209:CamInterface.c **** #endif |
210:CamInterface.c **** } |
211:CamInterface.c **** |
212:CamInterface.c **** /*********************************************************** |
213:CamInterface.c **** Function Name: CamInt_resetCam |
214:CamInterface.c **** Function Description: This function is responsible |
215:CamInterface.c **** for resetting the camera. This is accomplished by |
216:CamInterface.c **** toggling the reset line on the OV6620 for ~100 mS. |
217:CamInterface.c **** Inputs: none |
218:CamInterface.c **** Outputs: none |
219:CamInterface.c **** IMPORTANT NOTE: This function has effectively been removed |
220:CamInterface.c **** since resetting the camera now causes the camera to not |
221:CamInterface.c **** output the clock signal. Thus, if we reset the cam, the |
222:CamInterface.c **** AVR has no clock, and thus doesn't run... |
223:CamInterface.c **** ***********************************************************/ |
224:CamInterface.c **** void CamInt_resetCam(void) |
225:CamInterface.c **** { |
91 .stabn 68,0,225,.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,135,CamInt_init |
104 .global CamInt_init |
105 .type CamInt_init, @function |
106 CamInt_init: |
107 .stabd 46,0,0 |
108 .stabn 68,0,135,.LM1-CamInt_init |
109 .LM1: |
110 /* prologue: frame size=0 */ |
111 /* prologue end (size=0) */ |
112 .stabn 68,0,143,.LM2-CamInt_init |
113 .LM2: |
114 0002 8F9A sbi 49-0x20,7 |
115 .stabn 68,0,144,.LM3-CamInt_init |
116 .LM3: |
117 0004 8F9A sbi 49-0x20,7 |
GAS LISTING /tmp/cc4KZ7ps.s page 7 |
|
|
118 .stabn 68,0,145,.LM4-CamInt_init |
119 .LM4: |
120 0006 8A98 cbi 49-0x20,2 |
121 .stabn 68,0,146,.LM5-CamInt_init |
122 .LM5: |
123 0008 9798 cbi 50-0x20,7 |
124 .stabn 68,0,147,.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,148,.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,149,.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,154,.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,162,.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,167,.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,168,.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,173,.LM13-CamInt_init |
160 .LM13: |
161 0034 86E0 ldi r24,lo8(6) |
162 0036 83BF out 83-0x20,r24 |
163 .stabn 68,0,181,.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,183,.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,186,.LM16-CamInt_init |
174 .LM16: |
GAS LISTING /tmp/cc4KZ7ps.s page 8 |
|
|
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 **** */ |
44:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** |
GAS LISTING /tmp/cc4KZ7ps.s page 9 |
|
|
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 |
101:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** attempting any actual I/O. |
GAS LISTING /tmp/cc4KZ7ps.s page 10 |
|
|
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"))) |
158:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** |
GAS LISTING /tmp/cc4KZ7ps.s page 11 |
|
|
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 **** } |
215:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** |
GAS LISTING /tmp/cc4KZ7ps.s page 12 |
|
|
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) |
192 /* #APP */ |
GAS LISTING /tmp/cc4KZ7ps.s page 13 |
|
|
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,189,26 |
205 .stabs "pointer_ram:r(0,18)=*(0,15)",64,0,189,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,114,0 |
220 .stabs "previousLineBuffer:G(0,19)",32,0,115,0 |
221 .stabs "colorMap:G(0,21)=ar(0,20);0;47;(0,11)",32,0,100,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/cc4KZ7ps.s page 14 |
|
|
DEFINED SYMBOLS |
*ABS*:00000000 CamInterface.c |
/tmp/cc4KZ7ps.s:3 *ABS*:0000003f __SREG__ |
/tmp/cc4KZ7ps.s:4 *ABS*:0000003e __SP_H__ |
/tmp/cc4KZ7ps.s:5 *ABS*:0000003d __SP_L__ |
/tmp/cc4KZ7ps.s:6 *ABS*:00000000 __tmp_reg__ |
/tmp/cc4KZ7ps.s:7 *ABS*:00000001 __zero_reg__ |
/tmp/cc4KZ7ps.s:89 .text:00000000 CamInt_resetCam |
/tmp/cc4KZ7ps.s:106 .text:00000002 CamInt_init |
/tmp/cc4KZ7ps.s:217 .noinit:00000000 colorMap |
*COM*:000000b0 currentLineBuffer |
*COM*:000000b0 previousLineBuffer |
|
UNDEFINED SYMBOLS |
__do_copy_data |
__do_clear_bss |
__eeprom_read_block_1C1D1E |