?? m500auc.lst
字號:
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE M500AUC
OBJECT MODULE PLACED IN M500AuC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE M500AuC.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define M500_GLOBALS
2
3 #include <string.h>
4 #include <stdio.h>
5 #include <absacc.h>
6 #include <intrins.h>
7
8 #include "Mfreg500.h"
9 #include "MfErrNo.h"
10 #include "reg52.h"
11 #include "M500AuC.h"
12
13 #define GetRegPage(addr) (0x70 | (addr>>3))
14 #define nocard 0
15 #define mifare1 1
16 #define mifarepro 2
17 #define mifarelight 3
18 #define unknowncard 4
19 #define NO_TIMER2 1
20
21 ///////////////////////////////////////////////////////////////////////
22 // 往一個地址寫一個數據
23 ///////////////////////////////////////////////////////////////////////
24 void WriteRawIO(unsigned char Address,unsigned char value)
25 {
26 1 XBYTE[Address]=value;
27 1 }
28
29 ///////////////////////////////////////////////////////////////////////
30 // 從一個地址讀出一個數據
31 ///////////////////////////////////////////////////////////////////////
32 unsigned char ReadRawIO(unsigned char Address)
33 {
34 1 return XBYTE[Address];
35 1 }
36
37 ///////////////////////////////////////////////////////////////////////
38 // 往一個地址寫一個數據(EEPROM)
39 ///////////////////////////////////////////////////////////////////////
40 void WriteIO(unsigned char Address, unsigned char value)
41 {
42 1 WriteRawIO(0x00,GetRegPage(Address));
43 1 WriteRawIO(Address,value);
44 1 }
45
46 ///////////////////////////////////////////////////////////////////////
47 // 從一個地址讀出一個數據(EEPROM)
48 ///////////////////////////////////////////////////////////////////////
49 unsigned char ReadIO(unsigned char Address)
50 {
51 1 WriteRawIO(0x00,GetRegPage(Address));
52 1 return ReadRawIO(Address);
53 1 }
54
55 ///////////////////////////////////////////////////////////////////////
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 2
56 // 設置定時時間
57 ///////////////////////////////////////////////////////////////////////
58 void M500PcdSetTmo(unsigned char tmoLength)
59 {
60 1 switch(tmoLength)
61 1 {
62 2 case 1:
63 2 WriteIO(RegTimerClock,0x07);
64 2 WriteIO(RegTimerReload,0x6a);
65 2 break;
66 2 case 2:
67 2 WriteIO(RegTimerClock,0x07);
68 2 WriteIO(RegTimerReload,0xa0);
69 2 break;
70 2 case 3:
71 2 WriteIO(RegTimerClock,0x09);
72 2 WriteIO(RegTimerReload,0xa0);
73 2 break;
74 2 case 4:
75 2 WriteIO(RegTimerClock,0x09);
76 2 WriteIO(RegTimerReload,0xff);
77 2 break;
78 2 case 5:
79 2 WriteIO(RegTimerClock,0x0b);
80 2 WriteIO(RegTimerReload,0xff);
81 2 break;
82 2 case 6:
83 2 WriteIO(RegTimerClock,0x0d);
84 2 WriteIO(RegTimerReload,0xff);
85 2 break;
86 2 case 7:
87 2 WriteIO(RegTimerClock,0x0f);
88 2 WriteIO(RegTimerReload,0xff);
89 2 break;
90 2 default:
91 2 WriteIO(RegTimerClock,0x07);
92 2 WriteIO(RegTimerReload,tmoLength);
93 2 break;
94 2 }
95 1 }
96
97 ///////////////////////////////////////////////////////////////////////
98 // Request Command defined in ISO14443(Mifare)
99 ///////////////////////////////////////////////////////////////////////
100 char M500PcdCmd(unsigned char cmd,
101 volatile unsigned char data *rcv,
102 MfCmdInfo idata *info)
103 {
104 1 char idata status = MI_OK;
105 1 char idata tmpStatus ;
106 1 unsigned char idata lastBits;
107 1 unsigned int idata timecnt = 0;
108 1 unsigned char idata irqEn = 0x00;
109 1 unsigned char idata waitFor = 0x00;
110 1 unsigned char idata timerCtl = 0x00;
111 1
112 1 WriteIO(RegInterruptEn,0x7F);
113 1 WriteIO(RegInterruptRq,0x7F);
114 1 WriteIO(RegCommand,PCD_IDLE);
115 1
116 1 FlushFIFO();
117 1 MpIsrInfo = info;
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 3
118 1 MpIsrOut = rcv;
119 1 info->irqSource = 0x00;
120 1 switch(cmd)
121 1 {
122 2 case PCD_IDLE:
123 2 irqEn = 0x00;
124 2 waitFor = 0x00;
125 2 break;
126 2 case PCD_WRITEE2:
127 2 irqEn = 0x11;
128 2 waitFor = 0x10;
129 2 break;
130 2 case PCD_READE2:
131 2 irqEn = 0x07;
132 2 waitFor = 0x04;
133 2 break;
134 2 case PCD_LOADCONFIG:
135 2 case PCD_LOADKEYE2:
136 2 case PCD_AUTHENT1:
137 2 irqEn = 0x05;
138 2 waitFor = 0x04;
139 2 break;
140 2 case PCD_CALCCRC:
141 2 irqEn = 0x11;
142 2 waitFor = 0x10;
143 2 break;
144 2 case PCD_AUTHENT2:
145 2 irqEn = 0x04;
146 2 waitFor = 0x04;
147 2 break;
148 2 case PCD_RECEIVE:
149 2 info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4);
150 2 irqEn = 0x06;
151 2 waitFor = 0x04;
152 2 break;
153 2 case PCD_LOADKEY:
154 2 irqEn = 0x05;
155 2 waitFor = 0x04;
156 2 break;
157 2 case PCD_TRANSMIT:
158 2 irqEn = 0x05;
159 2 waitFor = 0x04;
160 2 break;
161 2 case PCD_TRANSCEIVE:
162 2 info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4);
163 2 irqEn = 0x3D;
164 2 waitFor = 0x04;
165 2 break;
166 2 default:
167 2 status = MI_UNKNOWN_COMMAND;
168 2 }
169 1 if (status == MI_OK)
170 1 {
171 2 irqEn |= 0x20;
172 2 waitFor |= 0x20;
173 2 timecnt=1000;
174 2 WriteIO(RegInterruptEn,irqEn | 0x80);
175 2 WriteIO(RegCommand,cmd);
176 2 while (!(MpIsrInfo->irqSource & waitFor||!(timecnt--)));
177 2 WriteIO(RegInterruptEn,0x7F);
178 2 WriteIO(RegInterruptRq,0x7F);
179 2 SetBitMask(RegControl,0x04);
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 4
180 2 WriteIO(RegCommand,PCD_IDLE);
181 2 if (!(MpIsrInfo->irqSource & waitFor))
182 2 {
183 3 status = MI_ACCESSTIMEOUT;
184 3 }
185 2 else
186 2 {
187 3 status = MpIsrInfo->status;
188 3 }
189 2 if (status == MI_OK)
190 2 {
191 3 if (tmpStatus = (ReadIO(RegErrorFlag) & 0x17))
192 3 {
193 4 if (tmpStatus & 0x01)
194 4 {
195 5 info->collPos = ReadIO(RegCollPos);
196 5 status = MI_COLLERR;
197 5 }
198 4 else
199 4 {
200 5 info->collPos = 0;
201 5 if (tmpStatus & 0x02)
202 5 {
203 6 status = MI_PARITYERR;
204 6 }
205 5 }
206 4 if (tmpStatus & 0x04)
207 4 {
208 5 status = MI_FRAMINGERR;
209 5 }
210 4 if (tmpStatus & 0x10)
211 4 {
212 5 FlushFIFO();
213 5 status = MI_OVFLERR;
214 5 }
215 4 if (tmpStatus & 0x08)
216 4 {
217 5 status = MI_CRCERR;
218 5 }
219 4 if (status == MI_OK)
220 4 status = MI_NY_IMPLEMENTED;
221 4 }
222 3 if (cmd == PCD_TRANSCEIVE)
223 3 {
224 4 lastBits = ReadIO(RegSecondaryStatus) & 0x07;
225 4 if (lastBits)
226 4 info->nBitsReceived += (info->nBytesReceived-1) * 8 + lastBits;
227 4 else
228 4 info->nBitsReceived += info->nBytesReceived * 8;
229 4 }
230 3 }
231 2 else
232 2 {
233 3 info->collPos = 0x00;
234 3 }
235 2 }
236 1 MpIsrInfo = 0;
237 1 MpIsrOut = 0;
238 1 return status;
239 1 }
240
241 ///////////////////////////////////////////////////////////////////////
C51 COMPILER V7.02a M500AUC 06/23/2006 09:38:38 PAGE 5
242 // 置一個bit
243 ///////////////////////////////////////////////////////////////////////
244 char SetBitMask(unsigned char reg,unsigned char mask)
245 {
246 1 char idata tmp = 0x00;
247 1
248 1 tmp = ReadIO(reg);
249 1 WriteIO(reg,tmp | mask); // set bit mask
250 1 return 0x00;
251 1 }
252
253 ///////////////////////////////////////////////////////////////////////
254 // 清一個bit
255 ///////////////////////////////////////////////////////////////////////
256 char ClearBitMask(unsigned char reg,unsigned char mask)
257 {
258 1 char idata tmp = 0x00;
259 1
260 1 tmp = ReadIO(reg);
261 1 WriteIO(reg,tmp & ~mask); // clear bit mask
262 1 return 0x00;
263 1 }
264
265 ///////////////////////////////////////////////////////////////////////
266 ///////////////////////////////////////////////////////////////////////
267 void FlushFIFO(void)
268 {
269 1 SetBitMask(RegControl,0x01);
270 1 }
271
272 ///////////////////////////////////////////////////////////////////////
273 // Set card in HALT-state
274 // 終止卡的操作
275 ///////////////////////////////////////////////////////////////////////
276 char M500PiccHalt(void)
277 {
278 1 char idata status = MI_CODEERR;
279 1
280 1 // ************* Cmd Sequence **********************************
281 1 ResetInfo(MInfo);
282 1 SerBuffer[0] = PICC_HALT ; // Halt command code
283 1 SerBuffer[1] = 0x00; // dummy address
284 1 MInfo.nBytesToSend = 2;
285 1 status = M500PcdCmd(PCD_TRANSCEIVE,
286 1 SerBuffer,
287 1 &MInfo);
288 1 if (status)
289 1 {
290 2 // timeout error ==> no NAK received ==> OK
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -