📄 slrc632.lst
字号:
217 2 DelayMs(1);
218 2 PcdAntennaOn();
219 2 }
220 1 else if (type == 's')
221 1 {
222 2 ClearBitMask(RegControl,0x08);
223 2
224 2 WriteRawRC(RegClockQControl,0x0);
225 2 WriteRawRC(RegClockQControl,0x40);
226 2 Delay_50us(2);
227 2 ClearBitMask(RegClockQControl,0x40);
228 2
229 2 WriteRawRC(RegTxControl,0x4b);
230 2 WriteRawRC(RegCwConductance,0x06);
231 2 WriteRawRC(RegModConductance,0x03);
232 2 WriteRawRC(RegCoderControl,0x20);
233 2 WriteRawRC(RegModWidth,0x13);
234 2 WriteRawRC(RegModWidthSOF,0x00);
235 2 WriteRawRC(RegTypeBFraming,0x18);
236 2
237 2 WriteRawRC(RegRxControl1,0x73);
238 2 WriteRawRC(RegDecoderControl,0x19);
239 2 WriteRawRC(RegBitPhase,0xAD);
240 2 WriteRawRC(RegRxThreshold,0x88);
241 2 WriteRawRC(RegBPSKDemControl,0x3E);
C51 COMPILER V8.05a SLRC632 07/05/2010 23:34:44 PAGE 5
242 2 WriteRawRC(RegRxControl2,0x01);
243 2 // WriteRawRC(RegClockQControl,0x00);//?
244 2
245 2 WriteRawRC(RegRxWait,0x06);
246 2 WriteRawRC(RegChannelRedundancy,0x2C);
247 2 WriteRawRC(RegCRCPresetLSB,0xFF);
248 2 WriteRawRC(RegCRCPresetMSB,0xFF);
249 2 WriteRawRC(RegTimeSlotPeriod,0x00);
250 2 WriteRawRC(RegMfOutSelect,0x00);
251 2 WriteRawRC(RFU27,0x00);
252 2
253 2 WriteRawRC(RegFIFOLevel,0x3F);
254 2 WriteRawRC(RegTimerClock,0x07);
255 2 WriteRawRC(RegTimerReload,0x0A);
256 2 WriteRawRC(RegTimerControl,0x06);
257 2 WriteRawRC(RegIRqPinConfig,0x02);
258 2 WriteRawRC(RFU2E,0x00);
259 2 WriteRawRC(RFU2F,0x00);
260 2 PcdSetTmo(106);
261 2 DelayMs(1);
262 2 PcdAntennaOn();
263 2 }
264 1 else if (type == '1')
265 1 {
266 2 ClearBitMask(RegControl,0x08);
267 2
268 2 WriteRawRC(RegTxControl,0x48);
269 2 WriteRawRC(RegCwConductance,0x3F);
270 2 WriteRawRC(RegModConductance,0x05); // must be measured for 15% Modulation Index
271 2 WriteRawRC(RegCoderControl,0x2F); // 52.97kHz, 1-256 coding
272 2 WriteRawRC(RegModWidth,0x3F); // Modulation width: 9.44us
273 2 WriteRawRC(RegModWidthSOF,0x3F); // Standard mode: 9.44us
274 2 WriteRawRC(RegTypeBFraming,0x00);
275 2
276 2 WriteRawRC(RegRxControl1,0x8b);
277 2 WriteRawRC(RegDecoderControl,0x34);
278 2 WriteRawRC(RegBitPhase,0xcd);
279 2 WriteRawRC(RegRxThreshold,0x88);
280 2 WriteRawRC(RegBPSKDemControl,0);
281 2 WriteRawRC(RegRxControl2,0x01);
282 2 WriteRawRC(RegClockQControl,0x00);
283 2
284 2 WriteRawRC(RegRxWait,0x08);
285 2 WriteRawRC(RegChannelRedundancy,0x2C); // Enable CRC TX/RX
286 2 WriteRawRC(RegCRCPresetLSB,0xFF);
287 2 WriteRawRC(RegCRCPresetMSB,0xFF);
288 2 WriteRawRC(RegTimeSlotPeriod,0x00);
289 2 WriteRawRC(RegMfOutSelect,0x00); // enable SIGOUT = envelope
290 2 WriteRawRC(RFU27,0x00);
291 2
292 2 WriteRawRC(RegFIFOLevel,0x38);
293 2 WriteRawRC(RegTimerClock,0x0B);
294 2 WriteRawRC(RegTimerReload,0x00);
295 2 WriteRawRC(RegTimerControl,0x02); // TStopRxEnd=0,TStopRxBeg=1,
296 2 WriteRawRC(RFU2E,0x00);
297 2 WriteRawRC(RFU2F,0x00);
298 2 DelayMs(1);
299 2 PcdAntennaOn();
300 2 }
301 1 else{ return -1; }
302 1 return MI_OK;
303 1 }
C51 COMPILER V8.05a SLRC632 07/05/2010 23:34:44 PAGE 6
304
305
306 /////////////////////////////////////////////////////////////////////
307 //置RC632寄存器位
308 //input:reg=寄存器地址
309 // mask=置位值
310 /////////////////////////////////////////////////////////////////////
311 void SetBitMask(unsigned char reg,unsigned char mask)
312 {
313 1 char tmp = 0x0;
314 1 tmp = ReadRawRC(reg);
315 1 WriteRawRC(reg,tmp | mask); // set bit mask
316 1 }
317
318 /////////////////////////////////////////////////////////////////////
319 //清RC632寄存器位
320 //input:reg=寄存器地址
321 // mask=清位值
322 /////////////////////////////////////////////////////////////////////
323 void ClearBitMask(unsigned char reg,unsigned char mask)
324 {
325 1 char tmp = 0x0;
326 1 tmp = ReadRawRC(reg);
327 1 WriteRawRC(reg, tmp & ~mask); // clear bit mask
328 1 }
329
330 /////////////////////////////////////////////////////////////////////
331 //设置RC632定时器
332 //input:tmolength=设置值
333 /////////////////////////////////////////////////////////////////////
334 void PcdSetTmo(unsigned char tmoLength)
335 {
336 1 switch(tmoLength)
337 1 {
338 2 case 0: // (0.302 ms) FWI=0
339 2 WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
340 2 WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h21 =33(dec)
341 2 break;
342 2 case 1: // (0.604 ms) FWI=1
343 2 WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
344 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
345 2 break;
346 2 case 2: // (1.208 ms) FWI=2
347 2 WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
348 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
349 2 break;
350 2 case 3: // (2.416 ms) FWI=3
351 2 WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
352 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
353 2 break;
354 2 case 4: // (4.833 ms) FWI=4
355 2 WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
356 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
357 2 break;
358 2 case 5: // (9.666 ms) FWI=5
359 2 WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
360 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
361 2 break;
362 2 case 6: // (19.33 ms) FWI=6
363 2 WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
364 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
365 2 break;
C51 COMPILER V8.05a SLRC632 07/05/2010 23:34:44 PAGE 7
366 2 case 7: // (38.66 ms) FWI=7
367 2 WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
368 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
369 2 break;
370 2 case 8: // (77.32 ms) FWI=8
371 2 WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
372 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
373 2 break;
374 2 case 9: // (154.6 ms) FWI=9
375 2 WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
376 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
377 2 break;
378 2 case 10: // (309.3 ms) FWI=10
379 2 WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
380 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
381 2 break;
382 2 case 11: // (618.6 ms) FWI=11
383 2 WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
384 2 WriteRawRC(RegTimerReload,0x11);// TReloadVal = 'h21 =17(dec)
385 2 break;
386 2 case 12: // (1.2371 s) FWI=12
387 2 WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
388 2 WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h41 =33(dec)
389 2 break;
390 2 case 13: // (2.4742 s) FWI=13
391 2 WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
392 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h81 =65(dec)
393 2 break;
394 2 case 14: // (4.9485 s) FWI=14
395 2 WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
396 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
397 2 break;
398 2 case 15: // (4.9485 s) FWI=14
399 2 WriteRawRC(RegTimerClock,0x9); // TAutoRestart=0,TPrescale=4096*128
400 2 WriteRawRC(RegTimerReload,0x0ff);// TReloadVal = 'h81 =129(dec)
401 2 break;
402 2 default: //
403 2 WriteRawRC(RegTimerClock,0x19); // TAutoRestart=0,TPrescale=128
404 2 WriteRawRC(RegTimerReload,tmoLength);// TReloadVal = 'h6a =tmoLength(dec)
405 2 break;
406 2 }
407 1 WriteRawRC(RegTimerControl,0X06);
408 1 }
409
410 /////////////////////////////////////////////////////////////////////
411 //通过RC632和ISO14443卡通讯
412 //input: pi->MfCommand = RC632命令字
413 // pi->MfLength = 发送的数据长度
414 // pi->MfData[] = 发送数据
415 //output:status = 错误字
416 // pi->MfLength = 接收的数据BIT长度
417 // pi->MfData[] = 接收数据
418 /////////////////////////////////////////////////////////////////////
419 char PcdComTransceive(struct TranSciveBuffer *pi)
420 {
421 1 bit recebyte = 0;
422 1 char status;
423 1 unsigned char irqEn = 0x00;
424 1 unsigned char waitFor = 0x00;
425 1 unsigned char lastBits;
426 1 unsigned char n;
427 1 unsigned int i;
C51 COMPILER V8.05a SLRC632 07/05/2010 23:34:44 PAGE 8
428 1 switch (pi->MfCommand)
429 1 {
430 2 case PCD_IDLE:
431 2 irqEn = 0x00;
432 2 waitFor = 0x00;
433 2 break;
434 2 case PCD_WRITEE2:
435 2 irqEn = 0x11;
436 2 waitFor = 0x10;
437 2 break;
438 2 case PCD_READE2:
439 2 irqEn = 0x07;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -