Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 173 → Rev 174

/programy/Atmel_C/AVRcam/CamInterface.lst/CamInterface.lst
1,4 → 1,4
GAS LISTING /tmp/ccAE2QZt.s page 1
GAS LISTING /tmp/ccQQINeY.s page 1
 
 
1 .file "CamInterface.c"
10,7 → 10,7
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .stabs "/home/kaklik/projects/roboti/istrobot/2007/ATmega8/AVRcam/",100,0,2,.Ltext0
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:
58,7 → 58,7
55 .stabs "int_fast16_t:t(5,21)=(5,3)",128,0,210,0
56 .stabs "uint_fast16_t:t(5,22)=(5,4)",128,0,215,0
57 .stabs "int_fast32_t:t(5,23)=(5,5)",128,0,220,0
GAS LISTING /tmp/ccAE2QZt.s page 2
GAS LISTING /tmp/ccQQINeY.s page 2
 
 
58 .stabs "uint_fast32_t:t(5,24)=(5,6)",128,0,225,0
89,7 → 89,7
83 .stabs "CommonDefs.h",130,0,0,0
84 .stabs "bool_t:t(10,1)=(0,11)",128,0,56,0
85 .stabn 162,0,0,0
86 .stabs "CamInt_resetCam:F(0,15)",36,0,226,CamInt_resetCam
86 .stabs "CamInt_resetCam:F(0,15)",36,0,225,CamInt_resetCam
87 .global CamInt_resetCam
88 .type CamInt_resetCam, @function
89 CamInt_resetCam:
118,7 → 118,7
22:CamInterface.c **** john@jrobot.net
23:CamInterface.c ****
24:CamInterface.c **** or go to www.jrobot.net for more details regarding the system.
GAS LISTING /tmp/ccAE2QZt.s page 3
GAS LISTING /tmp/ccQQINeY.s page 3
 
 
25:CamInterface.c **** */
148,191 → 148,190
49:CamInterface.c ****
50:CamInterface.c **** /* Includes */
51:CamInterface.c **** #include <avr/interrupt.h>
52:CamInterface.c **** #include <avr/signal.h>
53:CamInterface.c **** #include <avr/sleep.h>
54:CamInterface.c **** #include <avr/eeprom.h>
55:CamInterface.c **** #include <stdlib.h>
56:CamInterface.c **** #include <string.h>
57:CamInterface.c **** #include "CommonDefs.h"
58:CamInterface.c **** #include "CamInterface.h"
59:CamInterface.c **** #include "Utility.h"
60:CamInterface.c **** #include "UIMgr.h"
61:CamInterface.c **** #include "Executive.h"
62:CamInterface.c **** #include "UartInterface.h"
63:CamInterface.c ****
64:CamInterface.c **** /* Local Variables */
65:CamInterface.c ****
66:CamInterface.c **** /* Local Structures and Typedefs */
67:CamInterface.c ****
68:CamInterface.c **** /* Definitions */
69:CamInterface.c **** //#define OUTPUT_INITIAL_COLOR_MAP 1
70:CamInterface.c ****
71:CamInterface.c **** #define FAST_ACQUIRE 1
72:CamInterface.c **** #define CAM_G_BUS PINB
73:CamInterface.c **** #define CAM_G_BUS_DIR DDRB
74:CamInterface.c **** #define CAM_RB_BUS PINC
75:CamInterface.c **** #define CAM_RB_BUS_DIR DDRC
76:CamInterface.c ****
77:CamInterface.c **** #define CAM_CONTROL_PORT PORTD
78:CamInterface.c **** #define CAM_CONTROL_PORT_DIR DDRD
79:CamInterface.c **** #define CAM_RESET_LINE BIT7
80:CamInterface.c **** #define CAM_PIXEL_CLK_COUNT BIT5
81:CamInterface.c **** #define CAM_HREF BIT4
GAS LISTING /tmp/ccAE2QZt.s page 4
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/ccQQINeY.s page 4
 
 
82:CamInterface.c **** #define CAM_PIXEL_CLK_INT BIT3
83:CamInterface.c **** #define CAM_VSYNC BIT2
84:CamInterface.c ****
85:CamInterface.c **** /* Global Variables */
86:CamInterface.c **** /* NOTE: This file MUST appear first in the Makefile for these variables to
87:CamInterface.c **** be placed properly in RAM */
88:CamInterface.c ****
89:CamInterface.c **** /* The colorMap[] table provides the membership lookup table to convert
90:CamInterface.c **** RGB or YUV pixel values into actual colors. The membership table contains
91:CamInterface.c **** 16 elements for each color channel, concatenated together. The Red (or Y)
92:CamInterface.c **** value is located in the first 16 bytes, the G (or U) value is located in
93:CamInterface.c **** the second 16 bytes, and the B (or V) value is located in the last 16 bytes:
94:CamInterface.c ****
95:CamInterface.c **** ----------------------------------------------------------------------------------
96:CamInterface.c **** |red0|red1|red2|...|red15|green0|green1|green2|...|green15|blue0|blue1|...|blue15|
97:CamInterface.c **** mem:|0x00 0x01 0x02 0x15 0x16 0x17 0x18 0x31 0x32 0x33 0x47 |
98:CamInterface.c **** ---------------------------------------------------------------------------------
99:CamInterface.c **** Thus, the red lookup is accessed at colorMap+0, the green lookup is accessed
100:CamInterface.c **** at colorMap+16, and the blue lookup is accessed at colorMap+32. */
101:CamInterface.c **** unsigned char colorMap[NUM_ELEMENTS_IN_COLOR_MAP] __attribute__ ((section (".noinit")));
102:CamInterface.c ****
103:CamInterface.c **** /* Extern Variables */
104:CamInterface.c **** /* These two buffers hold the current and previous lines
105:CamInterface.c **** of pixel data. They are sized to the worst case scenario,
106:CamInterface.c **** where the color changes between every pixel (unrealistic).
107:CamInterface.c **** The format of each buffer is for all the even bytes to hold
108:CamInterface.c **** the run-length, and the odd bytes to hold the color data. */
109:CamInterface.c ****
110:CamInterface.c **** /* In addition, if we are in frameDump mode, we use these buffers
111:CamInterface.c **** to store the acquired line data...we are actually grabbing ALL of the
112:CamInterface.c **** pixels in a line (176) instead of the 88 we get normally during tracking.
113:CamInterface.c **** But since we have enough to hold 88-RLE blocks, we already have the 176
114:CamInterface.c **** allocated for this... */
115:CamInterface.c **** unsigned char currentLineBuffer[LENGTH_OF_LINE_BUFFER];
116:CamInterface.c **** unsigned char previousLineBuffer[LENGTH_OF_LINE_BUFFER];
117:CamInterface.c ****
118:CamInterface.c **** /* Extern Functions */
119:CamInterface.c **** /* These functions are located in assembly files, and thus
120:CamInterface.c **** must be externed here so they can be referenced in the source below. */
121:CamInterface.c **** extern void CamIntAsm_waitForNewTrackingFrame(unsigned char *pBuffer, unsigned char *pMemLookup);
122:CamInterface.c **** extern void CamIntAsm_waitForNewDumpFrame(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);
123:CamInterface.c **** extern void CamIntAsm_acquireTrackingLine(unsigned char *pBuffer, unsigned char *pMemLookup);
124:CamInterface.c **** extern void CamIntAsm_acquireDumpLine(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);
125:CamInterface.c ****
126:CamInterface.c **** /***********************************************************
127:CamInterface.c **** Function Name: CamInt_init
128:CamInterface.c **** Function Description: This function is responsible
129:CamInterface.c **** for initializing the camera interface. This includes
130:CamInterface.c **** setting up the i/o ports that are used to read the
131:CamInterface.c **** camera busses, as well as resetting the camera.
132:CamInterface.c **** Inputs: none
133:CamInterface.c **** Outputs: none
134:CamInterface.c **** ***********************************************************/
135:CamInterface.c **** void CamInt_init(void)
136:CamInterface.c **** {
137:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP
138:CamInterface.c **** unsigned char asciiBuffer[5];
GAS LISTING /tmp/ccAE2QZt.s page 5
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/ccQQINeY.s page 5
 
 
139:CamInterface.c **** unsigned char i;
140:CamInterface.c **** #endif
141:CamInterface.c ****
142:CamInterface.c **** /* set up the mega8 ports that will be interfacing
143:CamInterface.c **** with the camera */
144:CamInterface.c **** CAM_CONTROL_PORT_DIR |= (1<<CAM_RESET_LINE); /* cam reset is output */
145:CamInterface.c **** CAM_CONTROL_PORT_DIR |= 0x80; /* set just the MSB as an output */
146:CamInterface.c **** CAM_CONTROL_PORT_DIR &= 0xFB; /* make sure bit2 is clear (input) */
147:CamInterface.c **** CAM_CONTROL_PORT &= 0x7F; /* set reset line low */
148:CamInterface.c **** CAM_G_BUS_DIR &= 0xF0; /* 4-bit G bus all inputs */
149:CamInterface.c **** CAM_G_BUS_DIR |= 0xF0; /* disable the pull-up on PB4 and PB5 */
150:CamInterface.c **** CAM_RB_BUS_DIR &= 0xF0; /* 4-bit RB bus all inputs */
151:CamInterface.c ****
152:CamInterface.c **** /* ensure that timer1 is disabled to start...eventually, when PCLK needs
153:CamInterface.c **** to feed timer1 through the external counter, it will be enabled on an
154:CamInterface.c **** "as needed" basis...*/
155:CamInterface.c **** TCCR1B &= ~( (1<<CS12)|(1<<CS11)|(1<<CS10) );
156:CamInterface.c ****
157:CamInterface.c **** /* we'll turn on the interrupt after we assign the initial TCNT value */
158:CamInterface.c ****
159:CamInterface.c **** /* set up External Interrupt1 to interrupt us on rising edges (HREF)...
160:CamInterface.c **** this is needed to indicate when the first pixel of each line is about to start, so
161:CamInterface.c **** we can synch up with it...this interrupt will be disabled once HREF goes high */
162:CamInterface.c ****
163:CamInterface.c **** MCUCR |= (1<<ISC11) | (1<<ISC10); /* rising edge interrupt */
164:CamInterface.c **** /* the interrupt will be enabled when we are ready to detect the rising edge of
165:CamInterface.c **** HREF...its now primed and ready to go */
166:CamInterface.c ****
167:CamInterface.c **** /* set up External Interrupt0 to interrupt us on rising edges (VSYNC) */
168:CamInterface.c **** MCUCR |= (1<<ISC01) | (1<<ISC00); /* rising edge interrupt */
169:CamInterface.c **** GICR |= (1<<INT0); /* interrupt request enabled */
170:CamInterface.c ****
171:CamInterface.c **** /* set up TimerO to count and be clocked from an external pulse source
172:CamInterface.c **** (HREF) on falling edges...eventually, we need to enable the interrupt
173:CamInterface.c **** for this! FIX THIS */
174:CamInterface.c **** TCCR0 = (1<<CS02)|(1<<CS01)|(0<<CS00);
175:CamInterface.c ****
176:CamInterface.c **** /* setting up the PCLK counter with Timer1 will be done right after
177:CamInterface.c **** we start receiving pixels in each line...we sacrifice the first pixel
178:CamInterface.c **** in each line, but we'll account for it...*/
179:CamInterface.c ****
180:CamInterface.c **** /* set up the mega8 so that its sleep mode puts it in an IDLE sleep
181:CamInterface.c **** mode, where it can wake up as fast as possible */
182:CamInterface.c **** set_sleep_mode(SLEEP_MODE_IDLE);
183:CamInterface.c **** /* umm....we need to actually enable the sleep mode...*/
184:CamInterface.c **** MCUCR |= 0x80;
185:CamInterface.c ****
186:CamInterface.c **** /* initialize the memLookup table */
187:CamInterface.c **** memset(colorMap,0x00,NUM_ELEMENTS_IN_COLOR_MAP);
188:CamInterface.c ****
189:CamInterface.c **** /* read the color map out of EEPROM */
190:CamInterface.c **** eeprom_read_block(colorMap, (unsigned char*)0x01,NUM_ELEMENTS_IN_COLOR_MAP);
191:CamInterface.c ****
192:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP
193:CamInterface.c **** UIMgr_txBuffer("\r\n",2);
194:CamInterface.c **** for (i=0; i<NUM_ELEMENTS_IN_COLOR_MAP; i++)
195:CamInterface.c **** {
GAS LISTING /tmp/ccAE2QZt.s page 6
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/ccQQINeY.s page 6
 
 
196:CamInterface.c **** memset(asciiBuffer,0x00,5);
197:CamInterface.c **** itoa(colorMap[i],asciiBuffer,10);
198:CamInterface.c **** UIMgr_txBuffer(asciiBuffer,3);
199:CamInterface.c **** UIMgr_txBuffer(" ",1);
200:CamInterface.c **** if (i==15 || i == 31)
201:CamInterface.c **** {
202:CamInterface.c **** /* break up the output */
203:CamInterface.c **** UIMgr_txBuffer("\r\n",2);
204:CamInterface.c **** }
205:CamInterface.c **** }
206:CamInterface.c **** #endif
207:CamInterface.c ****
208:CamInterface.c **** #ifndef NO_CRYSTAL
209:CamInterface.c **** CamInt_resetCam();
210:CamInterface.c **** #endif
211:CamInterface.c **** }
212:CamInterface.c ****
213:CamInterface.c **** /***********************************************************
214:CamInterface.c **** Function Name: CamInt_resetCam
215:CamInterface.c **** Function Description: This function is responsible
216:CamInterface.c **** for resetting the camera. This is accomplished by
217:CamInterface.c **** toggling the reset line on the OV6620 for ~100 mS.
218:CamInterface.c **** Inputs: none
219:CamInterface.c **** Outputs: none
220:CamInterface.c **** IMPORTANT NOTE: This function has effectively been removed
221:CamInterface.c **** since resetting the camera now causes the camera to not
222:CamInterface.c **** output the clock signal. Thus, if we reset the cam, the
223:CamInterface.c **** AVR has no clock, and thus doesn't run...
224:CamInterface.c **** ***********************************************************/
225:CamInterface.c **** void CamInt_resetCam(void)
226:CamInterface.c **** {
91 .stabn 68,0,226,.LM0-CamInt_resetCam
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) */
344,84 → 343,84
100 .Lscope0:
101 .stabs "",36,0,0,.Lscope0-CamInt_resetCam
102 .stabd 78,0,0
103 .stabs "CamInt_init:F(0,15)",36,0,136,CamInt_init
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,136,.LM1-CamInt_init
108 .stabn 68,0,135,.LM1-CamInt_init
109 .LM1:
110 /* prologue: frame size=0 */
111 /* prologue end (size=0) */
112 .stabn 68,0,144,.LM2-CamInt_init
112 .stabn 68,0,143,.LM2-CamInt_init
113 .LM2:
114 0002 8F9A sbi 49-0x20,7
115 .stabn 68,0,145,.LM3-CamInt_init
115 .stabn 68,0,144,.LM3-CamInt_init
116 .LM3:
GAS LISTING /tmp/ccAE2QZt.s page 7
117 0004 8F9A sbi 49-0x20,7
GAS LISTING /tmp/ccQQINeY.s page 7
 
 
117 0004 8F9A sbi 49-0x20,7
118 .stabn 68,0,146,.LM4-CamInt_init
118 .stabn 68,0,145,.LM4-CamInt_init
119 .LM4:
120 0006 8A98 cbi 49-0x20,2
121 .stabn 68,0,147,.LM5-CamInt_init
121 .stabn 68,0,146,.LM5-CamInt_init
122 .LM5:
123 0008 9798 cbi 50-0x20,7
124 .stabn 68,0,148,.LM6-CamInt_init
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,149,.LM7-CamInt_init
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,150,.LM8-CamInt_init
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,155,.LM9-CamInt_init
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,163,.LM10-CamInt_init
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,168,.LM11-CamInt_init
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,169,.LM12-CamInt_init
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,174,.LM13-CamInt_init
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,182,.LM14-CamInt_init
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,184,.LM15-CamInt_init
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,187,.LM16-CamInt_init
GAS LISTING /tmp/ccAE2QZt.s page 8
173 .stabn 68,0,186,.LM16-CamInt_init
174 .LM16:
GAS LISTING /tmp/ccQQINeY.s page 8
 
 
174 .LM16:
175 0044 E0E0 ldi r30,lo8(colorMap)
176 0046 F0E0 ldi r31,hi8(colorMap)
177 0048 80E3 ldi r24,lo8(48)
478,10 → 477,10
41:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** Complete rewrite using the original interface by Bjoern Haase
42:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** <bjoern.haase@de.bosch.com>.
43:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** */
GAS LISTING /tmp/ccAE2QZt.s page 9
44:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****
GAS LISTING /tmp/ccQQINeY.s page 9
 
 
44:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****
45:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #ifndef _EEPROM_H_
46:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define _EEPROM_H_ 1
47:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****
538,10 → 537,10
98:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** is ready to be accessed. Since this may cause long delays if a
99:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** write operation is still pending, time-critical applications
100:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** should first poll the EEPROM e. g. using eeprom_is_ready() before
GAS LISTING /tmp/ccAE2QZt.s page 10
101:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** attempting any actual I/O.
GAS LISTING /tmp/ccQQINeY.s page 10
 
 
101:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** attempting any actual I/O.
102:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****
103:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** \note This header file declares inline functions that call the
104:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** assembler subroutines directly. This prevents that the compiler
598,10 → 597,10
155:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** Attribute expression causing a variable to be allocated within the .eeprom
156:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** section. */
157:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** #define EEMEM __attribute__((section(".eeprom")))
GAS LISTING /tmp/ccAE2QZt.s page 11
158:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****
GAS LISTING /tmp/ccQQINeY.s page 11
 
 
158:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****
159:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_is_ready
160:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** \ingroup avr_eeprom
161:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** \returns 1 if EEPROM is ready for a new read/write operation, 0 if not. */
658,10 → 657,10
212:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** : );
213:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** return result;
214:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** }
GAS LISTING /tmp/ccAE2QZt.s page 12
215:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****
GAS LISTING /tmp/ccQQINeY.s page 12
 
 
215:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h ****
216:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
217:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** Read a block of \c n bytes from EEPROM address \c pointer_eeprom to
218:/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/eeprom.h **** \c pointer_ram. For constant n <= 256 bytes a library function is used.
718,10 → 717,10
189 .LM17:
190 0054 A1E0 ldi r26,lo8(1)
191 0056 B0E0 ldi r27,hi8(1)
GAS LISTING /tmp/ccAE2QZt.s page 13
192 /* #APP */
GAS LISTING /tmp/ccQQINeY.s page 13
 
 
192 /* #APP */
193 0058 182E mov __zero_reg__,r24
194 005a 00D0 rcall __eeprom_read_block_1C1D1E
195 /* #NOAPP */
733,8 → 732,8
201 /* epilogue end (size=1) */
202 /* function CamInt_init size 48 (47) */
203 .size CamInt_init, .-CamInt_init
204 .stabs "pointer_eeprom:r(0,16)=*(0,17)=k(0,15)",64,0,190,26
205 .stabs "pointer_ram:r(0,18)=*(0,15)",64,0,190,30
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:
752,26 → 751,26
218 0000 0000
218 0000 0000
218 0000 0000
219 .stabs "currentLineBuffer:G(0,19)=ar(0,20)=r(0,20);0;0177777;;0;175;(0,11)",32,0,115,0
220 .stabs "previousLineBuffer:G(0,19)",32,0,116,0
221 .stabs "colorMap:G(0,21)=ar(0,20);0;47;(0,11)",32,0,101,0
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/ccAE2QZt.s page 14
GAS LISTING /tmp/ccQQINeY.s page 14
 
 
DEFINED SYMBOLS
*ABS*:00000000 CamInterface.c
/tmp/ccAE2QZt.s:3 *ABS*:0000003f __SREG__
/tmp/ccAE2QZt.s:4 *ABS*:0000003e __SP_H__
/tmp/ccAE2QZt.s:5 *ABS*:0000003d __SP_L__
/tmp/ccAE2QZt.s:6 *ABS*:00000000 __tmp_reg__
/tmp/ccAE2QZt.s:7 *ABS*:00000001 __zero_reg__
/tmp/ccAE2QZt.s:89 .text:00000000 CamInt_resetCam
/tmp/ccAE2QZt.s:106 .text:00000002 CamInt_init
/tmp/ccAE2QZt.s:217 .noinit:00000000 colorMap
/tmp/ccQQINeY.s:3 *ABS*:0000003f __SREG__
/tmp/ccQQINeY.s:4 *ABS*:0000003e __SP_H__
/tmp/ccQQINeY.s:5 *ABS*:0000003d __SP_L__
/tmp/ccQQINeY.s:6 *ABS*:00000000 __tmp_reg__
/tmp/ccQQINeY.s:7 *ABS*:00000001 __zero_reg__
/tmp/ccQQINeY.s:89 .text:00000000 CamInt_resetCam
/tmp/ccQQINeY.s:106 .text:00000002 CamInt_init
/tmp/ccQQINeY.s:217 .noinit:00000000 colorMap
*COM*:000000b0 currentLineBuffer
*COM*:000000b0 previousLineBuffer