📄 mfrc500uc.lis
字号:
045A ; }
045A 0BC0 xjmp L76
045C L75:
045C .dbline 195
045C ; else // collision occured
045C ; {
045C .dbline 196
045C ; bcnt = bcnt + MInfo.collPos - nbits;
045C 20900B01 lds R2,_MInfo+9
0460 388C ldd R3,y+24
0462 320C add R3,R2
0464 0984 ldd R0,y+9
0466 3018 sub R3,R0
0468 388E std y+24,R3
046A .dbline 197
046A ; status = MI_OK;
046A 0024 clr R0
046C 1124 clr R1
046E 1B86 std y+11,R1
0470 0A86 std y+10,R0
0472 .dbline 198
0472 ; }
0472 L76:
0472 .dbline 199
0472 ; }
0472 L65:
0472 .dbline 200
0472 ; }
0472 L61:
0472 .dbline 201
0472 L29:
0472 .dbline 121
0472 AA20 tst R10
0474 39F4 brne L84
0476 0A84 ldd R0,y+10
0478 1B84 ldd R1,y+11
047A 0020 tst R0
047C 19F4 brne X3
047E 1120 tst R1
0480 09F4 brne X8
0482 ACCE xjmp L28
0484 X8:
0484 X3:
0484 L84:
0484 .dbline 202
0484 ; }
0484 ; }
0484 L26:
0484 .dbline 203
0484 ; if (status == MI_OK)
0484 0A84 ldd R0,y+10
0486 1B84 ldd R1,y+11
0488 0020 tst R0
048A 69F4 brne L85
048C 1120 tst R1
048E 59F4 brne L85
0490 X4:
0490 .dbline 204
0490 ; {
0490 .dbline 205
0490 ; memcpy(snr,snr_in,4);
0490 84E0 ldi R24,4
0492 90E0 ldi R25,0
0494 9983 std y+1,R25
0496 8883 std y+0,R24
0498 9E01 movw R18,R28
049A 2C5F subi R18,252 ; offset = 4
049C 3F4F sbci R19,255
049E 0A8D ldd R16,y+26
04A0 1B8D ldd R17,y+27
04A2 0E940000 xcall _memcpy
04A6 .dbline 206
04A6 ; }
04A6 L85:
04A6 .dbline 208
04A6 ; else
04A6 ; {
04A6 .dbline 210
04A6 ; // memcpy(snr,"0000",4);
04A6 ; ;
04A6 .dbline 211
04A6 ; }
04A6 L86:
04A6 .dbline 212
04A6 ; ClearBitMask(RegDecoderControl,0x20); // ZeroAfterColl disable
04A6 20E2 ldi R18,32
04A8 0AE1 ldi R16,26
04AA E1D4 xcall _ClearBitMask
04AC .dbline 213
04AC ; return status;
04AC 0A85 ldd R16,y+10
04AE 1B85 ldd R17,y+11
04B0 .dbline -2
04B0 L25:
04B0 2C96 adiw R28,12
04B2 0E940000 xcall pop_gset5
04B6 2496 adiw R28,4
04B8 .dbline 0 ; func end
04B8 0895 ret
04BA .dbsym r snr_check 14 c
04BA .dbsym r snr_crc 20 c
04BA .dbsym r complete 10 c
04BA .dbsym r byteOffset 22 c
04BA .dbsym l status 10 I
04BA .dbsym l nbits 9 c
04BA .dbsym r dummyShift2 14 c
04BA .dbsym r dummyShift1 20 c
04BA .dbsym l snr_in 4 A[4:4]c
04BA .dbsym l nbytes 8 c
04BA .dbsym r i 12 c
04BA .dbsym l snr 26 pc
04BA .dbsym l bcnt 24 c
04BA .dbsym l select_code 22 c
04BA .dbend
04BA .dbfunc e Mf500PiccSelect _Mf500PiccSelect fc
04BA ; sak -> R22,R23
04BA ; snr -> R20,R21
.even
04BA _Mf500PiccSelect::
04BA 0E940000 xcall push_gset2
04BE B901 movw R22,R18
04C0 A801 movw R20,R16
04C2 2297 sbiw R28,2
04C4 .dbline -1
04C4 .dbline 216
04C4 ; }
04C4 ; char Mf500PiccSelect(unsigned char *snr,unsigned char *sak)
04C4 ; {
04C4 .dbline 217
04C4 ; return Mf500PiccCascSelect(0x93,snr,sak); // first cascade level
04C4 7983 std y+1,R23
04C6 6883 std y+0,R22
04C8 9A01 movw R18,R20
04CA 03E9 ldi R16,147
04CC 04D0 xcall _Mf500PiccCascSelect
04CE .dbline -2
04CE L87:
04CE 2296 adiw R28,2
04D0 0E940000 xcall pop_gset2
04D4 .dbline 0 ; func end
04D4 0895 ret
04D6 .dbsym r sak 22 pc
04D6 .dbsym r snr 20 pc
04D6 .dbend
04D6 .dbfunc e Mf500PiccCascSelect _Mf500PiccCascSelect fc
04D6 ; status -> R20,R21
04D6 ; sak -> y+10
04D6 ; snr -> R22,R23
04D6 ; select_code -> R10
.even
04D6 _Mf500PiccCascSelect::
04D6 0E940000 xcall push_gset3
04DA B901 movw R22,R18
04DC A02E mov R10,R16
04DE 2497 sbiw R28,4
04E0 .dbline -1
04E0 .dbline 221
04E0 ; }
04E0 ;
04E0 ; char Mf500PiccCascSelect(unsigned char select_code,unsigned char *snr,unsigned char *sak)
04E0 ; {
04E0 .dbline 222
04E0 ; int status = MI_OK;
04E0 4427 clr R20
04E2 5527 clr R21
04E4 .dbline 223
04E4 ; if ((status = Mf500PcdSetDefaultAttrib()) == MI_OK)
04E4 96D0 xcall _Mf500PcdSetDefaultAttrib
04E6 202E mov R2,R16
04E8 3324 clr R3
04EA A101 movw R20,R2
04EC 0023 tst R16
04EE 09F0 breq X10
04F0 8BC0 xjmp L89
04F2 X10:
04F2 .dbline 224
04F2 ; {
04F2 .dbline 225
04F2 ; PcdSetTmo(106);
04F2 0AE6 ldi R16,106
04F4 10E0 ldi R17,0
04F6 73D4 xcall _PcdSetTmo
04F8 .dbline 226
04F8 ; WriteRC(RegChannelRedundancy,0x0F); // RxCRC,TxCRC, Parity enable
04F8 2FE0 ldi R18,15
04FA 02E2 ldi R16,34
04FC 6CD7 xcall _WriteRC
04FE .dbline 227
04FE ; ClearBitMask(RegControl,0x08); // disable crypto 1 unit
04FE 28E0 ldi R18,8
0500 09E0 ldi R16,9
0502 B5D4 xcall _ClearBitMask
0504 .dbline 229
0504 ; //************* Cmd Sequence **********************************
0504 ; ResetInfo(MInfo);
0504 2224 clr R2
0506 20920201 sts _MInfo,R2
050A .dbline 229
050A 3324 clr R3
050C 30920401 sts _MInfo+1+1,R3
0510 20920301 sts _MInfo+1,R2
0514 .dbline 229
0514 20920501 sts _MInfo+3,R2
0518 .dbline 229
0518 20920601 sts _MInfo+4,R2
051C .dbline 229
051C 20920701 sts _MInfo+5,R2
0520 .dbline 229
0520 30920901 sts _MInfo+6+1,R3
0524 20920801 sts _MInfo+6,R2
0528 .dbline 229
0528 20920A01 sts _MInfo+8,R2
052C .dbline 229
052C 20920B01 sts _MInfo+9,R2
0530 .dbline 229
0530 .dbline 230
0530 ; MSndBuffer[0] = select_code;
0530 E0910E01 lds R30,_MSndBuffer
0534 F0910F01 lds R31,_MSndBuffer+1
0538 A082 std z+0,R10
053A .dbline 231
053A ; MSndBuffer[1] = 0x70; // number of bytes send
053A 80E7 ldi R24,112
053C E0910E01 lds R30,_MSndBuffer
0540 F0910F01 lds R31,_MSndBuffer+1
0544 8183 std z+1,R24
0546 .dbline 232
0546 ; memcpy(MSndBuffer + 2,snr,4);
0546 84E0 ldi R24,4
0548 90E0 ldi R25,0
054A 9983 std y+1,R25
054C 8883 std y+0,R24
054E 9B01 movw R18,R22
0550 00910E01 lds R16,_MSndBuffer
0554 10910F01 lds R17,_MSndBuffer+1
0558 0E5F subi R16,254 ; offset = 2
055A 1F4F sbci R17,255
055C 0E940000 xcall _memcpy
0560 .dbline 233
0560 ; MSndBuffer[6] = MSndBuffer[2]
0560 E0910E01 lds R30,_MSndBuffer
0564 F0910F01 lds R31,_MSndBuffer+1
0568 2380 ldd R2,z+3
056A E0910E01 lds R30,_MSndBuffer
056E F0910F01 lds R31,_MSndBuffer+1
0572 3280 ldd R3,z+2
0574 3224 eor R3,R2
0576 E0910E01 lds R30,_MSndBuffer
057A F0910F01 lds R31,_MSndBuffer+1
057E 2480 ldd R2,z+4
0580 3224 eor R3,R2
0582 E0910E01 lds R30,_MSndBuffer
0586 F0910F01 lds R31,_MSndBuffer+1
058A 2580 ldd R2,z+5
058C 3224 eor R3,R2
058E E0910E01 lds R30,_MSndBuffer
0592 F0910F01 lds R31,_MSndBuffer+1
0596 3682 std z+6,R3
0598 .dbline 237
0598 ; ^ MSndBuffer[3]
0598 ; ^ MSndBuffer[4]
0598 ; ^ MSndBuffer[5];
0598 ; MInfo.nBytesToSend = 7;
0598 87E0 ldi R24,7
059A 80930601 sts _MInfo+4,R24
059E .dbline 238
059E ; status = PcdSingleResponseCmd(0x1e,
059E 80E0 ldi R24,<_MInfo
05A0 90E0 ldi R25,>_MInfo
05A2 9B83 std y+3,R25
05A4 8A83 std y+2,R24
05A6 20900C01 lds R2,_MRcvBuffer
05AA 30900D01 lds R3,_MRcvBuffer+1
05AE 3982 std y+1,R3
05B0 2882 std y+0,R2
05B2 20910E01 lds R18,_MSndBuffer
05B6 30910F01 lds R19,_MSndBuffer+1
05BA 0EE1 ldi R16,30
05BC 85D5 xcall _PcdSingleResponseCmd
05BE 402F mov R20,R16
05C0 5527 clr R21
05C2 .dbline 242
05C2 ; MSndBuffer,
05C2 ; MRcvBuffer,
05C2 ; &MInfo);
05C2 ; *sak = 0;
05C2 2224 clr R2
05C4 EA85 ldd R30,y+10
05C6 FB85 ldd R31,y+11
05C8 2082 std z+0,R2
05CA .dbline 243
05CA ; if (status == MI_OK) // no timeout occured
05CA 4030 cpi R20,0
05CC 4507 cpc R20,R21
05CE E1F4 brne L99
05D0 X9:
05D0 .dbline 244
05D0 ; {
05D0 .dbline 245
05D0 ; if (MInfo.nBitsReceived != 8) // last byte is not complete
05D0 80910801 lds R24,_MInfo+6
05D4 90910901 lds R25,_MInfo+6+1
05D8 8830 cpi R24,8
05DA E0E0 ldi R30,0
05DC 9E07 cpc R25,R30
05DE 19F0 breq L101
05E0 .dbline 246
05E0 ; {
05E0 .dbline 247
05E0 ; status = MI_BITCOUNTERR;
05E0 45EF ldi R20,-11
05E2 5FEF ldi R21,-1
05E4 .dbline 248
05E4 ; }
05E4 11C0 xjmp L102
05E6 L101:
05E6 .dbline 250
05E6 ; else
05E6 ; {
05E6 .dbline 251
05E6 ; *sak = MRcvBuffer[0];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -