Rev 410 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download
GAS LISTING /tmp/ccowxWMg.s page 1
1 # 1 "CamInterfaceAsm.S"
2 # 1 "<built-in>"
1 ;
0
0
2 ; Copyright (C) 2004 John Orlando
3 ;
4 ; AVRcam: a small real-time image processing engine.
5
6 ; This program is free software; you can redistribute it and/or
7 ; modify it under the terms of the GNU General Public
8 ; License as published by the Free Software Foundation; either
9 ; version 2 of the License, or (at your option) any later version.
10
11 ; This program is distributed in the hope that it will be useful,
12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ; General Public License for more details.
15
16 ; You should have received a copy of the GNU General Public
17 ; License along with this program; if not, write to the Free Software
18 ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20 ; For more information on the AVRcam, please contact:
21
22 ; john@jrobot.net
23
24 ; or go to www.jrobot.net for more details regarding the system.
25 ;**********************************************************************
26 ; Module Name: CanInterfaceAsm.S
27 ; Module Date: 04/14/2004
28 ; Module Auth: John Orlando
29 ;
30 ; Description: This module provides the low-level interface
31 ; to the OV6620 camera hardware. It is responsible for
32 ; acquiring each pixel block (R,G,B), performing the mapping
33 ; into an actual color (orange, purple, etc), run-length
34 ; encoding the data, and storing the info off to the appropriate
35 ; line buffer. This routine is synchronized with the pixel data
36 ; so that no polling of the camera data needs to be done (the
37 ; OV6620 is clocked off of the same crystal source as the mega8,
38 ; thus providing inherent synchronization between the two).
39 ;
40 ; Revision History:
41 ; Date Rel Ver. Notes
42 ; 4/10/2004 0.1 Module created
43 ; 6/30/2004 1.0 Initial release for Circuit Cellar
44 ; contest.
45 ; 1/16/2005 1.4 Fixed issue with the TCCR1B register
46 ; where PCLK was getting routed to the
47 ; timer1 even when it wasn't needed.
48 ; This caused excessive counter overflow
49 ; interrupts, and caused problems. Now,
50 ; the "PCLK" pipe feeds timer1 when needed,
51 ; and is turned off when it isn't needed.
52
53 #include <avr/io.h>
GAS LISTING /tmp/ccowxWMg.s page 2
1 /* Copyright (c) 2002,2003,2005,2006, Marek Michalkiewicz, Joerg Wunsch
2 All rights reserved.
3
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9
10 * Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in
12 the documentation and/or other materials provided with the
13 distribution.
14
15 * Neither the name of the copyright holders nor the names of
16 contributors may be used to endorse or promote products derived
17 from this software without specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 POSSIBILITY OF SUCH DAMAGE. */
30
31 /* $Id: io.h,v 1.24.2.9 2006/09/13 20:41:41 arcanum Exp $ */
32
33 /** \defgroup avr_io <avr/io.h>: AVR device-specific IO definitions
34 \code #include <avr/io.h> \endcode
35
36 This header file includes the apropriate IO definitions for the
37 device that has been specified by the <tt>-mmcu=</tt> compiler
38 command-line switch. This is done by diverting to the appropriate
39 file <tt><avr/io</tt><em>XXXX</em><tt>.h></tt> which should
40 never be included directly. Some register names common to all
41 AVR devices are defined directly within <tt><avr/io.h></tt>,
42 but most of the details come from the respective include file.
43
44 Note that this file always includes
45 \code #include <avr/sfr_defs.h> \endcode
46 See \ref avr_sfr for the details.
47
48 Included are definitions of the IO register set and their
49 respective bit values as specified in the Atmel documentation.
50 Note that Atmel is not very consistent in its naming conventions,
51 so even identical functions sometimes get different names on
52 different devices.
53
54 Also included are the specific names useable for interrupt
55 function definitions as documented
56 \ref avr_signames "here".
57
GAS LISTING /tmp/ccowxWMg.s page 3
58 Finally, the following macros are defined:
59
60 - \b RAMEND
61 <br>
62 A constant describing the last on-chip RAM location.
63 <br>
64 - \b XRAMEND
65 <br>
66 A constant describing the last possible location in RAM.
67 This is equal to RAMEND for devices that do not allow for
68 external RAM.
69 <br>
70 - \b E2END
71 <br>
72 A constant describing the address of the last EEPROM cell.
73 <br>
74 - \b FLASHEND
75 <br>
76 A constant describing the last byte address in flash ROM.
77 <br>
78 - \b SPM_PAGESIZE
79 <br>
80 For devices with bootloader support, the flash pagesize
81 (in bytes) to be used for the \c SPM instruction. */
82
83 #ifndef _AVR_IO_H_
84 #define _AVR_IO_H_
85
86 #include <avr/sfr_defs.h>
1 /* Copyright (c) 2002, Marek Michalkiewicz <marekm@amelek.gda.pl>
2 All rights reserved.
3
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9
10 * Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in
12 the documentation and/or other materials provided with the
13 distribution.
14
15 * Neither the name of the copyright holders nor the names of
16 contributors may be used to endorse or promote products derived
17 from this software without specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
GAS LISTING /tmp/ccowxWMg.s page 4
29 POSSIBILITY OF SUCH DAMAGE. */
30
31 /* avr/sfr_defs.h - macros for accessing AVR special function registers */
32
33 /* $Id: sfr_defs.h,v 1.16.2.2 2006/05/17 08:25:10 joerg_wunsch Exp $ */
34
35 #ifndef _AVR_SFR_DEFS_H_
36 #define _AVR_SFR_DEFS_H_ 1
37
38 /** \defgroup avr_sfr_notes Additional notes from <avr/sfr_defs.h>
39 \ingroup avr_sfr
40
41 The \c <avr/sfr_defs.h> file is included by all of the \c <avr/ioXXXX.h>
42 files, which use macros defined here to make the special function register
43 definitions look like C variables or simple constants, depending on the
44 <tt>_SFR_ASM_COMPAT</tt> define. Some examples from \c <avr/iocanxx.h> to
45 show how to define such macros:
46
47 \code
48 #define PORTA _SFR_IO8(0x02)
49 #define EEAR _SFR_IO16(0x21)
50 #define UDR0 _SFR_MEM8(0xC6)
51 #define TCNT3 _SFR_MEM16(0x94)
52 #define CANIDT _SFR_MEM32(0xF0)
53 \endcode
54
55 If \c _SFR_ASM_COMPAT is not defined, C programs can use names like
56 <tt>PORTA</tt> directly in C expressions (also on the left side of
57 assignment operators) and GCC will do the right thing (use short I/O
58 instructions if possible). The \c __SFR_OFFSET definition is not used in
59 any way in this case.
60
61 Define \c _SFR_ASM_COMPAT as 1 to make these names work as simple constants
62 (addresses of the I/O registers). This is necessary when included in
63 preprocessed assembler (*.S) source files, so it is done automatically if
64 \c __ASSEMBLER__ is defined. By default, all addresses are defined as if
65 they were memory addresses (used in \c lds/sts instructions). To use these
66 addresses in \c in/out instructions, you must subtract 0x20 from them.
67
68 For more backwards compatibility, insert the following at the start of your
69 old assembler source file:
70
71 \code
72 #define __SFR_OFFSET 0
73 \endcode
74
75 This automatically subtracts 0x20 from I/O space addresses, but it's a
76 hack, so it is recommended to change your source: wrap such addresses in
77 macros defined here, as shown below. After this is done, the
78 <tt>__SFR_OFFSET</tt> definition is no longer necessary and can be removed.
79
80 Real example - this code could be used in a boot loader that is portable
81 between devices with \c SPMCR at different addresses.
82
83 \verbatim
84 <avr/iom163.h>: #define SPMCR _SFR_IO8(0x37)
85 <avr/iom128.h>: #define SPMCR _SFR_MEM8(0x68)
GAS LISTING /tmp/ccowxWMg.s page 5
86 \endverbatim
87
87
88 #ifndef __AVR_HAVE_MOVW__
89 # if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
90 # define __AVR_HAVE_MOVW__ 1
91 # endif
92 #endif
93
94 #ifndef __AVR_HAVE_LPMX__
95 # if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
96 # define __AVR_HAVE_LPMX__ 1
97 # endif
98 #endif
99
100 /*
101 * Registers common to all AVR devices.
102 */
103
104 #if __AVR_ARCH__ != 1
105 /*
106 * AVR architecture 1 has no RAM, thus no stack pointer.
107 *
108 * All other archs do have a stack pointer. Some devices have only
109 * less than 256 bytes of possible RAM locations (128 Bytes of SRAM
110 * and no option for external RAM), thus SPH is officially "reserved"
111 * for them. We catch this case below after including the
112 * device-specific ioXXXX.h file, by examining XRAMEND, and
113 * #undef-ining SP and SPH in that case.
114 */
115 /* Stack Pointer */
116 #define SP _SFR_IO16(0x3D)
117 #define SPL _SFR_IO8(0x3D)
118 #define SPH _SFR_IO8(0x3E)
119 #endif /* #if __AVR_ARCH__ != 1 */
120
121 /* Status REGister */
122 #define SREG _SFR_IO8(0x3F)
123
124 /* Status Register - SREG */
125 #define SREG_I 7
126 #define SREG_T 6
127 #define SREG_H 5
128 #define SREG_S 4
129 #define SREG_V 3
130 #define SREG_N 2
131 #define SREG_Z 1
132 #define SREG_C 0
133
134 /* Pointer definition */
135 #if __AVR_ARCH__ != 1
136 /* avr1 has only the Z pointer */
137 #define XL r26
138 #define XH r27
139 #define YL r28
140 #define YH r29
141 #endif /* #if __AVR_ARCH__ != 1 */
GAS LISTING /tmp/ccowxWMg.s page 6
142 #define ZL r30
143 #define ZH r31
144
145 /*
146 * Only few devices come without EEPROM. In order to assemble the
147 * EEPROM library components without defining a specific device, we
148 * keep the EEPROM-related definitions here.
149 */
150 #if defined(__COMPILING_AVR_LIBC__)
151
152 /* EEPROM Control Register */
153 #define EECR _SFR_IO8(0x1C)
154
155 /* EEPROM Data Register */
156 #define EEDR _SFR_IO8(0x1D)
157
158 /* EEPROM Address Register */
159 #define EEAR _SFR_IO16(0x1E)
160 #define EEARL _SFR_IO8(0x1E)
161 #define EEARH _SFR_IO8(0x1F)
162
163 /* EEPROM Control Register */
164 #define EERIE 3
165 #define EEMWE 2
166 #define EEWE 1
167 #define EERE 0
168
169 #endif /* __COMPILING_AVR_LIBC__ */
170
171 #if defined (__AVR_AT94K__)
172 # include <avr/ioat94k.h>
173 #elif defined (__AVR_AT43USB320__)
174 # include <avr/io43u32x.h>
175 #elif defined (__AVR_AT43USB355__)
176 # include <avr/io43u35x.h>
177 #elif defined (__AVR_AT76C711__)
178 # include <avr/io76c711.h>
179 #elif defined (__AVR_AT86RF401__)
180 # include <avr/io86r401.h>
181 #elif defined (__AVR_AT90PWM2__)
182 # include <avr/io90pwmx.h>
183 #elif defined (__AVR_AT90PWM3__)
184 # include <avr/io90pwmx.h>
185 #elif defined (__AVR_ATmega128__)
186 # include <avr/iom128.h>
187 #elif defined (__AVR_ATmega1280__)
188 # include <avr/iom1280.h>
189 #elif defined (__AVR_ATmega1281__)
190 # include <avr/iom1281.h>
191 #elif defined (__AVR_ATmega2560__)
192 # include <avr/iom2560.h>
193 #elif defined (__AVR_ATmega2561__)
194 # include <avr/iom2561.h>
195 #elif defined (__AVR_AT90CAN32__)
196 # include <avr/iocan32.h>
197 #elif defined (__AVR_AT90CAN64__)
198 # include <avr/iocan64.h>
GAS LISTING /tmp/ccowxWMg.s page 7
199 #elif defined (__AVR_AT90CAN128__)
200 # include <avr/iocan128.h>
201 #elif defined (__AVR_AT90USB646__)
202 # include <avr/iousb646.h>
203 #elif defined (__AVR_AT90USB647__)
204 # include <avr/iousb647.h>
205 #elif defined (__AVR_AT90USB1286__)
206 # include <avr/iousb1286.h>
207 #elif defined (__AVR_AT90USB1287__)
208 # include <avr/iousb1287.h>
209 #elif defined (__AVR_ATmega64__)
210 # include <avr/iom64.h>
211 #elif defined (__AVR_ATmega640__)
212 # include <avr/iom640.h>
213 #elif defined (__AVR_ATmega644__)
214 # include <avr/iom644.h>
215 #elif defined (__AVR_ATmega644P__)
216 # include <avr/iom644.h>
217 #elif defined (__AVR_ATmega645__)
218 # include <avr/iom645.h>
219 #elif defined (__AVR_ATmega6450__)
220 # include <avr/iom6450.h>
221 #elif defined (__AVR_ATmega649__)
222 # include <avr/iom649.h>
223 #elif defined (__AVR_ATmega6490__)
224 # include <avr/iom6490.h>
225 #elif defined (__AVR_ATmega103__)
226 # include <avr/iom103.h>
227 #elif defined (__AVR_ATmega32__)
228 # include <avr/iom32.h>
229 #elif defined (__AVR_ATmega323__)
230 # include <avr/iom323.h>
231 #elif defined (__AVR_ATmega324P__)
232 # include <avr/iom324.h>
233 #elif defined (__AVR_ATmega325__)
234 # include <avr/iom325.h>
235 #elif defined (__AVR_ATmega3250__)
236 # include <avr/iom3250.h>
237 #elif defined (__AVR_ATmega329__)
238 # include <avr/iom329.h>
239 #elif defined (__AVR_ATmega3290__)
240 # include <avr/iom3290.h>
241 #elif defined (__AVR_ATmega406__)
242 # include <avr/iom406.h>
243 #elif defined (__AVR_ATmega16__)
244 # include <avr/iom16.h>
245 #elif defined (__AVR_ATmega161__)
246 # include <avr/iom161.h>
247 #elif defined (__AVR_ATmega162__)
248 # include <avr/iom162.h>
249 #elif defined (__AVR_ATmega163__)
250 # include <avr/iom163.h>
251 #elif defined (__AVR_ATmega164P__)
252 # include <avr/iom164.h>
253 #elif defined (__AVR_ATmega165__)
254 # include <avr/iom165.h>
255 #elif defined (__AVR_ATmega165P__)
GAS LISTING /tmp/ccowxWMg.s page 8
256 # include <avr/iom165p.h>
257 #elif defined (__AVR_ATmega168__)
258 # include <avr/iom168.h>
259 #elif defined (__AVR_ATmega169__)
260 # include <avr/iom169.h>
261 #elif defined (__AVR_ATmega169P__)
262 # include <avr/iom169p.h>
263 #elif defined (__AVR_ATmega8__)
264 # include <avr/iom8.h>
1 /* Copyright (c) 2002, Marek Michalkiewicz
2 All rights reserved.
3
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9
10 * Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in
12 the documentation and/or other materials provided with the
13 distribution.
14
15 * Neither the name of the copyright holders nor the names of
16 contributors may be used to endorse or promote products derived
17 from this software without specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 POSSIBILITY OF SUCH DAMAGE. */
30
31 /* $Id: iom8.h,v 1.13 2005/10/30 22:11:23 joerg_wunsch Exp $ */
32
33 /* avr/iom8.h - definitions for ATmega8 */
34
35 #ifndef _AVR_IOM8_H_
36 #define _AVR_IOM8_H_ 1
37
38 /* This file should only be included from <avr/io.h>, never directly. */
39
40 #ifndef _AVR_IO_H_
41 # error "Include <avr/io.h> instead of this file."
42 #endif
43
44 #ifndef _AVR_IOXXX_H_
45 # define _AVR_IOXXX_H_ "iom8.h"
46 #else
47 # error "Attempt to include more than one <avr/ioXXX.h> file."
48 #endif
GAS LISTING /tmp/ccowxWMg.s page 9
49
50 /* I/O registers */
51
52 /* TWI stands for "Two Wire Interface" or "TWI Was I2C(tm)" */
53 #define TWBR _SFR_IO8(0x00)
54 #define TWSR _SFR_IO8(0x01)
55 #define TWAR _SFR_IO8(0x02)
56 #define TWDR _SFR_IO8(0x03)
57
58 /* ADC */
59 #define ADCW _SFR_IO16(0x04)
60 #ifndef __ASSEMBLER__
61 #define ADC _SFR_IO16(0x04)
62 #endif
63 #define ADCL _SFR_IO8(0x04)
64 #define ADCH _SFR_IO8(0x05)
65 #define ADCSR _SFR_IO8(0x06)
66 #define ADCSRA _SFR_IO8(0x06) /* Changed in 2486H-AVR-09/02 */
67 #define ADMUX _SFR_IO8(0x07)
68
69 /* analog comparator */
70 #define ACSR _SFR_IO8(0x08)
71
72 /* USART */
73 #define UBRRL _SFR_IO8(0x09)
74 #define UCSRB _SFR_IO8(0x0A)
75 #define UCSRA _SFR_IO8(0x0B)
76 #define UDR _SFR_IO8(0x0C)
77
78 /* SPI */
79 #define SPCR _SFR_IO8(0x0D)
80 #define SPSR _SFR_IO8(0x0E)
81 #define SPDR _SFR_IO8(0x0F)
82
83 /* Port D */
84 #define PIND _SFR_IO8(0x10)
85 #define DDRD _SFR_IO8(0x11)
86 #define PORTD _SFR_IO8(0x12)
87
88 /* Port C */
89 #define PINC _SFR_IO8(0x13)
90 #define DDRC _SFR_IO8(0x14)
91 #define PORTC _SFR_IO8(0x15)
92
93 /* Port B */
94 #define PINB _SFR_IO8(0x16)
95 #define DDRB _SFR_IO8(0x17)
96 #define PORTB _SFR_IO8(0x18)
97
98 /* EEPROM Control Register */
99 #define EECR _SFR_IO8(0x1C)
100
101 /* EEPROM Data Register */
102 #define EEDR _SFR_IO8(0x1D)
103
104 /* EEPROM Address Register */
105 #define EEAR _SFR_IO16(0x1E)
GAS LISTING /tmp/ccowxWMg.s page 10
106 #define EEARL _SFR_IO8(0x1E)
107 #define EEARH _SFR_IO8(0x1F)
108
109 #define UCSRC _SFR_IO8(0x20)
110 #define UBRRH _SFR_IO8(0x20)
111
112 #define WDTCR _SFR_IO8(0x21)
113 #define ASSR _SFR_IO8(0x22)
114
115 /* Timer 2 */
116 #define OCR2 _SFR_IO8(0x23)
117 #define TCNT2 _SFR_IO8(0x24)
118 #define TCCR2 _SFR_IO8(0x25)
119
120 /* Timer 1 */
121 #define ICR1 _SFR_IO16(0x26)
122 #define ICR1L _SFR_IO8(0x26)
123 #define ICR1H _SFR_IO8(0x27)
124 #define OCR1B _SFR_IO16(0x28)
125 #define OCR1BL _SFR_IO8(0x28)
126 #define OCR1BH _SFR_IO8(0x29)
127 #define OCR1A _SFR_IO16(0x2A)
128 #define OCR1AL _SFR_IO8(0x2A)
129 #define OCR1AH _SFR_IO8(0x2B)
130 #define TCNT1 _SFR_IO16(0x2C)
131 #define TCNT1L _SFR_IO8(0x2C)
132 #define TCNT1H _SFR_IO8(0x2D)
133 #define TCCR1B _SFR_IO8(0x2E)
134 #define TCCR1A _SFR_IO8(0x2F)
135
136 #define SFIOR _SFR_IO8(0x30)
137
138 #define OSCCAL _SFR_IO8(0x31)
139
140 /* Timer 0 */
141 #define TCNT0 _SFR_IO8(0x32)
142 #define TCCR0 _SFR_IO8(0x33)
143
144 #define MCUCSR _SFR_IO8(0x34)
145 #define MCUCR _SFR_IO8(0x35)
146
147 #define TWCR _SFR_IO8(0x36)
148
149 #define SPMCR _SFR_IO8(0x37)
150
151 #define TIFR _SFR_IO8(0x38)
152 #define TIMSK _SFR_IO8(0x39)
153
154 #define GIFR _SFR_IO8(0x3A)
155 #define GIMSK _SFR_IO8(0x3B)
156 #define GICR _SFR_IO8(0x3B) /* Changed in 2486H-AVR-09/02 */
157
158 /* 0x3C reserved (OCR0?) */
159
160 /* 0x3D..0x3E SP */
161
162 /* 0x3F SREG */
GAS LISTING /tmp/ccowxWMg.s page 11
163
164 /* Interrupt vectors */
165
166 /* External Interrupt Request 0 */
167 #define INT0_vect _VECTOR(1)
168 #define SIG_INTERRUPT0 _VECTOR(1)
169
170 /* External Interrupt Request 1 */
171 #define INT1_vect _VECTOR(2)
172 #define SIG_INTERRUPT1 _VECTOR(2)
173
174 /* Timer/Counter2 Compare Match */
175 #define TIMER2_COMP_vect _VECTOR(3)
176 #define SIG_OUTPUT_COMPARE2 _VECTOR(3)
177
178 /* Timer/Counter2 Overflow */
179 #define TIMER2_OVF_vect _VECTOR(4)
180 #define SIG_OVERFLOW2 _VECTOR(4)
181
182 /* Timer/Counter1 Capture Event */
183 #define TIMER1_CAPT_vect _VECTOR(5)
184 #define SIG_INPUT_CAPTURE1 _VECTOR(5)
185
186 /* Timer/Counter1 Compare Match A */
187 #define TIMER1_COMPA_vect _VECTOR(6)
188 #define SIG_OUTPUT_COMPARE1A _VECTOR(6)
189
190 /* Timer/Counter1 Compare Match B */
191 #define TIMER1_COMPB_vect _VECTOR(7)
192 #define SIG_OUTPUT_COMPARE1B _VECTOR(7)
193
194 /* Timer/Counter1 Overflow */
195 #define TIMER1_OVF_vect _VECTOR(8)
196 #define SIG_OVERFLOW1 _VECTOR(8)
197
198 /* Timer/Counter0 Overflow */
199 #define TIMER0_OVF_vect _VECTOR(9)
200 #define SIG_OVERFLOW0 _VECTOR(9)
201
202 /* Serial Transfer Complete */
203 #define SPI_STC_vect _VECTOR(10)
204 #define SIG_SPI _VECTOR(10)
205
206 /* USART, Rx Complete */
207 #define USART_RXC_vect _VECTOR(11)
208 #define SIG_UART_RECV _VECTOR(11)
209
210 /* USART Data Register Empty */
211 #define USART_UDRE_vect _VECTOR(12)
212 #define SIG_UART_DATA _VECTOR(12)
213
214 /* USART, Tx Complete */
215 #define USART_TXC_vect _VECTOR(13)
216 #define SIG_UART_TRANS _VECTOR(13)
217
218 /* ADC Conversion Complete */
219 #define ADC_vect _VECTOR(14)
GAS LISTING /tmp/ccowxWMg.s page 12
220 #define SIG_ADC _VECTOR(14)
221
222 /* EEPROM Ready */
223 #define EE_RDY_vect _VECTOR(15)
224 #define SIG_EEPROM_READY _VECTOR(15)
225
226 /* Analog Comparator */
227 #define ANA_COMP_vect _VECTOR(16)
228 #define SIG_COMPARATOR _VECTOR(16)
229
230 /* 2-wire Serial Interface */
231 #define TWI_vect _VECTOR(17)
232 #define SIG_2WIRE_SERIAL _VECTOR(17)
233
234 /* Store Program Memory Ready */
235 #define SPM_RDY_vect _VECTOR(18)
236 #define SIG_SPM_READY _VECTOR(18)
237
238 #define _VECTORS_SIZE 38
239
240 /* Bit numbers */
241
242 /* GIMSK / GICR */
243 #define INT1 7
244 #define INT0 6
245 #define IVSEL 1
246 #define IVCE 0
247
248 /* GIFR */
249 #define INTF1 7
250 #define INTF0 6
251
252 /* TIMSK */
253 #define OCIE2 7
254 #define TOIE2 6
255 #define TICIE1 5
256 #define OCIE1A 4
257 #define OCIE1B 3
258 #define TOIE1 2
259 /* bit 1 reserved (OCIE0?) */
260 #define TOIE0 0
261
262 /* TIFR */
263 #define OCF2 7
264 #define TOV2 6
265 #define ICF1 5
265 #elif defined (__AVR_ATmega48__)
266 # include <avr/iom48.h>
267 #elif defined (__AVR_ATmega88__)
268 # include <avr/iom88.h>
269 #elif defined (__AVR_ATmega8515__)
270 # include <avr/iom8515.h>
271 #elif defined (__AVR_ATmega8535__)
272 # include <avr/iom8535.h>
273 #elif defined (__AVR_AT90S8535__)
274 # include <avr/io8535.h>
275 #elif defined (__AVR_AT90C8534__)
GAS LISTING /tmp/ccowxWMg.s page 13
276 # include <avr/io8534.h>
277 #elif defined (__AVR_AT90S8515__)
278 # include <avr/io8515.h>
279 #elif defined (__AVR_AT90S4434__)
280 # include <avr/io4434.h>
281 #elif defined (__AVR_AT90S4433__)
282 # include <avr/io4433.h>
283 #elif defined (__AVR_AT90S4414__)
284 # include <avr/io4414.h>
285 #elif defined (__AVR_ATtiny22__)
286 # include <avr/iotn22.h>
287 #elif defined (__AVR_ATtiny26__)
288 # include <avr/iotn26.h>
289 #elif defined (__AVR_AT90S2343__)
290 # include <avr/io2343.h>
291 #elif defined (__AVR_AT90S2333__)
292 # include <avr/io2333.h>
293 #elif defined (__AVR_AT90S2323__)
294 # include <avr/io2323.h>
295 #elif defined (__AVR_AT90S2313__)
296 # include <avr/io2313.h>
297 #elif defined (__AVR_ATtiny2313__)
298 # include <avr/iotn2313.h>
299 #elif defined (__AVR_ATtiny13__)
300 # include <avr/iotn13.h>
301 #elif defined (__AVR_ATtiny25__)
302 # include <avr/iotn25.h>
303 #elif defined (__AVR_ATtiny45__)
304 # include <avr/iotn45.h>
305 #elif defined (__AVR_ATtiny85__)
306 # include <avr/iotn85.h>
307 #elif defined (__AVR_ATtiny24__)
308 # include <avr/iotn24.h>
309 #elif defined (__AVR_ATtiny44__)
310 # include <avr/iotn44.h>
311 #elif defined (__AVR_ATtiny84__)
312 # include <avr/iotn84.h>
313 #elif defined (__AVR_ATtiny261__)
314 # include <avr/iotn261.h>
315 #elif defined (__AVR_ATtiny461__)
316 # include <avr/iotn461.h>
317 #elif defined (__AVR_ATtiny861__)
318 # include <avr/iotn861.h>
319 /* avr1: the following only supported for assembler programs */
320 #elif defined (__AVR_ATtiny28__)
321 # include <avr/iotn28.h>
322 #elif defined (__AVR_AT90S1200__)
323 # include <avr/io1200.h>
324 #elif defined (__AVR_ATtiny15__)
325 # include <avr/iotn15.h>
326 #elif defined (__AVR_ATtiny12__)
327 # include <avr/iotn12.h>
328 #elif defined (__AVR_ATtiny11__)
329 # include <avr/iotn11.h>
330 #else
331 # if !defined(__COMPILING_AVR_LIBC__)
332 # warning "device type not defined"
GAS LISTING /tmp/ccowxWMg.s page 14
333 # endif
334 #endif
335
336 #include <avr/portpins.h>
1 /* Copyright (c) 2003 Theodore A. Roth
2 All rights reserved.
3
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9
10 * Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in
12 the documentation and/or other materials provided with the
13 distribution.
14
15 * Neither the name of the copyright holders nor the names of
16 contributors may be used to endorse or promote products derived
17 from this software without specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 POSSIBILITY OF SUCH DAMAGE. */
30
31 /* $Id: portpins.h,v 1.3.4.1 2006/03/10 16:22:38 aesok Exp $ */
32
33 #ifndef _AVR_PORTPINS_H_
34 #define _AVR_PORTPINS_H_ 1
35
36 /* This file should only be included from <avr/io.h>, never directly. */
37
38 #ifndef _AVR_IO_H_
39 # error "Include <avr/io.h> instead of this file."
40 #endif
41
42 /* Define Generic PORTn, DDn, and PINn values. */
43
44 /* Port Data Register (generic) */
45 #define PORT7 7
46 #define PORT6 6
47 #define PORT5 5
48 #define PORT4 4
49 #define PORT3 3
50 #define PORT2 2
51 #define PORT1 1
52 #define PORT0 0
53
GAS LISTING /tmp/ccowxWMg.s page 15
54 /* Port Data Direction Register (generic) */
55 #define DD7 7
56 #define DD6 6
57 #define DD5 5
58 #define DD4 4
59 #define DD3 3
60 #define DD2 2
61 #define DD1 1
62 #define DD0 0
63
64 /* Port Input Pins (generic) */
65 #define PIN7 7
66 #define PIN6 6
67 #define PIN5 5
68 #define PIN4 4
69 #define PIN3 3
70 #define PIN2 2
71 #define PIN1 1
72 #define PIN0 0
73
74 /* Define PORTxn values for all possible port pins. */
75
76 /* PORT A */
77
78 #if defined(PA0)
79 # define PORTA0 PA0
80 #endif
81 #if defined(PA1)
82 # define PORTA1 PA1
83 #endif
84 #if defined(PA2)
85 # define PORTA2 PA2
86 #endif
87 #if defined(PA3)
88 # define PORTA3 PA3
89 #endif
90 #if defined(PA4)
91 # define PORTA4 PA4
92 #endif
93 #if defined(PA5)
94 # define PORTA5 PA5
95 #endif
96 #if defined(PA6)
97 # define PORTA6 PA6
98 #endif
99 #if defined(PA7)
100 # define PORTA7 PA7
101 #endif
102
103 /* PORT B */
104
105 #if defined(PB0)
106 # define PORTB0 PB0
107 #endif
108 #if defined(PB1)
109 # define PORTB1 PB1
110 #endif
GAS LISTING /tmp/ccowxWMg.s page 16
111 #if defined(PB2)
112 # define PORTB2 PB2
113 #endif
114 #if defined(PB3)
115 # define PORTB3 PB3
116 #endif
117 #if defined(PB4)
118 # define PORTB4 PB4
119 #endif
120 #if defined(PB5)
121 # define PORTB5 PB5
122 #endif
123 #if defined(PB6)
124 # define PORTB6 PB6
125 #endif
126 #if defined(PB7)
127 # define PORTB7 PB7
128 #endif
129
130 /* PORT C */
131
132 #if defined(PC0)
133 # define PORTC0 PC0
134 #endif
135 #if defined(PC1)
136 # define PORTC1 PC1
137 #endif
138 #if defined(PC2)
139 # define PORTC2 PC2
140 #endif
141 #if defined(PC3)
142 # define PORTC3 PC3
143 #endif
144 #if defined(PC4)
145 # define PORTC4 PC4
146 #endif
147 #if defined(PC5)
148 # define PORTC5 PC5
149 #endif
150 #if defined(PC6)
151 # define PORTC6 PC6
152 #endif
153 #if defined(PC7)
154 # define PORTC7 PC7
155 #endif
156
157 /* PORT D */
158
159 #if defined(PD0)
160 # define PORTD0 PD0
161 #endif
162 #if defined(PD1)
163 # define PORTD1 PD1
164 #endif
165 #if defined(PD2)
166 # define PORTD2 PD2
167 #endif
GAS LISTING /tmp/ccowxWMg.s page 17
168 #if defined(PD3)
169 # define PORTD3 PD3
170 #endif
171 #if defined(PD4)
172 # define PORTD4 PD4
173 #endif
174 #if defined(PD5)
175 # define PORTD5 PD5
176 #endif
177 #if defined(PD6)
178 # define PORTD6 PD6
179 #endif
180 #if defined(PD7)
181 # define PORTD7 PD7
182 #endif
183
184 /* PORT E */
185
186 #if defined(PE0)
187 # define PORTE0 PE0
188 #endif
189 #if defined(PE1)
190 # define PORTE1 PE1
191 #endif
192 #if defined(PE2)
193 # define PORTE2 PE2
194 #endif
195 #if defined(PE3)
196 # define PORTE3 PE3
197 #endif
198 #if defined(PE4)
199 # define PORTE4 PE4
200 #endif
201 #if defined(PE5)
202 # define PORTE5 PE5
203 #endif
204 #if defined(PE6)
205 # define PORTE6 PE6
206 #endif
207 #if defined(PE7)
208 # define PORTE7 PE7
209 #endif
210
211 /* PORT F */
212
213 #if defined(PF0)
214 # define PORTF0 PF0
215 #endif
216 #if defined(PF1)
217 # define PORTF1 PF1
218 #endif
219 #if defined(PF2)
220 # define PORTF2 PF2
221 #endif
222 #if defined(PF3)
223 # define PORTF3 PF3
224 #endif
GAS LISTING /tmp/ccowxWMg.s page 18
225 #if defined(PF4)
226 # define PORTF4 PF4
227 #endif
228 #if defined(PF5)
229 # define PORTF5 PF5
230 #endif
231 #if defined(PF6)
232 # define PORTF6 PF6
233 #endif
234 #if defined(PF7)
235 # define PORTF7 PF7
236 #endif
237
238 /* PORT G */
239
240 #if defined(PG0)
241 # define PORTG0 PG0
242 #endif
243 #if defined(PG1)
244 # define PORTG1 PG1
245 #endif
246 #if defined(PG2)
247 # define PORTG2 PG2
248 #endif
249 #if defined(PG3)
250 # define PORTG3 PG3
251 #endif
252 #if defined(PG4)
253 # define PORTG4 PG4
254 #endif
255 #if defined(PG5)
256 # define PORTG5 PG5
257 #endif
258 #if defined(PG6)
259 # define PORTG6 PG6
260 #endif
261 #if defined(PG7)
262 # define PORTG7 PG7
263 #endif
264
265 /* PORT H */
266
267 #if defined(PH0)
268 # define PORTH0 PH0
269 #endif
270 #if defined(PH1)
271 # define PORTH1 PH1
272 #endif
273 #if defined(PH2)
274 # define PORTH2 PH2
275 #endif
276 #if defined(PH3)
277 # define PORTH3 PH3
278 #endif
279 #if defined(PH4)
280 # define PORTH4 PH4
281 #endif
GAS LISTING /tmp/ccowxWMg.s page 19
282 #if defined(PH5)
283 # define PORTH5 PH5
284 #endif
285 #if defined(PH6)
286 # define PORTH6 PH6
287 #endif
288 #if defined(PH7)
289 # define PORTH7 PH7
290 #endif
291
292 /* PORT J */
293
294 #if defined(PJ0)
295 # define PORTJ0 PJ0
296 #endif
297 #if defined(PJ1)
298 # define PORTJ1 PJ1
299 #endif
300 #if defined(PJ2)
301 # define PORTJ2 PJ2
302 #endif
303 #if defined(PJ3)
304 # define PORTJ3 PJ3
305 #endif
306 #if defined(PJ4)
307 # define PORTJ4 PJ4
308 #endif
309 #if defined(PJ5)
310 # define PORTJ5 PJ5
311 #endif
312 #if defined(PJ6)
313 # define PORTJ6 PJ6
314 #endif
315 #if defined(PJ7)
316 # define PORTJ7 PJ7
317 #endif
318
319 /* PORT K */
320
321 #if defined(PK0)
322 # define PORTK0 PK0
323 #endif
324 #if defined(PK1)
325 # define PORTK1 PK1
326 #endif
327 #if defined(PK2)
328 # define PORTK2 PK2
329 #endif
330 #if defined(PK3)
331 # define PORTK3 PK3
332 #endif
333 #if defined(PK4)
334 # define PORTK4 PK4
335 #endif
336 #if defined(PK5)
337 # define PORTK5 PK5
337
GAS LISTING /tmp/ccowxWMg.s page 20
338 #if __AVR_ARCH__ != 1
339 # if XRAMEND < 0x100 && !defined(__COMPILING_AVR_LIBC__)
340 # undef SP
341 # define SP _SFR_IO8(0x3D)
342 # undef SPH
343 # endif
344 #endif
345
346 #include <avr/version.h>
1 /* Copyright (c) 2005, Joerg Wunsch -*- c -*-
2 All rights reserved.
3
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9
10 * Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in
12 the documentation and/or other materials provided with the
13 distribution.
14
15 * Neither the name of the copyright holders nor the names of
16 contributors may be used to endorse or promote products derived
17 from this software without specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 POSSIBILITY OF SUCH DAMAGE. */
30
31 /* $Id: version.h.in,v 1.1 2005/09/12 20:18:12 joerg_wunsch Exp $ */
32
33 /** \defgroup avr_version <avr/version.h>: avr-libc version macros
34 \code #include <avr/version.h> \endcode
35
36 This header file defines macros that contain version numbers and
37 strings describing the current version of avr-libc.
38
39 The version number itself basically consists of three pieces that
40 are separated by a dot: the major number, the minor number, and
41 the revision number. For development versions (which use an odd
42 minor number), the string representation additionally gets the
43 date code (YYYYMMDD) appended.
44
45 This file will also be included by \c <avr/io.h>. That way,
46 portable tests can be implemented using \c <avr/io.h> that can be
47 used in code that wants to remain backwards-compatible to library
48 versions prior to the date when the library version API had been
GAS LISTING /tmp/ccowxWMg.s page 21
49 added, as referenced but undefined C preprocessor macros
50 automatically evaluate to 0.
51 */
52
53 #ifndef _AVR_VERSION_H_
54 #define _AVR_VERSION_H_
55
56 /** \ingroup avr_version
57 String literal representation of the current library version. */
58 #define __AVR_LIBC_VERSION_STRING__ "1.4.5"
59
60 /** \ingroup avr_version
61 Numerical representation of the current library version.
62
63 In the numerical representation, the major number is multiplied by
64 10000, the minor number by 100, and all three parts are then
65 added. It is intented to provide a monotonically increasing
66 numerical value that can easily be used in numerical checks.
67 */
68 #define __AVR_LIBC_VERSION__ 10405UL
69
70 /** \ingroup avr_version
71 String literal representation of the release date. */
72 #define __AVR_LIBC_DATE_STRING__ "20061009"
73
74 /** \ingroup avr_version
75 Numerical representation of the release date. */
76 #define __AVR_LIBC_DATE_ 20061009UL
77
78 /** \ingroup avr_version
79 Library major version number. */
80 #define __AVR_LIBC_MAJOR__ 1
81
82 /** \ingroup avr_version
83 Library minor version number. */
84 #define __AVR_LIBC_MINOR__ 4
85
86 /** \ingroup avr_version
87 Library revision number. */
88 #define __AVR_LIBC_REVISION__ 5
89
90 #endif /* _AVR_VERSION_H_ */
91 ...
347
54 #include "Events.h"
1 #ifndef EVENTS_H
2 #define EVENTS_H
3
4 /*
5 Copyright (C) 2004 John Orlando
6
7 AVRcam: a small real-time image processing engine.
8
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public
11 License as published by the Free Software Foundation; either
12 version 2 of the License, or (at your option) any later version.
GAS LISTING /tmp/ccowxWMg.s page 22
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
18
19 You should have received a copy of the GNU General Public
20 License along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
23 For more information on the AVRcam, please contact:
24
25 john@jrobot.net
26
27 or go to www.jrobot.net for more details regarding the system.
28 */
29 /***********************************************************
30 Module Name: Events.h
31 Module Date: 05/23/2004
32 Module Auth: John Orlando
33
34 Description: This file provides the external interface
35 to the events that can be published/processed in the
36 system. It is specifically by itself (and nothing
37 else should be defined in here) so that both .c and
38 .S (assembly) files can include this file without
39 a problem.
40
41 Revision History:
42 Date Rel Ver. Notes
43 4/10/2004 0.1 Module created
44 6/30/2004 1.0 Initial release for Circuit Cellar
45 contest.
46 *******************************************************/
47
48 /* Definitions */
49 /* Originally, all events were passed in a bitmask...however,
50 an event FIFO was finally used, but the coding of the event
51 definitions were never translated back....doesn't make a
52 difference, but looks a little weird */
53 #define EV_SERIAL_DATA_RECEIVED 0x01
54 #define EV_DUMP_FRAME 0x02
55 #define EV_PROCESS_FRAME_COMPLETE 0x04
55
56 .extern fastEventBitmask ; This is the flag used to indicate to the rest
57 ; of the system that the line is complete
58
59 #define HREF_INTERRUPT_ENABLE_MASK 0x80
60 #define HREF_INTERRUPT_DISABLE_MASK 0x7F
61 #define ENABLE_PCLK_TIMER1_OVERFLOW_BITMASK 0x04
62 #define DISABLE_PCLK_TIMER1_OVERFLOW_BITMASK 0xFB
63 #define G_PORT _SFR_IO_ADDR(PINC)
64 #define RB_PORT _SFR_IO_ADDR(PINB)
65 #define PIXEL_RUN_START_INITIAL 0x50 ; This value causes our pixel counter (TCNT1)
66 ; to overflow after 176 (horizontal) pixels
67
68 #define RED_MEM_OFFSET 0x00
GAS LISTING /tmp/ccowxWMg.s page 23
69 #define GREEN_MEM_OFFSET 0x10
70 #define BLUE_MEM_OFFSET 0x20
71
72 ; A pixelBlock is defined as a contiguous group of 4 pixels that are combined
73 ; together to form a specific color. Typically, this is formed by sampling a
74 ; a green value, followed by a red and blue value (since we are dealing
75 ; with Bayer color data). We could optionally sample a second green with
76 ; the red and average the greens, because the eye is more sensitive to
77 ; green, but for speed we don't do this. These three values (RGB) are then
78 ; used as indices into the color membership lookup table (memLookup) to
79 ; determine which color the pixelBlock maps into. The memLookup table is
80 ; manually generated for now (though it will hopefully be modified over
81 ; the serial interface eventually).
82 ;
83 ; Here is a pixel block:
84 ; ...G G G G... (row x)
85 ; ...B R B R... (row x+1)
86 ; | | | |--this is skipped
87 ; | | |--this is skipped
88 ; | |--this is sampled
89 ; |--this is sampled
90
91 ; As pixel blocks are sampled, the red, green, and blue values are
92 ; used to index into their respective color maps. The color maps
93 ; return values that can be logically ANDed together so that a
94 ; particular RGB triplet will result in a single bit being set
95 ; after the AND operation. This single bit indicates which color
96 ; the RGB triplet represents. It is also possible for no bits to
97 ; be set after the AND process, indicating that the RGB triplet
98 ; does not map to any of the colors configured in the color map.
99 ; This isn't quite as fast as a pure RGB lookup table, but
100 ; it then again it doesn't require 2^12 (4-bits for each color
101 ; channel) bytes to store the lookup table. It takes just a few
102 ; more cycles, and only requires 48 bytes of precious RAM (16
103 ; per color channel, since our resolution on each color channel
104 ; is only 4-bits). Not bad....for more information, see:
105 ; http://www.cs.cmu.edu/~trb/papers/wirevision00.pdf for more
106 ; information on this color segmentation technique.
107
108 ; One other note: this code does depend on the colorMap residing
109 ; at a well-defined position in memory; specifically, it mus
110 ; start at a 256-byte boundary so that the lowest byte in the
111 ; map is set to 0x00. Currently, the colorMap is forced to
112 ; start at RAM location 0x300. This could potentially be changed
113 ; by the developer if needed, but offsets would have to be added
114 ; in to the colorMap look-up code below to make it work.
115
116
117 ; These are the registers that will be used throughout this
118 ; module for acquiring each line of pixel data
119 pixelCount = 16
120 pixelRunStart = 17
121 lastColor = 18
122 tmp1 = 19 ; be sure to not use tmp1 and color simultaneously
123 tmp2 = 20
124 color = 19
125 greenData = 20
GAS LISTING /tmp/ccowxWMg.s page 24
126 blueData = 21
127 colorMapLow = 22
128 colorMapHigh = 23
129 prevLineBuffLow = 22 ; overlaps with memLookupLow (but orthogonal)
130 prevLineBuffHigh = 23 ; overlaps with memLookupHigh (but orthogonal)
131 currLineBuffLow = 24
132 currLineBuffHigh = 25
133
134 .section .text
135
136 ; These are the global assembly function names that are accessed via other
137 ; C functions
138 .global CamIntAsm_waitForNewTrackingFrame
139 .global CamIntAsm_waitForNewDumpFrame
140 .global CamIntAsm_acquireDumpLine
141 .global CamIntAsm_acquireTrackingLine
142 .global SIG_INTERRUPT0
143 .global SIG_INTERRUPT1
144 .global SIG_OVERFLOW0
145 .global SIG_OVERFLOW1
146
147 ;*****************************************************************
148 ; Function Name: CamIntAsm_waitForNewTrackingFrame
149 ; Function Description: This function is responsible for
150 ; going to sleep until a new frame begins (indicated by
151 ; VSYNC transitioning from low to high. This will wake
152 ; the "VSYNC sleep" up and allow it to continue with
153 ; the acquireLine function, where the system waits for
154 ; an "HREF sleep" that we use to synchronize with the
155 ; data.
156 ; Inputs: r25 - MSB of currentLineBuffer
157 ; r24 - LSB of currentLineBuffer
158 ; r23 - MSB of colorMap
159 ; r22 - LSB of colorMap
160 ; Outputs: none
161 ; NOTES: This function doesn't really return...it sorta just
162 ; floats into the acquireLine function after the "VSYNC sleep"
163 ; is awoken, then begins processing the line data. Once
164 ; 176 pixels are sampled (and the counter overflows), then
165 ; an interrupt will occur, the 'T' bit in the SREG will be
166 ; set, and the function will return.
167 ;*****************************************************************
168
169 CamIntAsm_waitForNewTrackingFrame:
170:CamInterfaceAsm.S **** sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
171:CamInterfaceAsm.S **** cbi _SFR_IO_ADDR(PORTD),PD6
172:CamInterfaceAsm.S **** sleep
173
174 ;*****************************************************************
175 ; REMEMBER...everything from here on out is critically timed to be
176 ; synchronized with the flow of pixel data from the camera...
177 ;*****************************************************************
178
179 CamIntAsm_acquireTrackingLine:
180:CamInterfaceAsm.S **** brts _cleanUp
181 ;sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
182 ;cbi _SFR_IO_ADDR(PORTD),PD6
GAS LISTING /tmp/ccowxWMg.s page 25
183
184:CamInterfaceAsm.S **** in tmp1,_SFR_IO_ADDR(TCCR1B) ; Enable the PCLK line to actually
185:CamInterfaceAsm.S **** ori tmp1, 0x07 ; feed Timer1
186:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TCCR1B),tmp1
187 ; The line is about to start...
188:CamInterfaceAsm.S **** ldi pixelCount,0 ; Initialize the RLE stats...
189:CamInterfaceAsm.S **** ldi pixelRunStart,PIXEL_RUN_START_INITIAL ; Remember, we always calculate
190 ; the pixel run length as
191 ; TCNT1L - pixelRunStart
192
193:CamInterfaceAsm.S **** ldi lastColor,0x00 ; clear out the last color before we start
194
195:CamInterfaceAsm.S **** mov XH,currLineBuffHigh ; Load the pointer to the current line
196:CamInterfaceAsm.S **** mov XL,currLineBuffLow ; buffer into the X pointer regs
197
198:CamInterfaceAsm.S **** mov ZH,colorMapHigh ; Load the pointers to the membership
199:CamInterfaceAsm.S **** mov ZL,colorMapLow ; lookup tables (ZL and YL will be overwritten
200:CamInterfaceAsm.S **** mov YH,colorMapHigh ; as soon as we start reading data) to Z and Y
201
202:CamInterfaceAsm.S **** in tmp1, _SFR_IO_ADDR(TIMSK) ; enable TIMER1 to start counting
203:CamInterfaceAsm.S **** ori tmp1, ENABLE_PCLK_TIMER1_OVERFLOW_BITMASK ; external PCLK pulses and interrupt on
204:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TIMSK),tmp1 ; overflow
205
206:CamInterfaceAsm.S **** ldi tmp1,PIXEL_RUN_START_INITIAL ; set up the TCNT1 to overflow (and
207:CamInterfaceAsm.S **** ldi tmp2,0xFF ; interrupts) after 176 pixels
208:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TCNT1H),tmp2
209:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TCNT1L),tmp1
210
211:CamInterfaceAsm.S **** mov YL,colorMapLow
212
213:CamInterfaceAsm.S **** in tmp1, _SFR_IO_ADDR(GICR) ; enable the HREF interrupt...remember, we
214 ; only use this interrupt to synchronize
215 ; the beginning of the line
216:CamInterfaceAsm.S **** ori tmp1, HREF_INTERRUPT_ENABLE_MASK
217:CamInterfaceAsm.S **** out _SFR_IO_ADDR(GICR), tmp1
218
219 ;*******************************************************************************************
220 ; Track Frame handler
221 ;*******************************************************************************************
222
223 _trackFrame:
224:CamInterfaceAsm.S **** sbi _SFR_IO_ADDR(PORTD),PD6
225:CamInterfaceAsm.S **** sleep ; ...And we wait...
226
227 ; Returning from the interrupt/sleep wakeup will consume
228 ; 14 clock cycles (7 to wakeup from idle sleep, 3 to vector, and 4 to return)
229
230 ; Disable the HREF interrupt
231:CamInterfaceAsm.S **** cbi _SFR_IO_ADDR(PORTD),PD6
232:CamInterfaceAsm.S **** in tmp1, _SFR_IO_ADDR(GICR)
233:CamInterfaceAsm.S **** andi tmp1, HREF_INTERRUPT_DISABLE_MASK
234:CamInterfaceAsm.S **** out _SFR_IO_ADDR(GICR), tmp1
235
236 ; A couple of NOPs are needed here to sync up the pixel data...the number (2)
237 ; of NOPs was determined emperically by trial and error.
238:CamInterfaceAsm.S **** nop
239:CamInterfaceAsm.S **** nop
GAS LISTING /tmp/ccowxWMg.s page 26
240 _acquirePixelBlock: ; Clock Cycle Count
241:CamInterfaceAsm.S **** in ZL,RB_PORT ; sample the red value (PINB) (1)
242:CamInterfaceAsm.S **** in YL,G_PORT ; sample the green value (PINC) (1)
243:CamInterfaceAsm.S **** andi YL,0x0F ; clear the high nibble (1)
244:CamInterfaceAsm.S **** ldd color,Z+RED_MEM_OFFSET ; lookup the red membership (2)
245:CamInterfaceAsm.S **** in ZL,RB_PORT ; sample the blue value (PINB) (1)
246:CamInterfaceAsm.S **** ldd greenData,Y+GREEN_MEM_OFFSET; lookup the green membership (2)
247:CamInterfaceAsm.S **** ldd blueData,Z+BLUE_MEM_OFFSET ; lookup the blue membership (2)
248:CamInterfaceAsm.S **** and color,greenData ; mask memberships together (1)
249:CamInterfaceAsm.S **** and color,blueData ; to produce the final color (1)
250:CamInterfaceAsm.S **** brts _cleanUpTrackingLine ; if some interrupt routine has (1...not set)
251 ; come in and set our T flag in
252 ; SREG, then we need to hop out
253 ; and blow away this frames data (common cleanup)
254:CamInterfaceAsm.S **** cp color,lastColor ; check to see if the run continues (1)
255:CamInterfaceAsm.S **** breq _acquirePixelBlock ; (2...equal)
256 ; ___________
257 ; 16 clock cycles
258 ; (16 clock cycles = 1 uS = 1 pixelBlock time)
259
260 ; Toggle the debug line to indicate a color change
261:CamInterfaceAsm.S **** sbi _SFR_IO_ADDR(PORTD),PD6
262:CamInterfaceAsm.S **** nop
263:CamInterfaceAsm.S **** cbi _SFR_IO_ADDR(PORTD),PD6
264
265:CamInterfaceAsm.S **** mov tmp2,pixelRunStart ; get the count value of the
266 ; current pixel run
267:CamInterfaceAsm.S **** in pixelCount,_SFR_IO_ADDR(TCNT1L) ; get the current TCNT1 value
268:CamInterfaceAsm.S **** mov pixelRunStart,pixelCount ; reload pixelRunStart for the
269 ; next run
270:CamInterfaceAsm.S **** sub pixelCount,tmp2 ; pixelCount = TCNT1L - pixelRunStart
271
272:CamInterfaceAsm.S **** st X+,lastColor ; record the color run in the current line buffer
273:CamInterfaceAsm.S **** st X+,pixelCount ; with its length
274:CamInterfaceAsm.S **** mov lastColor,color ; set lastColor so we can figure out when it changes
275
276:CamInterfaceAsm.S **** nop ; waste one more cycle for a total of 16
277:CamInterfaceAsm.S **** rjmp _acquirePixelBlock
278
279 ; _cleanUpTrackingLine is used to write the last run length block off to the currentLineBuffer so
280 ; that all 176 pixels in the line are accounted for.
281 _cleanUpTrackingLine:
282:CamInterfaceAsm.S **** ldi pixelCount,0xFF ; the length of the last run is ALWAYS 0xFF minus the last
283:CamInterfaceAsm.S **** sub pixelCount,pixelRunStart ; pixelRunStart
284
285:CamInterfaceAsm.S **** inc pixelCount ; increment pixelCount since we actually need to account
286 ; for the overflow of TCNT1
287
288:CamInterfaceAsm.S **** st X+,color ; record the color run in the current line buffer
289:CamInterfaceAsm.S **** st X,pixelCount
290:CamInterfaceAsm.S **** rjmp _cleanUp
291
292 _cleanUpDumpLine:
293 ; NOTE: If serial data is received, to interrupt the tracking of a line, we'll
294 ; get a EV_SERIAL_DATA_RECEIVED event, and the T bit set so we will end the
295 ; line's processing...however, the PCLK will keep on ticking for the rest of
296 ; the frame/line, which will cause the TCNT to eventually overflow and
GAS LISTING /tmp/ccowxWMg.s page 27
297 ; interrupt us, generating a EV_ACQUIRE_LINE_COMPLETE event. We don't want
298 ; this, so we need to actually turn off the PCLK counting each time we exit
299 ; this loop, and only turn it on when we begin acquiring lines....
300 ; NOT NEEDED FOR NOW...
301 ;in tmp1, _SFR_IO_ADDR(TIMSK) ; disable TIMER1 to stop counting
302 ;andi tmp1, DISABLE_PCLK_TIMER1_OVERFLOW_BITMASK ; external PCLK pulses
303 ;out _SFR_IO_ADDR(TIMSK),tmp1
304
305 _cleanUp:
306 ; Disable the external clocking of the Timer1 counter
307:CamInterfaceAsm.S **** in tmp1, _SFR_IO_ADDR(TCCR1B)
308:CamInterfaceAsm.S **** andi tmp1, 0xF8
309:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TCCR1B),tmp1
310
311 ; Toggle the debug line to indicate the line is complete
312:CamInterfaceAsm.S **** sbi _SFR_IO_ADDR(PORTD),PD6
313:CamInterfaceAsm.S **** cbi _SFR_IO_ADDR(PORTD),PD6
314:CamInterfaceAsm.S **** clt ; clear out the T bit since we have detected
315 ; the interruption and are exiting to handle it
316 _exit:
317:CamInterfaceAsm.S **** ret
318
319 ;*****************************************************************
320 ; Function Name: CamIntAsm_waitForNewDumpFrame
321 ; Function Description: This function is responsible for
322 ; going to sleep until a new frame begins (indicated by
323 ; VSYNC transitioning from low to high. This will wake
324 ; the "VSYNC sleep" up and allow it to continue with
325 ; acquiring a line of pixel data to dump out to the UI.
326 ; Inputs: r25 - MSB of currentLineBuffer
327 ; r24 - LSB of currentLineBuffer
328 ; r23 - MSB of prevLineBuffer
329 ; r22 - LSB of prevLineBuffer
330 ; Outputs: none
331 ; NOTES: This function doesn't really return...it sorta just
332 ; floats into the acquireDumpLine function after the "VSYNC sleep"
333 ; is awoken.
334 ;*****************************************************************
335 CamIntAsm_waitForNewDumpFrame:
336:CamInterfaceAsm.S **** sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
337:CamInterfaceAsm.S **** cbi _SFR_IO_ADDR(PORTD),PD6
338:CamInterfaceAsm.S **** sleep
339
340 ;*****************************************************************
341 ; REMEMBER...everything from here on out is critically timed to be
342 ; synchronized with the flow of pixel data from the camera...
343 ;*****************************************************************
344
345 CamIntAsm_acquireDumpLine:
346:CamInterfaceAsm.S **** brts _cleanUp
347 ;sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
348 ;cbi _SFR_IO_ADDR(PORTD),PD6
349
350:CamInterfaceAsm.S **** mov XH,currLineBuffHigh ; Load the pointer to the current line
351:CamInterfaceAsm.S **** mov XL,currLineBuffLow ; buffer into the X pointer regs
352
353:CamInterfaceAsm.S **** mov YH,prevLineBuffHigh ; Load the pointer to the previous line
GAS LISTING /tmp/ccowxWMg.s page 28
354:CamInterfaceAsm.S **** mov YL,prevLineBuffLow ; buffer into the Y pointer regs
355
356:CamInterfaceAsm.S **** ldi tmp1,PIXEL_RUN_START_INITIAL ; set up the TCNT1 to overflow (and
357:CamInterfaceAsm.S **** ldi tmp2,0xFF ; interrupts) after 176 pixels
358:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TCNT1H),tmp2
359:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TCNT1L),tmp1
360
361:CamInterfaceAsm.S **** in tmp1, _SFR_IO_ADDR(TCCR1B) ; Enable the PCLK line to actually
362:CamInterfaceAsm.S **** ori tmp1, 0x07 ; feed Timer1
363:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TCCR1B),tmp1
364:CamInterfaceAsm.S **** nop
365
366:CamInterfaceAsm.S **** in tmp1, _SFR_IO_ADDR(TIMSK) ; enable TIMER1 to start counting
367:CamInterfaceAsm.S **** ori tmp1, ENABLE_PCLK_TIMER1_OVERFLOW_BITMASK ; external PCLK pulses and interrupt on
368:CamInterfaceAsm.S **** out _SFR_IO_ADDR(TIMSK),tmp1 ; overflow
369
370:CamInterfaceAsm.S **** in tmp1, _SFR_IO_ADDR(GICR) ; enable the HREF interrupt...remember, we
371 ; only use this interrupt to synchronize
372 ; the beginning of the line
373:CamInterfaceAsm.S **** ori tmp1, HREF_INTERRUPT_ENABLE_MASK
374:CamInterfaceAsm.S **** out _SFR_IO_ADDR(GICR), tmp1
375
376 ;*******************************************************************************************
377 ; Dump Frame handler
378 ;*******************************************************************************************
379
380 _dumpFrame:
381:CamInterfaceAsm.S **** sbi _SFR_IO_ADDR(PORTD),PD6
382:CamInterfaceAsm.S **** sleep ; ...And we wait...
383
384:CamInterfaceAsm.S **** cbi _SFR_IO_ADDR(PORTD),PD6
385:CamInterfaceAsm.S **** in tmp1, _SFR_IO_ADDR(GICR) ; disable the HREF interrupt
386:CamInterfaceAsm.S **** andi tmp1, HREF_INTERRUPT_DISABLE_MASK ; so we don't get interrupted
387:CamInterfaceAsm.S **** out _SFR_IO_ADDR(GICR), tmp1 ; while dumping the line
388
389:CamInterfaceAsm.S **** nop ; Remember...if we ever remove the "cbi" instruction above,
390 ; we need to add two more NOPs to cover this
391
392 ; Ok...the following loop needs to run in 8 clock cycles, so we can get every
393 ; pixel in the line...this shouldn't be a problem, since the PCLK timing was
394 ; reduced by a factor of 2 whenever we go to dump a line (this is to give us
395 ; enough time to do the sampling and storing of the pixel data). In addition,
396 ; it is assumed that we will have to do some minor processing on the data right
397 ; before we send it out, like mask off the top 4-bits of each, and then pack both
398 ; low nibbles into a single byte for transmission...we just don't have time to
399 ; do that here (only 8 instruction cycles :-) )
400 _sampleDumpPixel:
401:CamInterfaceAsm.S **** in tmp1,G_PORT ; sample the G value (1)
402:CamInterfaceAsm.S **** in tmp2,RB_PORT ; sample the R/B value (1)
403:CamInterfaceAsm.S **** st X+,tmp1 ; store to the currLineBuff and inc ptrs(2)
404:CamInterfaceAsm.S **** st Y+,tmp2 ; store to the prevLineBuff and inc ptrs(2)
405:CamInterfaceAsm.S **** brtc _sampleDumpPixel ; loop back unless flag is set (2...if not set)
406 ; ___________
407 ; 8 cycles normally
408
409 ; if we make it here, it means the T flag is set, and we must have been interrupted
410 ; so we need to exit (what if we were interrupted for serial? should we disable it?)
GAS LISTING /tmp/ccowxWMg.s page 29
411:CamInterfaceAsm.S **** rjmp _cleanUpDumpLine
412
413 ;***********************************************************
414 ; Function Name: <interrupt handler for External Interrupt0>
415 ; Function Description: This function is responsible
416 ; for handling a rising edge on the Ext Interrupt 0. This
417 ; routine simply returns, since we just want to wake up
418 ; whenever the VSYNC transitions (meaning the start of a new
419 ; frame).
420 ; Inputs: none
421 ; Outputs: none
422 ;***********************************************************
423 SIG_INTERRUPT0:
424 ; This will wake us up when VSYNC transitions high...we just want to return
425:CamInterfaceAsm.S **** reti
426
427 ;***********************************************************
428 ; Function Name: <interrupt handler for External Interrupt1>
429 ; Function Description: This function is responsible
430 ; for handling a falling edge on the Ext Interrupt 1. This
431 ; routine simply returns, since we just want to wake up
432 ; whenever the HREF transitions (meaning the pixels
433 ; are starting after VSYNC transitioned, and we need to
434 ; start acquiring the pixel blocks
435 ; Inputs: none
436 ; Outputs: none
437 ;***********************************************************
438 SIG_INTERRUPT1:
439 ; This will wake us up when HREF transitions high...we just want to return
440:CamInterfaceAsm.S **** reti
441
442 ;***********************************************************
443 ; Function Name: <interrupt handler for Timer0 overflow>
444 ; Function Description: This function is responsible
445 ; for handling the Timer0 overflow (hooked up to indicate
446 ; when we have reached the number of HREFs required in a
447 ; single frame). We set the T flag in the SREG to
448 ; indicate to the _acquirePixelBlock routine that it needs
449 ; to exit, and then set the appropriate action to take in
450 ; the eventList of the Executive module.
451 ; Inputs: none
452 ; Outputs: none
453 ; Note: Originally, the HREF pulses were also going to
454 ; be counted by a hardware counter, but it didn't end up
455 ; being necessary
456 ;***********************************************************
457 ;SIG_OVERFLOW0:
458 ; set ; set the T bit in SREG
459 ; lds tmp1,eventBitmask
460 ; ori tmp1,EV_ACQUIRE_FRAME_COMPLETE
461 ; sts eventBitmask,tmp1
462 ; reti
463
464 ;***********************************************************
465 ; Function Name: <interrupt handler for Timer1 overflow>
466 ; Function Description: This function is responsible
467 ; for handling the Timer1 overflow (hooked up to indicate
GAS LISTING /tmp/ccowxWMg.s page 30
468 ; when we have reached the end of a line of pixel data,
469 ; since PCLK is hooked up to overflow TCNT1 after 176
470 ; pixels). This routine generates an acquire line complete
471 ; event in the fastEventBitmask, which is streamlined for
472 ; efficiency reasons.
473 ;***********************************************************
474 SIG_OVERFLOW1:
475:CamInterfaceAsm.S **** lds tmp1,fastEventBitmask ; set a flag indicating
476:CamInterfaceAsm.S **** ori tmp1,FEV_ACQUIRE_LINE_COMPLETE ; a line is complete
477:CamInterfaceAsm.S **** sts fastEventBitmask,tmp1
478:CamInterfaceAsm.S **** set ; set the T bit in SREG
479 ;sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
480 ;cbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
481
482:CamInterfaceAsm.S **** reti
483
484 ; This is the default handler for all interrupts that don't
485 ; have handler routines specified for them.
486 .global __vector_default
487 __vector_default:
488:CamInterfaceAsm.S **** reti
489
490 .end
GAS LISTING /tmp/ccowxWMg.s page 31
DEFINED SYMBOLS
*ABS*:00000000 CamInterfaceAsm.S
CamInterfaceAsm.S:119 *ABS*:00000010 pixelCount
CamInterfaceAsm.S:120 *ABS*:00000011 pixelRunStart
CamInterfaceAsm.S:121 *ABS*:00000012 lastColor
CamInterfaceAsm.S:122 *ABS*:00000013 tmp1
CamInterfaceAsm.S:123 *ABS*:00000014 tmp2
CamInterfaceAsm.S:124 *ABS*:00000013 color
CamInterfaceAsm.S:125 *ABS*:00000014 greenData
CamInterfaceAsm.S:126 *ABS*:00000015 blueData
CamInterfaceAsm.S:127 *ABS*:00000016 colorMapLow
CamInterfaceAsm.S:128 *ABS*:00000017 colorMapHigh
CamInterfaceAsm.S:129 *ABS*:00000016 prevLineBuffLow
CamInterfaceAsm.S:130 *ABS*:00000017 prevLineBuffHigh
CamInterfaceAsm.S:131 *ABS*:00000018 currLineBuffLow
CamInterfaceAsm.S:132 *ABS*:00000019 currLineBuffHigh
CamInterfaceAsm.S:169 .text:00000000 CamIntAsm_waitForNewTrackingFrame
CamInterfaceAsm.S:335 .text:0000008e CamIntAsm_waitForNewDumpFrame
CamInterfaceAsm.S:345 .text:00000094 CamIntAsm_acquireDumpLine
CamInterfaceAsm.S:179 .text:00000006 CamIntAsm_acquireTrackingLine
CamInterfaceAsm.S:423 .text:000000d4 __vector_1
CamInterfaceAsm.S:438 .text:000000d6 __vector_2
CamInterfaceAsm.S:474 .text:000000d8 __vector_8
CamInterfaceAsm.S:305 .text:00000080 _cleanUp
CamInterfaceAsm.S:223 .text:00000034 _trackFrame
CamInterfaceAsm.S:240 .text:00000044 _acquirePixelBlock
CamInterfaceAsm.S:281 .text:00000074 _cleanUpTrackingLine
CamInterfaceAsm.S:292 .text:00000080 _cleanUpDumpLine
CamInterfaceAsm.S:316 .text:0000008c _exit
CamInterfaceAsm.S:380 .text:000000ba _dumpFrame
CamInterfaceAsm.S:400 .text:000000c8 _sampleDumpPixel
CamInterfaceAsm.S:487 .text:000000e6 __vector_default
UNDEFINED SYMBOLS
__vector_9
fastEventBitmask