📄 framemgr.lst
字号:
220 009e 0895 ret
221 /* epilogue: frame size=0 */
222 00a0 0895 ret
223 /* epilogue end (size=1) */
224 /* function FrameMgr_acquireLine size 59 (58) */
229 .Lscope2:
231 .global FrameMgr_processLine
233 FrameMgr_processLine:
164:FrameMgr.c **** }
165:FrameMgr.c ****
166:FrameMgr.c **** }
167:FrameMgr.c ****
168:FrameMgr.c **** /***********************************************************
169:FrameMgr.c **** Function Name: FrameMgr_processLine
170:FrameMgr.c **** Function Description: This function is responsible for
171:FrameMgr.c **** parsing the received image line and performing either
172:FrameMgr.c **** connected region mapping (if in the Tracking state) or
173:FrameMgr.c **** sending out the raw sampled data (if in the Dumping
174:FrameMgr.c **** state).
175:FrameMgr.c **** Inputs: none
176:FrameMgr.c **** Outputs: none
177:FrameMgr.c **** ***********************************************************/
178:FrameMgr.c **** void FrameMgr_processLine(void)
179:FrameMgr.c **** {
235 .LM22:
236 /* prologue: frame size=1 */
237 00a2 BF92 push r11
238 00a4 CF92 push r12
239 00a6 DF92 push r13
240 00a8 EF92 push r14
241 00aa FF92 push r15
242 00ac 0F93 push r16
243 00ae 1F93 push r17
244 00b0 CF93 push r28
245 00b2 DF93 push r29
246 00b4 CDB7 in r28,__SP_L__
247 00b6 DEB7 in r29,__SP_H__
248 00b8 2197 sbiw r28,1
249 00ba 0FB6 in __tmp_reg__,__SREG__
250 00bc F894 cli
251 00be DEBF out __SP_H__,r29
252 00c0 0FBE out __SREG__,__tmp_reg__
253 00c2 CDBF out __SP_L__,r28
254 /* prologue end (size=17) */
180:FrameMgr.c **** //unsigned char i;
181:FrameMgr.c **** int i;
182:FrameMgr.c **** volatile unsigned char dataToSend;
183:FrameMgr.c ****
184:FrameMgr.c ****
185:FrameMgr.c ****
186:FrameMgr.c **** if (currentState == ST_FrameMgr_DumpingFrame)
256 .LM23:
257 00c4 8091 0000 lds r24,currentState
258 00c8 8130 cpi r24,lo8(1)
259 00ca 09F0 breq .+2
260 00cc 71C0 rjmp .L30
187:FrameMgr.c **** {
188:FrameMgr.c **** /* we want to sit in a tight loop and send the acquired data
189:FrameMgr.c **** sitting in current and previous line buffers out the serial
190:FrameMgr.c **** port...it is sent out the serial port immediately instead
191:FrameMgr.c **** of going into the UIMgr tx fifo because we can't do anything
192:FrameMgr.c **** until its sent out anyway...may as well just get it out now */
193:FrameMgr.c ****
194:FrameMgr.c **** /* currentLineBuffer is getting "g" previousLineBuffer is getting "b-r" */
195:FrameMgr.c **** UartInt_txByte(0x0B); /* send the header byte */
262 .LM24:
263 00ce 8BE0 ldi r24,lo8(11)
264 00d0 0E94 0000 call UartInt_txByte
196:FrameMgr.c **** UartInt_txByte(lineCount); /* send the line count */
266 .LM25:
267 00d4 8091 0000 lds r24,lineCount
268 00d8 0E94 0000 call UartInt_txByte
197:FrameMgr.c **** for (i=0; i<NUM_PIXELS_IN_A_DUMP_LINE; i+=2)////176
270 .LM26:
271 00dc CC24 clr r12
272 00de DD24 clr r13
273 00e0 0F2E mov __tmp_reg__,r31
274 00e2 F0EF ldi r31,lo8(-16)
275 00e4 BF2E mov r11,r31
276 00e6 F02D mov r31,__tmp_reg__
277 .L35:
198:FrameMgr.c **** {
199:FrameMgr.c **** /* when a dump line is sampled, the upper byte can potentially
200:FrameMgr.c **** have garbage in it...we don't have time to mask it off as we're
201:FrameMgr.c **** sampling, so it is done here before we send it out...we also
202:FrameMgr.c **** combine the samples together so we really are sending up a
203:FrameMgr.c **** sample for line N as well as line N+1 */
204:FrameMgr.c **** dataToSend = previousLineBuffer[i];
279 .LM27:
280 00e8 0F2E mov __tmp_reg__,r31
281 00ea F0E0 ldi r31,lo8(previousLineBuffer)
282 00ec EF2E mov r14,r31
283 00ee F0E0 ldi r31,hi8(previousLineBuffer)
284 00f0 FF2E mov r15,r31
285 00f2 F02D mov r31,__tmp_reg__
286 00f4 EC0C add r14,r12
287 00f6 FD1C adc r15,r13
288 00f8 F701 movw r30,r14
289 00fa 8081 ld r24,Z
290 00fc 8983 std Y+1,r24
205:FrameMgr.c **** dataToSend &= 0xF0;
292 .LM28:
293 00fe 8981 ldd r24,Y+1
294 0100 8B21 and r24,r11
295 0102 8983 std Y+1,r24
206:FrameMgr.c **** dataToSend >>= 4;
297 .LM29:
298 0104 8981 ldd r24,Y+1
299 0106 8295 swap r24
300 0108 8F70 andi r24,0x0f
301 010a 8983 std Y+1,r24
207:FrameMgr.c **** dataToSend |= (currentLineBuffer[i] & 0xF0);
303 .LM30:
304 010c 8601 movw r16,r12
305 010e 0050 subi r16,lo8(-(currentLineBuffer))
306 0110 1040 sbci r17,hi8(-(currentLineBuffer))
307 0112 F801 movw r30,r16
308 0114 8081 ld r24,Z
309 0116 982F mov r25,r24
310 0118 9B21 and r25,r11
311 011a 8981 ldd r24,Y+1
312 011c 892B or r24,r25
313 011e 8983 std Y+1,r24
208:FrameMgr.c **** /* dataToSend should be packed now */
209:FrameMgr.c **** UartInt_txByte(dataToSend);
315 .LM31:
316 0120 8981 ldd r24,Y+1
317 0122 0E94 0000 call UartInt_txByte
210:FrameMgr.c ****
211:FrameMgr.c **** /* flip the colors around since we are doing all G on Y and BR on UV */
212:FrameMgr.c **** dataToSend = currentLineBuffer[i+1];
319 .LM32:
320 0126 F801 movw r30,r16
321 0128 8181 ldd r24,Z+1
322 012a 8983 std Y+1,r24
213:FrameMgr.c **** dataToSend &= 0xF0;
324 .LM33:
325 012c 8981 ldd r24,Y+1
326 012e 8B21 and r24,r11
327 0130 8983 std Y+1,r24
214:FrameMgr.c **** dataToSend >>= 4;
329 .LM34:
330 0132 8981 ldd r24,Y+1
331 0134 8295 swap r24
332 0136 8F70 andi r24,0x0f
333 0138 8983 std Y+1,r24
215:FrameMgr.c **** dataToSend |= (previousLineBuffer[i+1] & 0xF0);
335 .LM35:
336 013a F701 movw r30,r14
337 013c 8181 ldd r24,Z+1
338 013e 982F mov r25,r24
339 0140 9B21 and r25,r11
340 0142 8981 ldd r24,Y+1
341 0144 892B or r24,r25
342 0146 8983 std Y+1,r24
216:FrameMgr.c **** /* dataToSend should be packed now */
217:FrameMgr.c **** UartInt_txByte(dataToSend);
344 .LM36:
345 0148 8981 ldd r24,Y+1
346 014a 0E94 0000 call UartInt_txByte
348 .LM37:
349 014e 82E0 ldi r24,lo8(2)
350 0150 90E0 ldi r25,hi8(2)
351 0152 C80E add r12,r24
352 0154 D91E adc r13,r25
353 0156 90E4 ldi r25,lo8(320)
354 0158 C916 cp r12,r25
355 015a 91E0 ldi r25,hi8(320)
356 015c D906 cpc r13,r25
357 015e 24F2 brlt .L35
218:FrameMgr.c **** }
219:FrameMgr.c **** UartInt_txByte(0x0F); /* send line end */
359 .LM38:
360 0160 8FE0 ldi r24,lo8(15)
361 0162 0E94 0000 call UartInt_txByte
220:FrameMgr.c **** /* once all the data is sent, increment out line count by 2 since
221:FrameMgr.c **** we really get 2 lines worth of pixels on each pass */
222:FrameMgr.c **** /* Update...increment only by 1, but only send 72 double-lines */
223:FrameMgr.c **** lineCount++;
363 .LM39:
364 0166 8091 0000 lds r24,lineCount
365 016a 8F5F subi r24,lo8(-(1))
366 016c 8093 0000 sts lineCount,r24
224:FrameMgr.c ****
225:FrameMgr.c **** if(lineCount%61==0)
368 .LM40:
369 0170 6DE3 ldi r22,lo8(61)
370 0172 0E94 0000 call __udivmodqi4
371 0176 9923 tst r25
372 0178 21F4 brne .L36
226:FrameMgr.c **** {
227:FrameMgr.c **** Utility_delay(500);
374 .LM41:
375 017a 84EF ldi r24,lo8(500)
376 017c 91E0 ldi r25,hi8(500)
377 017e 0E94 0000 call Utility_delay
378 .L36:
228:FrameMgr.c **** }
229:FrameMgr.c ****
230:FrameMgr.c ****
231:FrameMgr.c **** /* check to see if we have retrieved all of the needed lines */
232:FrameMgr.c **** if (lineCount >= 120) /* half 144, since we send two lines at a time */
380 .LM42:
381 0182 8091 0000 lds r24,lineCount
382 0186 8837 cpi r24,lo8(120)
383 0188 70F0 brlo .L37
233:FrameMgr.c **** {
234:FrameMgr.c **** /* we're done, so send the dump complete?...nope, just change
235:FrameMgr.c **** states and we should be fine */
236:FrameMgr.c **** lineCount = 0;
385 .LM43:
386 018a 1092 0000 sts lineCount,__zero_reg__
237:FrameMgr.c **** currentState = ST_FrameMgr_idle;
388 .LM44:
389 018e 1092 0000 sts currentState,__zero_reg__
238:FrameMgr.c ****
239:FrameMgr.c **** /* disable the PCLK counting overflow interrupt */
240:FrameMgr.c **** TIMSK &= DISABLE_PCLK_TIMER1_OVERFLOW_BITMASK;////0xfb
391 .LM45:
392 0192 87B7 in r24,87-0x20
393 0194 8B7F andi r24,lo8(-5)
394 0196 87BF out 87-0x20,r24
241:FrameMgr.c ****
242:FrameMgr.c **** CamConfig_setCamReg(0x11,0x00); /* reset the frame rate to normal*/
396 .LM46:
397 0198 60E0 ldi r22,lo8(0)
398 019a 81E1 ldi r24,lo8(17)
399 019c 0E94 0000 call CamConfig_setCamReg
243:FrameMgr.c **** CamConfig_sendFifoCmds();
401 .LM47:
402 01a0 0E94 0000 call CamConfig_sendFifoCmds
403 01a4 05C0 rjmp .L30
404 .L37:
244:FrameMgr.c **** }
245:FrameMgr.c **** else
246:FrameMgr.c **** {
247:FrameMgr.c **** /* we have more lines to acquire in this frame, so keep on truckin...*/
248:FrameMgr.c **** PUBLISH_FAST_EVENT(FEV_PROCESS_LINE_COMPLETE);
406 .LM48:
407 01a6 8091 0000 lds r24,fastEventBitmask
408 01aa 8260 ori r24,lo8(2)
409 01ac 8093 0000 sts fastEventBitmask,r24
410 .L30:
411 /* epilogue: frame size=1 */
412 01b0 2196 adiw r28,1
413 01b2 0FB6 in __tmp_reg__,__SREG__
414 01b4 F894 cli
415 01b6 DEBF out __SP_H__,r29
416 01b8 0FBE out __SREG__,__tmp_reg__
417 01ba CDBF out __SP_L__,r28
418 01bc DF91 pop r29
419 01be CF91 pop r28
420 01c0 1F91 pop r17
421 01c2 0F91 pop r16
422 01c4 FF90 pop r15
423 01c6 EF90 pop r14
424 01c8 DF90 pop r13
425 01ca CF90 pop r12
426 01cc BF90 pop r11
427 01ce 0895 ret
428 /* epilogue end (size=16) */
429 /* function FrameMgr_processLine size 151 (118) */
435 .Lscope3:
438 .text
440 Letext:
441 /* File "FrameMgr.c": code 232 = 0x00e8 ( 196), prologues 17, epilogues 19 */
DEFINED SYMBOLS
*ABS*:00000000 FrameMgr.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
.bss:00000000 lineCount
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmQaaaa.s:70 .bss:00000001 currentState
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmQaaaa.s:75 .text:00000000 FrameMgr_init
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmQaaaa.s:90 .text:00000002 FrameMgr_dispatchEvent
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmQaaaa.s:133 .text:0000002c FrameMgr_acquireLine
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmQaaaa.s:233 .text:000000a2 FrameMgr_processLine
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmQaaaa.s:440 .text:000001d0 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
CamConfig_setCamReg
CamConfig_sendFifoCmds
Utility_delay
currentLineBuffer
previousLineBuffer
CamIntAsm_acquireDumpLine
UartInt_txByte
__udivmodqi4
fastEventBitmask
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -