Rev 151 | Go to most recent revision | Blame | Last modification | View Log | Download
AVRcam.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .noinit 00000030 00800300 00800300 00001182 2**0
ALLOC
1 .bss 00000274 00800070 00800070 00001182 2**0
ALLOC
2 .data 00000010 00800060 000010be 00001172 2**0
CONTENTS, ALLOC, LOAD, DATA
3 .text 000010be 00000000 00000000 000000b4 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
4 .eeprom 00000000 00810000 00810000 00001182 2**0
CONTENTS
5 .stab 00003ed0 00000000 00000000 00001184 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 000017c9 00000000 00000000 00005054 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 63 c0 rjmp .+198 ; 0xc8 <__init>
2: 05 c8 rjmp .-4086 ; 0xfffff00e <__eeprom_end+0xff7ef00e>
4: 05 c8 rjmp .-4086 ; 0xfffff010 <__eeprom_end+0xff7ef010>
6: 7a c0 rjmp .+244 ; 0xfc <__bad_interrupt>
8: 79 c0 rjmp .+242 ; 0xfc <__bad_interrupt>
a: 78 c0 rjmp .+240 ; 0xfc <__bad_interrupt>
c: 77 c0 rjmp .+238 ; 0xfc <__bad_interrupt>
e: 76 c0 rjmp .+236 ; 0xfc <__bad_interrupt>
10: 00 c8 rjmp .-4096 ; 0xfffff012 <__eeprom_end+0xff7ef012>
12: 74 c0 rjmp .+232 ; 0xfc <__bad_interrupt>
14: 73 c0 rjmp .+230 ; 0xfc <__bad_interrupt>
16: aa c5 rjmp .+2900 ; 0xb6c <__vector_11>
18: 71 c0 rjmp .+226 ; 0xfc <__bad_interrupt>
1a: 70 c0 rjmp .+224 ; 0xfc <__bad_interrupt>
1c: 6f c0 rjmp .+222 ; 0xfc <__bad_interrupt>
1e: 6e c0 rjmp .+220 ; 0xfc <__bad_interrupt>
20: 6d c0 rjmp .+218 ; 0xfc <__bad_interrupt>
22: 0f c6 rjmp .+3102 ; 0xc42 <__vector_17>
24: 6b c0 rjmp .+214 ; 0xfc <__bad_interrupt>
00000026 <__ctors_end>:
26: 29 c6 rjmp .+3154 ; 0xc7a <__vector_17+0x38>
28: bf c6 rjmp .+3454 ; 0xda8 <__vector_17+0x166>
2a: be c6 rjmp .+3452 ; 0xda8 <__vector_17+0x166>
2c: bd c6 rjmp .+3450 ; 0xda8 <__vector_17+0x166>
2e: bc c6 rjmp .+3448 ; 0xda8 <__vector_17+0x166>
30: bb c6 rjmp .+3446 ; 0xda8 <__vector_17+0x166>
32: ba c6 rjmp .+3444 ; 0xda8 <__vector_17+0x166>
34: b9 c6 rjmp .+3442 ; 0xda8 <__vector_17+0x166>
36: 21 c6 rjmp .+3138 ; 0xc7a <__vector_17+0x38>
38: b7 c6 rjmp .+3438 ; 0xda8 <__vector_17+0x166>
3a: b6 c6 rjmp .+3436 ; 0xda8 <__vector_17+0x166>
3c: b5 c6 rjmp .+3434 ; 0xda8 <__vector_17+0x166>
3e: b4 c6 rjmp .+3432 ; 0xda8 <__vector_17+0x166>
40: b3 c6 rjmp .+3430 ; 0xda8 <__vector_17+0x166>
42: b2 c6 rjmp .+3428 ; 0xda8 <__vector_17+0x166>
44: b1 c6 rjmp .+3426 ; 0xda8 <__vector_17+0x166>
46: 31 c6 rjmp .+3170 ; 0xcaa <__vector_17+0x68>
48: af c6 rjmp .+3422 ; 0xda8 <__vector_17+0x166>
4a: ae c6 rjmp .+3420 ; 0xda8 <__vector_17+0x166>
4c: ad c6 rjmp .+3418 ; 0xda8 <__vector_17+0x166>
4e: ac c6 rjmp .+3416 ; 0xda8 <__vector_17+0x166>
50: ab c6 rjmp .+3414 ; 0xda8 <__vector_17+0x166>
52: aa c6 rjmp .+3412 ; 0xda8 <__vector_17+0x166>
54: a9 c6 rjmp .+3410 ; 0xda8 <__vector_17+0x166>
56: 3a c6 rjmp .+3188 ; 0xccc <__vector_17+0x8a>
58: a7 c6 rjmp .+3406 ; 0xda8 <__vector_17+0x166>
5a: a6 c6 rjmp .+3404 ; 0xda8 <__vector_17+0x166>
5c: a5 c6 rjmp .+3402 ; 0xda8 <__vector_17+0x166>
5e: a4 c6 rjmp .+3400 ; 0xda8 <__vector_17+0x166>
60: a3 c6 rjmp .+3398 ; 0xda8 <__vector_17+0x166>
62: a2 c6 rjmp .+3396 ; 0xda8 <__vector_17+0x166>
64: a1 c6 rjmp .+3394 ; 0xda8 <__vector_17+0x166>
66: 3b c6 rjmp .+3190 ; 0xcde <__vector_17+0x9c>
68: 9f c6 rjmp .+3390 ; 0xda8 <__vector_17+0x166>
6a: 9e c6 rjmp .+3388 ; 0xda8 <__vector_17+0x166>
6c: 9d c6 rjmp .+3386 ; 0xda8 <__vector_17+0x166>
6e: 9c c6 rjmp .+3384 ; 0xda8 <__vector_17+0x166>
70: 9b c6 rjmp .+3382 ; 0xda8 <__vector_17+0x166>
72: 9a c6 rjmp .+3380 ; 0xda8 <__vector_17+0x166>
74: 99 c6 rjmp .+3378 ; 0xda8 <__vector_17+0x166>
76: 54 c6 rjmp .+3240 ; 0xd20 <__vector_17+0xde>
78: 97 c6 rjmp .+3374 ; 0xda8 <__vector_17+0x166>
7a: 96 c6 rjmp .+3372 ; 0xda8 <__vector_17+0x166>
7c: 95 c6 rjmp .+3370 ; 0xda8 <__vector_17+0x166>
7e: 94 c6 rjmp .+3368 ; 0xda8 <__vector_17+0x166>
80: 93 c6 rjmp .+3366 ; 0xda8 <__vector_17+0x166>
82: 92 c6 rjmp .+3364 ; 0xda8 <__vector_17+0x166>
84: 91 c6 rjmp .+3362 ; 0xda8 <__vector_17+0x166>
86: 90 c6 rjmp .+3360 ; 0xda8 <__vector_17+0x166>
88: 8f c6 rjmp .+3358 ; 0xda8 <__vector_17+0x166>
8a: 8e c6 rjmp .+3356 ; 0xda8 <__vector_17+0x166>
8c: 8d c6 rjmp .+3354 ; 0xda8 <__vector_17+0x166>
8e: 8c c6 rjmp .+3352 ; 0xda8 <__vector_17+0x166>
90: 8b c6 rjmp .+3350 ; 0xda8 <__vector_17+0x166>
92: 8a c6 rjmp .+3348 ; 0xda8 <__vector_17+0x166>
94: 89 c6 rjmp .+3346 ; 0xda8 <__vector_17+0x166>
96: 4d c6 rjmp .+3226 ; 0xd32 <__vector_17+0xf0>
98: 87 c6 rjmp .+3342 ; 0xda8 <__vector_17+0x166>
9a: 86 c6 rjmp .+3340 ; 0xda8 <__vector_17+0x166>
9c: 85 c6 rjmp .+3338 ; 0xda8 <__vector_17+0x166>
9e: 84 c6 rjmp .+3336 ; 0xda8 <__vector_17+0x166>
a0: 83 c6 rjmp .+3334 ; 0xda8 <__vector_17+0x166>
a2: 82 c6 rjmp .+3332 ; 0xda8 <__vector_17+0x166>
a4: 81 c6 rjmp .+3330 ; 0xda8 <__vector_17+0x166>
a6: 12 c6 rjmp .+3108 ; 0xccc <__vector_17+0x8a>
a8: 7f c6 rjmp .+3326 ; 0xda8 <__vector_17+0x166>
aa: 7e c6 rjmp .+3324 ; 0xda8 <__vector_17+0x166>
ac: 7d c6 rjmp .+3322 ; 0xda8 <__vector_17+0x166>
ae: 7c c6 rjmp .+3320 ; 0xda8 <__vector_17+0x166>
b0: 7b c6 rjmp .+3318 ; 0xda8 <__vector_17+0x166>
b2: 7a c6 rjmp .+3316 ; 0xda8 <__vector_17+0x166>
b4: 79 c6 rjmp .+3314 ; 0xda8 <__vector_17+0x166>
b6: 4e c6 rjmp .+3228 ; 0xd54 <__vector_17+0x112>
b8: 77 c6 rjmp .+3310 ; 0xda8 <__vector_17+0x166>
ba: 76 c6 rjmp .+3308 ; 0xda8 <__vector_17+0x166>
bc: 75 c6 rjmp .+3306 ; 0xda8 <__vector_17+0x166>
be: 74 c6 rjmp .+3304 ; 0xda8 <__vector_17+0x166>
c0: 73 c6 rjmp .+3302 ; 0xda8 <__vector_17+0x166>
c2: 72 c6 rjmp .+3300 ; 0xda8 <__vector_17+0x166>
c4: 71 c6 rjmp .+3298 ; 0xda8 <__vector_17+0x166>
c6: 62 c6 rjmp .+3268 ; 0xd8c <__vector_17+0x14a>
000000c8 <__init>:
c8: 11 24 eor r1, r1
ca: 1f be out 0x3f, r1 ; 63
cc: cf e5 ldi r28, 0x5F ; 95
ce: d4 e0 ldi r29, 0x04 ; 4
d0: de bf out 0x3e, r29 ; 62
d2: cd bf out 0x3d, r28 ; 61
000000d4 <__do_copy_data>:
d4: 10 e0 ldi r17, 0x00 ; 0
d6: a0 e6 ldi r26, 0x60 ; 96
d8: b0 e0 ldi r27, 0x00 ; 0
da: ee eb ldi r30, 0xBE ; 190
dc: f0 e1 ldi r31, 0x10 ; 16
de: 02 c0 rjmp .+4 ; 0xe4 <.do_copy_data_start>
000000e0 <.do_copy_data_loop>:
e0: 05 90 lpm r0, Z+
e2: 0d 92 st X+, r0
000000e4 <.do_copy_data_start>:
e4: a0 37 cpi r26, 0x70 ; 112
e6: b1 07 cpc r27, r17
e8: d9 f7 brne .-10 ; 0xe0 <.do_copy_data_loop>
000000ea <__do_clear_bss>:
ea: 12 e0 ldi r17, 0x02 ; 2
ec: a0 e7 ldi r26, 0x70 ; 112
ee: b0 e0 ldi r27, 0x00 ; 0
f0: 01 c0 rjmp .+2 ; 0xf4 <.do_clear_bss_start>
000000f2 <.do_clear_bss_loop>:
f2: 1d 92 st X+, r1
000000f4 <.do_clear_bss_start>:
f4: a4 3e cpi r26, 0xE4 ; 228
f6: b1 07 cpc r27, r17
f8: e1 f7 brne .-8 ; 0xf2 <.do_clear_bss_loop>
fa: 30 c0 rjmp .+96 ; 0x15c <main>
000000fc <__bad_interrupt>:
fc: 91 c7 rjmp .+3874 ; 0x1020 <__vector_default>
000000fe <CamInt_resetCam>:
output the clock signal. Thus, if we reset the cam, the
AVR has no clock, and thus doesn't run...
***********************************************************/
void CamInt_resetCam(void)
{
fe: 08 95 ret
00000100 <CamInt_init>:
100: 8f 9a sbi 0x11, 7 ; 17
102: 8f 9a sbi 0x11, 7 ; 17
104: 8a 98 cbi 0x11, 2 ; 17
106: 97 98 cbi 0x12, 7 ; 18
108: 87 b3 in r24, 0x17 ; 23
10a: 80 7f andi r24, 0xF0 ; 240
10c: 87 bb out 0x17, r24 ; 23
10e: 87 b3 in r24, 0x17 ; 23
110: 80 6f ori r24, 0xF0 ; 240
112: 87 bb out 0x17, r24 ; 23
114: 84 b3 in r24, 0x14 ; 20
116: 80 7f andi r24, 0xF0 ; 240
118: 84 bb out 0x14, r24 ; 20
11a: 8e b5 in r24, 0x2e ; 46
11c: 88 7f andi r24, 0xF8 ; 248
11e: 8e bd out 0x2e, r24 ; 46
120: 85 b7 in r24, 0x35 ; 53
122: 8c 60 ori r24, 0x0C ; 12
124: 85 bf out 0x35, r24 ; 53
126: 85 b7 in r24, 0x35 ; 53
128: 83 60 ori r24, 0x03 ; 3
12a: 85 bf out 0x35, r24 ; 53
12c: 8b b7 in r24, 0x3b ; 59
12e: 80 64 ori r24, 0x40 ; 64
130: 8b bf out 0x3b, r24 ; 59
132: 86 e0 ldi r24, 0x06 ; 6
134: 83 bf out 0x33, r24 ; 51
136: 85 b7 in r24, 0x35 ; 53
138: 8f 78 andi r24, 0x8F ; 143
13a: 85 bf out 0x35, r24 ; 53
13c: 85 b7 in r24, 0x35 ; 53
13e: 80 68 ori r24, 0x80 ; 128
140: 85 bf out 0x35, r24 ; 53
142: e0 e0 ldi r30, 0x00 ; 0
144: f3 e0 ldi r31, 0x03 ; 3
146: 80 e3 ldi r24, 0x30 ; 48
148: df 01 movw r26, r30
14a: 98 2f mov r25, r24
14c: 1d 92 st X+, r1
14e: 9a 95 dec r25
150: e9 f7 brne .-6 ; 0x14c <CamInt_init+0x4c>
/* Needed in order to truncate to 8 bit. */
uint8_t len;
len = (uint8_t) n;
asm volatile (
152: a1 e0 ldi r26, 0x01 ; 1
154: b0 e0 ldi r27, 0x00 ; 0
156: 18 2e mov r1, r24
158: a0 d7 rcall .+3904 ; 0x109a <__eeprom_read_block_1C1D1E>
15a: 08 95 ret
0000015c <main>:
Inputs: none
Outputs: int
***********************************************************/
int main(void)
{
15c: cf e5 ldi r28, 0x5F ; 95
15e: d4 e0 ldi r29, 0x04 ; 4
160: de bf out 0x3e, r29 ; 62
162: cd bf out 0x3d, r28 ; 61
/* initialize all of the interface modules */
DebugInt_init();
164: cf d6 rcall .+3486 ; 0xf04 <DebugInt_init>
UartInt_init();
166: f4 d4 rcall .+2536 ; 0xb50 <UartInt_init>
I2CInt_init();
168: 2b d5 rcall .+2646 ; 0xbc0 <I2CInt_init>
CamInt_init();
16a: ca df rcall .-108 ; 0x100 <CamInt_init>
/* initialize the remaining modules that will process
data...interrupts need to be on for these */
ENABLE_INTS();
16c: 78 94 sei
CamConfig_init();
16e: 7e d6 rcall .+3324 ; 0xe6c <CamConfig_init>
UIMgr_init();
170: 8a d3 rcall .+1812 ; 0x886 <UIMgr_init>
FrameMgr_init();
172: 37 d2 rcall .+1134 ; 0x5e2 <FrameMgr_init>
/* provide a short delay for the camera to stabilize before
we let the executive start up */
Utility_delay(1000);
174: 88 ee ldi r24, 0xE8 ; 232
176: 93 e0 ldi r25, 0x03 ; 3
178: 8a d6 rcall .+3348 ; 0xe8e <Utility_delay>
/* the rest of the application will be under the
control of the Executive. */
Exec_run();
17a: 11 d0 rcall .+34 ; 0x19e <Exec_run>
/* this should never be reached */
return(0);
}
17c: 80 e0 ldi r24, 0x00 ; 0
17e: 90 e0 ldi r25, 0x00 ; 0
180: 9d c7 rjmp .+3898 ; 0x10bc <_exit>
00000182 <Exec_writeEventFifo>:
182: f8 94 cli
184: 90 91 70 00 lds r25, 0x0070
188: ec e6 ldi r30, 0x6C ; 108
18a: f2 e0 ldi r31, 0x02 ; 2
18c: e9 0f add r30, r25
18e: f1 1d adc r31, r1
190: 80 83 st Z, r24
192: 9f 5f subi r25, 0xFF ; 255
194: 97 70 andi r25, 0x07 ; 7
196: 90 93 70 00 sts 0x0070, r25
19a: 78 94 sei
19c: 08 95 ret
0000019e <Exec_run>:
19e: 80 91 72 00 lds r24, 0x0072
1a2: 88 23 and r24, r24
1a4: 99 f0 breq .+38 ; 0x1cc <Exec_run+0x2e>
1a6: 80 ff sbrs r24, 0
1a8: 07 c0 rjmp .+14 ; 0x1b8 <Exec_run+0x1a>
1aa: f8 94 cli
1ac: 8e 7f andi r24, 0xFE ; 254
1ae: 80 93 72 00 sts 0x0072, r24
1b2: 78 94 sei
1b4: b6 d0 rcall .+364 ; 0x322 <FrameMgr_processLine>
1b6: ff d2 rcall .+1534 ; 0x7b6 <UIMgr_transmitPendingData>
1b8: 80 91 72 00 lds r24, 0x0072
1bc: 81 ff sbrs r24, 1
1be: 06 c0 rjmp .+12 ; 0x1cc <Exec_run+0x2e>
1c0: f8 94 cli
1c2: 8d 7f andi r24, 0xFD ; 253
1c4: 80 93 72 00 sts 0x0072, r24
1c8: 78 94 sei
1ca: 12 d2 rcall .+1060 ; 0x5f0 <FrameMgr_acquireLine>
1cc: 20 91 71 00 lds r18, 0x0071
1d0: 80 91 70 00 lds r24, 0x0070
1d4: 82 17 cp r24, r18
1d6: 19 f3 breq .-58 ; 0x19e <Exec_run>
1d8: f8 94 cli
1da: e2 2f mov r30, r18
1dc: ff 27 eor r31, r31
1de: e4 59 subi r30, 0x94 ; 148
1e0: fd 4f sbci r31, 0xFD ; 253
1e2: 90 81 ld r25, Z
1e4: 82 2f mov r24, r18
1e6: 8f 5f subi r24, 0xFF ; 255
1e8: 87 70 andi r24, 0x07 ; 7
1ea: 80 93 71 00 sts 0x0071, r24
1ee: 78 94 sei
1f0: 89 2f mov r24, r25
1f2: 99 27 eor r25, r25
1f4: 80 31 cpi r24, 0x10 ; 16
1f6: 31 f1 breq .+76 ; 0x244 <Exec_run+0xa6>
1f8: 81 31 cpi r24, 0x11 ; 17
1fa: 68 f4 brcc .+26 ; 0x216 <Exec_run+0x78>
1fc: 82 30 cpi r24, 0x02 ; 2
1fe: c9 f0 breq .+50 ; 0x232 <Exec_run+0x94>
200: 83 30 cpi r24, 0x03 ; 3
202: 18 f4 brcc .+6 ; 0x20a <Exec_run+0x6c>
204: 81 30 cpi r24, 0x01 ; 1
206: 59 f6 brne .-106 ; 0x19e <Exec_run>
208: 2b c0 rjmp .+86 ; 0x260 <Exec_run+0xc2>
20a: 84 30 cpi r24, 0x04 ; 4
20c: 31 f1 breq .+76 ; 0x25a <Exec_run+0xbc>
20e: 88 30 cpi r24, 0x08 ; 8
210: 09 f0 breq .+2 ; 0x214 <Exec_run+0x76>
212: c5 cf rjmp .-118 ; 0x19e <Exec_run>
214: 1f c0 rjmp .+62 ; 0x254 <Exec_run+0xb6>
216: 80 38 cpi r24, 0x80 ; 128
218: 79 f0 breq .+30 ; 0x238 <Exec_run+0x9a>
21a: 81 38 cpi r24, 0x81 ; 129
21c: 20 f4 brcc .+8 ; 0x226 <Exec_run+0x88>
21e: 80 32 cpi r24, 0x20 ; 32
220: 09 f0 breq .+2 ; 0x224 <Exec_run+0x86>
222: bd cf rjmp .-134 ; 0x19e <Exec_run>
224: 14 c0 rjmp .+40 ; 0x24e <Exec_run+0xb0>
226: 81 38 cpi r24, 0x81 ; 129
228: 51 f0 breq .+20 ; 0x23e <Exec_run+0xa0>
22a: 80 39 cpi r24, 0x90 ; 144
22c: 09 f0 breq .+2 ; 0x230 <Exec_run+0x92>
22e: b7 cf rjmp .-146 ; 0x19e <Exec_run>
230: 1c c0 rjmp .+56 ; 0x26a <Exec_run+0xcc>
232: 82 e0 ldi r24, 0x02 ; 2
234: 2e d2 rcall .+1116 ; 0x692 <FrameMgr_dispatchEvent>
236: b3 cf rjmp .-154 ; 0x19e <Exec_run>
238: 80 e8 ldi r24, 0x80 ; 128
23a: 2b d2 rcall .+1110 ; 0x692 <FrameMgr_dispatchEvent>
23c: b0 cf rjmp .-160 ; 0x19e <Exec_run>
23e: 81 e8 ldi r24, 0x81 ; 129
240: 28 d2 rcall .+1104 ; 0x692 <FrameMgr_dispatchEvent>
242: ad cf rjmp .-166 ; 0x19e <Exec_run>
244: 80 e1 ldi r24, 0x10 ; 16
246: 25 d2 rcall .+1098 ; 0x692 <FrameMgr_dispatchEvent>
248: 80 e1 ldi r24, 0x10 ; 16
24a: 75 d4 rcall .+2282 ; 0xb36 <UIMgr_dispatchEvent>
24c: a8 cf rjmp .-176 ; 0x19e <Exec_run>
24e: 80 e2 ldi r24, 0x20 ; 32
250: 20 d2 rcall .+1088 ; 0x692 <FrameMgr_dispatchEvent>
252: a5 cf rjmp .-182 ; 0x19e <Exec_run>
254: 88 e0 ldi r24, 0x08 ; 8
256: 1d d2 rcall .+1082 ; 0x692 <FrameMgr_dispatchEvent>
258: a2 cf rjmp .-188 ; 0x19e <Exec_run>
25a: 84 e0 ldi r24, 0x04 ; 4
25c: 1a d2 rcall .+1076 ; 0x692 <FrameMgr_dispatchEvent>
25e: 9f cf rjmp .-194 ; 0x19e <Exec_run>
260: 81 e0 ldi r24, 0x01 ; 1
262: 69 d4 rcall .+2258 ; 0xb36 <UIMgr_dispatchEvent>
264: 81 e0 ldi r24, 0x01 ; 1
266: 15 d2 rcall .+1066 ; 0x692 <FrameMgr_dispatchEvent>
268: 9a cf rjmp .-204 ; 0x19e <Exec_run>
26a: 80 e9 ldi r24, 0x90 ; 144
26c: 64 d4 rcall .+2248 ; 0xb36 <UIMgr_dispatchEvent>
26e: 97 cf rjmp .-210 ; 0x19e <Exec_run>
00000270 <FrameMgr_processFrame>:
270: df 92 push r13
272: ef 92 push r14
274: ff 92 push r15
276: 0f 93 push r16
278: 1f 93 push r17
27a: cf 93 push r28
27c: df 93 push r29
27e: 20 91 60 00 lds r18, 0x0060
282: 30 91 61 00 lds r19, 0x0061
286: 80 91 73 00 lds r24, 0x0073
28a: 88 23 and r24, r24
28c: 09 f4 brne .+2 ; 0x290 <FrameMgr_processFrame+0x20>
28e: 3f c0 rjmp .+126 ; 0x30e <FrameMgr_processFrame+0x9e>
290: e9 01 movw r28, r18
292: 8a e0 ldi r24, 0x0A ; 10
294: 5c d2 rcall .+1208 ; 0x74e <UIMgr_writeTxFifo>
296: 80 91 73 00 lds r24, 0x0073
29a: 59 d2 rcall .+1202 ; 0x74e <UIMgr_writeTxFifo>
29c: dd 24 eor r13, r13
29e: 8f 81 ldd r24, Y+7 ; 0x07
2a0: 81 30 cpi r24, 0x01 ; 1
2a2: 69 f5 brne .+90 ; 0x2fe <FrameMgr_processFrame+0x8e>
2a4: 88 81 ld r24, Y
2a6: 80 38 cpi r24, 0x80 ; 128
2a8: e1 f0 breq .+56 ; 0x2e2 <FrameMgr_processFrame+0x72>
2aa: 80 34 cpi r24, 0x40 ; 64
2ac: 11 f4 brne .+4 ; 0x2b2 <FrameMgr_processFrame+0x42>
2ae: 81 e0 ldi r24, 0x01 ; 1
2b0: 19 c0 rjmp .+50 ; 0x2e4 <FrameMgr_processFrame+0x74>
2b2: 80 32 cpi r24, 0x20 ; 32
2b4: 11 f4 brne .+4 ; 0x2ba <FrameMgr_processFrame+0x4a>
2b6: 82 e0 ldi r24, 0x02 ; 2
2b8: 15 c0 rjmp .+42 ; 0x2e4 <FrameMgr_processFrame+0x74>
2ba: 80 31 cpi r24, 0x10 ; 16
2bc: 11 f4 brne .+4 ; 0x2c2 <FrameMgr_processFrame+0x52>
2be: 83 e0 ldi r24, 0x03 ; 3
2c0: 11 c0 rjmp .+34 ; 0x2e4 <FrameMgr_processFrame+0x74>
2c2: 88 30 cpi r24, 0x08 ; 8
2c4: 11 f4 brne .+4 ; 0x2ca <FrameMgr_processFrame+0x5a>
2c6: 84 e0 ldi r24, 0x04 ; 4
2c8: 0d c0 rjmp .+26 ; 0x2e4 <FrameMgr_processFrame+0x74>
2ca: 84 30 cpi r24, 0x04 ; 4
2cc: 11 f4 brne .+4 ; 0x2d2 <FrameMgr_processFrame+0x62>
2ce: 85 e0 ldi r24, 0x05 ; 5
2d0: 09 c0 rjmp .+18 ; 0x2e4 <FrameMgr_processFrame+0x74>
2d2: 82 30 cpi r24, 0x02 ; 2
2d4: 11 f4 brne .+4 ; 0x2da <FrameMgr_processFrame+0x6a>
2d6: 86 e0 ldi r24, 0x06 ; 6
2d8: 05 c0 rjmp .+10 ; 0x2e4 <FrameMgr_processFrame+0x74>
2da: 81 30 cpi r24, 0x01 ; 1
2dc: 11 f4 brne .+4 ; 0x2e2 <FrameMgr_processFrame+0x72>
2de: 87 e0 ldi r24, 0x07 ; 7
2e0: 01 c0 rjmp .+2 ; 0x2e4 <FrameMgr_processFrame+0x74>
2e2: 80 e0 ldi r24, 0x00 ; 0
2e4: 1b 81 ldd r17, Y+3 ; 0x03
2e6: 0c 81 ldd r16, Y+4 ; 0x04
2e8: fd 80 ldd r15, Y+5 ; 0x05
2ea: ee 80 ldd r14, Y+6 ; 0x06
2ec: 30 d2 rcall .+1120 ; 0x74e <UIMgr_writeTxFifo>
2ee: 81 2f mov r24, r17
2f0: 2e d2 rcall .+1116 ; 0x74e <UIMgr_writeTxFifo>
2f2: 80 2f mov r24, r16
2f4: 2c d2 rcall .+1112 ; 0x74e <UIMgr_writeTxFifo>
2f6: 8f 2d mov r24, r15
2f8: 2a d2 rcall .+1108 ; 0x74e <UIMgr_writeTxFifo>
2fa: 8e 2d mov r24, r14
2fc: 28 d2 rcall .+1104 ; 0x74e <UIMgr_writeTxFifo>
2fe: d3 94 inc r13
300: 88 e0 ldi r24, 0x08 ; 8
302: d8 16 cp r13, r24
304: 11 f0 breq .+4 ; 0x30a <FrameMgr_processFrame+0x9a>
306: 28 96 adiw r28, 0x08 ; 8
308: ca cf rjmp .-108 ; 0x29e <FrameMgr_processFrame+0x2e>
30a: 8f ef ldi r24, 0xFF ; 255
30c: 20 d2 rcall .+1088 ; 0x74e <UIMgr_writeTxFifo>
30e: 84 e0 ldi r24, 0x04 ; 4
310: 38 df rcall .-400 ; 0x182 <Exec_writeEventFifo>
312: df 91 pop r29
314: cf 91 pop r28
316: 1f 91 pop r17
318: 0f 91 pop r16
31a: ff 90 pop r15
31c: ef 90 pop r14
31e: df 90 pop r13
320: 08 95 ret
00000322 <FrameMgr_processLine>:
322: 2f 92 push r2
324: 3f 92 push r3
326: 4f 92 push r4
328: 5f 92 push r5
32a: 6f 92 push r6
32c: 7f 92 push r7
32e: 8f 92 push r8
330: 9f 92 push r9
332: af 92 push r10
334: bf 92 push r11
336: cf 92 push r12
338: df 92 push r13
33a: ef 92 push r14
33c: ff 92 push r15
33e: 0f 93 push r16
340: 1f 93 push r17
342: cf 93 push r28
344: df 93 push r29
346: cd b7 in r28, 0x3d ; 61
348: de b7 in r29, 0x3e ; 62
34a: 21 97 sbiw r28, 0x01 ; 1
34c: 0f b6 in r0, 0x3f ; 63
34e: f8 94 cli
350: de bf out 0x3e, r29 ; 62
352: 0f be out 0x3f, r0 ; 63
354: cd bf out 0x3d, r28 ; 61
356: 00 91 60 00 lds r16, 0x0060
35a: 10 91 61 00 lds r17, 0x0061
35e: 80 91 74 00 lds r24, 0x0074
362: 82 30 cpi r24, 0x02 ; 2
364: 09 f0 breq .+2 ; 0x368 <FrameMgr_processLine+0x46>
366: 6a c0 rjmp .+212 ; 0x43c <FrameMgr_processLine+0x11a>
368: 8b e0 ldi r24, 0x0B ; 11
36a: fc d3 rcall .+2040 ; 0xb64 <UartInt_txByte>
36c: 80 91 75 00 lds r24, 0x0075
370: f9 d3 rcall .+2034 ; 0xb64 <UartInt_txByte>
372: 0f 2e mov r0, r31
374: fc eb ldi r31, 0xBC ; 188
376: cf 2e mov r12, r31
378: f1 e0 ldi r31, 0x01 ; 1
37a: df 2e mov r13, r31
37c: f0 2d mov r31, r0
37e: 00 e0 ldi r16, 0x00 ; 0
380: 10 e0 ldi r17, 0x00 ; 0
382: 0f 2e mov r0, r31
384: fc e0 ldi r31, 0x0C ; 12
386: ef 2e mov r14, r31
388: f1 e0 ldi r31, 0x01 ; 1
38a: ff 2e mov r15, r31
38c: f0 2d mov r31, r0
38e: f6 01 movw r30, r12
390: 80 81 ld r24, Z
392: 89 83 std Y+1, r24 ; 0x01
394: 89 81 ldd r24, Y+1 ; 0x01
396: 8f 70 andi r24, 0x0F ; 15
398: 89 83 std Y+1, r24 ; 0x01
39a: 89 81 ldd r24, Y+1 ; 0x01
39c: 82 95 swap r24
39e: 80 7f andi r24, 0xF0 ; 240
3a0: 89 83 std Y+1, r24 ; 0x01
3a2: 99 81 ldd r25, Y+1 ; 0x01
3a4: f7 01 movw r30, r14
3a6: 80 81 ld r24, Z
3a8: 8f 70 andi r24, 0x0F ; 15
3aa: 89 2b or r24, r25
3ac: 89 83 std Y+1, r24 ; 0x01
3ae: 89 81 ldd r24, Y+1 ; 0x01
3b0: d9 d3 rcall .+1970 ; 0xb64 <UartInt_txByte>
3b2: d8 01 movw r26, r16
3b4: 11 96 adiw r26, 0x01 ; 1
3b6: fd 01 movw r30, r26
3b8: e4 5f subi r30, 0xF4 ; 244
3ba: fe 4f sbci r31, 0xFE ; 254
3bc: 80 81 ld r24, Z
3be: 89 83 std Y+1, r24 ; 0x01
3c0: 89 81 ldd r24, Y+1 ; 0x01
3c2: 8f 70 andi r24, 0x0F ; 15
3c4: 89 83 std Y+1, r24 ; 0x01
3c6: 89 81 ldd r24, Y+1 ; 0x01
3c8: 82 95 swap r24
3ca: 80 7f andi r24, 0xF0 ; 240
3cc: 89 83 std Y+1, r24 ; 0x01
3ce: 99 81 ldd r25, Y+1 ; 0x01
3d0: a4 54 subi r26, 0x44 ; 68
3d2: be 4f sbci r27, 0xFE ; 254
3d4: 8c 91 ld r24, X
3d6: 8f 70 andi r24, 0x0F ; 15
3d8: 89 2b or r24, r25
3da: 89 83 std Y+1, r24 ; 0x01
3dc: 89 81 ldd r24, Y+1 ; 0x01
3de: c2 d3 rcall .+1924 ; 0xb64 <UartInt_txByte>
3e0: 82 e0 ldi r24, 0x02 ; 2
3e2: 90 e0 ldi r25, 0x00 ; 0
3e4: c8 0e add r12, r24
3e6: d9 1e adc r13, r25
3e8: 0e 5f subi r16, 0xFE ; 254
3ea: 1f 4f sbci r17, 0xFF ; 255
3ec: e8 0e add r14, r24
3ee: f9 1e adc r15, r25
3f0: 00 3b cpi r16, 0xB0 ; 176
3f2: 11 05 cpc r17, r1
3f4: 61 f6 brne .-104 ; 0x38e <FrameMgr_processLine+0x6c>
3f6: 8f e0 ldi r24, 0x0F ; 15
3f8: b5 d3 rcall .+1898 ; 0xb64 <UartInt_txByte>
3fa: 80 91 75 00 lds r24, 0x0075
3fe: 8f 5f subi r24, 0xFF ; 255
400: 80 93 75 00 sts 0x0075, r24
404: 88 34 cpi r24, 0x48 ; 72
406: 60 f0 brcs .+24 ; 0x420 <FrameMgr_processLine+0xfe>
408: 10 92 75 00 sts 0x0075, r1
40c: 10 92 74 00 sts 0x0074, r1
410: 89 b7 in r24, 0x39 ; 57
412: 8b 7f andi r24, 0xFB ; 251
414: 89 bf out 0x39, r24 ; 57
416: 60 e0 ldi r22, 0x00 ; 0
418: 81 e1 ldi r24, 0x11 ; 17
41a: e9 d4 rcall .+2514 ; 0xdee <CamConfig_setCamReg>
41c: ed d4 rcall .+2522 ; 0xdf8 <CamConfig_sendFifoCmds>
41e: c8 c0 rjmp .+400 ; 0x5b0 <__stack+0x151>
420: 80 91 72 00 lds r24, 0x0072
424: 82 60 ori r24, 0x02 ; 2
426: 80 93 72 00 sts 0x0072, r24
42a: c2 c0 rjmp .+388 ; 0x5b0 <__stack+0x151>
42c: 80 e2 ldi r24, 0x20 ; 32
42e: a9 de rcall .-686 ; 0x182 <Exec_writeEventFifo>
430: 89 b7 in r24, 0x39 ; 57
432: 8b 7f andi r24, 0xFB ; 251
434: 89 bf out 0x39, r24 ; 57
436: 10 92 76 00 sts 0x0076, r1
43a: ba c0 rjmp .+372 ; 0x5b0 <__stack+0x151>
43c: 81 30 cpi r24, 0x01 ; 1
43e: 09 f0 breq .+2 ; 0x442 <FrameMgr_processLine+0x120>
440: b7 c0 rjmp .+366 ; 0x5b0 <__stack+0x151>
442: f0 90 76 00 lds r15, 0x0076
446: cf 2c mov r12, r15
448: dd 24 eor r13, r13
44a: 36 01 movw r6, r12
44c: 08 94 sec
44e: 61 08 sbc r6, r1
450: 71 08 sbc r7, r1
452: 70 91 73 00 lds r23, 0x0073
456: 0f 2e mov r0, r31
458: fc eb ldi r31, 0xBC ; 188
45a: 2f 2e mov r2, r31
45c: f1 e0 ldi r31, 0x01 ; 1
45e: 3f 2e mov r3, r31
460: f0 2d mov r31, r0
462: 50 e0 ldi r21, 0x00 ; 0
464: 40 e0 ldi r20, 0x00 ; 0
466: 61 e0 ldi r22, 0x01 ; 1
468: ef 2c mov r14, r15
46a: e3 94 inc r14
46c: f1 01 movw r30, r2
46e: 30 81 ld r19, Z
470: 56 0f add r21, r22
472: 61 81 ldd r22, Z+1 ; 0x01
474: 82 e0 ldi r24, 0x02 ; 2
476: 90 e0 ldi r25, 0x00 ; 0
478: 28 0e add r2, r24
47a: 39 1e adc r3, r25
47c: 46 0f add r20, r22
47e: 33 23 and r19, r19
480: 09 f4 brne .+2 ; 0x484 <__stack+0x25>
482: 5c c0 rjmp .+184 ; 0x53c <__stack+0xdd>
484: 64 30 cpi r22, 0x04 ; 4
486: 08 f4 brcc .+2 ; 0x48a <__stack+0x2b>
488: 59 c0 rjmp .+178 ; 0x53c <__stack+0xdd>
48a: d8 01 movw r26, r16
48c: 20 e0 ldi r18, 0x00 ; 0
48e: 8c 91 ld r24, X
490: 38 17 cp r19, r24
492: c9 f5 brne .+114 ; 0x506 <__stack+0xa7>
494: fd 01 movw r30, r26
496: 87 81 ldd r24, Z+7 ; 0x07
498: 81 30 cpi r24, 0x01 ; 1
49a: a9 f5 brne .+106 ; 0x506 <__stack+0xa7>
49c: 0f 2e mov r0, r31
49e: f6 e0 ldi r31, 0x06 ; 6
4a0: af 2e mov r10, r31
4a2: bb 24 eor r11, r11
4a4: f0 2d mov r31, r0
4a6: aa 0e add r10, r26
4a8: bb 1e adc r11, r27
4aa: 86 81 ldd r24, Z+6 ; 0x06
4ac: 99 27 eor r25, r25
4ae: 86 15 cp r24, r6
4b0: 97 05 cpc r25, r7
4b2: 49 f5 brne .+82 ; 0x506 <__stack+0xa7>
4b4: 2d 01 movw r4, r26
4b6: 08 94 sec
4b8: 41 1c adc r4, r1
4ba: 51 1c adc r5, r1
4bc: 81 81 ldd r24, Z+1 ; 0x01
4be: 88 24 eor r8, r8
4c0: 99 24 eor r9, r9
4c2: 68 94 set
4c4: 81 f8 bld r8, 1
4c6: 8a 0e add r8, r26
4c8: 9b 1e adc r9, r27
4ca: 92 81 ldd r25, Z+2 ; 0x02
4cc: 58 17 cp r21, r24
4ce: 10 f0 brcs .+4 ; 0x4d4 <__stack+0x75>
4d0: 95 17 cp r25, r21
4d2: 40 f4 brcc .+16 ; 0x4e4 <__stack+0x85>
4d4: 48 17 cp r20, r24
4d6: 10 f0 brcs .+4 ; 0x4dc <__stack+0x7d>
4d8: 94 17 cp r25, r20
4da: 20 f4 brcc .+8 ; 0x4e4 <__stack+0x85>
4dc: 85 17 cp r24, r21
4de: 98 f0 brcs .+38 ; 0x506 <__stack+0xa7>
4e0: 49 17 cp r20, r25
4e2: 88 f0 brcs .+34 ; 0x506 <__stack+0xa7>
4e4: f2 01 movw r30, r4
4e6: 50 83 st Z, r21
4e8: f4 01 movw r30, r8
4ea: 40 83 st Z, r20
4ec: fd 01 movw r30, r26
4ee: 83 81 ldd r24, Z+3 ; 0x03
4f0: 58 17 cp r21, r24
4f2: 08 f4 brcc .+2 ; 0x4f6 <__stack+0x97>
4f4: 53 83 std Z+3, r21 ; 0x03
4f6: fd 01 movw r30, r26
4f8: 85 81 ldd r24, Z+5 ; 0x05
4fa: 84 17 cp r24, r20
4fc: 08 f4 brcc .+2 ; 0x500 <__stack+0xa1>
4fe: 45 83 std Z+5, r20 ; 0x05
500: f5 01 movw r30, r10
502: f0 82 st Z, r15
504: 1b c0 rjmp .+54 ; 0x53c <__stack+0xdd>
506: 2f 5f subi r18, 0xFF ; 255
508: 28 30 cpi r18, 0x08 ; 8
50a: 09 f4 brne .+2 ; 0x50e <__stack+0xaf>
50c: 4d c0 rjmp .+154 ; 0x5a8 <__stack+0x149>
50e: 18 96 adiw r26, 0x08 ; 8
510: be cf rjmp .-132 ; 0x48e <__stack+0x2f>
512: d8 01 movw r26, r16
514: 90 e0 ldi r25, 0x00 ; 0
516: fd 01 movw r30, r26
518: 87 81 ldd r24, Z+7 ; 0x07
51a: 88 23 and r24, r24
51c: 21 f0 breq .+8 ; 0x526 <__stack+0xc7>
51e: 18 96 adiw r26, 0x08 ; 8
520: 9f 5f subi r25, 0xFF ; 255
522: 98 30 cpi r25, 0x08 ; 8
524: c1 f7 brne .-16 ; 0x516 <__stack+0xb7>
526: 3c 93 st X, r19
528: fd 01 movw r30, r26
52a: 51 83 std Z+1, r21 ; 0x01
52c: 42 83 std Z+2, r20 ; 0x02
52e: 53 83 std Z+3, r21 ; 0x03
530: f4 82 std Z+4, r15 ; 0x04
532: 45 83 std Z+5, r20 ; 0x05
534: f6 82 std Z+6, r15 ; 0x06
536: 81 e0 ldi r24, 0x01 ; 1
538: 87 83 std Z+7, r24 ; 0x07
53a: 7f 5f subi r23, 0xFF ; 255
53c: 40 3b cpi r20, 0xB0 ; 176
53e: 08 f4 brcc .+2 ; 0x542 <__stack+0xe3>
540: 95 cf rjmp .-214 ; 0x46c <__stack+0xd>
542: 70 93 73 00 sts 0x0073, r23
546: c6 01 movw r24, r12
548: 87 70 andi r24, 0x07 ; 7
54a: 90 70 andi r25, 0x00 ; 0
54c: 07 97 sbiw r24, 0x07 ; 7
54e: 01 f5 brne .+64 ; 0x590 <__stack+0x131>
550: d8 01 movw r26, r16
552: 17 96 adiw r26, 0x07 ; 7
554: 40 e0 ldi r20, 0x00 ; 0
556: 8c 91 ld r24, X
558: 81 30 cpi r24, 0x01 ; 1
55a: a1 f4 brne .+40 ; 0x584 <__stack+0x125>
55c: fd 01 movw r30, r26
55e: 31 97 sbiw r30, 0x01 ; 1
560: 90 81 ld r25, Z
562: fd 01 movw r30, r26
564: 33 97 sbiw r30, 0x03 ; 3
566: 80 81 ld r24, Z
568: 29 2f mov r18, r25
56a: 33 27 eor r19, r19
56c: f9 01 movw r30, r18
56e: e8 1b sub r30, r24
570: f1 09 sbc r31, r1
572: 33 97 sbiw r30, 0x03 ; 3
574: 3c f4 brge .+14 ; 0x584 <__stack+0x125>
576: c6 01 movw r24, r12
578: 82 1b sub r24, r18
57a: 93 0b sbc r25, r19
57c: 03 97 sbiw r24, 0x03 ; 3
57e: 14 f0 brlt .+4 ; 0x584 <__stack+0x125>
580: 1c 92 st X, r1
582: 71 50 subi r23, 0x01 ; 1
584: 4f 5f subi r20, 0xFF ; 255
586: 18 96 adiw r26, 0x08 ; 8
588: 48 30 cpi r20, 0x08 ; 8
58a: 29 f7 brne .-54 ; 0x556 <__stack+0xf7>
58c: 70 93 73 00 sts 0x0073, r23
590: e0 92 76 00 sts 0x0076, r14
594: f0 e9 ldi r31, 0x90 ; 144
596: ef 16 cp r14, r31
598: 09 f4 brne .+2 ; 0x59c <__stack+0x13d>
59a: 48 cf rjmp .-368 ; 0x42c <FrameMgr_processLine+0x10a>
59c: 80 91 72 00 lds r24, 0x0072
5a0: 82 60 ori r24, 0x02 ; 2
5a2: 80 93 72 00 sts 0x0072, r24
5a6: 04 c0 rjmp .+8 ; 0x5b0 <__stack+0x151>
5a8: 78 30 cpi r23, 0x08 ; 8
5aa: 08 f4 brcc .+2 ; 0x5ae <__stack+0x14f>
5ac: b2 cf rjmp .-156 ; 0x512 <__stack+0xb3>
5ae: c6 cf rjmp .-116 ; 0x53c <__stack+0xdd>
5b0: 21 96 adiw r28, 0x01 ; 1
5b2: 0f b6 in r0, 0x3f ; 63
5b4: f8 94 cli
5b6: de bf out 0x3e, r29 ; 62
5b8: 0f be out 0x3f, r0 ; 63
5ba: cd bf out 0x3d, r28 ; 61
5bc: df 91 pop r29
5be: cf 91 pop r28
5c0: 1f 91 pop r17
5c2: 0f 91 pop r16
5c4: ff 90 pop r15
5c6: ef 90 pop r14
5c8: df 90 pop r13
5ca: cf 90 pop r12
5cc: bf 90 pop r11
5ce: af 90 pop r10
5d0: 9f 90 pop r9
5d2: 8f 90 pop r8
5d4: 7f 90 pop r7
5d6: 6f 90 pop r6
5d8: 5f 90 pop r5
5da: 4f 90 pop r4
5dc: 3f 90 pop r3
5de: 2f 90 pop r2
5e0: 08 95 ret
000005e2 <FrameMgr_init>:
5e2: 80 e4 ldi r24, 0x40 ; 64
5e4: e8 e7 ldi r30, 0x78 ; 120
5e6: f0 e0 ldi r31, 0x00 ; 0
5e8: 11 92 st Z+, r1
5ea: 8a 95 dec r24
5ec: e9 f7 brne .-6 ; 0x5e8 <FrameMgr_init+0x6>
5ee: 08 95 ret
000005f0 <FrameMgr_acquireLine>:
5f0: 80 91 74 00 lds r24, 0x0074
5f4: 82 30 cpi r24, 0x02 ; 2
5f6: 49 f5 brne .+82 ; 0x64a <FrameMgr_acquireLine+0x5a>
5f8: 80 91 75 00 lds r24, 0x0075
5fc: 28 2f mov r18, r24
5fe: 22 0f add r18, r18
600: 80 eb ldi r24, 0xB0 ; 176
602: ec eb ldi r30, 0xBC ; 188
604: f1 e0 ldi r31, 0x01 ; 1
606: 98 2f mov r25, r24
608: 11 92 st Z+, r1
60a: 9a 95 dec r25
60c: e9 f7 brne .-6 ; 0x608 <FrameMgr_acquireLine+0x18>
60e: ec e0 ldi r30, 0x0C ; 12
610: f1 e0 ldi r31, 0x01 ; 1
612: 11 92 st Z+, r1
614: 8a 95 dec r24
616: e9 f7 brne .-6 ; 0x612 <FrameMgr_acquireLine+0x22>
618: 82 9b sbis 0x10, 2 ; 16
61a: fe cf rjmp .-4 ; 0x618 <FrameMgr_acquireLine+0x28>
61c: 82 9b sbis 0x10, 2 ; 16
61e: 07 c0 rjmp .+14 ; 0x62e <FrameMgr_acquireLine+0x3e>
620: fd cf rjmp .-6 ; 0x61c <FrameMgr_acquireLine+0x2c>
622: 90 e0 ldi r25, 0x00 ; 0
624: 84 9b sbis 0x10, 4 ; 16
626: fe cf rjmp .-4 ; 0x624 <FrameMgr_acquireLine+0x34>
628: 84 9b sbis 0x10, 4 ; 16
62a: 04 c0 rjmp .+8 ; 0x634 <FrameMgr_acquireLine+0x44>
62c: fd cf rjmp .-6 ; 0x628 <FrameMgr_acquireLine+0x38>
62e: 22 23 and r18, r18
630: c1 f7 brne .-16 ; 0x622 <FrameMgr_acquireLine+0x32>
632: 05 c0 rjmp .+10 ; 0x63e <FrameMgr_acquireLine+0x4e>
634: 91 50 subi r25, 0x01 ; 1
636: 82 2f mov r24, r18
638: 81 95 neg r24
63a: 98 17 cp r25, r24
63c: 99 f7 brne .-26 ; 0x624 <FrameMgr_acquireLine+0x34>
63e: 6c e0 ldi r22, 0x0C ; 12
640: 71 e0 ldi r23, 0x01 ; 1
642: 8c eb ldi r24, 0xBC ; 188
644: 91 e0 ldi r25, 0x01 ; 1
646: c3 d4 rcall .+2438 ; 0xfce <CamIntAsm_acquireDumpLine>
648: 08 95 ret
64a: 81 30 cpi r24, 0x01 ; 1
64c: 39 f4 brne .+14 ; 0x65c <FrameMgr_acquireLine+0x6c>
64e: 84 99 sbic 0x10, 4 ; 16
650: fe cf rjmp .-4 ; 0x64e <FrameMgr_acquireLine+0x5e>
652: 60 e0 ldi r22, 0x00 ; 0
654: 73 e0 ldi r23, 0x03 ; 3
656: 8c eb ldi r24, 0xBC ; 188
658: 91 e0 ldi r25, 0x01 ; 1
65a: 72 d4 rcall .+2276 ; 0xf40 <CamIntAsm_acquireTrackingLine>
65c: 08 95 ret
0000065e <FrameMgr_acquireFrame>:
65e: 80 91 74 00 lds r24, 0x0074
662: 81 30 cpi r24, 0x01 ; 1
664: a9 f4 brne .+42 ; 0x690 <FrameMgr_acquireFrame+0x32>
666: 10 92 76 00 sts 0x0076, r1
66a: 80 91 73 00 lds r24, 0x0073
66e: 80 93 77 00 sts 0x0077, r24
672: 10 92 73 00 sts 0x0073, r1
676: 80 e4 ldi r24, 0x40 ; 64
678: e8 e7 ldi r30, 0x78 ; 120
67a: f0 e0 ldi r31, 0x00 ; 0
67c: 11 92 st Z+, r1
67e: 8a 95 dec r24
680: e9 f7 brne .-6 ; 0x67c <FrameMgr_acquireFrame+0x1e>
682: 82 9b sbis 0x10, 2 ; 16
684: fe cf rjmp .-4 ; 0x682 <FrameMgr_acquireFrame+0x24>
686: 60 e0 ldi r22, 0x00 ; 0
688: 73 e0 ldi r23, 0x03 ; 3
68a: 8c eb ldi r24, 0xBC ; 188
68c: 91 e0 ldi r25, 0x01 ; 1
68e: 58 d4 rcall .+2224 ; 0xf40 <CamIntAsm_acquireTrackingLine>
690: 08 95 ret
00000692 <FrameMgr_dispatchEvent>:
692: 84 30 cpi r24, 0x04 ; 4
694: 19 f1 breq .+70 ; 0x6dc <FrameMgr_dispatchEvent+0x4a>
696: 85 30 cpi r24, 0x05 ; 5
698: 28 f4 brcc .+10 ; 0x6a4 <FrameMgr_dispatchEvent+0x12>
69a: 81 30 cpi r24, 0x01 ; 1
69c: 09 f1 breq .+66 ; 0x6e0 <FrameMgr_dispatchEvent+0x4e>
69e: 82 30 cpi r24, 0x02 ; 2
6a0: 41 f5 brne .+80 ; 0x6f2 <FrameMgr_dispatchEvent+0x60>
6a2: 07 c0 rjmp .+14 ; 0x6b2 <FrameMgr_dispatchEvent+0x20>
6a4: 80 38 cpi r24, 0x80 ; 128
6a6: 99 f0 breq .+38 ; 0x6ce <FrameMgr_dispatchEvent+0x3c>
6a8: 81 38 cpi r24, 0x81 ; 129
6aa: 09 f1 breq .+66 ; 0x6ee <FrameMgr_dispatchEvent+0x5c>
6ac: 80 32 cpi r24, 0x20 ; 32
6ae: 09 f5 brne .+66 ; 0x6f2 <FrameMgr_dispatchEvent+0x60>
6b0: 13 c0 rjmp .+38 ; 0x6d8 <FrameMgr_dispatchEvent+0x46>
6b2: 61 e0 ldi r22, 0x01 ; 1
6b4: 81 e1 ldi r24, 0x11 ; 17
6b6: 9b d3 rcall .+1846 ; 0xdee <CamConfig_setCamReg>
6b8: 9f d3 rcall .+1854 ; 0xdf8 <CamConfig_sendFifoCmds>
6ba: 88 ee ldi r24, 0xE8 ; 232
6bc: 93 e0 ldi r25, 0x03 ; 3
6be: e7 d3 rcall .+1998 ; 0xe8e <Utility_delay>
6c0: 10 92 75 00 sts 0x0075, r1
6c4: 82 e0 ldi r24, 0x02 ; 2
6c6: 80 93 74 00 sts 0x0074, r24
6ca: 92 df rcall .-220 ; 0x5f0 <FrameMgr_acquireLine>
6cc: 08 95 ret
6ce: 81 e0 ldi r24, 0x01 ; 1
6d0: 80 93 74 00 sts 0x0074, r24
6d4: c4 df rcall .-120 ; 0x65e <FrameMgr_acquireFrame>
6d6: 08 95 ret
6d8: cb dd rcall .-1130 ; 0x270 <FrameMgr_processFrame>
6da: 08 95 ret
6dc: c0 df rcall .-128 ; 0x65e <FrameMgr_acquireFrame>
6de: 08 95 ret
6e0: 80 91 74 00 lds r24, 0x0074
6e4: 88 23 and r24, r24
6e6: 29 f0 breq .+10 ; 0x6f2 <FrameMgr_dispatchEvent+0x60>
6e8: 84 e0 ldi r24, 0x04 ; 4
6ea: 4b dd rcall .-1386 ; 0x182 <Exec_writeEventFifo>
6ec: 08 95 ret
6ee: 10 92 74 00 sts 0x0074, r1
6f2: 08 95 ret
000006f4 <UIMgr_writeBufferToTxFifo>:
6f4: dc 01 movw r26, r24
6f6: 86 2f mov r24, r22
6f8: 66 23 and r22, r22
6fa: c9 f0 breq .+50 ; 0x72e <UIMgr_writeBufferToTxFifo+0x3a>
6fc: f8 94 cli
6fe: 61 50 subi r22, 0x01 ; 1
700: 6f 3f cpi r22, 0xFF ; 255
702: a1 f0 breq .+40 ; 0x72c <UIMgr_writeBufferToTxFifo+0x38>
704: 26 2f mov r18, r22
706: 44 e9 ldi r20, 0x94 ; 148
708: 52 e0 ldi r21, 0x02 ; 2
70a: 86 1b sub r24, r22
70c: 68 2f mov r22, r24
70e: 62 50 subi r22, 0x02 ; 2
710: 80 91 ba 00 lds r24, 0x00BA
714: fa 01 movw r30, r20
716: e8 0f add r30, r24
718: f1 1d adc r31, r1
71a: 9d 91 ld r25, X+
71c: 90 83 st Z, r25
71e: 8f 5f subi r24, 0xFF ; 255
720: 8f 73 andi r24, 0x3F ; 63
722: 80 93 ba 00 sts 0x00BA, r24
726: 21 50 subi r18, 0x01 ; 1
728: 62 17 cp r22, r18
72a: 91 f7 brne .-28 ; 0x710 <UIMgr_writeBufferToTxFifo+0x1c>
72c: 78 94 sei
72e: 08 95 ret
00000730 <UIMgr_readTxFifo>:
730: f8 94 cli
732: 90 91 bb 00 lds r25, 0x00BB
736: e4 e9 ldi r30, 0x94 ; 148
738: f2 e0 ldi r31, 0x02 ; 2
73a: e9 0f add r30, r25
73c: f1 1d adc r31, r1
73e: 80 81 ld r24, Z
740: 9f 5f subi r25, 0xFF ; 255
742: 9f 73 andi r25, 0x3F ; 63
744: 90 93 bb 00 sts 0x00BB, r25
748: 78 94 sei
74a: 99 27 eor r25, r25
74c: 08 95 ret
0000074e <UIMgr_writeTxFifo>:
74e: f8 94 cli
750: 90 91 ba 00 lds r25, 0x00BA
754: e4 e9 ldi r30, 0x94 ; 148
756: f2 e0 ldi r31, 0x02 ; 2
758: e9 0f add r30, r25
75a: f1 1d adc r31, r1
75c: 80 83 st Z, r24
75e: 9f 5f subi r25, 0xFF ; 255
760: 9f 73 andi r25, 0x3F ; 63
762: 90 93 ba 00 sts 0x00BA, r25
766: 78 94 sei
768: 08 95 ret
0000076a <UIMgr_flushTxBuffer>:
76a: 90 91 ba 00 lds r25, 0x00BA
76e: 80 91 bb 00 lds r24, 0x00BB
772: 98 17 cp r25, r24
774: 41 f0 breq .+16 ; 0x786 <UIMgr_flushTxBuffer+0x1c>
776: dc df rcall .-72 ; 0x730 <UIMgr_readTxFifo>
778: f5 d1 rcall .+1002 ; 0xb64 <UartInt_txByte>
77a: 90 91 ba 00 lds r25, 0x00BA
77e: 80 91 bb 00 lds r24, 0x00BB
782: 98 17 cp r25, r24
784: c1 f7 brne .-16 ; 0x776 <UIMgr_flushTxBuffer+0xc>
786: 08 95 ret
00000788 <UIMgr_txBuffer>:
788: 0f 93 push r16
78a: 1f 93 push r17
78c: cf 93 push r28
78e: df 93 push r29
790: ec 01 movw r28, r24
792: 86 2f mov r24, r22
794: 61 50 subi r22, 0x01 ; 1
796: 6f 3f cpi r22, 0xFF ; 255
798: 49 f0 breq .+18 ; 0x7ac <UIMgr_txBuffer+0x24>
79a: 16 2f mov r17, r22
79c: 86 1b sub r24, r22
79e: 08 2f mov r16, r24
7a0: 02 50 subi r16, 0x02 ; 2
7a2: 89 91 ld r24, Y+
7a4: df d1 rcall .+958 ; 0xb64 <UartInt_txByte>
7a6: 11 50 subi r17, 0x01 ; 1
7a8: 01 17 cp r16, r17
7aa: d9 f7 brne .-10 ; 0x7a2 <UIMgr_txBuffer+0x1a>
7ac: df 91 pop r29
7ae: cf 91 pop r28
7b0: 1f 91 pop r17
7b2: 0f 91 pop r16
7b4: 08 95 ret
000007b6 <UIMgr_transmitPendingData>:
7b6: 90 91 ba 00 lds r25, 0x00BA
7ba: 80 91 bb 00 lds r24, 0x00BB
7be: 98 17 cp r25, r24
7c0: 11 f0 breq .+4 ; 0x7c6 <UIMgr_transmitPendingData+0x10>
7c2: b6 df rcall .-148 ; 0x730 <UIMgr_readTxFifo>
7c4: cf d1 rcall .+926 ; 0xb64 <UartInt_txByte>
7c6: 08 95 ret
000007c8 <UIMgr_convertTokenToCmd>:
7c8: 90 91 bf 00 lds r25, 0x00BF
7cc: 90 35 cpi r25, 0x50 ; 80
7ce: 41 f4 brne .+16 ; 0x7e0 <UIMgr_convertTokenToCmd+0x18>
7d0: 80 91 c0 00 lds r24, 0x00C0
7d4: 87 34 cpi r24, 0x47 ; 71
7d6: 09 f5 brne .+66 ; 0x81a <UIMgr_convertTokenToCmd+0x52>
7d8: 81 e0 ldi r24, 0x01 ; 1
7da: 80 93 62 00 sts 0x0062, r24
7de: 48 c0 rjmp .+144 ; 0x870 <UIMgr_convertTokenToCmd+0xa8>
7e0: 97 34 cpi r25, 0x47 ; 71
7e2: 39 f4 brne .+14 ; 0x7f2 <UIMgr_convertTokenToCmd+0x2a>
7e4: 80 91 c0 00 lds r24, 0x00C0
7e8: 86 35 cpi r24, 0x56 ; 86
7ea: 09 f5 brne .+66 ; 0x82e <UIMgr_convertTokenToCmd+0x66>
7ec: 10 92 62 00 sts 0x0062, r1
7f0: 3f c0 rjmp .+126 ; 0x870 <UIMgr_convertTokenToCmd+0xa8>
7f2: 94 34 cpi r25, 0x44 ; 68
7f4: 41 f4 brne .+16 ; 0x806 <UIMgr_convertTokenToCmd+0x3e>
7f6: 80 91 c0 00 lds r24, 0x00C0
7fa: 86 34 cpi r24, 0x46 ; 70
7fc: 11 f5 brne .+68 ; 0x842 <UIMgr_convertTokenToCmd+0x7a>
7fe: 83 e0 ldi r24, 0x03 ; 3
800: 80 93 62 00 sts 0x0062, r24
804: 35 c0 rjmp .+106 ; 0x870 <UIMgr_convertTokenToCmd+0xa8>
806: 93 34 cpi r25, 0x43 ; 67
808: 41 f4 brne .+16 ; 0x81a <UIMgr_convertTokenToCmd+0x52>
80a: 80 91 c0 00 lds r24, 0x00C0
80e: 82 35 cpi r24, 0x52 ; 82
810: 11 f5 brne .+68 ; 0x856 <UIMgr_convertTokenToCmd+0x8e>
812: 82 e0 ldi r24, 0x02 ; 2
814: 80 93 62 00 sts 0x0062, r24
818: 2b c0 rjmp .+86 ; 0x870 <UIMgr_convertTokenToCmd+0xa8>
81a: 95 34 cpi r25, 0x45 ; 69
81c: 41 f4 brne .+16 ; 0x82e <UIMgr_convertTokenToCmd+0x66>
81e: 80 91 c0 00 lds r24, 0x00C0
822: 84 35 cpi r24, 0x54 ; 84
824: 11 f5 brne .+68 ; 0x86a <UIMgr_convertTokenToCmd+0xa2>
826: 84 e0 ldi r24, 0x04 ; 4
828: 80 93 62 00 sts 0x0062, r24
82c: 21 c0 rjmp .+66 ; 0x870 <UIMgr_convertTokenToCmd+0xa8>
82e: 93 35 cpi r25, 0x53 ; 83
830: 41 f4 brne .+16 ; 0x842 <UIMgr_convertTokenToCmd+0x7a>
832: 80 91 c0 00 lds r24, 0x00C0
836: 8d 34 cpi r24, 0x4D ; 77
838: c1 f4 brne .+48 ; 0x86a <UIMgr_convertTokenToCmd+0xa2>
83a: 86 e0 ldi r24, 0x06 ; 6
83c: 80 93 62 00 sts 0x0062, r24
840: 17 c0 rjmp .+46 ; 0x870 <UIMgr_convertTokenToCmd+0xa8>
842: 94 34 cpi r25, 0x44 ; 68
844: 41 f4 brne .+16 ; 0x856 <UIMgr_convertTokenToCmd+0x8e>
846: 80 91 c0 00 lds r24, 0x00C0
84a: 84 35 cpi r24, 0x54 ; 84
84c: 71 f4 brne .+28 ; 0x86a <UIMgr_convertTokenToCmd+0xa2>
84e: 85 e0 ldi r24, 0x05 ; 5
850: 80 93 62 00 sts 0x0062, r24
854: 0d c0 rjmp .+26 ; 0x870 <UIMgr_convertTokenToCmd+0xa8>
856: 92 35 cpi r25, 0x52 ; 82
858: 41 f4 brne .+16 ; 0x86a <UIMgr_convertTokenToCmd+0xa2>
85a: 80 91 c0 00 lds r24, 0x00C0
85e: 83 35 cpi r24, 0x53 ; 83
860: 21 f4 brne .+8 ; 0x86a <UIMgr_convertTokenToCmd+0xa2>
862: 87 e0 ldi r24, 0x07 ; 7
864: 80 93 62 00 sts 0x0062, r24
868: 03 c0 rjmp .+6 ; 0x870 <UIMgr_convertTokenToCmd+0xa8>
86a: 89 e0 ldi r24, 0x09 ; 9
86c: 80 93 62 00 sts 0x0062, r24
870: 83 e0 ldi r24, 0x03 ; 3
872: ef eb ldi r30, 0xBF ; 191
874: f0 e0 ldi r31, 0x00 ; 0
876: 11 92 st Z+, r1
878: 8a 95 dec r24
87a: e9 f7 brne .-6 ; 0x876 <UIMgr_convertTokenToCmd+0xae>
87c: 10 92 be 00 sts 0x00BE, r1
880: 10 92 bd 00 sts 0x00BD, r1
884: 08 95 ret
00000886 <UIMgr_init>:
886: 10 92 bf 00 sts 0x00BF, r1
88a: 10 92 c0 00 sts 0x00C0, r1
88e: 10 92 c1 00 sts 0x00C1, r1
892: 10 92 c2 00 sts 0x00C2, r1
896: 80 e4 ldi r24, 0x40 ; 64
898: e3 ec ldi r30, 0xC3 ; 195
89a: f0 e0 ldi r31, 0x00 ; 0
89c: 98 2f mov r25, r24
89e: 11 92 st Z+, r1
8a0: 9a 95 dec r25
8a2: e9 f7 brne .-6 ; 0x89e <UIMgr_init+0x18>
8a4: e4 e9 ldi r30, 0x94 ; 148
8a6: f2 e0 ldi r31, 0x02 ; 2
8a8: 11 92 st Z+, r1
8aa: 8a 95 dec r24
8ac: e9 f7 brne .-6 ; 0x8a8 <UIMgr_init+0x22>
8ae: 80 e2 ldi r24, 0x20 ; 32
8b0: e4 e7 ldi r30, 0x74 ; 116
8b2: f2 e0 ldi r31, 0x02 ; 2
8b4: 11 92 st Z+, r1
8b6: 8a 95 dec r24
8b8: e9 f7 brne .-6 ; 0x8b4 <UIMgr_init+0x2e>
8ba: 08 95 ret
000008bc <UIMgr_convertTokenToValue>:
8bc: 8f eb ldi r24, 0xBF ; 191
8be: 90 e0 ldi r25, 0x00 ; 0
8c0: b0 d3 rcall .+1888 ; 0x1022 <atoi>
8c2: 9c 01 movw r18, r24
8c4: 8f 3f cpi r24, 0xFF ; 255
8c6: 91 05 cpc r25, r1
8c8: 69 f0 breq .+26 ; 0x8e4 <UIMgr_convertTokenToValue+0x28>
8ca: 60 f0 brcs .+24 ; 0x8e4 <UIMgr_convertTokenToValue+0x28>
8cc: 89 e0 ldi r24, 0x09 ; 9
8ce: 80 93 62 00 sts 0x0062, r24
8d2: 80 91 bc 00 lds r24, 0x00BC
8d6: e3 ec ldi r30, 0xC3 ; 195
8d8: f0 e0 ldi r31, 0x00 ; 0
8da: e8 0f add r30, r24
8dc: f1 1d adc r31, r1
8de: 8f ef ldi r24, 0xFF ; 255
8e0: 80 83 st Z, r24
8e2: 07 c0 rjmp .+14 ; 0x8f2 <UIMgr_convertTokenToValue+0x36>
8e4: 80 91 bc 00 lds r24, 0x00BC
8e8: e3 ec ldi r30, 0xC3 ; 195
8ea: f0 e0 ldi r31, 0x00 ; 0
8ec: e8 0f add r30, r24
8ee: f1 1d adc r31, r1
8f0: 20 83 st Z, r18
8f2: 83 e0 ldi r24, 0x03 ; 3
8f4: ef eb ldi r30, 0xBF ; 191
8f6: f0 e0 ldi r31, 0x00 ; 0
8f8: 11 92 st Z+, r1
8fa: 8a 95 dec r24
8fc: e9 f7 brne .-6 ; 0x8f8 <UIMgr_convertTokenToValue+0x3c>
8fe: 10 92 be 00 sts 0x00BE, r1
902: 10 92 bd 00 sts 0x00BD, r1
906: 08 95 ret
00000908 <UIMgr_processReceivedData>:
908: ff 92 push r15
90a: 0f 93 push r16
90c: 1f 93 push r17
90e: cf 93 push r28
910: df 93 push r29
912: 0f 2e mov r0, r31
914: f9 e0 ldi r31, 0x09 ; 9
916: ff 2e mov r15, r31
918: f0 2d mov r31, r0
91a: ff c0 rjmp .+510 ; 0xb1a <UIMgr_processReceivedData+0x212>
91c: f8 94 cli
91e: e2 2f mov r30, r18
920: ff 27 eor r31, r31
922: ec 58 subi r30, 0x8C ; 140
924: fd 4f sbci r31, 0xFD ; 253
926: 90 81 ld r25, Z
928: 82 2f mov r24, r18
92a: 8f 5f subi r24, 0xFF ; 255
92c: 8f 71 andi r24, 0x1F ; 31
92e: 80 93 b9 00 sts 0x00B9, r24
932: 78 94 sei
934: 9d 30 cpi r25, 0x0D ; 13
936: 09 f0 breq .+2 ; 0x93a <UIMgr_processReceivedData+0x32>
938: b1 c0 rjmp .+354 ; 0xa9c <UIMgr_processReceivedData+0x194>
93a: 80 91 bc 00 lds r24, 0x00BC
93e: 88 23 and r24, r24
940: 11 f4 brne .+4 ; 0x946 <UIMgr_processReceivedData+0x3e>
942: 42 df rcall .-380 ; 0x7c8 <UIMgr_convertTokenToCmd>
944: 06 c0 rjmp .+12 ; 0x952 <UIMgr_processReceivedData+0x4a>
946: ba df rcall .-140 ; 0x8bc <UIMgr_convertTokenToValue>
948: 80 91 bc 00 lds r24, 0x00BC
94c: 8f 5f subi r24, 0xFF ; 255
94e: 80 93 bc 00 sts 0x00BC, r24
952: 84 e6 ldi r24, 0x64 ; 100
954: 90 e0 ldi r25, 0x00 ; 0
956: 9b d2 rcall .+1334 ; 0xe8e <Utility_delay>
958: 80 91 62 00 lds r24, 0x0062
95c: 88 50 subi r24, 0x08 ; 8
95e: 82 30 cpi r24, 0x02 ; 2
960: 58 f4 brcc .+22 ; 0x978 <UIMgr_processReceivedData+0x70>
962: 8e e4 ldi r24, 0x4E ; 78
964: f4 de rcall .-536 ; 0x74e <UIMgr_writeTxFifo>
966: 83 e4 ldi r24, 0x43 ; 67
968: f2 de rcall .-540 ; 0x74e <UIMgr_writeTxFifo>
96a: 8b e4 ldi r24, 0x4B ; 75
96c: f0 de rcall .-544 ; 0x74e <UIMgr_writeTxFifo>
96e: 8d e0 ldi r24, 0x0D ; 13
970: ee de rcall .-548 ; 0x74e <UIMgr_writeTxFifo>
972: 80 e9 ldi r24, 0x90 ; 144
974: 06 dc rcall .-2036 ; 0x182 <Exec_writeEventFifo>
976: 89 c0 rjmp .+274 ; 0xa8a <UIMgr_processReceivedData+0x182>
978: 81 e4 ldi r24, 0x41 ; 65
97a: e9 de rcall .-558 ; 0x74e <UIMgr_writeTxFifo>
97c: 83 e4 ldi r24, 0x43 ; 67
97e: e7 de rcall .-562 ; 0x74e <UIMgr_writeTxFifo>
980: 8b e4 ldi r24, 0x4B ; 75
982: e5 de rcall .-566 ; 0x74e <UIMgr_writeTxFifo>
984: 8d e0 ldi r24, 0x0D ; 13
986: e3 de rcall .-570 ; 0x74e <UIMgr_writeTxFifo>
988: 80 e9 ldi r24, 0x90 ; 144
98a: fb db rcall .-2058 ; 0x182 <Exec_writeEventFifo>
98c: 80 91 62 00 lds r24, 0x0062
990: 81 30 cpi r24, 0x01 ; 1
992: 09 f4 brne .+2 ; 0x996 <UIMgr_processReceivedData+0x8e>
994: 7a c0 rjmp .+244 ; 0xa8a <UIMgr_processReceivedData+0x182>
996: 88 23 and r24, r24
998: 71 f4 brne .+28 ; 0x9b6 <UIMgr_processReceivedData+0xae>
99a: 80 91 63 00 lds r24, 0x0063
99e: 88 23 and r24, r24
9a0: 09 f4 brne .+2 ; 0x9a4 <UIMgr_processReceivedData+0x9c>
9a2: 73 c0 rjmp .+230 ; 0xa8a <UIMgr_processReceivedData+0x182>
9a4: c3 e6 ldi r28, 0x63 ; 99
9a6: d0 e0 ldi r29, 0x00 ; 0
9a8: 21 96 adiw r28, 0x01 ; 1
9aa: d1 de rcall .-606 ; 0x74e <UIMgr_writeTxFifo>
9ac: 88 81 ld r24, Y
9ae: 88 23 and r24, r24
9b0: 09 f4 brne .+2 ; 0x9b4 <UIMgr_processReceivedData+0xac>
9b2: 6b c0 rjmp .+214 ; 0xa8a <UIMgr_processReceivedData+0x182>
9b4: f9 cf rjmp .-14 ; 0x9a8 <UIMgr_processReceivedData+0xa0>
9b6: 87 30 cpi r24, 0x07 ; 7
9b8: 11 f4 brne .+4 ; 0x9be <UIMgr_processReceivedData+0xb6>
9ba: a1 db rcall .-2238 ; 0xfe <CamInt_resetCam>
9bc: 66 c0 rjmp .+204 ; 0xa8a <UIMgr_processReceivedData+0x182>
9be: 83 30 cpi r24, 0x03 ; 3
9c0: 31 f4 brne .+12 ; 0x9ce <UIMgr_processReceivedData+0xc6>
9c2: 84 e6 ldi r24, 0x64 ; 100
9c4: 90 e0 ldi r25, 0x00 ; 0
9c6: 63 d2 rcall .+1222 ; 0xe8e <Utility_delay>
9c8: 82 e0 ldi r24, 0x02 ; 2
9ca: db db rcall .-2122 ; 0x182 <Exec_writeEventFifo>
9cc: 5e c0 rjmp .+188 ; 0xa8a <UIMgr_processReceivedData+0x182>
9ce: 82 30 cpi r24, 0x02 ; 2
9d0: 99 f4 brne .+38 ; 0x9f8 <UIMgr_processReceivedData+0xf0>
9d2: 80 91 bc 00 lds r24, 0x00BC
9d6: 82 30 cpi r24, 0x02 ; 2
9d8: 68 f0 brcs .+26 ; 0x9f4 <UIMgr_processReceivedData+0xec>
9da: 11 e0 ldi r17, 0x01 ; 1
9dc: e1 2f mov r30, r17
9de: ff 27 eor r31, r31
9e0: ed 53 subi r30, 0x3D ; 61
9e2: ff 4f sbci r31, 0xFF ; 255
9e4: 61 81 ldd r22, Z+1 ; 0x01
9e6: 80 81 ld r24, Z
9e8: 02 d2 rcall .+1028 ; 0xdee <CamConfig_setCamReg>
9ea: 1e 5f subi r17, 0xFE ; 254
9ec: 80 91 bc 00 lds r24, 0x00BC
9f0: 18 17 cp r17, r24
9f2: a0 f3 brcs .-24 ; 0x9dc <UIMgr_processReceivedData+0xd4>
9f4: 01 d2 rcall .+1026 ; 0xdf8 <CamConfig_sendFifoCmds>
9f6: 49 c0 rjmp .+146 ; 0xa8a <UIMgr_processReceivedData+0x182>
9f8: 84 30 cpi r24, 0x04 ; 4
9fa: 31 f4 brne .+12 ; 0xa08 <UIMgr_processReceivedData+0x100>
9fc: 84 e6 ldi r24, 0x64 ; 100
9fe: 90 e0 ldi r25, 0x00 ; 0
a00: 46 d2 rcall .+1164 ; 0xe8e <Utility_delay>
a02: 80 e8 ldi r24, 0x80 ; 128
a04: be db rcall .-2180 ; 0x182 <Exec_writeEventFifo>
a06: 41 c0 rjmp .+130 ; 0xa8a <UIMgr_processReceivedData+0x182>
a08: 85 30 cpi r24, 0x05 ; 5
a0a: 19 f4 brne .+6 ; 0xa12 <UIMgr_processReceivedData+0x10a>
a0c: 81 e8 ldi r24, 0x81 ; 129
a0e: b9 db rcall .-2190 ; 0x182 <Exec_writeEventFifo>
a10: 3c c0 rjmp .+120 ; 0xa8a <UIMgr_processReceivedData+0x182>
a12: 86 30 cpi r24, 0x06 ; 6
a14: 09 f0 breq .+2 ; 0xa18 <UIMgr_processReceivedData+0x110>
a16: 39 c0 rjmp .+114 ; 0xa8a <UIMgr_processReceivedData+0x182>
a18: 80 91 bc 00 lds r24, 0x00BC
a1c: 88 23 and r24, r24
a1e: 09 f4 brne .+2 ; 0xa22 <UIMgr_processReceivedData+0x11a>
a20: 34 c0 rjmp .+104 ; 0xa8a <UIMgr_processReceivedData+0x182>
a22: 40 e0 ldi r20, 0x00 ; 0
a24: 03 ec ldi r16, 0xC3 ; 195
a26: 10 e0 ldi r17, 0x00 ; 0
a28: 60 e0 ldi r22, 0x00 ; 0
a2a: 73 e0 ldi r23, 0x03 ; 3
a2c: 84 2f mov r24, r20
a2e: 99 27 eor r25, r25
a30: 9c 01 movw r18, r24
a32: 2f 5f subi r18, 0xFF ; 255
a34: 3f 4f sbci r19, 0xFF ; 255
a36: f9 01 movw r30, r18
a38: e0 0f add r30, r16
a3a: f1 1f adc r31, r17
a3c: e0 81 ld r30, Z
a3e: ec 01 movw r28, r24
a40: c6 0f add r28, r22
a42: d7 1f adc r29, r23
a44: e8 83 st Y, r30
uint8_t
eeprom_read_byte (const uint8_t *addr)
{
uint8_t result;
asm volatile
a46: d9 01 movw r26, r18
a48: 20 d3 rcall .+1600 ; 0x108a <__eeprom_read_byte_1C1D1E>
a4a: 80 2d mov r24, r0
static unsigned char tokenBuffer[MAX_TOKEN_COUNT];
static UIMgr_Cmd_t receivedCmd = noCmd;
static unsigned char AVRcamVersion[] = "AVRcam v1.4\r";
/* Local Function Declaration */
static unsigned char UIMgr_readRxFifo(void);
static unsigned char UIMgr_readTxFifo(void);
static unsigned char UIMgr_readRxFifo(void);
static void UIMgr_sendNck(void);
static void UIMgr_sendAck(void);
static void UIMgr_convertTokenToCmd(void);
static void UIMgr_convertTokenToValue(void);
static void UIMgr_executeCmd(void);
/* Extern Variables */
unsigned char UIMgr_rxFifo[UI_MGR_RX_FIFO_SIZE];
unsigned char UIMgr_rxFifoHead=0;
unsigned char UIMgr_rxFifoTail=0;
unsigned char UIMgr_txFifo[UI_MGR_TX_FIFO_SIZE];
unsigned char UIMgr_txFifoHead=0;
unsigned char UIMgr_txFifoTail=0;
/* Definitions */
#define IS_DATA_IN_TX_FIFO() (!(UIMgr_txFifoHead == UIMgr_txFifoTail))
#define IS_DATA_IN_RX_FIFO() (!(UIMgr_rxFifoHead == UIMgr_rxFifoTail))
/* MAX_EEPROM_WRITE_ATTEMPTS limits the number of writes that can be
done to a particular EEPROM cell, so that it can't possible just
write to the same cell over and over */
#define MAX_EEPROM_WRITE_ATTEMPTS 3
/***********************************************************
Function Name: UIMgr_init
Function Description: This function is responsible for
initializing the UIMgr module. It sets up the fifo
used to hold incoming data, etc.
Inputs: none
Outputs: none
***********************************************************/
void UIMgr_init(void)
{
memset(asciiTokenBuffer,0x00,MAX_TOKEN_LENGTH+1);
memset(tokenBuffer,0x00,MAX_TOKEN_COUNT);
memset(UIMgr_txFifo,0x00,UI_MGR_TX_FIFO_SIZE);
memset(UIMgr_rxFifo,0x00,UI_MGR_RX_FIFO_SIZE);
}
/***********************************************************
Function Name: UIMgr_dispatchEvent
Function Description: This function is responsible for
processing events that pertain to the UIMgr.
Inputs: event - the generated event
Outputs: none
***********************************************************/
void UIMgr_dispatchEvent(unsigned char event)
{
switch(event)
{
case EV_ACQUIRE_LINE_COMPLETE:
UIMgr_transmitPendingData();
break;
case EV_SERIAL_DATA_RECEIVED:
UIMgr_processReceivedData();
break;
case EV_SERIAL_DATA_PENDING_TX:
UIMgr_flushTxBuffer();
break;
}
}
/***********************************************************
Function Name: UIMgr_transmitPendingData
Function Description: This function is responsible for
transmitting a single byte of data if data is waiting
to be sent. Otherwise, if nothing is waiting, the
function just returns.
Inputs: none
Outputs: none
***********************************************************/
void UIMgr_transmitPendingData(void)
{
if (IS_DATA_IN_TX_FIFO() == TRUE)
{
/* data is waiting...send a single byte */
UartInt_txByte( UIMgr_readTxFifo() );
}
}
/***********************************************************
Function Name: UIMgr_processReceivedData
Function Description: This function is responsible for
parsing any serial data waiting in the rx fifo
Inputs: none
Outputs: none
***********************************************************/
void UIMgr_processReceivedData(void)
{
unsigned char tmpData = 0;
/* still need to add a mechanism to handle token counts
that are excessive!!! FIX ME!!! */
while(IS_DATA_IN_RX_FIFO() == TRUE)
{
tmpData = UIMgr_readRxFifo();
if (tmpData == '\r')
{
/* we have reached a token separator */
if (tokenCount == 0)
{
/* convert the command */
UIMgr_convertTokenToCmd();
}
else
{
/* convert a value */
UIMgr_convertTokenToValue();
tokenCount++;
}
/* either way, it is time to try to process the received
token list since we have reached the end of the cmd. */
Utility_delay(100);
if (receivedCmd == invalidCmd ||
receivedCmd == noCmd )
{
UIMgr_sendNck();
PUBLISH_EVENT(EV_SERIAL_DATA_PENDING_TX);
}
else
{
UIMgr_sendAck();
/* publish the serial data pending event, so it
will push the ACK out before we execute the cmd */
PUBLISH_EVENT(EV_SERIAL_DATA_PENDING_TX);
UIMgr_executeCmd();
}
/* reset any necessary data */
tokenCount = 0;
memset(tokenBuffer,0x00,MAX_TOKEN_COUNT);
}
else if (tmpData == ' ') /* space char */
{
/* the end of a token has been reached */
if (tokenCount == 0)
{
UIMgr_convertTokenToCmd();
tokenCount++; /* check this...why is this being incremented here??? This
means we have received a token, with tokenCount == 0, which means it is a
command...why is this contributing to tokenCount?
This might cause the set color map command to include too much data, since
it sets the color map based on tokenCount...CHECK*/
}
else
{
/* check to see if this token is going to push
us over the limit...if so, abort the transaction */
if (tokenCount+1 >= MAX_TOKEN_COUNT)
{
/* we received too many tokens, and
need to NCK this request, since its too
large...reset everything...*/
charCount=0;
charIndex=0;
tokenCount=0;
receivedCmd = invalidCmd;
}
else
{
/* tokenCount is still in range...*/
UIMgr_convertTokenToValue();
tokenCount++;
}
}
}
else if ( (tmpData >= 'A' && tmpData <= 'Z') ||
(tmpData >= '0' && tmpData <= '9') )
{
/* a valid range of token was received */
asciiTokenBuffer[charIndex] = tmpData;
charCount++;
charIndex++;
if (charCount > MAX_TOKEN_LENGTH)
{
/* we have received a token that cannot be handled...
set the received cmd to an invalid cmd, and wait
for the \r to process it */
receivedCmd = invalidCmd;
charIndex = 0; /* ...so we won't overwrite memory */
}
}
else
{
/* an invalid character was received */
receivedCmd = invalidCmd;
}
} /* end while */
asm volatile("clt"::); /* clear out the T flag in case it wasn't
cleared already */
}
/***********************************************************
Function Name: UIMgr_executeCmd
Function Description: This function is responsible for
executing whatever cmd is stored in the receivedCmd
object.
Inputs: none
Outputs: none
***********************************************************/
static void UIMgr_executeCmd(void)
{
unsigned char i,eepromData, num_writes=0;
unsigned char *pData;
unsigned char eeprom_write_succeeded = FALSE;
#if DEBUG_COLOR_MAP
unsigned char asciiBuffer[5];
#endif
if (receivedCmd == pingCmd)
{
}
else if (receivedCmd == getVersionCmd)
{
pData = AVRcamVersion;
while(*pData != 0)
{
UIMgr_writeTxFifo(*pData++);
}
}
else if (receivedCmd == resetCameraCmd)
{
CamInt_resetCam();
}
else if (receivedCmd == dumpFrameCmd)
{
/* publish the event that will indicate that
a request has come to dump a frame...this will
be received by the FrameMgr, which will begin
dumping the frame...a short delay is needed
here to keep the Java demo app happy (sometimes
it wouldn't be able to receive the serial data
as quickly as AVRcam can provide it). */
Utility_delay(100);
PUBLISH_EVENT(EV_DUMP_FRAME);
}
else if (receivedCmd == setCameraRegsCmd)
{
/* we need to gather the tokens and
build config cmds to be sent to the camera */
for (i=1; i<tokenCount; i+=2) /* starts at 1 since first token
is the CR cmd */
{
CamConfig_setCamReg(tokenBuffer[i],tokenBuffer[i+1]);
}
CamConfig_sendFifoCmds();
}
else if (receivedCmd == enableTrackingCmd)
{
/* publish the event...again with a short delay */
Utility_delay(100);
PUBLISH_EVENT(EV_ENABLE_TRACKING);
}
else if (receivedCmd == disableTrackingCmd)
{
PUBLISH_EVENT(EV_DISABLE_TRACKING);
}
else if (receivedCmd == setColorMapCmd)
{
/* copy the received tokens into the color map */
for (i=0; i<tokenCount; i++)
{
colorMap[i] = tokenBuffer[i+1];
/* write each colorMap byte to EEPROM, but only those
that changed...this will help reduce wear on the EEPROM */
eepromData = eeprom_read_byte( (unsigned char*)(i+1));
if (eepromData != colorMap[i])
a4c: e8 17 cp r30, r24
a4e: c1 f0 breq .+48 ; 0xa80 <UIMgr_processReceivedData+0x178>
void
eeprom_write_byte (uint8_t *addr,uint8_t value)
{
asm volatile (
a50: d9 01 movw r26, r18
a52: 0e 2e mov r0, r30
a54: 27 d3 rcall .+1614 ; 0x10a4 <__eeprom_write_byte_1C1D1E>
a56: d9 01 movw r26, r18
a58: 18 d3 rcall .+1584 ; 0x108a <__eeprom_read_byte_1C1D1E>
a5a: 80 2d mov r24, r0
{
/* need to actually perform the write because the
data in eeprom is different than the current colorMap */
eeprom_write_succeeded = FALSE;
while(eeprom_write_succeeded == FALSE && num_writes < MAX_EEPROM_WRITE_ATTEMPTS)
{
eeprom_write_byte((unsigned char*)(i+1),colorMap[i]);
num_writes++;
eepromData = eeprom_read_byte( (unsigned char*)(i+1));
if (eepromData == colorMap[i])
a5c: 98 81 ld r25, Y
a5e: 98 17 cp r25, r24
a60: 79 f0 breq .+30 ; 0xa80 <UIMgr_processReceivedData+0x178>
void
eeprom_write_byte (uint8_t *addr,uint8_t value)
{
asm volatile (
a62: d9 01 movw r26, r18
a64: 09 2e mov r0, r25
a66: 1e d3 rcall .+1596 ; 0x10a4 <__eeprom_write_byte_1C1D1E>
a68: d9 01 movw r26, r18
a6a: 0f d3 rcall .+1566 ; 0x108a <__eeprom_read_byte_1C1D1E>
a6c: 80 2d mov r24, r0
a6e: 98 81 ld r25, Y
a70: 98 17 cp r25, r24
a72: 31 f0 breq .+12 ; 0xa80 <UIMgr_processReceivedData+0x178>
void
eeprom_write_byte (uint8_t *addr,uint8_t value)
{
asm volatile (
a74: d9 01 movw r26, r18
a76: 09 2e mov r0, r25
a78: 15 d3 rcall .+1578 ; 0x10a4 <__eeprom_write_byte_1C1D1E>
a7a: d9 01 movw r26, r18
a7c: 06 d3 rcall .+1548 ; 0x108a <__eeprom_read_byte_1C1D1E>
a7e: 80 2d mov r24, r0
a80: 4f 5f subi r20, 0xFF ; 255
a82: 80 91 bc 00 lds r24, 0x00BC
a86: 48 17 cp r20, r24
a88: 88 f2 brcs .-94 ; 0xa2c <UIMgr_processReceivedData+0x124>
a8a: 10 92 bc 00 sts 0x00BC, r1
a8e: 80 e4 ldi r24, 0x40 ; 64
a90: e3 ec ldi r30, 0xC3 ; 195
a92: f0 e0 ldi r31, 0x00 ; 0
a94: 11 92 st Z+, r1
a96: 8a 95 dec r24
a98: e9 f7 brne .-6 ; 0xa94 <UIMgr_processReceivedData+0x18c>
a9a: 3f c0 rjmp .+126 ; 0xb1a <UIMgr_processReceivedData+0x212>
a9c: 90 32 cpi r25, 0x20 ; 32
a9e: f1 f4 brne .+60 ; 0xadc <UIMgr_processReceivedData+0x1d4>
aa0: 80 91 bc 00 lds r24, 0x00BC
aa4: 88 23 and r24, r24
aa6: 39 f4 brne .+14 ; 0xab6 <UIMgr_processReceivedData+0x1ae>
aa8: 8f de rcall .-738 ; 0x7c8 <UIMgr_convertTokenToCmd>
aaa: 80 91 bc 00 lds r24, 0x00BC
aae: 8f 5f subi r24, 0xFF ; 255
ab0: 80 93 bc 00 sts 0x00BC, r24
ab4: 32 c0 rjmp .+100 ; 0xb1a <UIMgr_processReceivedData+0x212>
ab6: 99 27 eor r25, r25
ab8: cf 97 sbiw r24, 0x3f ; 63
aba: 4c f0 brlt .+18 ; 0xace <UIMgr_processReceivedData+0x1c6>
abc: 10 92 bd 00 sts 0x00BD, r1
ac0: 10 92 be 00 sts 0x00BE, r1
ac4: 10 92 bc 00 sts 0x00BC, r1
ac8: f0 92 62 00 sts 0x0062, r15
acc: 26 c0 rjmp .+76 ; 0xb1a <UIMgr_processReceivedData+0x212>
ace: f6 de rcall .-532 ; 0x8bc <UIMgr_convertTokenToValue>
ad0: 80 91 bc 00 lds r24, 0x00BC
ad4: 8f 5f subi r24, 0xFF ; 255
ad6: 80 93 bc 00 sts 0x00BC, r24
ada: 1f c0 rjmp .+62 ; 0xb1a <UIMgr_processReceivedData+0x212>
adc: 89 2f mov r24, r25
ade: 81 54 subi r24, 0x41 ; 65
ae0: 8a 31 cpi r24, 0x1A ; 26
ae2: 18 f0 brcs .+6 ; 0xaea <UIMgr_processReceivedData+0x1e2>
ae4: 8f 5e subi r24, 0xEF ; 239
ae6: 8a 30 cpi r24, 0x0A ; 10
ae8: b0 f4 brcc .+44 ; 0xb16 <UIMgr_processReceivedData+0x20e>
aea: 80 91 be 00 lds r24, 0x00BE
aee: e8 2f mov r30, r24
af0: ff 27 eor r31, r31
af2: e1 54 subi r30, 0x41 ; 65
af4: ff 4f sbci r31, 0xFF ; 255
af6: 90 83 st Z, r25
af8: 90 91 bd 00 lds r25, 0x00BD
afc: 9f 5f subi r25, 0xFF ; 255
afe: 90 93 bd 00 sts 0x00BD, r25
b02: 8f 5f subi r24, 0xFF ; 255
b04: 80 93 be 00 sts 0x00BE, r24
b08: 94 30 cpi r25, 0x04 ; 4
b0a: 38 f0 brcs .+14 ; 0xb1a <UIMgr_processReceivedData+0x212>
b0c: f0 92 62 00 sts 0x0062, r15
b10: 10 92 be 00 sts 0x00BE, r1
b14: 02 c0 rjmp .+4 ; 0xb1a <UIMgr_processReceivedData+0x212>
b16: f0 92 62 00 sts 0x0062, r15
b1a: 20 91 b9 00 lds r18, 0x00B9
b1e: 80 91 b8 00 lds r24, 0x00B8
b22: 82 17 cp r24, r18
b24: 09 f0 breq .+2 ; 0xb28 <UIMgr_processReceivedData+0x220>
b26: fa ce rjmp .-524 ; 0x91c <UIMgr_processReceivedData+0x14>
b28: e8 94 clt
b2a: df 91 pop r29
b2c: cf 91 pop r28
b2e: 1f 91 pop r17
b30: 0f 91 pop r16
b32: ff 90 pop r15
b34: 08 95 ret
00000b36 <UIMgr_dispatchEvent>:
b36: 80 31 cpi r24, 0x10 ; 16
b38: 29 f0 breq .+10 ; 0xb44 <UIMgr_dispatchEvent+0xe>
b3a: 80 39 cpi r24, 0x90 ; 144
b3c: 39 f0 breq .+14 ; 0xb4c <UIMgr_dispatchEvent+0x16>
b3e: 81 30 cpi r24, 0x01 ; 1
b40: 31 f4 brne .+12 ; 0xb4e <UIMgr_dispatchEvent+0x18>
b42: 02 c0 rjmp .+4 ; 0xb48 <UIMgr_dispatchEvent+0x12>
b44: 38 de rcall .-912 ; 0x7b6 <UIMgr_transmitPendingData>
b46: 08 95 ret
b48: df de rcall .-578 ; 0x908 <UIMgr_processReceivedData>
b4a: 08 95 ret
b4c: 0e de rcall .-996 ; 0x76a <UIMgr_flushTxBuffer>
b4e: 08 95 ret
00000b50 <UartInt_init>:
b50: 10 bc out 0x20, r1 ; 32
b52: 82 e1 ldi r24, 0x12 ; 18
b54: 89 b9 out 0x09, r24 ; 9
b56: 88 e9 ldi r24, 0x98 ; 152
b58: 8a b9 out 0x0a, r24 ; 10
b5a: 86 e8 ldi r24, 0x86 ; 134
b5c: 80 bd out 0x20, r24 ; 32
b5e: 82 e0 ldi r24, 0x02 ; 2
b60: 8b b9 out 0x0b, r24 ; 11
b62: 08 95 ret
00000b64 <UartInt_txByte>:
b64: 5d 9b sbis 0x0b, 5 ; 11
b66: fe cf rjmp .-4 ; 0xb64 <UartInt_txByte>
b68: 8c b9 out 0x0c, r24 ; 12
b6a: 08 95 ret
00000b6c <__vector_11>:
b6c: 1f 92 push r1
b6e: 0f 92 push r0
b70: 0f b6 in r0, 0x3f ; 63
b72: 0f 92 push r0
b74: 11 24 eor r1, r1
b76: 8f 93 push r24
b78: 9f 93 push r25
b7a: ef 93 push r30
b7c: ff 93 push r31
b7e: 80 91 b8 00 lds r24, 0x00B8
b82: 9c b1 in r25, 0x0c ; 12
b84: e4 e7 ldi r30, 0x74 ; 116
b86: f2 e0 ldi r31, 0x02 ; 2
b88: e8 0f add r30, r24
b8a: f1 1d adc r31, r1
b8c: 90 83 st Z, r25
b8e: 8f 5f subi r24, 0xFF ; 255
b90: 8f 71 andi r24, 0x1F ; 31
b92: 80 93 b8 00 sts 0x00B8, r24
b96: 80 91 70 00 lds r24, 0x0070
b9a: ec e6 ldi r30, 0x6C ; 108
b9c: f2 e0 ldi r31, 0x02 ; 2
b9e: e8 0f add r30, r24
ba0: f1 1d adc r31, r1
ba2: 91 e0 ldi r25, 0x01 ; 1
ba4: 90 83 st Z, r25
ba6: 8f 5f subi r24, 0xFF ; 255
ba8: 87 70 andi r24, 0x07 ; 7
baa: 80 93 70 00 sts 0x0070, r24
bae: ff 91 pop r31
bb0: ef 91 pop r30
bb2: 9f 91 pop r25
bb4: 8f 91 pop r24
bb6: 0f 90 pop r0
bb8: 0f be out 0x3f, r0 ; 63
bba: 0f 90 pop r0
bbc: 1f 90 pop r1
bbe: 18 95 reti
00000bc0 <I2CInt_init>:
bc0: 11 b8 out 0x01, r1 ; 1
bc2: 88 e4 ldi r24, 0x48 ; 72
bc4: 80 b9 out 0x00, r24 ; 0
bc6: 08 95 ret
00000bc8 <I2CInt_writeData>:
bc8: 98 2f mov r25, r24
bca: 80 91 08 01 lds r24, 0x0108
bce: 88 23 and r24, r24
bd0: e4 f3 brlt .-8 ; 0xbca <I2CInt_writeData+0x2>
bd2: 06 b6 in r0, 0x36 ; 54
bd4: 04 fc sbrc r0, 4
bd6: fd cf rjmp .-6 ; 0xbd2 <I2CInt_writeData+0xa>
bd8: 90 93 03 01 sts 0x0103, r25
bdc: 70 93 05 01 sts 0x0105, r23
be0: 60 93 04 01 sts 0x0104, r22
be4: 40 93 07 01 sts 0x0107, r20
be8: 10 92 06 01 sts 0x0106, r1
bec: 10 92 09 01 sts 0x0109, r1
bf0: 85 ea ldi r24, 0xA5 ; 165
bf2: 86 bf out 0x36, r24 ; 54
bf4: 80 91 08 01 lds r24, 0x0108
bf8: 80 68 ori r24, 0x80 ; 128
bfa: 80 93 08 01 sts 0x0108, r24
bfe: 08 95 ret
00000c00 <I2CInt_readData>:
c00: 98 2f mov r25, r24
c02: 80 91 08 01 lds r24, 0x0108
c06: 88 23 and r24, r24
c08: e4 f3 brlt .-8 ; 0xc02 <I2CInt_readData+0x2>
c0a: 90 93 03 01 sts 0x0103, r25
c0e: 70 93 05 01 sts 0x0105, r23
c12: 60 93 04 01 sts 0x0104, r22
c16: 40 93 07 01 sts 0x0107, r20
c1a: 81 e0 ldi r24, 0x01 ; 1
c1c: 80 93 06 01 sts 0x0106, r24
c20: 10 92 09 01 sts 0x0109, r1
c24: 85 ea ldi r24, 0xA5 ; 165
c26: 86 bf out 0x36, r24 ; 54
c28: 80 91 08 01 lds r24, 0x0108
c2c: 80 68 ori r24, 0x80 ; 128
c2e: 80 93 08 01 sts 0x0108, r24
c32: 08 95 ret
00000c34 <I2CInt_isI2cBusy>:
c34: 80 91 08 01 lds r24, 0x0108
c38: 88 1f adc r24, r24
c3a: 88 27 eor r24, r24
c3c: 88 1f adc r24, r24
c3e: 99 27 eor r25, r25
c40: 08 95 ret
00000c42 <__vector_17>:
c42: 1f 92 push r1
c44: 0f 92 push r0
c46: 0f b6 in r0, 0x3f ; 63
c48: 0f 92 push r0
c4a: 11 24 eor r1, r1
c4c: 8f 93 push r24
c4e: 9f 93 push r25
c50: af 93 push r26
c52: bf 93 push r27
c54: ef 93 push r30
c56: ff 93 push r31
c58: 81 b1 in r24, 0x01 ; 1
c5a: 99 27 eor r25, r25
c5c: aa 27 eor r26, r26
c5e: bb 27 eor r27, r27
c60: 88 7f andi r24, 0xF8 ; 248
c62: 90 70 andi r25, 0x00 ; 0
c64: a0 70 andi r26, 0x00 ; 0
c66: b0 70 andi r27, 0x00 ; 0
c68: fc 01 movw r30, r24
c6a: 38 97 sbiw r30, 0x08 ; 8
c6c: e1 35 cpi r30, 0x51 ; 81
c6e: f1 05 cpc r31, r1
c70: 08 f0 brcs .+2 ; 0xc74 <__vector_17+0x32>
c72: 9a c0 rjmp .+308 ; 0xda8 <__vector_17+0x166>
c74: ed 5e subi r30, 0xED ; 237
c76: ff 4f sbci r31, 0xFF ; 255
c78: 09 94 ijmp
c7a: 80 91 09 01 lds r24, 0x0109
c7e: 83 30 cpi r24, 0x03 ; 3
c80: 48 f0 brcs .+18 ; 0xc94 <__vector_17+0x52>
c82: 86 b7 in r24, 0x36 ; 54
c84: 80 69 ori r24, 0x90 ; 144
c86: 86 bf out 0x36, r24 ; 54
c88: 80 91 08 01 lds r24, 0x0108
c8c: 8f 77 andi r24, 0x7F ; 127
c8e: 80 93 08 01 sts 0x0108, r24
c92: 8a c0 rjmp .+276 ; 0xda8 <__vector_17+0x166>
c94: 80 91 03 01 lds r24, 0x0103
c98: 90 91 06 01 lds r25, 0x0106
c9c: 88 0f add r24, r24
c9e: 89 0f add r24, r25
ca0: 83 b9 out 0x03, r24 ; 3
ca2: 86 b7 in r24, 0x36 ; 54
ca4: 8f 7d andi r24, 0xDF ; 223
ca6: 86 bf out 0x36, r24 ; 54
ca8: 7f c0 rjmp .+254 ; 0xda8 <__vector_17+0x166>
caa: 10 92 09 01 sts 0x0109, r1
cae: e0 91 04 01 lds r30, 0x0104
cb2: f0 91 05 01 lds r31, 0x0105
cb6: 80 81 ld r24, Z
cb8: 83 b9 out 0x03, r24 ; 3
cba: 31 96 adiw r30, 0x01 ; 1
cbc: f0 93 05 01 sts 0x0105, r31
cc0: e0 93 04 01 sts 0x0104, r30
cc4: 86 b7 in r24, 0x36 ; 54
cc6: 80 68 ori r24, 0x80 ; 128
cc8: 86 bf out 0x36, r24 ; 54
cca: 6e c0 rjmp .+220 ; 0xda8 <__vector_17+0x166>
ccc: 80 91 09 01 lds r24, 0x0109
cd0: 8f 5f subi r24, 0xFF ; 255
cd2: 80 93 09 01 sts 0x0109, r24
cd6: 86 b7 in r24, 0x36 ; 54
cd8: 80 6b ori r24, 0xB0 ; 176
cda: 86 bf out 0x36, r24 ; 54
cdc: 65 c0 rjmp .+202 ; 0xda8 <__vector_17+0x166>
cde: 80 91 07 01 lds r24, 0x0107
ce2: 81 50 subi r24, 0x01 ; 1
ce4: 80 93 07 01 sts 0x0107, r24
ce8: 80 91 07 01 lds r24, 0x0107
cec: 88 23 and r24, r24
cee: 79 f0 breq .+30 ; 0xd0e <__vector_17+0xcc>
cf0: e0 91 04 01 lds r30, 0x0104
cf4: f0 91 05 01 lds r31, 0x0105
cf8: 80 81 ld r24, Z
cfa: 83 b9 out 0x03, r24 ; 3
cfc: 31 96 adiw r30, 0x01 ; 1
cfe: f0 93 05 01 sts 0x0105, r31
d02: e0 93 04 01 sts 0x0104, r30
d06: 86 b7 in r24, 0x36 ; 54
d08: 80 68 ori r24, 0x80 ; 128
d0a: 86 bf out 0x36, r24 ; 54
d0c: 4d c0 rjmp .+154 ; 0xda8 <__vector_17+0x166>
d0e: 86 b7 in r24, 0x36 ; 54
d10: 80 69 ori r24, 0x90 ; 144
d12: 86 bf out 0x36, r24 ; 54
d14: 80 91 08 01 lds r24, 0x0108
d18: 8f 77 andi r24, 0x7F ; 127
d1a: 80 93 08 01 sts 0x0108, r24
d1e: 44 c0 rjmp .+136 ; 0xda8 <__vector_17+0x166>
d20: 86 b7 in r24, 0x36 ; 54
d22: 80 69 ori r24, 0x90 ; 144
d24: 86 bf out 0x36, r24 ; 54
d26: 80 91 08 01 lds r24, 0x0108
d2a: 8f 77 andi r24, 0x7F ; 127
d2c: 80 93 08 01 sts 0x0108, r24
d30: 3b c0 rjmp .+118 ; 0xda8 <__vector_17+0x166>
d32: 80 91 07 01 lds r24, 0x0107
d36: 81 50 subi r24, 0x01 ; 1
d38: 80 93 07 01 sts 0x0107, r24
d3c: 80 91 07 01 lds r24, 0x0107
d40: 88 23 and r24, r24
d42: 21 f0 breq .+8 ; 0xd4c <__vector_17+0x10a>
d44: 86 b7 in r24, 0x36 ; 54
d46: 80 6c ori r24, 0xC0 ; 192
d48: 86 bf out 0x36, r24 ; 54
d4a: 2e c0 rjmp .+92 ; 0xda8 <__vector_17+0x166>
d4c: 86 b7 in r24, 0x36 ; 54
d4e: 80 68 ori r24, 0x80 ; 128
d50: 86 bf out 0x36, r24 ; 54
d52: 2a c0 rjmp .+84 ; 0xda8 <__vector_17+0x166>
d54: e0 91 04 01 lds r30, 0x0104
d58: f0 91 05 01 lds r31, 0x0105
d5c: 83 b1 in r24, 0x03 ; 3
d5e: 80 83 st Z, r24
d60: 31 96 adiw r30, 0x01 ; 1
d62: f0 93 05 01 sts 0x0105, r31
d66: e0 93 04 01 sts 0x0104, r30
d6a: 80 91 07 01 lds r24, 0x0107
d6e: 81 50 subi r24, 0x01 ; 1
d70: 80 93 07 01 sts 0x0107, r24
d74: 80 91 07 01 lds r24, 0x0107
d78: 88 23 and r24, r24
d7a: 21 f0 breq .+8 ; 0xd84 <__vector_17+0x142>
d7c: 86 b7 in r24, 0x36 ; 54
d7e: 80 6c ori r24, 0xC0 ; 192
d80: 86 bf out 0x36, r24 ; 54
d82: 12 c0 rjmp .+36 ; 0xda8 <__vector_17+0x166>
d84: 86 b7 in r24, 0x36 ; 54
d86: 8f 7b andi r24, 0xBF ; 191
d88: 86 bf out 0x36, r24 ; 54
d8a: 0e c0 rjmp .+28 ; 0xda8 <__vector_17+0x166>
d8c: e0 91 04 01 lds r30, 0x0104
d90: f0 91 05 01 lds r31, 0x0105
d94: 83 b1 in r24, 0x03 ; 3
d96: 80 83 st Z, r24
d98: 86 b7 in r24, 0x36 ; 54
d9a: 80 69 ori r24, 0x90 ; 144
d9c: 86 bf out 0x36, r24 ; 54
d9e: 80 91 08 01 lds r24, 0x0108
da2: 8f 77 andi r24, 0x7F ; 127
da4: 80 93 08 01 sts 0x0108, r24
da8: ff 91 pop r31
daa: ef 91 pop r30
dac: bf 91 pop r27
dae: af 91 pop r26
db0: 9f 91 pop r25
db2: 8f 91 pop r24
db4: 0f 90 pop r0
db6: 0f be out 0x3f, r0 ; 63
db8: 0f 90 pop r0
dba: 1f 90 pop r1
dbc: 18 95 reti
00000dbe <CamConfig_writeTxFifo>:
dbe: 20 91 0a 01 lds r18, 0x010A
dc2: e2 2f mov r30, r18
dc4: ff 27 eor r31, r31
dc6: ee 0f add r30, r30
dc8: ff 1f adc r31, r31
dca: ec 52 subi r30, 0x2C ; 44
dcc: fd 4f sbci r31, 0xFD ; 253
dce: 91 83 std Z+1, r25 ; 0x01
dd0: 80 83 st Z, r24
dd2: 2f 5f subi r18, 0xFF ; 255
dd4: 27 70 andi r18, 0x07 ; 7
dd6: 20 93 0a 01 sts 0x010A, r18
dda: 90 e0 ldi r25, 0x00 ; 0
ddc: 80 91 0b 01 lds r24, 0x010B
de0: 28 17 cp r18, r24
de2: 09 f4 brne .+2 ; 0xde6 <CamConfig_writeTxFifo+0x28>
de4: 91 e0 ldi r25, 0x01 ; 1
de6: 81 e0 ldi r24, 0x01 ; 1
de8: 89 27 eor r24, r25
dea: 99 27 eor r25, r25
dec: 08 95 ret
00000dee <CamConfig_setCamReg>:
dee: 28 2f mov r18, r24
df0: 36 2f mov r19, r22
df2: c9 01 movw r24, r18
df4: e4 df rcall .-56 ; 0xdbe <CamConfig_writeTxFifo>
df6: 08 95 ret
00000df8 <CamConfig_sendFifoCmds>:
df8: 0f 93 push r16
dfa: 1f 93 push r17
dfc: cf 93 push r28
dfe: df 93 push r29
e00: cd b7 in r28, 0x3d ; 61
e02: de b7 in r29, 0x3e ; 62
e04: 22 97 sbiw r28, 0x02 ; 2
e06: 0f b6 in r0, 0x3f ; 63
e08: f8 94 cli
e0a: de bf out 0x3e, r29 ; 62
e0c: 0f be out 0x3f, r0 ; 63
e0e: cd bf out 0x3d, r28 ; 61
e10: 8e 01 movw r16, r28
e12: 0f 5f subi r16, 0xFF ; 255
e14: 1f 4f sbci r17, 0xFF ; 255
e16: 19 c0 rjmp .+50 ; 0xe4a <CamConfig_sendFifoCmds+0x52>
e18: e3 2f mov r30, r19
e1a: ff 27 eor r31, r31
e1c: ee 0f add r30, r30
e1e: ff 1f adc r31, r31
e20: ec 52 subi r30, 0x2C ; 44
e22: fd 4f sbci r31, 0xFD ; 253
e24: 91 81 ldd r25, Z+1 ; 0x01
e26: 20 81 ld r18, Z
e28: 83 2f mov r24, r19
e2a: 8f 5f subi r24, 0xFF ; 255
e2c: 87 70 andi r24, 0x07 ; 7
e2e: 80 93 0b 01 sts 0x010B, r24
e32: 9a 83 std Y+2, r25 ; 0x02
e34: 29 83 std Y+1, r18 ; 0x01
e36: 42 e0 ldi r20, 0x02 ; 2
e38: b8 01 movw r22, r16
e3a: 80 e6 ldi r24, 0x60 ; 96
e3c: c5 de rcall .-630 ; 0xbc8 <I2CInt_writeData>
e3e: 84 e6 ldi r24, 0x64 ; 100
e40: 90 e0 ldi r25, 0x00 ; 0
e42: 25 d0 rcall .+74 ; 0xe8e <Utility_delay>
e44: f7 de rcall .-530 ; 0xc34 <I2CInt_isI2cBusy>
e46: 81 30 cpi r24, 0x01 ; 1
e48: e9 f3 breq .-6 ; 0xe44 <CamConfig_sendFifoCmds+0x4c>
e4a: 30 91 0b 01 lds r19, 0x010B
e4e: 80 91 0a 01 lds r24, 0x010A
e52: 83 17 cp r24, r19
e54: 09 f7 brne .-62 ; 0xe18 <CamConfig_sendFifoCmds+0x20>
e56: 22 96 adiw r28, 0x02 ; 2
e58: 0f b6 in r0, 0x3f ; 63
e5a: f8 94 cli
e5c: de bf out 0x3e, r29 ; 62
e5e: 0f be out 0x3f, r0 ; 63
e60: cd bf out 0x3d, r28 ; 61
e62: df 91 pop r29
e64: cf 91 pop r28
e66: 1f 91 pop r17
e68: 0f 91 pop r16
e6a: 08 95 ret
00000e6c <CamConfig_init>:
e6c: 60 e2 ldi r22, 0x20 ; 32
e6e: 84 e1 ldi r24, 0x14 ; 20
e70: be df rcall .-132 ; 0xdee <CamConfig_setCamReg>
e72: 60 e4 ldi r22, 0x40 ; 64
e74: 89 e3 ldi r24, 0x39 ; 57
e76: bb df rcall .-138 ; 0xdee <CamConfig_setCamReg>
e78: 68 e2 ldi r22, 0x28 ; 40
e7a: 82 e1 ldi r24, 0x12 ; 18
e7c: b8 df rcall .-144 ; 0xdee <CamConfig_setCamReg>
e7e: 65 e0 ldi r22, 0x05 ; 5
e80: 88 e2 ldi r24, 0x28 ; 40
e82: b5 df rcall .-150 ; 0xdee <CamConfig_setCamReg>
e84: 61 e0 ldi r22, 0x01 ; 1
e86: 83 e1 ldi r24, 0x13 ; 19
e88: b2 df rcall .-156 ; 0xdee <CamConfig_setCamReg>
e8a: b6 df rcall .-148 ; 0xdf8 <CamConfig_sendFifoCmds>
e8c: 08 95 ret
00000e8e <Utility_delay>:
e8e: cf 93 push r28
e90: df 93 push r29
e92: cd b7 in r28, 0x3d ; 61
e94: de b7 in r29, 0x3e ; 62
e96: 24 97 sbiw r28, 0x04 ; 4
e98: 0f b6 in r0, 0x3f ; 63
e9a: f8 94 cli
e9c: de bf out 0x3e, r29 ; 62
e9e: 0f be out 0x3f, r0 ; 63
ea0: cd bf out 0x3d, r28 ; 61
ea2: 9c 01 movw r18, r24
ea4: 1a 82 std Y+2, r1 ; 0x02
ea6: 19 82 std Y+1, r1 ; 0x01
ea8: 1c 82 std Y+4, r1 ; 0x04
eaa: 1b 82 std Y+3, r1 ; 0x03
eac: 1a 82 std Y+2, r1 ; 0x02
eae: 19 82 std Y+1, r1 ; 0x01
eb0: 89 81 ldd r24, Y+1 ; 0x01
eb2: 9a 81 ldd r25, Y+2 ; 0x02
eb4: 82 17 cp r24, r18
eb6: 93 07 cpc r25, r19
eb8: e0 f4 brcc .+56 ; 0xef2 <Utility_delay+0x64>
eba: 1c 82 std Y+4, r1 ; 0x04
ebc: 1b 82 std Y+3, r1 ; 0x03
ebe: 8b 81 ldd r24, Y+3 ; 0x03
ec0: 9c 81 ldd r25, Y+4 ; 0x04
ec2: 88 5e subi r24, 0xE8 ; 232
ec4: 93 40 sbci r25, 0x03 ; 3
ec6: 58 f4 brcc .+22 ; 0xede <Utility_delay+0x50>
ec8: 00 00 nop
eca: 8b 81 ldd r24, Y+3 ; 0x03
ecc: 9c 81 ldd r25, Y+4 ; 0x04
ece: 01 96 adiw r24, 0x01 ; 1
ed0: 9c 83 std Y+4, r25 ; 0x04
ed2: 8b 83 std Y+3, r24 ; 0x03
ed4: 8b 81 ldd r24, Y+3 ; 0x03
ed6: 9c 81 ldd r25, Y+4 ; 0x04
ed8: 88 5e subi r24, 0xE8 ; 232
eda: 93 40 sbci r25, 0x03 ; 3
edc: a8 f3 brcs .-22 ; 0xec8 <Utility_delay+0x3a>
ede: 89 81 ldd r24, Y+1 ; 0x01
ee0: 9a 81 ldd r25, Y+2 ; 0x02
ee2: 01 96 adiw r24, 0x01 ; 1
ee4: 9a 83 std Y+2, r25 ; 0x02
ee6: 89 83 std Y+1, r24 ; 0x01
ee8: 89 81 ldd r24, Y+1 ; 0x01
eea: 9a 81 ldd r25, Y+2 ; 0x02
eec: 82 17 cp r24, r18
eee: 93 07 cpc r25, r19
ef0: 20 f3 brcs .-56 ; 0xeba <Utility_delay+0x2c>
ef2: 24 96 adiw r28, 0x04 ; 4
ef4: 0f b6 in r0, 0x3f ; 63
ef6: f8 94 cli
ef8: de bf out 0x3e, r29 ; 62
efa: 0f be out 0x3f, r0 ; 63
efc: cd bf out 0x3d, r28 ; 61
efe: df 91 pop r29
f00: cf 91 pop r28
f02: 08 95 ret
00000f04 <DebugInt_init>:
f04: 8e 9a sbi 0x11, 6 ; 17
f06: 96 9a sbi 0x12, 6 ; 18
f08: 84 ef ldi r24, 0xF4 ; 244
f0a: 91 e0 ldi r25, 0x01 ; 1
f0c: c0 df rcall .-128 ; 0xe8e <Utility_delay>
f0e: 96 98 cbi 0x12, 6 ; 18
f10: 84 ef ldi r24, 0xF4 ; 244
f12: 91 e0 ldi r25, 0x01 ; 1
f14: bc df rcall .-136 ; 0xe8e <Utility_delay>
f16: 96 9a sbi 0x12, 6 ; 18
f18: 84 ef ldi r24, 0xF4 ; 244
f1a: 91 e0 ldi r25, 0x01 ; 1
f1c: b8 df rcall .-144 ; 0xe8e <Utility_delay>
f1e: 96 98 cbi 0x12, 6 ; 18
f20: 84 ef ldi r24, 0xF4 ; 244
f22: 91 e0 ldi r25, 0x01 ; 1
f24: b4 df rcall .-152 ; 0xe8e <Utility_delay>
f26: 96 9a sbi 0x12, 6 ; 18
f28: 84 ef ldi r24, 0xF4 ; 244
f2a: 91 e0 ldi r25, 0x01 ; 1
f2c: b0 df rcall .-160 ; 0xe8e <Utility_delay>
f2e: 96 98 cbi 0x12, 6 ; 18
f30: 84 ef ldi r24, 0xF4 ; 244
f32: 91 e0 ldi r25, 0x01 ; 1
f34: ac df rcall .-168 ; 0xe8e <Utility_delay>
f36: 96 9a sbi 0x12, 6 ; 18
f38: 08 95 ret
00000f3a <CamIntAsm_waitForNewTrackingFrame>:
; set, and the function will return.
;*****************************************************************
CamIntAsm_waitForNewTrackingFrame:
sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
f3a: 96 9a sbi 0x12, 6 ; 18
cbi _SFR_IO_ADDR(PORTD),PD6
f3c: 96 98 cbi 0x12, 6 ; 18
sleep
f3e: 88 95 sleep
00000f40 <CamIntAsm_acquireTrackingLine>:
;*****************************************************************
; REMEMBER...everything from here on out is critically timed to be
; synchronized with the flow of pixel data from the camera...
;*****************************************************************
CamIntAsm_acquireTrackingLine:
brts _cleanUp
f40: e6 f1 brts .+120 ; 0xfba <_cleanUp>
;sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
;cbi _SFR_IO_ADDR(PORTD),PD6
in tmp1,_SFR_IO_ADDR(TCCR1B) ; Enable the PCLK line to actually
f42: 3e b5 in r19, 0x2e ; 46
ori tmp1, 0x07 ; feed Timer1
f44: 37 60 ori r19, 0x07 ; 7
out _SFR_IO_ADDR(TCCR1B),tmp1
f46: 3e bd out 0x2e, r19 ; 46
; The line is about to start...
ldi pixelCount,0 ; Initialize the RLE stats...
f48: 00 e0 ldi r16, 0x00 ; 0
ldi pixelRunStart,PIXEL_RUN_START_INITIAL ; Remember, we always calculate
f4a: 10 e5 ldi r17, 0x50 ; 80
; the pixel run length as
; TCNT1L - pixelRunStart
ldi lastColor,0x00 ; clear out the last color before we start
f4c: 20 e0 ldi r18, 0x00 ; 0
mov XH,currLineBuffHigh ; Load the pointer to the current line
f4e: b9 2f mov r27, r25
mov XL,currLineBuffLow ; buffer into the X pointer regs
f50: a8 2f mov r26, r24
mov ZH,colorMapHigh ; Load the pointers to the membership
f52: f7 2f mov r31, r23
mov ZL,colorMapLow ; lookup tables (ZL and YL will be overwritten
f54: e6 2f mov r30, r22
mov YH,colorMapHigh ; as soon as we start reading data) to Z and Y
f56: d7 2f mov r29, r23
in tmp1, _SFR_IO_ADDR(TIMSK) ; enable TIMER1 to start counting
f58: 39 b7 in r19, 0x39 ; 57
ori tmp1, ENABLE_PCLK_TIMER1_OVERFLOW_BITMASK ; external PCLK pulses and interrupt on
f5a: 34 60 ori r19, 0x04 ; 4
out _SFR_IO_ADDR(TIMSK),tmp1 ; overflow
f5c: 39 bf out 0x39, r19 ; 57
ldi tmp1,PIXEL_RUN_START_INITIAL ; set up the TCNT1 to overflow (and
f5e: 30 e5 ldi r19, 0x50 ; 80
ldi tmp2,0xFF ; interrupts) after 176 pixels
f60: 4f ef ldi r20, 0xFF ; 255
out _SFR_IO_ADDR(TCNT1H),tmp2
f62: 4d bd out 0x2d, r20 ; 45
out _SFR_IO_ADDR(TCNT1L),tmp1
f64: 3c bd out 0x2c, r19 ; 44
mov YL,colorMapLow
f66: c6 2f mov r28, r22
in tmp1, _SFR_IO_ADDR(GICR) ; enable the HREF interrupt...remember, we
f68: 3b b7 in r19, 0x3b ; 59
; only use this interrupt to synchronize
; the beginning of the line
ori tmp1, HREF_INTERRUPT_ENABLE_MASK
f6a: 30 68 ori r19, 0x80 ; 128
out _SFR_IO_ADDR(GICR), tmp1
f6c: 3b bf out 0x3b, r19 ; 59
00000f6e <_trackFrame>:
;*******************************************************************************************
; Track Frame handler
;*******************************************************************************************
_trackFrame:
sbi _SFR_IO_ADDR(PORTD),PD6
f6e: 96 9a sbi 0x12, 6 ; 18
sleep ; ...And we wait...
f70: 88 95 sleep
; Returning from the interrupt/sleep wakeup will consume
; 14 clock cycles (7 to wakeup from idle sleep, 3 to vector, and 4 to return)
; Disable the HREF interrupt
cbi _SFR_IO_ADDR(PORTD),PD6
f72: 96 98 cbi 0x12, 6 ; 18
in tmp1, _SFR_IO_ADDR(GICR)
f74: 3b b7 in r19, 0x3b ; 59
andi tmp1, HREF_INTERRUPT_DISABLE_MASK
f76: 3f 77 andi r19, 0x7F ; 127
out _SFR_IO_ADDR(GICR), tmp1
f78: 3b bf out 0x3b, r19 ; 59
; A couple of NOPs are needed here to sync up the pixel data...the number (2)
; of NOPs was determined emperically by trial and error.
nop
f7a: 00 00 nop
...
00000f7e <_acquirePixelBlock>:
nop
_acquirePixelBlock: ; Clock Cycle Count
in ZL,RB_PORT ; sample the red value (PINB) (1)
f7e: e6 b3 in r30, 0x16 ; 22
in YL,G_PORT ; sample the green value (PINC) (1)
f80: c3 b3 in r28, 0x13 ; 19
andi YL,0x0F ; clear the high nibble (1)
f82: cf 70 andi r28, 0x0F ; 15
ldd color,Z+RED_MEM_OFFSET ; lookup the red membership (2)
f84: 30 81 ld r19, Z
in ZL,RB_PORT ; sample the blue value (PINB) (1)
f86: e6 b3 in r30, 0x16 ; 22
ldd greenData,Y+GREEN_MEM_OFFSET; lookup the green membership (2)
f88: 48 89 ldd r20, Y+16 ; 0x10
ldd blueData,Z+BLUE_MEM_OFFSET ; lookup the blue membership (2)
f8a: 50 a1 ldd r21, Z+32 ; 0x20
and color,greenData ; mask memberships together (1)
f8c: 34 23 and r19, r20
and color,blueData ; to produce the final color (1)
f8e: 35 23 and r19, r21
brts _cleanUpTrackingLine ; if some interrupt routine has (1...not set)
f90: 76 f0 brts .+28 ; 0xfae <_cleanUpTrackingLine>
; come in and set our T flag in
; SREG, then we need to hop out
; and blow away this frames data (common cleanup)
cp color,lastColor ; check to see if the run continues (1)
f92: 32 17 cp r19, r18
breq _acquirePixelBlock ; (2...equal)
f94: a1 f3 breq .-24 ; 0xf7e <_acquirePixelBlock>
; ___________
; 16 clock cycles
; (16 clock cycles = 1 uS = 1 pixelBlock time)
; Toggle the debug line to indicate a color change
sbi _SFR_IO_ADDR(PORTD),PD6
f96: 96 9a sbi 0x12, 6 ; 18
nop
f98: 00 00 nop
cbi _SFR_IO_ADDR(PORTD),PD6
f9a: 96 98 cbi 0x12, 6 ; 18
mov tmp2,pixelRunStart ; get the count value of the
f9c: 41 2f mov r20, r17
; current pixel run
in pixelCount,_SFR_IO_ADDR(TCNT1L) ; get the current TCNT1 value
f9e: 0c b5 in r16, 0x2c ; 44
mov pixelRunStart,pixelCount ; reload pixelRunStart for the
fa0: 10 2f mov r17, r16
; next run
sub pixelCount,tmp2 ; pixelCount = TCNT1L - pixelRunStart
fa2: 04 1b sub r16, r20
st X+,lastColor ; record the color run in the current line buffer
fa4: 2d 93 st X+, r18
st X+,pixelCount ; with its length
fa6: 0d 93 st X+, r16
mov lastColor,color ; set lastColor so we can figure out when it changes
fa8: 23 2f mov r18, r19
nop ; waste one more cycle for a total of 16
faa: 00 00 nop
rjmp _acquirePixelBlock
fac: e8 cf rjmp .-48 ; 0xf7e <_acquirePixelBlock>
00000fae <_cleanUpTrackingLine>:
; _cleanUpTrackingLine is used to write the last run length block off to the currentLineBuffer so
; that all 176 pixels in the line are accounted for.
_cleanUpTrackingLine:
ldi pixelCount,0xFF ; the length of the last run is ALWAYS 0xFF minus the last
fae: 0f ef ldi r16, 0xFF ; 255
sub pixelCount,pixelRunStart ; pixelRunStart
fb0: 01 1b sub r16, r17
inc pixelCount ; increment pixelCount since we actually need to account
fb2: 03 95 inc r16
; for the overflow of TCNT1
st X+,color ; record the color run in the current line buffer
fb4: 3d 93 st X+, r19
st X,pixelCount
fb6: 0c 93 st X, r16
rjmp _cleanUp
fb8: 00 c0 rjmp .+0 ; 0xfba <_cleanUp>
00000fba <_cleanUp>:
_cleanUpDumpLine:
; NOTE: If serial data is received, to interrupt the tracking of a line, we'll
; get a EV_SERIAL_DATA_RECEIVED event, and the T bit set so we will end the
; line's processing...however, the PCLK will keep on ticking for the rest of
; the frame/line, which will cause the TCNT to eventually overflow and
; interrupt us, generating a EV_ACQUIRE_LINE_COMPLETE event. We don't want
; this, so we need to actually turn off the PCLK counting each time we exit
; this loop, and only turn it on when we begin acquiring lines....
; NOT NEEDED FOR NOW...
;in tmp1, _SFR_IO_ADDR(TIMSK) ; disable TIMER1 to stop counting
;andi tmp1, DISABLE_PCLK_TIMER1_OVERFLOW_BITMASK ; external PCLK pulses
;out _SFR_IO_ADDR(TIMSK),tmp1
_cleanUp:
; Disable the external clocking of the Timer1 counter
in tmp1, _SFR_IO_ADDR(TCCR1B)
fba: 3e b5 in r19, 0x2e ; 46
andi tmp1, 0xF8
fbc: 38 7f andi r19, 0xF8 ; 248
out _SFR_IO_ADDR(TCCR1B),tmp1
fbe: 3e bd out 0x2e, r19 ; 46
; Toggle the debug line to indicate the line is complete
sbi _SFR_IO_ADDR(PORTD),PD6
fc0: 96 9a sbi 0x12, 6 ; 18
cbi _SFR_IO_ADDR(PORTD),PD6
fc2: 96 98 cbi 0x12, 6 ; 18
clt ; clear out the T bit since we have detected
fc4: e8 94 clt
00000fc6 <_exit>:
; the interruption and are exiting to handle it
_exit:
ret
fc6: 08 95 ret
00000fc8 <CamIntAsm_waitForNewDumpFrame>:
;*****************************************************************
; Function Name: CamIntAsm_waitForNewDumpFrame
; Function Description: This function is responsible for
; going to sleep until a new frame begins (indicated by
; VSYNC transitioning from low to high. This will wake
; the "VSYNC sleep" up and allow it to continue with
; acquiring a line of pixel data to dump out to the UI.
; Inputs: r25 - MSB of currentLineBuffer
; r24 - LSB of currentLineBuffer
; r23 - MSB of prevLineBuffer
; r22 - LSB of prevLineBuffer
; Outputs: none
; NOTES: This function doesn't really return...it sorta just
; floats into the acquireDumpLine function after the "VSYNC sleep"
; is awoken.
;*****************************************************************
CamIntAsm_waitForNewDumpFrame:
sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
fc8: 96 9a sbi 0x12, 6 ; 18
cbi _SFR_IO_ADDR(PORTD),PD6
fca: 96 98 cbi 0x12, 6 ; 18
sleep
fcc: 88 95 sleep
00000fce <CamIntAsm_acquireDumpLine>:
;*****************************************************************
; REMEMBER...everything from here on out is critically timed to be
; synchronized with the flow of pixel data from the camera...
;*****************************************************************
CamIntAsm_acquireDumpLine:
brts _cleanUp
fce: ae f3 brts .-22 ; 0xfba <_cleanUp>
;sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
;cbi _SFR_IO_ADDR(PORTD),PD6
mov XH,currLineBuffHigh ; Load the pointer to the current line
fd0: b9 2f mov r27, r25
mov XL,currLineBuffLow ; buffer into the X pointer regs
fd2: a8 2f mov r26, r24
mov YH,prevLineBuffHigh ; Load the pointer to the previous line
fd4: d7 2f mov r29, r23
mov YL,prevLineBuffLow ; buffer into the Y pointer regs
fd6: c6 2f mov r28, r22
ldi tmp1,PIXEL_RUN_START_INITIAL ; set up the TCNT1 to overflow (and
fd8: 30 e5 ldi r19, 0x50 ; 80
ldi tmp2,0xFF ; interrupts) after 176 pixels
fda: 4f ef ldi r20, 0xFF ; 255
out _SFR_IO_ADDR(TCNT1H),tmp2
fdc: 4d bd out 0x2d, r20 ; 45
out _SFR_IO_ADDR(TCNT1L),tmp1
fde: 3c bd out 0x2c, r19 ; 44
in tmp1, _SFR_IO_ADDR(TCCR1B) ; Enable the PCLK line to actually
fe0: 3e b5 in r19, 0x2e ; 46
ori tmp1, 0x07 ; feed Timer1
fe2: 37 60 ori r19, 0x07 ; 7
out _SFR_IO_ADDR(TCCR1B),tmp1
fe4: 3e bd out 0x2e, r19 ; 46
nop
fe6: 00 00 nop
in tmp1, _SFR_IO_ADDR(TIMSK) ; enable TIMER1 to start counting
fe8: 39 b7 in r19, 0x39 ; 57
ori tmp1, ENABLE_PCLK_TIMER1_OVERFLOW_BITMASK ; external PCLK pulses and interrupt on
fea: 34 60 ori r19, 0x04 ; 4
out _SFR_IO_ADDR(TIMSK),tmp1 ; overflow
fec: 39 bf out 0x39, r19 ; 57
in tmp1, _SFR_IO_ADDR(GICR) ; enable the HREF interrupt...remember, we
fee: 3b b7 in r19, 0x3b ; 59
; only use this interrupt to synchronize
; the beginning of the line
ori tmp1, HREF_INTERRUPT_ENABLE_MASK
ff0: 30 68 ori r19, 0x80 ; 128
out _SFR_IO_ADDR(GICR), tmp1
ff2: 3b bf out 0x3b, r19 ; 59
00000ff4 <_dumpFrame>:
;*******************************************************************************************
; Dump Frame handler
;*******************************************************************************************
_dumpFrame:
sbi _SFR_IO_ADDR(PORTD),PD6
ff4: 96 9a sbi 0x12, 6 ; 18
sleep ; ...And we wait...
ff6: 88 95 sleep
cbi _SFR_IO_ADDR(PORTD),PD6
ff8: 96 98 cbi 0x12, 6 ; 18
in tmp1, _SFR_IO_ADDR(GICR) ; disable the HREF interrupt
ffa: 3b b7 in r19, 0x3b ; 59
andi tmp1, HREF_INTERRUPT_DISABLE_MASK ; so we don't get interrupted
ffc: 3f 77 andi r19, 0x7F ; 127
out _SFR_IO_ADDR(GICR), tmp1 ; while dumping the line
ffe: 3b bf out 0x3b, r19 ; 59
...
00001002 <_sampleDumpPixel>:
nop ; Remember...if we ever remove the "cbi" instruction above,
; we need to add two more NOPs to cover this
; Ok...the following loop needs to run in 8 clock cycles, so we can get every
; pixel in the line...this shouldn't be a problem, since the PCLK timing was
; reduced by a factor of 2 whenever we go to dump a line (this is to give us
; enough time to do the sampling and storing of the pixel data). In addition,
; it is assumed that we will have to do some minor processing on the data right
; before we send it out, like mask off the top 4-bits of each, and then pack both
; low nibbles into a single byte for transmission...we just don't have time to
; do that here (only 8 instruction cycles :-) )
_sampleDumpPixel:
in tmp1,G_PORT ; sample the G value (1)
1002: 33 b3 in r19, 0x13 ; 19
in tmp2,RB_PORT ; sample the R/B value (1)
1004: 46 b3 in r20, 0x16 ; 22
st X+,tmp1 ; store to the currLineBuff and inc ptrs(2)
1006: 3d 93 st X+, r19
st Y+,tmp2 ; store to the prevLineBuff and inc ptrs(2)
1008: 49 93 st Y+, r20
brtc _sampleDumpPixel ; loop back unless flag is set (2...if not set)
100a: de f7 brtc .-10 ; 0x1002 <_sampleDumpPixel>
; ___________
; 8 cycles normally
; if we make it here, it means the T flag is set, and we must have been interrupted
; so we need to exit (what if we were interrupted for serial? should we disable it?)
rjmp _cleanUpDumpLine
100c: d6 cf rjmp .-84 ; 0xfba <_cleanUp>
0000100e <__vector_1>:
;***********************************************************
; Function Name: <interrupt handler for External Interrupt0>
; Function Description: This function is responsible
; for handling a rising edge on the Ext Interrupt 0. This
; routine simply returns, since we just want to wake up
; whenever the VSYNC transitions (meaning the start of a new
; frame).
; Inputs: none
; Outputs: none
;***********************************************************
SIG_INTERRUPT0:
; This will wake us up when VSYNC transitions high...we just want to return
reti
100e: 18 95 reti
00001010 <__vector_2>:
;***********************************************************
; Function Name: <interrupt handler for External Interrupt1>
; Function Description: This function is responsible
; for handling a falling edge on the Ext Interrupt 1. This
; routine simply returns, since we just want to wake up
; whenever the HREF transitions (meaning the pixels
; are starting after VSYNC transitioned, and we need to
; start acquiring the pixel blocks
; Inputs: none
; Outputs: none
;***********************************************************
SIG_INTERRUPT1:
; This will wake us up when HREF transitions high...we just want to return
reti
1010: 18 95 reti
00001012 <__vector_8>:
;***********************************************************
; Function Name: <interrupt handler for Timer0 overflow>
; Function Description: This function is responsible
; for handling the Timer0 overflow (hooked up to indicate
; when we have reached the number of HREFs required in a
; single frame). We set the T flag in the SREG to
; indicate to the _acquirePixelBlock routine that it needs
; to exit, and then set the appropriate action to take in
; the eventList of the Executive module.
; Inputs: none
; Outputs: none
; Note: Originally, the HREF pulses were also going to
; be counted by a hardware counter, but it didn't end up
; being necessary
;***********************************************************
;SIG_OVERFLOW0:
; set ; set the T bit in SREG
; lds tmp1,eventBitmask
; ori tmp1,EV_ACQUIRE_FRAME_COMPLETE
; sts eventBitmask,tmp1
; reti
;***********************************************************
; Function Name: <interrupt handler for Timer1 overflow>
; Function Description: This function is responsible
; for handling the Timer1 overflow (hooked up to indicate
; when we have reached the end of a line of pixel data,
; since PCLK is hooked up to overflow TCNT1 after 176
; pixels). This routine generates an acquire line complete
; event in the fastEventBitmask, which is streamlined for
; efficiency reasons.
;***********************************************************
SIG_OVERFLOW1:
lds tmp1,fastEventBitmask ; set a flag indicating
1012: 30 91 72 00 lds r19, 0x0072
ori tmp1,FEV_ACQUIRE_LINE_COMPLETE ; a line is complete
1016: 31 60 ori r19, 0x01 ; 1
sts fastEventBitmask,tmp1
1018: 30 93 72 00 sts 0x0072, r19
set ; set the T bit in SREG
101c: 68 94 set
;sbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
;cbi _SFR_IO_ADDR(PORTD),PD6 ; For testing...
reti
101e: 18 95 reti
00001020 <__vector_default>:
; This is the default handler for all interrupts that don't
; have handler routines specified for them.
.global __vector_default
__vector_default:
reti
1020: 18 95 reti
00001022 <atoi>:
1022: fc 01 movw r30, r24
1024: 88 27 eor r24, r24
1026: 99 27 eor r25, r25
1028: e8 94 clt
102a: 21 91 ld r18, Z+
102c: 22 23 and r18, r18
102e: e9 f0 breq .+58 ; 0x106a <atoi+0x48>
1030: 20 32 cpi r18, 0x20 ; 32
1032: d9 f3 breq .-10 ; 0x102a <atoi+0x8>
1034: 29 30 cpi r18, 0x09 ; 9
1036: c9 f3 breq .-14 ; 0x102a <atoi+0x8>
1038: 2a 30 cpi r18, 0x0A ; 10
103a: b9 f3 breq .-18 ; 0x102a <atoi+0x8>
103c: 2c 30 cpi r18, 0x0C ; 12
103e: a9 f3 breq .-22 ; 0x102a <atoi+0x8>
1040: 2d 30 cpi r18, 0x0D ; 13
1042: 99 f3 breq .-26 ; 0x102a <atoi+0x8>
1044: 26 37 cpi r18, 0x76 ; 118
1046: 89 f3 breq .-30 ; 0x102a <atoi+0x8>
1048: 2b 32 cpi r18, 0x2B ; 43
104a: 19 f0 breq .+6 ; 0x1052 <atoi+0x30>
104c: 2d 32 cpi r18, 0x2D ; 45
104e: 21 f4 brne .+8 ; 0x1058 <atoi+0x36>
1050: 68 94 set
1052: 21 91 ld r18, Z+
1054: 22 23 and r18, r18
1056: 49 f0 breq .+18 ; 0x106a <atoi+0x48>
1058: 20 33 cpi r18, 0x30 ; 48
105a: 3c f0 brlt .+14 ; 0x106a <atoi+0x48>
105c: 2a 33 cpi r18, 0x3A ; 58
105e: 2c f4 brge .+10 ; 0x106a <atoi+0x48>
1060: 20 53 subi r18, 0x30 ; 48
1062: 0b d0 rcall .+22 ; 0x107a <__mulhi_const_10>
1064: 82 0f add r24, r18
1066: 91 1d adc r25, r1
1068: f4 cf rjmp .-24 ; 0x1052 <atoi+0x30>
106a: 81 15 cp r24, r1
106c: 91 05 cpc r25, r1
106e: 21 f0 breq .+8 ; 0x1078 <atoi+0x56>
1070: 1e f4 brtc .+6 ; 0x1078 <atoi+0x56>
1072: 80 95 com r24
1074: 90 95 com r25
1076: 01 96 adiw r24, 0x01 ; 1
1078: 08 95 ret
0000107a <__mulhi_const_10>:
107a: 7a e0 ldi r23, 0x0A ; 10
107c: 97 9f mul r25, r23
107e: 90 2d mov r25, r0
1080: 87 9f mul r24, r23
1082: 80 2d mov r24, r0
1084: 91 0d add r25, r1
1086: 11 24 eor r1, r1
1088: 08 95 ret
0000108a <__eeprom_read_byte_1C1D1E>:
108a: e1 99 sbic 0x1c, 1 ; 28
108c: fe cf rjmp .-4 ; 0x108a <__eeprom_read_byte_1C1D1E>
108e: bf bb out 0x1f, r27 ; 31
1090: ae bb out 0x1e, r26 ; 30
1092: e0 9a sbi 0x1c, 0 ; 28
1094: 11 96 adiw r26, 0x01 ; 1
1096: 0d b2 in r0, 0x1d ; 29
1098: 08 95 ret
0000109a <__eeprom_read_block_1C1D1E>:
109a: f7 df rcall .-18 ; 0x108a <__eeprom_read_byte_1C1D1E>
109c: 01 92 st Z+, r0
109e: 1a 94 dec r1
10a0: e1 f7 brne .-8 ; 0x109a <__eeprom_read_block_1C1D1E>
10a2: 08 95 ret
000010a4 <__eeprom_write_byte_1C1D1E>:
10a4: e1 99 sbic 0x1c, 1 ; 28
10a6: fe cf rjmp .-4 ; 0x10a4 <__eeprom_write_byte_1C1D1E>
10a8: bf bb out 0x1f, r27 ; 31
10aa: ae bb out 0x1e, r26 ; 30
10ac: 0d ba out 0x1d, r0 ; 29
10ae: 11 96 adiw r26, 0x01 ; 1
10b0: 0f b6 in r0, 0x3f ; 63
10b2: f8 94 cli
10b4: e2 9a sbi 0x1c, 2 ; 28
10b6: e1 9a sbi 0x1c, 1 ; 28
10b8: 0f be out 0x3f, r0 ; 63
10ba: 08 95 ret
000010bc <_exit>:
10bc: ff cf rjmp .-2 ; 0x10bc <_exit>