📄 pcdutils.lst
字号:
C51 COMPILER V4.01, PCDUTILS 19/08/04 14:33:22 PAGE 1
DOS C51 COMPILER V4.01, COMPILATION OF MODULE PCDUTILS
OBJECT MODULE PLACED IN D:\13505B\105B\PCDUTILS.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE D:\13505B\105B\PCDUTILS.C DB SB OE
stmt level source
1 #include <string.h>
2 #include <stdio.h>
3 #include <PcdUtils.h>
4 #include <MfRc500.h>
5 #include <RcComm.h>
6 #include <MfErrNo.h>
7 #include "Hardware.h"
8 #include "PcdShare.h"
9 #include "MfReg.h"
10
11 static MfCmdInfo * MpIsrInfo;
12 static unsigned char * MpIsrOut;
13 static unsigned char * MpIsrIn;
14
15 //unsigned char RxTxBuffer[MAX_RF_BUF_SIZE];
16
17 void PcdSetTmo(unsigned char tmoLength);
18 void ClearBitMask(unsigned char reg,unsigned char mask);
19 void SetBitMask(unsigned char reg,unsigned char mask);
20 void FlushFIFO(void);
21 char PcdSingleResponseCmd(unsigned char cmd,
22 unsigned char * send,
23 unsigned char * rcv,
24 MfCmdInfo *info);
25 ///////////////////////////////////////////////////////////////////////
26 // S e t T i m e o u t L E N G T H
27 ///////////////////////////////////////////////////////////////////////
28 void PcdSetTmo(unsigned char tmoLength)
29 {
30 1 switch(tmoLength)
31 1 { // timer clock frequency 13,56 MHz
32 2 case 1: // short timeout (1,0 ms)
33 2 WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
34 2 WriteRC(RegTimerReload,0x6a);// TReloadVal = 'h6a =106(dec)
35 2 break;
36 2 case 2: // medium timeout (1,5 ms)
37 2 WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
38 2 WriteRC(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec)
39 2 break;
40 2 case 3: // long timeout (6 ms)
41 2 WriteRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
42 2 WriteRC(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec)
43 2 break;
44 2 case 4: // long timeout (9.6 ms)
45 2 WriteRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
46 2 WriteRC(RegTimerReload,0xff);// TReloadVal = 'ff =255(dec)
47 2 break;
48 2 case 5:
49 2 WriteRC(RegTimerClock,0x0f); // TAutoRestart=0,TPrescale=4*128
50 2 WriteRC(RegTimerReload,0xff);// TReloadVal = 'ff =255(dec)
51 2 break;
52 2 /* case 10: // (309.3 ms) FWI=10
53 2 WriteRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
54 2 WriteRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
55 2 break; */
56 2 default: // short timeout (1,0 ms)
57 2 WriteRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
58 2 WriteRC(RegTimerReload,tmoLength);// TReloadVal = tmoLength
59 2 break;
C51 COMPILER V4.01, PCDUTILS 19/08/04 14:33:22 PAGE 2
60 2 }
61 1 }
62
63 //////////////////////////////////////////////////////////////////////
64 // S E T A B I T M A S K
65 ///////////////////////////////////////////////////////////////////////
66 void SetBitMask(unsigned char reg,unsigned char mask) //
67 {
68 1 char tmp = 0x0;
69 1
70 1 tmp = ReadRC(reg);
71 1 WriteRC(reg,tmp | mask); // set bit mask
72 1 }
73
74 //////////////////////////////////////////////////////////////////////
75 // C L E A R A B I T M A S K
76 ///////////////////////////////////////////////////////////////////////
77 void ClearBitMask(unsigned char reg,unsigned char mask)
78 {
79 1 char tmp = 0x0;
80 1
81 1 tmp = ReadRC(reg);
82 1 WriteRC(reg,tmp & ~mask); // clear bit mask
83 1 }
84
85 ///////////////////////////////////////////////////////////////////////
86 // F L U S H F I F O
87 ///////////////////////////////////////////////////////////////////////
88 void FlushFIFO(void)
89 {
90 1 SetBitMask(RegControl,0x01);
91 1 }
92
93 //////////////////////////////////////////////////////////////////////
94 // W R I T E A P C D C O M M A N D
95 ///////////////////////////////////////////////////////////////////////
96 char PcdSingleResponseCmd(unsigned char cmd,
97 unsigned char * send,
98 unsigned char * rcv,
99 MfCmdInfo *info)
100 {
101 1 char status = MI_OK;
102 1 char tmpStatus;
103 1 unsigned char lastBits;
104 1
105 1 unsigned char irqEn = 0x00;
106 1 unsigned char waitFor = 0x00;
107 1 unsigned char timerCtl = 0x00;
108 1
109 1 unsigned long TimeOutCount;
110 1
111 1
112 1 WriteRC(RegInterruptEn,0x7F); // disable all interrupts
113 1 WriteRC(RegInterruptRq,0x7F); // reset interrupt requests
114 1 WriteRC(RegCommand,PCD_IDLE); // terminate probably running command
115 1
116 1 FlushFIFO(); // flush FIFO buffer
117 1
118 1 // save info structures to module pointers
119 1 MpIsrInfo = info;
120 1 MpIsrOut = send;
121 1 MpIsrIn = rcv;
122 1
123 1 // initialising the ISR-Function pointer for mifare
124 1 // protocol - do this after initialising the MpXXXX variables
125 1 // PcdIsrFct = SingleResponseIsr;
C51 COMPILER V4.01, PCDUTILS 19/08/04 14:33:22 PAGE 3
126 1 //OpenExternInt0();
127 1 info->irqSource = 0x0; // reset interrupt flags
128 1 OpenExternInt0();
129 1 // READER_INT_ENABLE;
130 1 // depending on the command code, appropriate interrupts are enabled (irqEn)
131 1 // and the commit interrupt is choosen (waitFor).
132 1 switch(cmd)
133 1 {
134 2 case PCD_IDLE: // nothing else required
135 2 irqEn = 0x00;
136 2 waitFor = 0x00;
137 2 break;
138 2 case PCD_WRITEE2: // LoAlert and TxIRq
139 2 irqEn = 0x11;
140 2 waitFor = 0x10;
141 2 break;
142 2 case PCD_READE2: // HiAlert, LoAlert and IdleIRq
143 2 irqEn = 0x07;
144 2 waitFor = 0x04;
145 2 break;
146 2 case PCD_LOADCONFIG: // IdleIRq and LoAlert
147 2 case PCD_LOADKEYE2: // IdleIRq and LoAlert
148 2 case PCD_AUTHENT1: // IdleIRq and LoAlert
149 2 irqEn = 0x05;
150 2 waitFor = 0x04;
151 2 break;
152 2 case PCD_CALCCRC: // LoAlert and TxIRq
153 2 irqEn = 0x11;
154 2 waitFor = 0x10;
155 2 break;
156 2 case PCD_AUTHENT2: // IdleIRq
157 2 irqEn = 0x04;
158 2 waitFor = 0x04;
159 2 break;
160 2 case PCD_RECEIVE: // HiAlert and IdleIRq
161 2 info->nBitsReceived = -(ReadRC(RegBitFraming) >> 4);
162 2 irqEn = 0x06;
163 2 waitFor = 0x04;
164 2 break;
165 2 case PCD_LOADKEY: // IdleIRq
166 2 irqEn = 0x05;
167 2 waitFor = 0x04;
168 2 break;
169 2 case PCD_TRANSMIT: // LoAlert and IdleIRq
170 2 irqEn = 0x05;
171 2 waitFor = 0x04;
172 2 break;
173 2 case PCD_TRANSCEIVE: // TxIrq, RxIrq, IdleIRq and LoAlert
174 2 info->nBitsReceived = -(ReadRC(RegBitFraming) >> 4);
175 2 irqEn = 0x3d;//0x1d//0x3d//////allen 10.23
176 2 waitFor = 0x04;
177 2 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -