?? level3.lst
字號(hào):
609 .global InventoryStep_version4
610 .type InventoryStep_version4, @function
611 InventoryStep_version4:
230:level3.c ****
231:level3.c **** //--------------------------------------------------------------
232:level3.c **** //--------------------------------------------------------------
233:level3.c **** //1TS Inventory
234:level3.c ****
235:level3.c **** //#define DBG_1TS
236:level3.c ****
237:level3.c **** #define STACK_LENGTH 8 //stack size
238:level3.c ****
239:level3.c **** typedef struct {
240:level3.c **** uint8_t mask_len;
241:level3.c **** uint8_t value;
242:level3.c **** uint8_t mask[ 12 ];
243:level3.c **** uint8_t vata[ 2 ]; //to keep this structure size being 2^n
244:level3.c **** } TINVENTORY;
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s page 16
245:level3.c ****
246:level3.c **** TINVENTORY found[ STACK_LENGTH ];
247:level3.c ****
248:level3.c **** int8_t found_ptr;
249:level3.c ****
250:level3.c **** uint8_t dbg_counter;
251:level3.c ****
252:level3.c **** //--------------------------------------------------------------
253:level3.c **** //--------------------------------------------------------------
254:level3.c **** //--------------------------------------------------------------
255:level3.c ****
256:level3.c **** // ****************** 1TS inventory version 4 ******************
257:level3.c ****
258:level3.c **** TINVENTORY search;
259:level3.c ****
260:level3.c **** int8_t InventoryStep_version4( void )
261:level3.c **** {
612 .stabn 68,0,261,.LM88-InventoryStep_version4
613 .LM88:
614 /* prologue: frame size=0 */
615 027c CF93 push r28
616 027e DF93 push r29
617 /* prologue end (size=2) */
262:level3.c **** uint8_t i, j, k, l;
263:level3.c **** uint8_t result;
264:level3.c **** uint16_t crc;
265:level3.c **** expectedResponseLen = 96;
618 .stabn 68,0,265,.LM89-InventoryStep_version4
619 .LM89:
620 .LBB7:
621 0280 80E6 ldi r24,lo8(96)
622 0282 8093 0000 sts expectedResponseLen,r24
266:level3.c ****
267:level3.c **** j = search.mask_len;
623 .stabn 68,0,267,.LM90-InventoryStep_version4
624 .LM90:
625 0286 C091 0000 lds r28,search
268:level3.c ****
269:level3.c **** //set collision bit
270:level3.c **** if ( j > 0 )
626 .stabn 68,0,270,.LM91-InventoryStep_version4
627 .LM91:
628 028a CC23 tst r28
629 028c C1F1 breq .L42
271:level3.c **** {
272:level3.c **** l = 2 + ( j - 1 ) / 8;
630 .stabn 68,0,272,.LM92-InventoryStep_version4
631 .LM92:
632 028e AC2F mov r26,r28
633 0290 BB27 clr r27
634 0292 AD01 movw r20,r26
635 0294 4150 subi r20,lo8(-(-1))
636 0296 5040 sbci r21,hi8(-(-1))
637 0298 57FF sbrs r21,7
638 029a 03C0 rjmp .L43
639 029c AD01 movw r20,r26
640 029e 4A5F subi r20,lo8(-(6))
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s page 17
641 02a0 5F4F sbci r21,hi8(-(6))
642 .L43:
643 02a2 23E0 ldi r18,3
644 02a4 5595 1: asr r21
645 02a6 4795 ror r20
646 02a8 2A95 dec r18
647 02aa E1F7 brne 1b
648 02ac 4E5F subi r20,lo8(-(2))
273:level3.c **** for ( k = 0xFE , i = 0 ; i < ( ( j - 1 ) % 8 ) ; i++ )
649 .stabn 68,0,273,.LM93-InventoryStep_version4
650 .LM93:
651 02ae 8EEF ldi r24,lo8(-2)
652 02b0 50E0 ldi r21,lo8(0)
653 02b2 02C0 rjmp .L44
654 .L49:
274:level3.c **** k <<= 1; //!!!
655 .stabn 68,0,274,.LM94-InventoryStep_version4
656 .LM94:
657 02b4 880F lsl r24
658 .stabn 68,0,273,.LM95-InventoryStep_version4
659 .LM95:
660 02b6 5F5F subi r21,lo8(-(1))
661 .L44:
662 02b8 E52F mov r30,r21
663 02ba FF27 clr r31
664 02bc 9D01 movw r18,r26
665 02be 2150 subi r18,lo8(-(-1))
666 02c0 3040 sbci r19,hi8(-(-1))
667 02c2 B901 movw r22,r18
668 02c4 37FF sbrs r19,7
669 02c6 03C0 rjmp .L48
670 02c8 BD01 movw r22,r26
671 02ca 6A5F subi r22,lo8(-(6))
672 02cc 7F4F sbci r23,hi8(-(6))
673 .L48:
674 02ce 687F andi r22,lo8(-8)
675 02d0 261B sub r18,r22
676 02d2 370B sbc r19,r23
677 02d4 B901 movw r22,r18
678 02d6 E217 cp r30,r18
679 02d8 F307 cpc r31,r19
680 02da 64F3 brlt .L49
275:level3.c **** search.mask[ l ] = search.mask[ l ] & ( ~k );
681 .stabn 68,0,275,.LM96-InventoryStep_version4
682 .LM96:
683 02dc E42F mov r30,r20
684 02de FF27 clr r31
685 02e0 E050 subi r30,lo8(-(search))
686 02e2 F040 sbci r31,hi8(-(search))
687 02e4 8095 com r24
688 02e6 2281 ldd r18,Z+2
689 02e8 2823 and r18,r24
276:level3.c **** k = search.value << ( ( j - 1 ) % 8 );
690 .stabn 68,0,276,.LM97-InventoryStep_version4
691 .LM97:
692 02ea 8091 0000 lds r24,search+1
693 02ee 9927 clr r25
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s page 18
694 02f0 02C0 rjmp 2f
695 02f2 880F 1: lsl r24
696 02f4 991F rol r25
697 02f6 6A95 2: dec r22
698 02f8 E2F7 brpl 1b
277:level3.c **** search.mask[ l ] = search.mask[ l ] | k;
699 .stabn 68,0,277,.LM98-InventoryStep_version4
700 .LM98:
701 02fa 282B or r18,r24
702 02fc 2283 std Z+2,r18
703 .L42:
278:level3.c **** }
279:level3.c **** cmd_message[ 0 ] = message_flags;
704 .stabn 68,0,279,.LM99-InventoryStep_version4
705 .LM99:
706 02fe 8091 0000 lds r24,message_flags
707 0302 8093 0000 sts cmd_message,r24
280:level3.c **** cmd_message[ 1 ] = 0x01;
708 .stabn 68,0,280,.LM100-InventoryStep_version4
709 .LM100:
710 0306 81E0 ldi r24,lo8(1)
711 0308 8093 0000 sts cmd_message+1,r24
281:level3.c **** cmd_message[ 2 ] = j;
712 .stabn 68,0,281,.LM101-InventoryStep_version4
713 .LM101:
714 030c C093 0000 sts cmd_message+2,r28
282:level3.c ****
283:level3.c **** //copy uid as a mask
284:level3.c **** if ( j != 0 )
715 .stabn 68,0,284,.LM102-InventoryStep_version4
716 .LM102:
717 0310 CC23 tst r28
718 0312 D1F0 breq .L51
285:level3.c **** {
286:level3.c **** l = ( j - 1 ) / 8;
719 .stabn 68,0,286,.LM103-InventoryStep_version4
720 .LM103:
721 0314 DD27 clr r29
722 0316 AE01 movw r20,r28
723 0318 4150 subi r20,lo8(-(-1))
724 031a 5040 sbci r21,hi8(-(-1))
725 031c 57FF sbrs r21,7
726 031e 03C0 rjmp .L52
727 0320 AE01 movw r20,r28
728 0322 4A5F subi r20,lo8(-(6))
729 0324 5F4F sbci r21,hi8(-(6))
730 .L52:
731 0326 93E0 ldi r25,3
732 0328 5595 1: asr r21
733 032a 4795 ror r20
734 032c 9A95 dec r25
735 032e E1F7 brne 1b
287:level3.c **** Copy( &cmd_message[ 3 ] , &search.mask[ 2 ] , l + 1 );
736 .stabn 68,0,287,.LM104-InventoryStep_version4
737 .LM104:
738 0330 4F5F subi r20,lo8(-(1))
739 0332 60E0 ldi r22,lo8(search+4)
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s page 19
740 0334 70E0 ldi r23,hi8(search+4)
741 0336 80E0 ldi r24,lo8(cmd_message+3)
742 0338 90E0 ldi r25,hi8(cmd_message+3)
743 033a 00D0 rcall Copy
288:level3.c **** j = ( j + 7 ) / 8;
744 .stabn 68,0,288,.LM105-InventoryStep_version4
745 .LM105:
746 033c 2796 adiw r28,7
747 033e 83E0 ldi r24,3
748 0340 D595 1: asr r29
749 0342 C795 ror r28
750 0344 8A95 dec r24
751 0346 E1F7 brne 1b
752 .L51:
289:level3.c **** }
290:level3.c **** //compute CRC
291:level3.c **** j += 3;
753 .stabn 68,0,291,.LM106-InventoryStep_version4
754 .LM106:
755 0348 CD5F subi r28,lo8(-(3))
292:level3.c **** AddCRC( j );
756 .stabn 68,0,292,.LM107-InventoryStep_version4
757 .LM107:
758 034a 8C2F mov r24,r28
759 034c 81DF rcall AddCRC
293:level3.c **** j += 2;
760 .stabn 68,0,293,.LM108-InventoryStep_version4
761 .LM108:
762 034e CE5F subi r28,lo8(-(2))
294:level3.c ****
295:level3.c **** //form & send command & wait
296:level3.c **** Send( j , STD_WAIT );
763 .stabn 68,0,296,.LM109-InventoryStep_version4
764 .LM109:
765 0350 61E9 ldi r22,lo8(145)
766 0352 70E0 ldi r23,hi8(145)
767 0354 8C2F mov r24,r28
768 0356 3FDF rcall Send
297:level3.c ****
298:level3.c **** //listen for response
299:level3.c **** maxCaptureTimeLow = ( uint8_t )maxTGeneral;
769 .stabn 68,0,299,.LM110-InventoryStep_version4
770 .LM110:
771 0358 8091 0000 lds r24,maxTGeneral
772 035c 8093 0000 sts maxCaptureTimeLow,r24
300:level3.c **** maxCaptureTimeHi = maxTGeneral >> 8;
773 .stabn 68,0,300,.LM111-InventoryStep_version4
774 .LM111:
775 0360 8091 0000 lds r24,maxTGeneral
776 0364 9091 0000 lds r25,(maxTGeneral)+1
777 0368 892F mov r24,r25
778 036a 9927 clr r25
779 036c 8093 0000 sts maxCaptureTimeHi,r24
301:level3.c ****
302:level3.c **** Capture( 2 );
780 .stabn 68,0,302,.LM112-InventoryStep_version4
781 .LM112:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s page 20
782 0370 82E0 ldi r24,lo8(2)
783 0372 00D0 rcall Capture
303:level3.c **** clean_data_cnt = 0;
784 .stabn 68,0,303,.LM113-InventoryStep_version4
785 .LM113:
786 0374 1092 0000 sts clean_data_cnt,__zero_reg__
304:level3.c **** result = 0;
305:level3.c ****
306:level3.c **** if ( ( sof == 0 ) || ( capture_cnt < 8 ) )
787 .stabn 68,0,306,.LM114-InventoryStep_version4
788 .LM114:
789 0378 8091 0000 lds r24,sof
790 037c 8823 tst r24
791 037e 89F1 breq .L56
792 0380 27E0 ldi r18,lo8(7)
793 0382 2815 cp r18,r8
794 0384 70F5 brsh .L56
307:level3.c **** {
308:level3.c ****
309:level3.c **** return 0;
310:level3.c **** }
311:level3.c **** j = ExtractData( expectedResponseLen ); //find first data bit
795 .stabn 68,0,311,.LM115-InventoryStep_version4
796 .LM115:
797 0386 8091 0000 lds r24,expectedResponseLen
798 038a 00D0 rcall ExtractData
799 038c C82F mov r28,r24
312:level3.c ****
313:level3.c **** // Copy( found[ found_ptr ].mask , data_buffer , 12 ); //always copy data regardless the resul
314:level3.c ****
315:level3.c **** if ( j == 0 )
800 .stabn 68,0,315,.LM116-InventoryStep_version4
801 .LM116:
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -