📄 mfrc500.lst
字号:
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 1
C51 COMPILER V8.00, COMPILATION OF MODULE MFRC500
OBJECT MODULE PLACED IN .\out_sst89e564\mfrc500.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\mfrc500.c LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND PRINT(.\mfrc
-500.lst) OBJECT(.\out_sst89e564\mfrc500.obj)
line level source
1 //#include <reg51rx2.h>
2 #include <reg52.h>
3 #include <intrins.h>
4 #include "string.h"
5 #include "stimer.h"
6 #include "ucio.h"
7 #include "mfrc500.h"
8 #include "uart.h"
9 #include "v51rx2.h"
10 #include "intrsc.h"
11 #include "MifarePro.h"
12 #include "global.h"
13
14
15 #define DEBUGRC500
16
17 #define enableme() EX0 = 1
18 #define disableme() EX0 = 0
19
20 //static volatile bit fSameCard;
21
22 static volatile MfCmdInfo MInfo;
23
24 // Variable in order to exchange data between function and ISR
25 static volatile MfCmdInfo *MpIsrInfo = 0;
26 // ISR send buffer
27 static volatile unsigned char *MpIsrOut = 0;
28 // ISR receive buffer
29 static volatile unsigned char *MpIsrIn = 0;
30
31 static unsigned char RxGain = 0x71;//73:42db, 72:38, 71:30, 70:27///////////////////
32
33 #define MFIFOLength 64
34
35 uchar xdata SndBuffer[64];
36 uchar xdata RcvBuffer[64];
37
38
39 // storage of the last selected serial number including check byte.
40 // For multi level serial numbers, only the first 4 bytes are stored.
41 unsigned char MLastSelectedSnr[5];
42
43
44 void ResetInfo(MfCmdInfo *info)
45 {
46 1 info->cmd= 0;
47 1 info->status = MI_OK;
48 1 info->irqSource= 0;
49 1 info->nBytesToSend = 0;
50 1 info->nBytesSent = 0;
51 1 info->nBytesReceived = 0;
52 1 info->nBitsReceived = 0;
53 1 info->collPos = 0;
54 1 }
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 2
55
56 void SetBitMask(uchar reg,uchar mask)
57 {
58 1 uchar data tmp = 0x0;
59 1 tmp = ReadIO(reg);
60 1 WriteIO(reg,tmp | mask);
61 1 }
62
63 void ClearBitMask(uchar reg,uchar mask)
64 {
65 1 uchar tmp = 0x0;
66 1 tmp = ReadIO(reg);
67 1 WriteIO(reg,tmp & ~mask);
68 1 }
69
70 // clear fifo
71 void FlushFIFO(void)
72 {
73 1 SetBitMask(RegControl,0x01);
74 1 }
75
76 /************************************
77 * set timeout length *
78 * tmolength: timeout length *
79 ************************************/
80 /*
81 void M500PcdSetTmo(uchar tmoLength)
82 {
83 switch(tmoLength)
84 {
85 case 1:
86 WriteIO(RegTimerClock,0x07);
87 WriteIO(RegTimerReload,0x6a);
88 break;
89 case 2:
90 WriteIO(RegTimerClock,0x07);
91 WriteIO(RegTimerReload,0xa0);
92 break;
93 case 3:
94 WriteIO(RegTimerClock,0x09);
95 WriteIO(RegTimerReload,0xa0);
96 break;
97 case 4:
98 WriteIO(RegTimerClock,0x09);
99 WriteIO(RegTimerReload,0xff);
100 break;
101 case 5:
102 WriteIO(RegTimerClock,0x0b);
103 WriteIO(RegTimerReload,0xff);
104 break;
105 case 6:
106 WriteIO(RegTimerClock,0x0d);
107 WriteIO(RegTimerReload,0xff);
108 break;
109 case 7:
110 WriteIO(RegTimerClock,0x0f);
111 WriteIO(RegTimerReload,0xff);
112 break;
113 default:
114 WriteIO(RegTimerClock,0x07);
115 WriteIO(RegTimerReload,tmoLength);
116 break;
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 3
117 }
118 } */
119
120 void M500PcdSetTmo(unsigned char tmoLength)
121 {
122 1 switch(tmoLength)
123 1 { // timer clock frequency 13,56 MHz
124 2 case 1: // short timeout (1,0 ms)
125 2 WriteIO(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
126 2 WriteIO(RegTimerReload,0x6a);// TReloadVal = 'h6a =106(dec)
127 2 break;
128 2 case 2: // medium timeout (1,5 ms)
129 2 WriteIO(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
130 2 WriteIO(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec)
131 2 break;
132 2 case 3: // medium timeout (6 ms)
133 2 WriteIO(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
134 2 WriteIO(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec)
135 2 break;
136 2 case 4: // long timeout (9.6 ms)
137 2 WriteIO(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
138 2 WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec)
139 2 break;
140 2 case 5: // long timeout (38.5 ms)
141 2 WriteIO(RegTimerClock,0x0b); // TAutoRestart=0,TPrescale=16*128
142 2 WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec)
143 2 break;
144 2 case 6: // long timeout (154 ms)
145 2 WriteIO(RegTimerClock,0x0d); // TAutoRestart=0,TPrescale=64*128
146 2 WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec)
147 2 break;
148 2 case 7: // long timeout (616.2 ms)
149 2 WriteIO(RegTimerClock,0x0f); // TAutoRestart=0,TPrescale=256*128
150 2 WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec)
151 2 break;
152 2 case 8:
153 2 WriteIO(RegTimerClock,0x0f);
154 2 WriteIO(RegTimerReload,0xB6); //e1
155 2 break;
156 2 case 9:
157 2 WriteIO(RegTimerClock,0x11);
158 2 WriteIO(RegTimerReload,0xff);
159 2 case 10:
160 2 WriteIO(RegTimerClock,0x12);
161 2 WriteIO(RegTimerReload,0xff);
162 2 break;
163 2 case 11:
164 2 WriteIO(RegTimerClock,0x13);
165 2 WriteIO(RegTimerReload,0xff);
166 2 break;
167 2 case 12:
168 2 WriteIO(RegTimerClock,0x14);
169 2 WriteIO(RegTimerReload,0xff);
170 2 break;
171 2 case 13:
172 2 WriteIO(RegTimerClock,0x10);
173 2 WriteIO(RegTimerReload,0xE1);
174 2 break;
175 2 case 14:
176 2 WriteIO(RegTimerClock,0x0F);
177 2 WriteIO(RegTimerReload,0xB0); //E1
178 2 break;
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 4
179 2 case 15:
180 2 WriteIO(RegTimerClock,0x0F);
181 2 WriteIO(RegTimerReload,0xB1); //Process the cmmand .setting the time in the MFRC500 timer.
182 2 break;
183 2 case 16:
184 2 WriteIO(RegTimerClock,0x0C);
185 2 WriteIO(RegTimerReload,0xFF);
186 2 break;
187 2 default: //
188 2 WriteIO(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
189 2 WriteIO(RegTimerReload,tmoLength); // TReloadVal = 'h6a =tmoLength(dec)
190 2 break;
191 2 }
192 1 }
193
194
195 /****************************
196 * excute mfrc500 command *
197 ****************************/
198 #if 1
199 uchar M500PcdCmd(unsigned char cmdcode, unsigned char* send, unsigned char* rcv, MfCmdInfo *info)
200 {
201 1 uchar data tmpStatus;
202 1 uchar data lastBits;
203 1 uchar data status = MI_OK;
204 1 uchar data irqEn = 0x00;
205 1 uchar data waitFor = 0x00;
206 1 uint data starttime;
207 1 uchar data i;
208 1
209 1 WriteIO(RegInterruptEn,0x7F); // disable all interrupts
210 1 WriteIO(RegInterruptRq,0x7F); // reset interrupt requests
211 1 WriteIO(RegCommand,PCD_IDLE); // terminate probably running command
212 1
213 1 FlushFIFO(); // flush FIFO buffer
214 1
215 1 // save info structures to module pointers
216 1 MpIsrInfo = info;
217 1 MpIsrOut = send;
218 1 MpIsrIn = rcv;
219 1
220 1 info->irqSource = 0x0; // reset interrupt flags
221 1
222 1 enableme();
223 1
224 1 // depending on the command code, appropriate interrupts are enabled (irqEn)
225 1 // and the commit interrupt is choosen (waitFor).
226 1 switch(cmdcode)
227 1 {
228 2 case PCD_IDLE: // nothing else required
229 2 irqEn = 0x00;
230 2 waitFor = 0x00;
231 2 break;
232 2
233 2 case PCD_WRITEE2: // LoAlert and TxIRq
234 2 irqEn = 0x11;
235 2 waitFor = 0x10;
236 2 break;
237 2
238 2 case PCD_READE2: // HiAlert, LoAlert and IdleIRq
239 2 irqEn = 0x07;
240 2 waitFor = 0x04;
C51 COMPILER V8.00 MFRC500 04/23/2009 15:56:15 PAGE 5
241 2 break;
242 2
243 2 case PCD_LOADCONFIG: // IdleIRq and LoAlert
244 2 case PCD_LOADKEYE2: // IdleIRq and LoAlert
245 2 case PCD_AUTHENT1: // IdleIRq and LoAlert
246 2 irqEn = 0x05;
247 2 waitFor = 0x04;
248 2 break;
249 2
250 2 case PCD_CALCCRC: // LoAlert and TxIRq
251 2 irqEn = 0x11;
252 2 waitFor = 0x10;
253 2 break;
254 2
255 2 case PCD_AUTHENT2: // IdleIRq
256 2 irqEn = 0x04;
257 2 waitFor = 0x04;
258 2 break;
259 2
260 2 case PCD_RECEIVE: // HiAlert and IdleIRq
261 2 info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4); ////////////////
262 2 irqEn = 0x06;
263 2 waitFor = 0x04;
264 2 break;
265 2
266 2 case PCD_LOADKEY: // IdleIRq
267 2 irqEn = 0x05;
268 2 waitFor = 0x04;
269 2 break;
270 2
271 2 case PCD_TRANSMIT: // LoAlert and IdleIRq
272 2 irqEn = 0x05;
273 2 waitFor = 0x04;
274 2 break;
275 2
276 2 case PCD_TRANSCEIVE: // TxIrq, RxIrq, IdleIRq and LoAlert
277 2 info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4); //////////////
278 2 irqEn = 0x3D; //0x1D;
279 2 waitFor = 0x04;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -