⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 level2.lst

📁 此程序为利用mage8 AVR 和EM4094实现读取TYPE A类型卡的C程序、读卡稳定、这个项目我们做了好久、非常不错的程序、很适合做这方面产品的朋友们参考
💻 LST
📖 第 1 页 / 共 5 页
字号:
 315:level2.c      **** // Return value: 16 bit binary.   
 316:level2.c      **** // parameter   : *data -- the point of the start data to be checked;
 317:level2.c      **** //               len   -- the number of data to be checked;
 318:level2.c      **** // ********************************************************************************************
 319:level2.c      **** uint16_t ISOCRCA( uint8_t *data , uint8_t len ) 
 320:level2.c      **** {
 787               		.stabn 68,0,320,.LM119-ISOCRCA
 788               	.LM119:
 789               	/* prologue: frame size=0 */
 790               	/* prologue end (size=0) */
 791 027e DC01      		movw r26,r24
 321:level2.c      ****     uint16_t crc = 0x6363;        //CRC preset
 792               		.stabn 68,0,321,.LM120-ISOCRCA
 793               	.LM120:
 794               	.LBB8:
 795 0280 23E6      		ldi r18,lo8(25443)
 796 0282 33E6      		ldi r19,hi8(25443)
 322:level2.c      ****     uint8_t i, j;
 323:level2.c      ****     const uint16_t poly = 0x8408; //CRC polynom
 324:level2.c      **** 
 325:level2.c      ****     for ( i = 0 ; i < len ; i++ ) 
 797               		.stabn 68,0,325,.LM121-ISOCRCA
 798               	.LM121:
 799 0284 70E0      		ldi r23,lo8(0)
 800 0286 7617      		cp r23,r22
 801 0288 D0F4      		brsh .L93
 802 028a 48E0      		ldi r20,lo8(-31736)
 803 028c 54E8      		ldi r21,hi8(-31736)
 804               	.L91:
 326:level2.c      ****     {
 327:level2.c      ****         crc ^= data[ i ];
 805               		.stabn 68,0,327,.LM122-ISOCRCA
 806               	.LM122:
 807 028e FD01      		movw r30,r26
 808 0290 E70F      		add r30,r23
 809 0292 F11D      		adc r31,__zero_reg__
 810 0294 8081      		ld r24,Z
 811 0296 9927      		clr r25
 812 0298 2827      		eor r18,r24
 813 029a 3927      		eor r19,r25
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccSOaaaa.s 			page 21


 328:level2.c      ****         for ( j = 0 ; j < 8 ; j++ )
 814               		.stabn 68,0,328,.LM123-ISOCRCA
 815               	.LM123:
 816 029c 80E0      		ldi r24,lo8(0)
 817               	.L90:
 329:level2.c      ****         {
 330:level2.c      ****             if ( crc & 1 ) 
 818               		.stabn 68,0,330,.LM124-ISOCRCA
 819               	.LM124:
 820 029e 20FF      		sbrs r18,0
 821 02a0 0BC0      		rjmp .L88
 331:level2.c      ****             	  crc = ( crc >> 1 ) ^ poly;
 822               		.stabn 68,0,331,.LM125-ISOCRCA
 823               	.LM125:
 824 02a2 3695      		lsr r19
 825 02a4 2795      		ror r18
 826 02a6 2427      		eor r18,r20
 827 02a8 3527      		eor r19,r21
 828               		.stabn 68,0,328,.LM126-ISOCRCA
 829               	.LM126:
 830               	.L86:
 831 02aa 8F5F      		subi r24,lo8(-(1))
 832 02ac 8830      		cpi r24,lo8(8)
 833 02ae B8F3      		brlo .L90
 834               		.stabn 68,0,325,.LM127-ISOCRCA
 835               	.LM127:
 836 02b0 7F5F      		subi r23,lo8(-(1))
 837 02b2 7617      		cp r23,r22
 838 02b4 60F3      		brlo .L91
 839 02b6 03C0      		rjmp .L93
 840               	.L88:
 332:level2.c      ****             else 
 333:level2.c      ****             	  crc = ( crc >> 1 );
 841               		.stabn 68,0,333,.LM128-ISOCRCA
 842               	.LM128:
 843 02b8 3695      		lsr r19
 844 02ba 2795      		ror r18
 845 02bc F6CF      		rjmp .L86
 846               	.L93:
 334:level2.c      ****         }
 335:level2.c      ****     }
 336:level2.c      ****     return crc;
 337:level2.c      **** }
 847               		.stabn 68,0,337,.LM129-ISOCRCA
 848               	.LM129:
 849               	.LBE8:
 850 02be C901      		movw r24,r18
 851               	/* epilogue: frame size=0 */
 852 02c0 0895      		ret
 853               	/* epilogue end (size=1) */
 854               	/* function ISOCRCA size 34 (33) */
 855               		.size	ISOCRCA, .-ISOCRCA
 856               		.stabs	"crc:r(4,4)",64,0,321,18
 857               		.stabs	"i:r(4,2)",64,0,322,23
 858               		.stabs	"j:r(4,2)",64,0,322,24
 859               		.stabn	192,0,0,.LBB8-ISOCRCA
 860               		.stabn	224,0,0,.LBE8-ISOCRCA
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccSOaaaa.s 			page 22


 861               	.Lscope9:
 862               		.stabs	"",36,0,0,.Lscope9-ISOCRCA
 863               		.stabs	"SearchValidBit:F(4,2)",36,0,346,SearchValidBit
 864               		.stabs	"start:P(4,2)",64,0,345,20
 865               		.stabs	"end:P(4,2)",64,0,345,22
 866               	.global	SearchValidBit
 867               		.type	SearchValidBit, @function
 868               	SearchValidBit:
 338:level2.c      **** 
 339:level2.c      **** // ********************************************************************************************
 340:level2.c      **** // Description :Search the first valid data position in capture.decoded_data from start to end.
 341:level2.c      **** // Return      :
 342:level2.c      **** // Parameter   : 
 343:level2.c      **** // ********************************************************************************************
 344:level2.c      **** 
 345:level2.c      **** uint8_t SearchValidBit( uint8_t start , uint8_t end ) 
 346:level2.c      **** {
 869               		.stabn 68,0,346,.LM130-SearchValidBit
 870               	.LM130:
 871               	/* prologue: frame size=0 */
 872               	/* prologue end (size=0) */
 873 02c2 482F      		mov r20,r24
 347:level2.c      ****     uint8_t bitcnt = start % 8;
 874               		.stabn 68,0,347,.LM131-SearchValidBit
 875               	.LM131:
 876 02c4 582F      		mov r21,r24
 877               	.LBB9:
 878 02c6 5770      		andi r21,lo8(7)
 348:level2.c      ****     uint8_t byte = start / 8;
 879               		.stabn 68,0,348,.LM132-SearchValidBit
 880               	.LM132:
 881 02c8 782F      		mov r23,r24
 882 02ca 7695      		lsr r23
 883 02cc 7695      		lsr r23
 884 02ce 7695      		lsr r23
 349:level2.c      ****     uint8_t valid;
 350:level2.c      **** 
 351:level2.c      ****     while ( start < end ) 
 885               		.stabn 68,0,351,.LM133-SearchValidBit
 886               	.LM133:
 887 02d0 8617      		cp r24,r22
 888 02d2 C0F4      		brsh .L105
 889 02d4 A7E0      		ldi r26,lo8(7)
 890 02d6 B0E0      		ldi r27,hi8(7)
 891               	.L103:
 352:level2.c      ****     {
 353:level2.c      ****        valid = ( capture.decoded_data.capture_valid[ byte ] >> ( 7 - bitcnt ) ) & 1;
 892               		.stabn 68,0,353,.LM134-SearchValidBit
 893               	.LM134:
 894 02d8 E72F      		mov r30,r23
 895 02da FF27      		clr r31
 896 02dc E050      		subi r30,lo8(-(capture+128))
 897 02de F040      		sbci r31,hi8(-(capture+128))
 898 02e0 8081      		ld r24,Z
 899 02e2 9927      		clr r25
 900 02e4 9D01      		movw r18,r26
 901 02e6 251B      		sub r18,r21
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccSOaaaa.s 			page 23


 902 02e8 3109      		sbc r19,__zero_reg__
 903 02ea 02C0      		rjmp 2f
 904 02ec 9595      	1:	asr r25
 905 02ee 8795      		ror r24
 906 02f0 2A95      	2:	dec r18
 907 02f2 E2F7      		brpl 1b
 354:level2.c      ****        if ( valid == 0 ) //return 1st valid bit position
 908               		.stabn 68,0,354,.LM135-SearchValidBit
 909               	.LM135:
 910 02f4 80FF      		sbrs r24,0
 911 02f6 0CC0      		rjmp .L106
 355:level2.c      ****        	   return start; 
 356:level2.c      ****        if ( bitcnt == 7 ) 
 912               		.stabn 68,0,356,.LM136-SearchValidBit
 913               	.LM136:
 914 02f8 5730      		cpi r21,lo8(7)
 915 02fa 39F0      		breq .L107
 357:level2.c      ****        {
 358:level2.c      ****            bitcnt = 0;
 359:level2.c      ****            byte++;
 360:level2.c      ****        } 
 361:level2.c      ****        else
 362:level2.c      ****            bitcnt++;
 916               		.stabn 68,0,362,.LM137-SearchValidBit
 917               	.LM137:
 918 02fc 5F5F      		subi r21,lo8(-(1))
 919               	.L102:
 363:level2.c      ****        start++;
 920               		.stabn 68,0,363,.LM138-SearchValidBit
 921               	.LM138:
 922 02fe 4F5F      		subi r20,lo8(-(1))
 923 0300 4617      		cp r20,r22
 924 0302 50F3      		brlo .L103
 925               	.L105:
 364:level2.c      ****     }
 365:level2.c      ****     return 255;                               //no valid bit
 926               		.stabn 68,0,365,.LM139-SearchValidBit
 927               	.LM139:
 928 0304 8FEF      		ldi r24,lo8(255)
 929 0306 90E0      		ldi r25,hi8(255)
 366:level2.c      **** }
 930               		.stabn 68,0,366,.LM140-SearchValidBit
 931               	.LM140:
 932 0308 0895      		ret
 933               		.stabn 68,0,358,.LM141-SearchValidBit
 934               	.LM141:
 935               	.L107:
 936 030a 50E0      		ldi r21,lo8(0)
 937               		.stabn 68,0,359,.LM142-SearchValidBit
 938               	.LM142:
 939 030c 7F5F      		subi r23,lo8(-(1))
 940 030e F7CF      		rjmp .L102
 941               		.stabn 68,0,355,.LM143-SearchValidBit
 942               	.LM143:
 943               	.L106:
 944 0310 842F      		mov r24,r20
 945 0312 9927      		clr r25
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccSOaaaa.s 			page 24


 946               		.stabn 68,0,366,.LM144-SearchValidBit
 947               	.LM144:
 948 0314 0895      		ret
 949               	.LBE9:
 950               	/* epilogue: frame size=0 */
 951               	/* epilogue: noreturn */
 952               	/* epilogue end (size=0) */
 953               	/* function SearchValidBit size 43 (43) */
 954               		.size	SearchValidBit, .-SearchValidBit
 955               		.stabs	"bitcnt:r(4,2)",64,0,347,21
 956               		.stabs	"byte:r(4,2)",64,0,348,23
 957               		.stabn	192,0,0,.LBB9-SearchValidBit
 958               		.stabn	224,0,0,.LBE9-SearchValidBit
 959               	.Lscope10:
 960               		.stabs	"",36,0,0,.Lscope10-SearchValidBit
 961               		.stabs	"ExtractTypeAData:F(4,2)",36,0,375,ExtractTypeAData
 962               		.stabs	"size:P(4,2)",64,0,374,28
 963               	.global	ExtractTypeAData
 964               		.type	ExtractTypeAData, @function
 965               	ExtractTypeAData:
 367:level2.c      **** 
 368:level2.c      **** 
 369:level2.c      **** 
 370:level2.c      **** // ********************************************************************************************
 371:level2.c      **** // Extracts decoded data of type A from capture.decoded_data to data_buffer in bytes. 
 372:level2.c      **** // ********************************************************************************************
 373:level2.c      **** 
 374:level2.c      **** uint8_t ExtractTypeAData( uint8_t size ) 
 375:level2.c      **** {
 966               		.stabn 68,0,375,.LM145-ExtractTypeAData
 967               	.LM145:
 968               	/* prologue: frame size=0 */
 969 0316 FF92      		push r15
 970 0318 0F93      		push r16
 971 031a 1F93      		push r17
 972 031c CF93      		push r28
 973               	/* prologue end (size=4) */
 974 031e C82F      		mov r28,r24
 376:level2.c      ****     uint8_t value = 0;
 975               		.stabn 68,0,376,.LM146-ExtractTypeAData
 976               	.LM146:
 977               	.LBB10:
 978 0320 10E0      		ldi r17,lo8(0)
 377:level2.c      ****     uint8_t valid;
 378:level2.c      ****     uint8_t pom;  
 379:level2.c      ****     uint8_t phase;  
 380:level2.c      ****     uint8_t phase_position;  
 381:level2.c      ****     uint8_t start;
 382:level2.c      ****     uint8_t bitcnt;
 383:level2.c      ****     uint8_t ptr = 0;
 979               		.stabn 68,0,383,.LM147-ExtractTypeAData
 980               	.LM147:
 981 0322 012F      		mov r16,r17
 384:level2.c      ****     uint8_t parity = 0;
 982               		.stabn 68,0,384,.LM148-ExtractTypeAData
 983               	.LM148:
 984 0324 F12E      		mov r15,r17
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccSOaaaa.s 			page 25


 385:level2.c      **** 
 386:level2.c      ****     pom = SearchValidBit( 0 , 7 );             //find the first valid bit in 0th byte of capture_va
 985        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -