📄 mfrc500uc.lis
字号:
.module mfrc500uc.c
.area data(ram, con, rel)
0000 _MpIsrInfo::
0000 .blkb 2
.area idata
0000 0000 .word 0
.area data(ram, con, rel)
0002 .dbfile F:\yyjapp\yymk\software\mfrc500uc.c
0002 .dbstruct 0 10 .1
0002 .dbfield 0 cmd c
0002 .dbfield 1 status I
0002 .dbfield 3 nBytesSent c
0002 .dbfield 4 nBytesToSend c
0002 .dbfield 5 nBytesReceived c
0002 .dbfield 6 nBitsReceived s
0002 .dbfield 8 irqSource c
0002 .dbfield 9 collPos c
0002 .dbend
0002 .dbsym e MpIsrInfo _MpIsrInfo pS[.1]
0002 _MpIsrOut::
0002 .blkb 2
.area idata
0002 0000 .word 0
.area data(ram, con, rel)
0004 .dbfile F:\yyjapp\yymk\software\mfrc500uc.c
0004 .dbsym e MpIsrOut _MpIsrOut pc
0004 _MpIsrIn::
0004 .blkb 2
.area idata
0004 0000 .word 0
.area data(ram, con, rel)
0006 .dbfile F:\yyjapp\yymk\software\mfrc500uc.c
0006 .dbsym e MpIsrIn _MpIsrIn pc
0006 _MFIFOLength::
0006 .blkb 1
.area idata
0006 40 .byte 64
.area data(ram, con, rel)
0007 .dbfile F:\yyjapp\yymk\software\mfrc500uc.c
0007 .dbsym e MFIFOLength _MFIFOLength c
0007 _mc500_time::
0007 .blkb 1
.area idata
0007 00 .byte 0
.area data(ram, con, rel)
0008 .dbfile F:\yyjapp\yymk\software\mfrc500uc.c
0008 .dbsym e mc500_time _mc500_time c
.area text(rom, con, rel)
0000 .dbfile F:\yyjapp\yymk\software\mfrc500uc.c
0000 .dbfunc e Mf500PcdConfig _Mf500PcdConfig fc
0000 ; CmdWaitCnt -> R20,R21
0000 ; RstLoopCnt -> R20,R21
0000 ; status -> R22,R23
0000 ; i -> R20
.even
0000 _Mf500PcdConfig::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 30
0004 ; #include <string.h>
0004 ; #include <stdio.h>
0004 ; #include <f:\yyjapp\yymk\software\MfRc500.h>
0004 ; #include <f:\yyjapp\yymk\software\main.h>
0004 ; #include <iom128v.h>
0004 ; unsigned char MLastSelectedSnr[5];
0004 ; #define TCLFSDSNDMAX 8 ///< max. frame size send
0004 ; #define TCLFSDRECMAX 8 ///< max. frame size rcv
0004 ; #define TCLDSMAX 3 ///< max. baudrate divider PICC --> PCD
0004 ; #define TCLDRMAX 3 ///< max. baudrate divider PCD --> PICC
0004 ; #define TCLDSDFLT 0 ///< default baudrate divider PICC --> PCD
0004 ; #define TCLDRDFLT 0 ///< default baudrate divider PCD --> PICC
0004 ; unsigned char *MSndBuffer;
0004 ; unsigned char *MRcvBuffer;
0004 ; MfCmdInfo MInfo;
0004 ;
0004 ; MfCmdInfo *MpIsrInfo = 0;
0004 ; unsigned char *MpIsrOut = 0;
0004 ; unsigned char *MpIsrIn = 0;
0004 ; unsigned char CountDown;
0004 ; unsigned char T2IR;
0004 ;
0004 ; unsigned char RicRxTxBuffer[256];
0004 ; unsigned char MFIFOLength = DEF_FIFO_LENGTH;
0004 ; char Mf500PiccAuthState(unsigned char auth_mode,// PICC_AUTHENT1A, PICC_AUTHENT1B
0004 ; unsigned char *snr, // 4 byte serial number
0004 ; unsigned char sector); // 0 <= sector <= 15
0004 ; unsigned char mc500_time=0;
0004 ; char Mf500PcdConfig(void)
0004 ; {
0004 .dbline 32
0004 ; unsigned char i;
0004 ; int status = MI_RESETERR;
0004 67EE ldi R22,-25
0006 7FEF ldi R23,-1
0008 .dbline 33
0008 ; unsigned short RstLoopCnt = 0;
0008 4427 clr R20
000A 5527 clr R21
000C .dbline 34
000C ; unsigned short CmdWaitCnt = 0;
000C .dbline 35
000C ; MSndBuffer = RicRxTxBuffer; // initialise send buffer
000C 80E0 ldi R24,<_RicRxTxBuffer
000E 90E0 ldi R25,>_RicRxTxBuffer
0010 90930F01 sts _MSndBuffer+1,R25
0014 80930E01 sts _MSndBuffer,R24
0018 .dbline 36
0018 ; MRcvBuffer = RicRxTxBuffer; // initialise receive buffer
0018 90930D01 sts _MRcvBuffer+1,R25
001C 80930C01 sts _MRcvBuffer,R24
0020 .dbline 37
0020 ; status = PcdReset();
0020 A4D5 xcall _PcdReset
0022 602F mov R22,R16
0024 7727 clr R23
0026 .dbline 38
0026 ; if (status == MI_OK)
0026 6030 cpi R22,0
0028 6707 cpc R22,R23
002A 39F5 brne L3
002C X0:
002C .dbline 39
002C ; {
002C .dbline 40
002C ; WriteRC(RegClockQControl,0x0);
002C 2227 clr R18
002E 0FE1 ldi R16,31
0030 0E94EB09 xcall _WriteRC
0034 .dbline 41
0034 4427 clr R20
0036 01C0 xjmp L8
0038 L5:
0038 .dbline 41
0038 L6:
0038 .dbline 41
0038 4395 inc R20
003A L8:
003A .dbline 41
003A ; for(i=0;i<105;i++);
003A 4936 cpi R20,105
003C E8F3 brlo L5
003E .dbline 42
003E ; ClearBitMask(RegClockQControl,0x40); // clear bit ClkQCalib for
003E 20E4 ldi R18,64
0040 0FE1 ldi R16,31
0042 15D7 xcall _ClearBitMask
0044 .dbline 43
0044 ; WriteRC(RegBitPhase,0xAD);
0044 2DEA ldi R18,173
0046 0BE1 ldi R16,27
0048 0E94EB09 xcall _WriteRC
004C .dbline 44
004C ; WriteRC(RegRxThreshold,0xFF);
004C 2FEF ldi R18,255
004E 0CE1 ldi R16,28
0050 0E94EB09 xcall _WriteRC
0054 .dbline 45
0054 ; WriteRC(RegRxControl2,00);
0054 2227 clr R18
0056 0EE1 ldi R16,30
0058 0E94EB09 xcall _WriteRC
005C .dbline 46
005C ; WriteRC(RegFIFOLevel,0x1A); // initialize to 26d
005C 2AE1 ldi R18,26
005E 09E2 ldi R16,41
0060 0E94EB09 xcall _WriteRC
0064 .dbline 47
0064 ; WriteRC(RegTimerControl,0x02); // TStopRxEnd=0,TStopRxBeg=0,
0064 22E0 ldi R18,2
0066 0BE2 ldi R16,43
0068 0E94EB09 xcall _WriteRC
006C .dbline 48
006C ; WriteRC(RegIRqPinConfig,0x3); // interrupt active low enable
006C 23E0 ldi R18,3
006E 0DE2 ldi R16,45
0070 0E94EB09 xcall _WriteRC
0074 .dbline 49
0074 ; PcdRfReset(1); // Rf - reset and enable output driver
0074 01E0 ldi R16,1
0076 10E0 ldi R17,0
0078 9BD6 xcall _PcdRfReset
007A .dbline 50
007A ; }
007A L3:
007A .dbline 51
007A ; return status;
007A 062F mov R16,R22
007C .dbline -2
007C L2:
007C 0E940000 xcall pop_gset2
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r CmdWaitCnt 20 s
0082 .dbsym r RstLoopCnt 20 s
0082 .dbsym r status 22 I
0082 .dbsym r i 20 c
0082 .dbend
0082 .dbfunc e Mf500PiccRequest _Mf500PiccRequest fc
0082 ; atq -> R22,R23
0082 ; req_code -> R20
.even
0082 _Mf500PiccRequest::
0082 0E940000 xcall push_gset2
0086 B901 movw R22,R18
0088 402F mov R20,R16
008A .dbline -1
008A .dbline 57
008A ; }
008A ;
008A ; char Mf500PiccRequest(unsigned char req_code, // request code ALL = 0x52
008A ; // or IDLE = 0x26
008A ; unsigned char *atq) // answer to request
008A ; {
008A .dbline 58
008A ; return Mf500PiccCommonRequest(req_code,atq);
008A 9B01 movw R18,R22
008C 042F mov R16,R20
008E 03D0 xcall _Mf500PiccCommonRequest
0090 .dbline -2
0090 L9:
0090 0E940000 xcall pop_gset2
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbsym r atq 22 pc
0096 .dbsym r req_code 20 c
0096 .dbend
0096 .dbfunc e Mf500PiccCommonRequest _Mf500PiccCommonRequest fc
0096 ; status -> R20,R21
0096 ; atq -> R22,R23
0096 ; req_code -> R10
.even
0096 _Mf500PiccCommonRequest::
0096 0E940000 xcall push_gset3
009A B901 movw R22,R18
009C A02E mov R10,R16
009E 2497 sbiw R28,4
00A0 .dbline -1
00A0 .dbline 61
00A0 ; }
00A0 ; char Mf500PiccCommonRequest(unsigned char req_code,unsigned char *atq)
00A0 ; {
00A0 .dbline 62
00A0 ; int status = MI_OK;
00A0 4427 clr R20
00A2 5527 clr R21
00A4 .dbline 64
00A4 ; //************* initialize ******************************
00A4 ; PcdSetTmo(106);
00A4 0AE6 ldi R16,106
00A6 10E0 ldi R17,0
00A8 9AD6 xcall _PcdSetTmo
00AA .dbline 65
00AA ; WriteRC(RegChannelRedundancy,0x03); // RxCRC and TxCRC disable, parity enable
00AA 23E0 ldi R18,3
00AC 02E2 ldi R16,34
00AE 0E94EB09 xcall _WriteRC
00B2 .dbline 66
00B2 ; ClearBitMask(RegControl,0x08); // disable crypto 1 unit
00B2 28E0 ldi R18,8
00B4 09E0 ldi R16,9
00B6 DBD6 xcall _ClearBitMask
00B8 .dbline 67
00B8 ; WriteRC(RegBitFraming,0x07); // set TxLastBits to 7
00B8 27E0 ldi R18,7
00BA 0FE0 ldi R16,15
00BC 0E94EB09 xcall _WriteRC
00C0 .dbline 68
00C0 ; ResetInfo(MInfo);
00C0 2224 clr R2
00C2 20920201 sts _MInfo,R2
00C6 .dbline 68
00C6 3324 clr R3
00C8 30920401 sts _MInfo+1+1,R3
00CC 20920301 sts _MInfo+1,R2
00D0 .dbline 68
00D0 20920501 sts _MInfo+3,R2
00D4 .dbline 68
00D4 20920601 sts _MInfo+4,R2
00D8 .dbline 68
00D8 20920701 sts _MInfo+5,R2
00DC .dbline 68
00DC 30920901 sts _MInfo+6+1,R3
00E0 20920801 sts _MInfo+6,R2
00E4 .dbline 68
00E4 20920A01 sts _MInfo+8,R2
00E8 .dbline 68
00E8 20920B01 sts _MInfo+9,R2
00EC .dbline 68
00EC .dbline 69
00EC ; MSndBuffer[0] = req_code;
00EC E0910E01 lds R30,_MSndBuffer
00F0 F0910F01 lds R31,_MSndBuffer+1
00F4 A082 std z+0,R10
00F6 .dbline 70
00F6 ; MInfo.nBytesToSend = 1;
00F6 81E0 ldi R24,1
00F8 80930601 sts _MInfo+4,R24
00FC .dbline 71
00FC ; status = PcdSingleResponseCmd(0x1e,MSndBuffer,MRcvBuffer,&MInfo);
00FC 80E0 ldi R24,<_MInfo
00FE 90E0 ldi R25,>_MInfo
0100 9B83 std y+3,R25
0102 8A83 std y+2,R24
0104 20900C01 lds R2,_MRcvBuffer
0108 30900D01 lds R3,_MRcvBuffer+1
010C 3982 std y+1,R3
010E 2882 std y+0,R2
0110 20910E01 lds R18,_MSndBuffer
0114 30910F01 lds R19,_MSndBuffer+1
0118 0EE1 ldi R16,30
011A D6D7 xcall _PcdSingleResponseCmd
011C 402F mov R20,R16
011E 5527 clr R21
0120 .dbline 72
0120 ; if (status) // error occured
0120 4030 cpi R20,0
0122 4507 cpc R20,R21
0124 21F0 breq L19
0126 X1:
0126 .dbline 73
0126 ; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -