📄 m500auc.lst
字号:
C51 COMPILER V6.12 M500AUC 08/25/2007 20:27:21 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE M500AUC
OBJECT MODULE PLACED IN D:\公司产品\RC500_~1\RC500_~1\M500AUC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\公司产品\RC500_~1\RC500_~1\M500AUC.C DB SB OE
stmt level source
1 ///////////////////////////////////////////////////////////////////////////////
2 // Copyright (c), Philips Semiconductors Gratkorn
3 //
4 // (C)PHILIPS Electronics N.V.2000
5 // All rights are reserved. Reproduction in whole or in part is
6 // prohibited without the written consent of the copyright owner.
7 // Philips reserves the right to make changes without notice at any time.
8 // Philips makes no warranty, expressed, implied or statutory, including but
9 // not limited to any implied warranty of merchantibility or fitness for any
10 //particular purpose, or that the use will not infringe any third party patent,
11 // copyright or trademark. Philips must not be liable for any loss or damage
12 // arising from its use.
13 ///////////////////////////////////////////////////////////////////////////////
14 #define DLL_EXPORT // library source module definition
15 #include <p89c51rx.h>
16 #include <Mfreg500.h>
17 #include <M500A.h>
18 #include <RdIo.h>
19
20 #include <string.h>
21 #include <stdio.h>
22 #include <main.h>
23
24 ////////////////////////////////////////////////////////////////////////////////
25 // M O D U L E D E F I N I T I O N
26 ////////////////////////////////////////////////////////////////////////////////
27 // COMMENT: This library module is modified from the original source code for a
28 // microcontroller C164 CI, to suit the general purpose 8051 mcu.
29 // The source can be ported to other platforms very easily.
30 // The communication channel to the RC500 reader IC is assumed to be
31 // unknown. All data is written with the generic IO functions
32 // of the module ReaderIO.h. In our case the reader module is
33 // connected via memory mapped io at base address 0x7f00.
34 // The interrupt pin of the reader IC is assumed to be connected to
35 // the fast external interrupt pin INT0# (active low) and the reset
36 // pin of the reader IC should be connected to a dedicated port pin
37 // (Port3: Pin: 3).
38 // In this configuration, a reset of the reader module is independend
39 // from the reset of the microcontroller.
40 // In order to generate communication timeouts,
41 // general purpose timer 2 of the microcontroller is used. This
42 // timer need not to be initialised in advance. Before every usage
43 // the timer is completely initialised in each function.
44 // Non of the timers is essential for the functionality of the reader
45 // module, but are helpful furing software development. All protocoll
46 // relevant timing constraints are generated
47 // by the internal timer of the reader module.
48 //
49 // Some explanations to the programming method of this library.
50 // There are three kind of functions coded in this module.
51 // a) internal functions, which have no prototypes in a header
52 // file and are not intended to be used outside of this file
53 // b) commands, which are intended for the reader module itself
54 // c) commands, which are intended for any tag in the rf field.
55 // These commands are send to the reader and the reader module
C51 COMPILER V6.12 M500AUC 08/25/2007 20:27:21 PAGE 2
56 // transmitts the data to the rf interface.
57 // Commands for the reader and for the tag have the appropriate
58 // prefix (PCD for proximity coupled device or reader module
59 // PICC for proximity integrated circuit card or tag)
60 // and their protypes are defined in the header file.
61 // Each command for a PICC consists of a PCD command. Therefore
62 // the function M500PcdCmd is very important for the understanding
63 // of the communication.
64 //
65 // The basic functionality is provided by the interrupt service
66 // routine (ISR), which closely works together with the function
67 // M500PcdCmd. All kinds of interrupts are serviced by the
68 // same ISR.
69
70
71 // inline structure in order to reset the communication channel between
72 // function and ISR
73 #define ResetInfo(info) \
74 info.cmd = 0; \
75 info.status = MI_OK;\
76 info.irqSource = 0; \
77 info.nBytesSent = 0; \
78 info.nBytesToSend = 0; \
79 info.nBytesReceived = 0; \
80 info.nBitsReceived = 0; \
81 info.collPos = 0;
82
83 // struct definition for a communication channel between function and ISR
84 typedef struct
85 {
86 unsigned char cmd; //!< command code
87 char status; // communication status
88 unsigned char nBytesSent; // how many bytes already sent
89 unsigned char nBytesToSend; // how many bytes to send
90 unsigned char nBytesReceived;// how many bytes received
91 unsigned short nBitsReceived; // how many bits received
92 unsigned char irqSource; // which interrupts have occured
93 unsigned char collPos; // at which position occured a
94 // collision
95 } MfCmdInfo;
96
97 // modul variables
98 extern unsigned char xdata *GpBase;
99
100 static unsigned char idata MFIFOLength = DEF_FIFO_LENGTH; // actual FIFO length
101
102 static unsigned char xdata MKeys[16][12]; // storage for authentication keys
103 // in order to provide a calling
104 // compatible interface to old libraries
105 // Other reader modules keep several sets
106 // of keys in an E2PROM. In this case,
107 // these keys are stored in the uC and
108 // transfered to the reader module
109 // before authentication
110
111 // Infomation concerning data processing
112 // send buffer for general use
113 static volatile unsigned char xdata MSndBuffer[SND_BUF_LEN];
114 // receive buffer for general use
115 static volatile unsigned char xdata MRcvBuffer[RCV_BUF_LEN];
116 // info struct for general use
117 static volatile MfCmdInfo MInfo;
C51 COMPILER V6.12 M500AUC 08/25/2007 20:27:21 PAGE 3
118
119 // Interrupt service routine
120 // Variable in order to exchange data between function and ISR
121 static volatile MfCmdInfo *MpIsrInfo = 0;
122 // ISR send buffer
123 static volatile unsigned char *MpIsrOut = 0;
124 // ISR receive buffer
125 static volatile unsigned char *MpIsrIn = 0;
126
127 // storage of the last selected serial number including check byte.
128 //For multi level serial numbers, only the first 4 bytes are stored.
129 unsigned char MLastSelectedSnr[5];
130
131 // Timer 2
132 bit T2IR = 0; // Timer2 timeout flag
133 unsigned int CountDown = 0; // Timeout counter with 50us resolution
134
135 sbit RC500RST = P3^5;
136 sbit LED = P3^4;
137
138 ///////////////////////////////////////////////////////////////////////////////
139 // Prototypes for local functions
140 ///////////////////////////////////////////////////////////////////////////////
141
142 void start_timeout(unsigned int _50us);
143 void stop_timeout(void);
144
145 // _____________________________________________________________________________
146 //
147 // FUNCTION: M500PcdSetTmo
148 // IN: tmoLength 1 ... 1.0 ms timeout periode
149 // 2 ... 1.5 ms timeout periode
150 // 3 ... 6.0 ms timeout periode
151 // 4 ... 9.6 ms timeout period
152 // 5 ... 38.5 ms timeout period
153 // 6 ... 154 ms timeout period
154 // 7 ... 616.2 ms timeout period
155 // OUT: -
156 // RETURN:
157 // COMMENT: Set timeout length of the reader internal timer.
158 //
159 void M500PcdSetTmo(unsigned char tmoLength);
160
161 // _____________________________________________________________________________
162 //
163 // FUNCTION: M500PcdCmd
164 // IN: cmd PCD_IDLE
165 // PCD_WRITEE2
166 // PCD_READE2
167 // PCD_LOADCONFIG
168 // PCD_LOADKEYE2
169 // PCD_AUTHENT1
170 // PCD_CALCCRC
171 // PCD_AUTHENT2
172 // PCD_RECEIVE
173 // PCD_LOADKEY
174 // PCD_TRANSMIT
175 // PCD_TRANSCEIVE
176 // PCD_RESETPHASE
177 // for a detailed description of the parameter values, please
178 // have a look on the header file of the reader register
179 // definitions.
C51 COMPILER V6.12 M500AUC 08/25/2007 20:27:21 PAGE 4
180 // send byte stream of variable length, which should be send to
181 // the PICC, the length of stream has to be specified
182 // in the info - structure
183 // OUT: rcv byte stream of variable length, which was received
184 // from the PICC or PCD
185 // info communication and status structure
186 // RETURN:
187 // COMMENT: This function provides the central interface to the reader module.
188 // Depending on the "cmd"-value, all necessary interrupts are enabled
189 // and the communication is started. While the processing is done by
190 // the reader module, this function waits for its completion.
191 // It's notable, that the data in the "send byte stream" is written
192 // to the FIFO of the reader module by the ISR. Immediate after
193 // enabling the interrupts, the LoAlert interrupt is activated.
194 // The ISR writes the data to the FIFO. This function is not involved
195 // in writing or fetching data from FIFO, all work is done by the
196 // ISR.After command completion, the error status is evaluated and
197 // returned to the calling function.
198 //
199 char M500PcdCmd(unsigned char cmd,
200 volatile unsigned char* send,
201 volatile unsigned char* rcv,
202 volatile MfCmdInfo *info);
203
204 // _____________________________________________________________________________
205 //
206 // FUNCTION: SetBitMask
207 // IN: reg register address
208 // mask bit mask to set
209 // OUT: -
210 // RETURN:
211 // COMMENT: This function performs a read - modify - write sequence
212 // on the specified register. All bits with a 1 in the mask
213 // are set - all other bits keep their original value.
214 //
215 char SetBitMask(unsigned char reg,unsigned char mask);
216
217 // _____________________________________________________________________________
218 //
219 // FUNCTION: ClearBitMask
220 // IN: reg register address
221 // mask bit mask to clear
222 // OUT: -
223 // RETURN:
224 // COMMENT: This function performs a read - modify - write sequence
225 // on the specified register. All bits with a 1 in the mask
226 // are cleared - all other bits keep their original value.
227 //
228 char ClearBitMask(unsigned char reg,unsigned char mask);
229
230 // _____________________________________________________________________________
231 //
232 // FUNCTION: FlushFIFO
233 // IN: -
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -