📄 function.lst
字号:
245 3 status = MI_ACCESSTIMEOUT;
246 3 }
247 2 if (status == MI_OK)
248 2 {
249 3 if (tmpStatus = (ReadIO(RegErrorFlag) & 0x17))
250 3 {
251 4 if (tmpStatus & 0x01)
252 4 {
253 5 info->collPos = ReadIO(RegCollpos);
254 5 status = MI_COLLERR;
255 5 }
256 4 else
257 4 {
258 5 info->collPos = 0;
259 5 if (tmpStatus & 0x02)
260 5 {
261 6 status = MI_PARITYERR;
262 6 }
263 5 }
264 4 if (tmpStatus & 0x04)
265 4 {
266 5 status = MI_FRAMINGERR;
267 5 }
268 4 if (tmpStatus & 0x10)
269 4 {
270 5 FlushFIFO();
271 5 status = MI_OVFLERR;
272 5 }
273 4 if (tmpStatus & 0x08)
274 4 {
275 5 status = MI_CRCERR;
276 5 }
277 4 if (status == MI_OK)
278 4 status = MI_NY_IMPLEMENTED;
279 4 }
280 3 if (cmd == PCD_TRANSCEIVE)
281 3 {
282 4 lastBits = ReadIO(RegSecondaryStatus) & 0x07;
283 4 if (lastBits)
284 4 info->nBitsReceived += (info->nBytesReceived-1) * 8 + lastBits;
285 4 else
286 4 info->nBitsReceived += info->nBytesReceived * 8;
287 4 }
288 3 }
289 2 else
290 2 {
291 3 info->collPos = 0x00;
292 3 }
293 2 }
294 1 return status;
295 1 }
296
297
298 char PcdReadE2(unsigned int startaddr,
299 unsigned char length,
300 unsigned char* _data)
301 {
302 1 char status = MI_OK;
303 1 ResetInfo(MInfo);
C51 COMPILER V7.07 FUNCTION 06/13/2008 13:33:17 PAGE 6
304 1 MSndBuffer[0] = startaddr & 0xFF;
305 1 MSndBuffer[1] = (startaddr >> 8) & 0xFF;
306 1 MSndBuffer[2] = length;
307 1 MInfo.nBytesToSend = 3;
308 1 status = RC500Cmd(PCD_READE2,
309 1 MSndBuffer,
310 1 MRcvBuffer,
311 1 &MInfo);
312 1 if (status == MI_OK)
313 1 {
314 2 memcpy(_data,MRcvBuffer,length);
315 2 }
316 1 else
317 1 {
318 2 _data[0] = 0;
319 2 }
320 1 return status ;
321 1 }
322
323
324 char CardRequest(unsigned char req_code,
325 unsigned char *atq)
326 {
327 1 char idata status = MI_OK;
328 1
329 1 WriteIO(RegChannelRedundancy,0x03);
330 1 ClearBitMask(RegControl,0x08);
331 1 WriteIO(RegBitFraming,0x07);
332 1 SetBitMask(RegTxControl,0x03);
333 1
334 1 ResetInfo(MInfo);
335 1 MSndBuffer[0] = req_code;
336 1 MInfo.nBytesToSend = 1;
337 1 status = RC500Cmd(PCD_TRANSCEIVE,
338 1 MSndBuffer,
339 1 MRcvBuffer,
340 1 &MInfo);
341 1
342 1 if (status)
343 1 {
344 2 *atq = 0;
345 2 }
346 1 else
347 1 {
348 2 if (MInfo.nBitsReceived != 16)
349 2 {
350 3 *atq = 0;
351 3 status = MI_BITCOUNTERR;
352 3 }
353 2 else
354 2 {
355 3 status = MI_OK;
356 3 memcpy(atq,MRcvBuffer,2);
357 3 }
358 2 }
359 1 return status;
360 1 }
361
362
363 char ReadCardNum (unsigned char bcnt,
364 unsigned char *snr)
365 {
C51 COMPILER V7.07 FUNCTION 06/13/2008 13:33:17 PAGE 7
366 1 char idata status = MI_OK;
367 1 char idata snr_in[4];
368 1 char nbytes = 0;
369 1 char nbits = 0;
370 1 char complete = 0;
371 1 char i = 0;
372 1 char byteOffset = 0;
373 1 unsigned char snr_crc;
374 1 unsigned char snr_check;
375 1 unsigned char dummyShift1;
376 1 unsigned char dummyShift2;
377 1
378 1 memcpy(snr_in,snr,4);
379 1
380 1 WriteIO(RegDecoderControl,0x28);
381 1 ClearBitMask(RegControl,0x08);
382 1
383 1 complete = 0;
384 1 bcnt = 0;
385 1 while (!complete && (status == MI_OK) )
386 1 {
387 2 ResetInfo(MInfo);
388 2 WriteIO(RegChannelRedundancy,0x03);
389 2 nbits = bcnt % 8;
390 2 if (nbits)
391 2 {
392 3 WriteIO(RegBitFraming,nbits << 4 | nbits);
393 3 nbytes = bcnt / 8 + 1;
394 3 if (nbits == 7)
395 3 {
396 4 WriteIO(RegBitFraming,nbits);
397 4 }
398 3 }
399 2 else
400 2 {
401 3 nbytes = bcnt / 8;
402 3 }
403 2
404 2 MSndBuffer[0] = 0x93;
405 2 MSndBuffer[1] = 0x20 + ((bcnt/8) << 4) + nbits;
406 2
407 2 for (i = 0; i < nbytes; i++)
408 2 {
409 3 MSndBuffer[i + 2] = snr_in[i];
410 3 }
411 2 MInfo.nBytesToSend = 2 + nbytes;
412 2
413 2 status = RC500Cmd(PCD_TRANSCEIVE,
414 2 MSndBuffer,
415 2 MRcvBuffer,
416 2 &MInfo);
417 2 if (nbits == 7)
418 2 {
419 3 dummyShift1 = 0x00;
420 3 for (i = 0; i < MInfo.nBytesReceived; i++)
421 3 {
422 4 dummyShift2 = MRcvBuffer[i];
423 4 MRcvBuffer[i] = (dummyShift1 >> (i+1)) | (MRcvBuffer[i] << (7-i));
424 4 dummyShift1 = dummyShift2;
425 4 }
426 3 MInfo.nBitsReceived -= MInfo.nBytesReceived;
427 3 if ( MInfo.collPos ) MInfo.collPos += 7 - (MInfo.collPos + 6) / 9;
C51 COMPILER V7.07 FUNCTION 06/13/2008 13:33:17 PAGE 8
428 3 }
429 2
430 2 if ( status == MI_OK || status == MI_COLLERR)
431 2 {
432 3 if ( MInfo.nBitsReceived != (40 - bcnt) )
433 3 {
434 4 status = MI_BITCOUNTERR;
435 4 }
436 3 else
437 3 {
438 4 byteOffset = 0;
439 4 if( nbits != 0 )
440 4 {
441 5 snr_in[nbytes - 1] = snr_in[nbytes - 1] | MRcvBuffer[0];
442 5 byteOffset = 1;
443 5 }
444 4
445 4 for ( i =0; i < (4 - nbytes); i++)
446 4 {
447 5 snr_in[nbytes + i] = MRcvBuffer[i + byteOffset];
448 5 }
449 4
450 4 if (status != MI_COLLERR )
451 4 {
452 5 snr_crc = snr_in[0] ^ snr_in[1] ^ snr_in[2] ^ snr_in[3];
453 5 snr_check = MRcvBuffer[MInfo.nBytesReceived - 1];
454 5 if (snr_crc != snr_check)
455 5 {
456 6 status = MI_SERNRERR;
457 6 }
458 5 else
459 5 {
460 6 complete = 1;
461 6 }
462 5 }
463 4 else
464 4 {
465 5 bcnt = bcnt + MInfo.collPos - nbits;
466 5 status = MI_OK;
467 5 }
468 4 }
469 3 }
470 2 }
471 1 if (status == MI_OK)
472 1 {
473 2 memcpy(snr,snr_in,4);
474 2 }
475 1 else
476 1 {
477 2 memcpy(snr,"0000",4);
478 2 }
479 1 ClearBitMask(RegDecoderControl,0x20);
480 1
481 1 return status;
482 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1909 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.07 FUNCTION 06/13/2008 13:33:17 PAGE 9
DATA SIZE = 47 40
IDATA SIZE = 1 9
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -