📄 level2.lst
字号:
632 .stabn 68,0,230,.LM82-WriteSPI
633 .LM82:
634 026c D595 asr r29
635 026e C795 ror r28
231:level2.c **** if(bitcnt == 16)
636 .stabn 68,0,231,.LM83-WriteSPI
637 .LM83:
638 0270 1031 cpi r17,lo8(16)
639 0272 09F4 brne .L62
232:level2.c **** data = hi;
640 .stabn 68,0,232,.LM84-WriteSPI
641 .LM84:
642 0274 E701 movw r28,r14
643 .L62:
233:level2.c ****
234:level2.c **** sbi(PORTC, DCLK_PIN);
644 .stabn 68,0,234,.LM85-WriteSPI
645 .LM85:
646 0276 A89A sbi 53-0x20,0
235:level2.c **** WaitSPI();
647 .stabn 68,0,235,.LM86-WriteSPI
648 .LM86:
649 0278 DADF rcall WaitSPI
650 027a 812F mov r24,r17
651 027c 1150 subi r17,lo8(-(-1))
652 027e 8823 tst r24
653 0280 69F7 brne .L63
236:level2.c **** }
237:level2.c ****
238:level2.c **** cbi(PORTC, DCLK_PIN); //for the first time, DCLK is '1', for the next, enable DIN
654 .stabn 68,0,238,.LM87-WriteSPI
655 .LM87:
656 0282 A898 cbi 53-0x20,0
239:level2.c **** WaitSPI();
657 .stabn 68,0,239,.LM88-WriteSPI
658 .LM88:
659 0284 D4DF rcall WaitSPI
240:level2.c **** cbi(PORTC, MOD_PIN);
660 .stabn 68,0,240,.LM89-WriteSPI
661 .LM89:
662 0286 A998 cbi 53-0x20,1
241:level2.c **** }
663 .stabn 68,0,241,.LM90-WriteSPI
664 .LM90:
665 .LBE6:
666 /* epilogue: frame size=0 */
667 0288 DF91 pop r29
668 028a CF91 pop r28
669 028c 1F91 pop r17
670 028e FF90 pop r15
671 0290 EF90 pop r14
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 17
672 0292 0895 ret
673 /* epilogue end (size=6) */
674 /* function WriteSPI size 42 (31) */
675 .size WriteSPI, .-WriteSPI
676 .stabs "data:r(4,3)",64,0,211,28
677 .stabs "bitcnt:r(4,2)",64,0,212,17
678 .stabn 192,0,0,.LBB6-WriteSPI
679 .stabn 224,0,0,.LBE6-WriteSPI
680 .Lscope5:
681 .stabs "",36,0,0,.Lscope5-WriteSPI
682 .stabs "CRC:F(4,4)",36,0,246,CRC
683 .stabs "data:P(1,1)=*(4,2)",64,0,245,30
684 .stabs "len:P(4,2)",64,0,245,22
685 .global CRC
686 .type CRC, @function
687 CRC:
242:level2.c ****
243:level2.c **** // ==================================================================
244:level2.c ****
245:level2.c **** uint16_t CRC( uint8_t * data , uint8_t len )
246:level2.c **** {
688 .stabn 68,0,246,.LM91-CRC
689 .LM91:
690 /* prologue: frame size=0 */
691 /* prologue end (size=0) */
692 0294 FC01 movw r30,r24
247:level2.c **** uint16_t crc = 0xFFFF; //CRC preset
693 .stabn 68,0,247,.LM92-CRC
694 .LM92:
695 .LBB7:
696 0296 2FEF ldi r18,lo8(-1)
697 0298 3FEF ldi r19,hi8(-1)
248:level2.c **** uint8_t i , j , feedback;
249:level2.c **** #define crc_poly 0x8408 //CRC polynom
250:level2.c ****
251:level2.c **** for ( i = 0 ; i < len ; i++ )
698 .stabn 68,0,251,.LM93-CRC
699 .LM93:
700 029a 50E0 ldi r21,lo8(0)
701 029c 5617 cp r21,r22
702 029e A8F4 brsh .L79
703 .L77:
252:level2.c **** {
253:level2.c **** crc ^= *data++;
704 .stabn 68,0,253,.LM94-CRC
705 .LM94:
706 02a0 8191 ld r24,Z+
707 02a2 9927 clr r25
708 02a4 2827 eor r18,r24
709 02a6 3927 eor r19,r25
254:level2.c **** for ( j = 0 ; j < 8 ; j++ )
710 .stabn 68,0,254,.LM95-CRC
711 .LM95:
712 02a8 40E0 ldi r20,lo8(0)
713 .L76:
255:level2.c **** {
256:level2.c **** feedback = crc & 1;
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 18
714 .stabn 68,0,256,.LM96-CRC
715 .LM96:
716 02aa 822F mov r24,r18
717 02ac 8170 andi r24,lo8(1)
257:level2.c **** crc >>= 1;
718 .stabn 68,0,257,.LM97-CRC
719 .LM97:
720 02ae 3695 lsr r19
721 02b0 2795 ror r18
258:level2.c **** if ( feedback )
722 .stabn 68,0,258,.LM98-CRC
723 .LM98:
724 02b2 8823 tst r24
725 02b4 21F0 breq .L73
259:level2.c **** crc ^= crc_poly;
726 .stabn 68,0,259,.LM99-CRC
727 .LM99:
728 02b6 88E0 ldi r24,lo8(-31736)
729 02b8 94E8 ldi r25,hi8(-31736)
730 02ba 2827 eor r18,r24
731 02bc 3927 eor r19,r25
732 .stabn 68,0,254,.LM100-CRC
733 .LM100:
734 .L73:
735 02be 4F5F subi r20,lo8(-(1))
736 02c0 4830 cpi r20,lo8(8)
737 02c2 98F3 brlo .L76
738 .stabn 68,0,251,.LM101-CRC
739 .LM101:
740 02c4 5F5F subi r21,lo8(-(1))
741 02c6 5617 cp r21,r22
742 02c8 58F3 brlo .L77
743 .L79:
260:level2.c **** }
261:level2.c **** }
262:level2.c **** return ~crc;
744 .stabn 68,0,262,.LM102-CRC
745 .LM102:
746 02ca 2095 com r18
747 02cc 3095 com r19
263:level2.c **** }
748 .stabn 68,0,263,.LM103-CRC
749 .LM103:
750 .LBE7:
751 02ce C901 movw r24,r18
752 /* epilogue: frame size=0 */
753 02d0 0895 ret
754 /* epilogue end (size=1) */
755 /* function CRC size 31 (30) */
756 .size CRC, .-CRC
757 .stabs "crc:r(4,4)",64,0,247,18
758 .stabs "i:r(4,2)",64,0,248,21
759 .stabs "j:r(4,2)",64,0,248,20
760 .stabs "feedback:r(4,2)",64,0,248,24
761 .stabn 192,0,0,.LBB7-CRC
762 .stabn 224,0,0,.LBE7-CRC
763 .Lscope6:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 19
764 .stabs "",36,0,0,.Lscope6-CRC
765 .stabs "SearchValidBit:F(4,2)",36,0,274,SearchValidBit
766 .stabs "start:P(4,2)",64,0,273,20
767 .stabs "end:P(4,2)",64,0,273,22
768 .global SearchValidBit
769 .type SearchValidBit, @function
770 SearchValidBit:
264:level2.c ****
265:level2.c ****
266:level2.c **** // ==================================================================
267:level2.c **** // Search 1st valid bit ('1' from SOF)
268:level2.c **** // maximum size bits to be searched from start position to end position
269:level2.c **** //
270:level2.c **** // ASK data usually starts at bit position 0 or 1 of captured_data
271:level2.c **** // FSK data usually starts at 4th bit position
272:level2.c ****
273:level2.c **** uint8_t SearchValidBit( uint8_t start , uint8_t end )
274:level2.c **** {
771 .stabn 68,0,274,.LM104-SearchValidBit
772 .LM104:
773 /* prologue: frame size=0 */
774 /* prologue end (size=0) */
775 02d2 482F mov r20,r24
275:level2.c **** uint8_t bitcnt = start % 8;
776 .stabn 68,0,275,.LM105-SearchValidBit
777 .LM105:
778 02d4 582F mov r21,r24
779 .LBB8:
780 02d6 5770 andi r21,lo8(7)
276:level2.c **** uint8_t byte = start / 8;
781 .stabn 68,0,276,.LM106-SearchValidBit
782 .LM106:
783 02d8 8695 lsr r24
784 02da 8695 lsr r24
785 02dc 8695 lsr r24
277:level2.c **** uint8_t valid;
278:level2.c **** uint8_t *ptr = capture.capture_valid + start / 8;
786 .stabn 68,0,278,.LM107-SearchValidBit
787 .LM107:
788 02de E82F mov r30,r24
789 02e0 FF27 clr r31
790 02e2 DF01 movw r26,r30
791 02e4 A050 subi r26,lo8(-(capture+128))
792 02e6 B040 sbci r27,hi8(-(capture+128))
279:level2.c ****
280:level2.c **** if ( ( decode_number & 1 ) == 0 ) //ASK specific
793 .stabn 68,0,280,.LM108-SearchValidBit
794 .LM108:
795 02e8 8091 0000 lds r24,decode_number
796 02ec 80FD sbrc r24,0
797 02ee 19C0 rjmp .L83
281:level2.c **** {
282:level2.c **** while ( start < end )
798 .stabn 68,0,282,.LM109-SearchValidBit
799 .LM109:
800 02f0 4617 cp r20,r22
801 02f2 98F5 brsh .L90
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 20
802 .L89:
283:level2.c **** {
284:level2.c **** valid = ( ( *ptr ) >> ( 7 - bitcnt ) ) & 1;
803 .stabn 68,0,284,.LM110-SearchValidBit
804 .LM110:
805 02f4 8C91 ld r24,X
806 02f6 282F mov r18,r24
807 02f8 3327 clr r19
808 02fa 87E0 ldi r24,lo8(7)
809 02fc 90E0 ldi r25,hi8(7)
810 02fe 851B sub r24,r21
811 0300 9109 sbc r25,__zero_reg__
812 0302 02C0 rjmp 2f
813 0304 3595 1: asr r19
814 0306 2795 ror r18
815 0308 8A95 2: dec r24
816 030a E2F7 brpl 1b
285:level2.c ****
286:level2.c **** if ( valid == 0 )
817 .stabn 68,0,286,.LM111-SearchValidBit
818 .LM111:
819 030c 20FF sbrs r18,0
820 030e 22C0 rjmp .L97
287:level2.c **** return start; //return 1st valid bit position
288:level2.c ****
289:level2.c **** if ( ++bitcnt > 7 )
821 .stabn 68,0,289,.LM112-SearchValidBit
822 .LM112:
823 0310 5F5F subi r21,lo8(-(1))
824 0312 5830 cpi r21,lo8(8)
825 0314 10F0 brlo .L88
290:level2.c **** {
291:level2.c **** bitcnt = 0;
826 .stabn 68,0,291,.LM113-SearchValidBit
827 .LM113:
828 0316 50E0 ldi r21,lo8(0)
292:level2.c **** ptr++;
829 .stabn 68,0,292,.LM114-SearchValidBit
830 .LM114:
831 0318 1196 adiw r26,1
832 .L88:
293:level2.c **** }
294:level2.c **** start++;
833 .stabn 68,0,294,.LM115-SearchValidBit
834 .LM115:
835 031a 4F5F subi r20,lo8(-(1))
836 031c 4617 cp r20,r22
837 031e 50F3 brlo .L89
838 0320 1CC0 rjmp .L90
839 .L83:
295:level2.c **** }
296:level2.c **** }
297:level2.c **** else
298:level2.c **** { //FSK specific
299:level2.c **** valid = capture.capture_data[ byte ];
840 .stabn 68,0,299,.LM116-SearchValidBit
841 .LM116:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s page 21
842 0322 E050 subi r30,lo8(-(capture))
843 0324 F040 sbci r31,hi8(-(capture))
844 0326 9081 ld r25,Z
300:level2.c ****
301:level2.c **** byte = valid & 0xF0;
845 .stabn 68,0,301,.LM117-SearchValidBit
846 .LM117:
847 0328 892F mov r24,r25
848 032a 807F andi r24,lo8(-16)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -