亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? m500auc.c

?? 一個射頻卡開發板 iso4443規范 學習智能卡的好資料
?? C
?? 第 1 頁 / 共 5 頁
字號:
                                             // otherwise ignore the interrupt
         }
         
      }
   }
}

///////////////////////////////////////////////////////////////////////
//         S e t   T i m e o u t   L E N G T H
///////////////////////////////////////////////////////////////////////
void M500PcdSetTmo(unsigned char tmoLength)
{
   switch(tmoLength)
   {  // timer clock frequency 13,56 MHz
      case 1:                       // short timeout (1,0 ms)
         WriteIO(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
         WriteIO(RegTimerReload,0x6a);// TReloadVal = 'h6a =106(dec) 
         break;
      case 2:                       // medium timeout (1,5 ms)
         WriteIO(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
         WriteIO(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec) 
         break;
      case 3:                       // medium timeout (6 ms)
         WriteIO(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
         WriteIO(RegTimerReload,0xa0);// TReloadVal = 'ha0 =160(dec) 
         break;
      case 4:                       // long timeout (9.6 ms)
         WriteIO(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
         WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec) 
         break;
      case 5:                       // long timeout (38.5 ms)
         WriteIO(RegTimerClock,0x0b); // TAutoRestart=0,TPrescale=16*128
         WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec) 
         break;
      case 6:                       // long timeout (154 ms)
         WriteIO(RegTimerClock,0x0d); // TAutoRestart=0,TPrescale=64*128
         WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec) 
         break;
      case 7:                       // long timeout (616.2 ms)
         WriteIO(RegTimerClock,0x0f); // TAutoRestart=0,TPrescale=256*128
         WriteIO(RegTimerReload,0xff);// TReloadVal = 'hff =255(dec) 
         break;
      default:                       // 
         WriteIO(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
         WriteIO(RegTimerReload,tmoLength);// TReloadVal = 'h6a =tmoLength(dec) 
         break;
   }     
}

//////////////////////////////////////////////////////////////////////
//       W R I T E   A   P C D   C O M M A N D 
///////////////////////////////////////////////////////////////////////
char  M500PcdCmd(unsigned char cmd,
               volatile unsigned char* send, 
               volatile unsigned char* rcv,
               volatile MfCmdInfo *info)
{     
   char          idata status    = MI_OK;
   char          idata tmpStatus ;
   unsigned char idata lastBits;

   unsigned char idata irqEn     = 0x00;
   unsigned char idata waitFor   = 0x00;
   unsigned char idata timerCtl  = 0x00;

   WriteIO(RegInterruptEn,0x7F); // disable all interrupts
   WriteIO(RegInterruptRq,0x7F); // reset interrupt requests
   WriteIO(RegCommand,PCD_IDLE); // terminate probably running command

   FlushFIFO();            // flush FIFO buffer

   // save info structures to module pointers
   MpIsrInfo = info;  
   MpIsrOut  = send;
   MpIsrIn   = rcv;

   info->irqSource = 0x0; // reset interrupt flags
   // depending on the command code, appropriate interrupts are enabled (irqEn)
   // and the commit interrupt is choosen (waitFor).
   switch(cmd)
   {
      case PCD_IDLE:                   // nothing else required
         irqEn = 0x00;
         waitFor = 0x00;
         break;
      case PCD_WRITEE2:                // LoAlert and TxIRq
         irqEn = 0x11;
         waitFor = 0x10;
         break;
      case PCD_READE2:                 // HiAlert, LoAlert and IdleIRq
         irqEn = 0x07;
         waitFor = 0x04;
         break;
      case PCD_LOADCONFIG:             // IdleIRq
      case PCD_LOADKEYE2:              // IdleIRq
      case PCD_AUTHENT1:               // IdleIRq
         irqEn = 0x05;
         waitFor = 0x04;
         break;
      case PCD_CALCCRC:                // LoAlert and TxIRq
         irqEn = 0x11;
         waitFor = 0x10;
         break;
      case PCD_AUTHENT2:               // IdleIRq
         irqEn = 0x04;
         waitFor = 0x04;
         break;
      case PCD_RECEIVE:                // HiAlert and IdleIRq
         info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4);
         irqEn = 0x06;
         waitFor = 0x04;
         break;
      case PCD_LOADKEY:                // IdleIRq
         irqEn = 0x05;
         waitFor = 0x04;
         break;
      case PCD_TRANSMIT:               // LoAlert and IdleIRq
         irqEn = 0x05;
         waitFor = 0x04;
         break;
      case PCD_TRANSCEIVE:             // TxIrq, RxIrq, IdleIRq and LoAlert
	 info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4);
         irqEn = 0x3D;
         waitFor = 0x04;
         break;
      default:
         status = MI_UNKNOWN_COMMAND;
   }        
   if (status == MI_OK)
   {
      // Initialize uC Timer for global Timeout management
      irqEn |= 0x20;                        // always enable timout irq
      waitFor |= 0x20;                      // always wait for timeout 

      start_timeout(4000);          // initialise and start guard timer for reader
      				    // 50us resolution, 200ms
      
      WriteIO(RegInterruptEn,irqEn | 0x80);  //necessary interrupts are enabled
      WriteIO(RegCommand,cmd);               //start command   

      // wait for commmand completion
      // a command is completed, if the corresponding interrupt occurs
      // or a timeout is signaled  

      while (!(MpIsrInfo->irqSource & waitFor
               || T2IR));                // wait for cmd completion or timeout

      WriteIO(RegInterruptEn,0x7F);          // disable all interrupts
      WriteIO(RegInterruptRq,0x7F);          // clear all interrupt requests
      SetBitMask(RegControl,0x04);           // stop timer now

      stop_timeout();  			// stop timeout for reader
      WriteIO(RegCommand,PCD_IDLE);          // reset command register


      if (!(MpIsrInfo->irqSource & waitFor))   // reader has not terminated
      {                                // timer 2 expired
         status = MI_ACCESSTIMEOUT;
      }
      else
         status = MpIsrInfo->status;           // set status

      if (status == MI_OK)                     // no timeout error occured
      {
         if (tmpStatus = (ReadIO(RegErrorFlag) & 0x17)) // error occured
         {
            if (tmpStatus & 0x01)   // collision detected
            {
               info->collPos = ReadIO(RegCollpos); // read collision position
               status = MI_COLLERR;
            }
            else
            {
               info->collPos = 0;
               if (tmpStatus & 0x02)   // parity error
               {
                  status = MI_PARITYERR;
               }
            }
            if (tmpStatus & 0x04)   // framing error
            {
               status = MI_FRAMINGERR;
            }
            if (tmpStatus & 0x10)   // FIFO overflow
            {
               FlushFIFO();
               status = MI_OVFLERR;
            }
 	    if (tmpStatus & 0x08) //CRC error
	    {
               status = MI_CRCERR;
	    }	
            if (status == MI_OK)
               status = MI_NY_IMPLEMENTED;
            // key error occures always, because of 
            // missing crypto 1 keys loaded
         }
         // if the last command was TRANSCEIVE, the number of 
         // received bits must be calculated - even if an error occured
         if (cmd == PCD_TRANSCEIVE)
         {
            // number of bits in the last byte
            lastBits = ReadIO(RegSecondaryStatus) & 0x07;
            if (lastBits)
               info->nBitsReceived += (info->nBytesReceived-1) * 8 + lastBits;
            else
               info->nBitsReceived += info->nBytesReceived * 8;
         }
      }
      else
      {
         info->collPos = 0x00;
      }
   }
   MpIsrInfo = 0;         // reset interface variables for ISR
   MpIsrOut  = 0;
   MpIsrIn   = 0; 
   return status;
}   

//////////////////////////////////////////////////////////////////////
//   S E T   A   B I T   M A S K 
///////////////////////////////////////////////////////////////////////
char SetBitMask(unsigned char reg,unsigned char mask) // 
{
   char idata tmp = 0x0;

   tmp = ReadIO(reg);
   WriteIO(reg,tmp | mask);  // set bit mask
   return 0x0;
}

//////////////////////////////////////////////////////////////////////
//   C L E A R   A   B I T   M A S K 
///////////////////////////////////////////////////////////////////////
char ClearBitMask(unsigned char reg,unsigned char mask) // 
{
   char idata tmp = 0x0;

   tmp = ReadIO(reg);
   WriteIO(reg,tmp & ~mask);  // clear bit mask
   return 0x0;
}

///////////////////////////////////////////////////////////////////////
//                  F L U S H    F I F O
///////////////////////////////////////////////////////////////////////
void FlushFIFO(void)
{  
   SetBitMask(RegControl,0x01);
}

///////////////////////////////////////////////////////////////////////
//      M I F A R E   M O D U L E   R E S E T 
///////////////////////////////////////////////////////////////////////
char M500PcdReset(void)
{
   char idata status = MI_OK;
   
   RC500RST = 0;  // clear reset pin
   delay_1ms(25);  // wait for 25ms    
   RC500RST = 1;   // reset RC500
   delay_50us(50);  // wait for 2.5ms
   RC500RST = 0;  // clear reset pin

   start_timeout(42000); 	// count down with a period of 50 us
   			        // 42000 * 50 us = 2.1 s
   
  // wait until reset command recognized
   while (((ReadRawIO(RegCommand) & 0x3F) != 0x3F) && !T2IR);
   // while reset sequence in progress
   while ((ReadRawIO(RegCommand) & 0x3F) && !T2IR); 
   
   stop_timeout();  		// stop timeout counter

   if (T2IR) 		// If reader timeout occurs
   {
      status = MI_RESETERR; // respose of reader IC is not correct
      T2IR   = 0;
   }
   else
   {
      WriteRawIO(RegPage,0x80); // Dummy access in order to determine the bus 
                                // configuration
      // necessary read access 
      // after first write access, the returned value
      // should be zero ==> interface recognized
      if (ReadRawIO(RegCommand) != 0x00)
      {                           
          status = MI_INTERFACEERR;
      }
      WriteRawIO(RegPage,0x00); // configure to linear address mode
      	
   }
   return status;
}

///////////////////////////////////////////////////////////////////////
//      M I F A R E   M O D U L E   C O N F I G U R A T I O N
///////////////////////////////////////////////////////////////////////
char M500PcdConfig(void)
{
   char idata status;
   char idata i;
   char idata j;

   if ((status = M500PcdReset()) == MI_OK)
   {
     // test clock Q calibration - value in the range of 0x46 expected
     WriteIO(RegClockQControl,0x0);
     WriteIO(RegClockQControl,0x40);
     delay_50us(2);  // wait approximately 100 us - calibration in progress
     ClearBitMask(RegClockQControl,0x40); // clear bit ClkQCalib for 
                                          // further calibration

     // The following values for RegBitPhase and
     // RegRxThreshold represents an optimal
     // value for our demo package. For user
     // implementation some changes could be
     // necessary
     // initialize bit phase
     WriteIO(RegBitPhase,0xAD);      

     // initialize minlevel
     WriteIO(RegRxThreshold,0xFF);   
  
     // disable auto power down
     WriteIO(RegRxControl2,0x01);

     // Depending on the processing speed of the
     // operation environment, the waterlevel 
     // can be adapted. (not very critical for
     // mifare applications)
     // initialize waterlevel to value 4
     WriteIO(RegFIFOLevel,0x04);   
     
     //Timer configuration
     WriteIO(RegTimerControl,0x02);  // TStopRxEnd=0,TStopRxBeg=0,
                                     // TStartTxEnd=1,TStartTxBeg=0  
                           // timer must be stopped manually
     M500PcdSetTmo(1);               // short timeout

     WriteIO(RegIRqPinConfig,0x03); // interrupt active low enable

     M500PcdRfReset(1);            // Rf - reset and enable output driver   

     // initialize internal key memory     
     for (i = 0; i < 16; i++)
        for (j = 0; j < 12; j++)
           MKeys[i][j] = 0xff;
   }
   return status;
}

///////////////////////////////////////////////////////////////////////
//          M I F A R E   R E M O T E   A N T E N N A
//  Configuration of slave module
///////////////////////////////////////////////////////////////////////
char M500PcdMfInOutSlaveConfig(void)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久人人97超碰com| 一区二区三区在线视频观看| 亚洲一区二区在线免费看| 不卡的av电影在线观看| 国产精品美女久久久久高潮| 99视频国产精品| 91精品国产麻豆国产自产在线| 亚洲精品免费在线观看| 91.com在线观看| 国产成人自拍网| 一区二区三区欧美日韩| 日韩欧美一级二级三级久久久 | 久久伊人中文字幕| 国产高清久久久| 亚洲婷婷在线视频| 日韩一区二区三区观看| 成人免费毛片高清视频| 亚洲成人av免费| 欧美一区二区三区四区在线观看| 久久精品国产99久久6| 中文欧美字幕免费| 日韩视频在线一区二区| 91丨九色丨黑人外教| 国内久久精品视频| 亚洲一二三区在线观看| 亚洲国产精品成人久久综合一区 | 欧美色图12p| 99精品久久只有精品| 国产精品一区二区你懂的| 一区二区三区四区激情 | 3d动漫精品啪啪一区二区竹菊| 国产美女久久久久| 久久99久久99| 五月综合激情婷婷六月色窝| 亚洲三级电影全部在线观看高清| 欧美电影精品一区二区| 欧美不卡视频一区| 日韩精品一区二区三区在线播放| 欧美日韩午夜在线视频| 91网上在线视频| 色婷婷综合久久久久中文 | 亚洲国产精品久久久久婷婷884 | 五月婷婷色综合| 欧美福利视频一区| 欧美高清hd18日本| 丁香六月久久综合狠狠色| 不卡一卡二卡三乱码免费网站| 欧美伦理视频网站| 91在线高清观看| 男人的天堂久久精品| 午夜久久久久久久久久一区二区| 亚洲免费毛片网站| 日韩成人精品在线观看| 不卡一区二区三区四区| 色综合婷婷久久| 欧美一级久久久久久久大片| 久久久久久久久久久久久久久99 | 一本色道久久综合精品竹菊| 色婷婷激情久久| 久久天天做天天爱综合色| 国产精品久久久久久户外露出 | 亚洲日本一区二区| 亚洲.国产.中文慕字在线| 国产成人欧美日韩在线电影| 欧美伊人久久久久久久久影院 | 国产精品电影一区二区| 亚洲人吸女人奶水| 国产一区欧美日韩| 欧美高清精品3d| 亚洲成人av一区| 9人人澡人人爽人人精品| 欧美日韩成人综合| 亚洲成人激情社区| 欧美日韩午夜精品| 亚洲婷婷国产精品电影人久久| 久久精品国产一区二区三| 欧美喷潮久久久xxxxx| 亚洲一二三级电影| 色老汉一区二区三区| 久久久精品免费观看| 国产成人综合亚洲网站| 26uuu亚洲| 粉嫩久久99精品久久久久久夜 | 日韩欧美中文字幕精品| 美国十次了思思久久精品导航| 欧美男男青年gay1069videost| 亚洲色图清纯唯美| 91久久精品国产91性色tv| 亚洲国产视频一区| 欧美一区二区三区四区在线观看| 另类小说一区二区三区| 精品国产91九色蝌蚪| 久久99精品久久久久婷婷| 日本高清成人免费播放| 性做久久久久久久久| www.欧美日韩国产在线| 亚洲最大的成人av| 精品蜜桃在线看| 欧美日韩小视频| 从欧美一区二区三区| 午夜伊人狠狠久久| 中文字幕 久热精品 视频在线 | 麻豆精品久久精品色综合| 欧美国产精品一区| 欧美成人一区二区三区片免费| 国产最新精品精品你懂的| 一区二区三区四区蜜桃| 久久久欧美精品sm网站| 91成人网在线| 裸体一区二区三区| 亚洲综合在线视频| 亚洲视频中文字幕| 国产精品网友自拍| 久久久精品tv| 国产精品视频九色porn| 久久一区二区三区国产精品| 91精品国产色综合久久不卡蜜臀| 色婷婷综合久久| 国产91精品久久久久久久网曝门| 免费观看30秒视频久久| 亚洲成a人v欧美综合天堂| 亚洲裸体xxx| 亚洲一区二区视频| 亚洲国产精品一区二区尤物区| 尤物视频一区二区| 国产亚洲一本大道中文在线| 日韩—二三区免费观看av| 国产午夜精品一区二区三区视频| 精品国产露脸精彩对白| 久久九九国产精品| 亚洲人成网站在线| 亚洲成人自拍网| 免费的成人av| 懂色av一区二区三区蜜臀| 91性感美女视频| 日韩欧美一卡二卡| 中文字幕va一区二区三区| 亚洲欧美日韩国产另类专区| 婷婷开心激情综合| 蜜臀av在线播放一区二区三区| 午夜一区二区三区在线观看| 蜜臀av一区二区| 韩国午夜理伦三级不卡影院| 亚洲电影中文字幕在线观看| 日本欧美一区二区三区乱码| 成人免费的视频| 日韩欧美国产三级电影视频| 亚洲视频香蕉人妖| 久久精品国产在热久久| 一本色道久久综合狠狠躁的推荐| 精品少妇一区二区三区在线视频| 欧美经典三级视频一区二区三区| 中文字幕亚洲欧美在线不卡| 午夜精品一区在线观看| 色欧美日韩亚洲| 欧美精彩视频一区二区三区| 日韩影院在线观看| 色综合亚洲欧洲| 精品国产区一区| 亚洲视频小说图片| 成人短视频下载| 久久久99精品免费观看| 激情综合五月婷婷| 欧美xxxxx牲另类人与| 久久精品国产99国产| 日韩欧美不卡一区| 精品综合免费视频观看| 欧美酷刑日本凌虐凌虐| 一区二区高清在线| 欧美嫩在线观看| 六月丁香婷婷久久| 国产精品久久久久久久蜜臀| 狠狠色丁香婷婷综合| 日韩视频国产视频| 国产自产2019最新不卡| 国产精品对白交换视频| 欧美体内she精高潮| 精品一区二区免费在线观看| 久久夜色精品国产噜噜av | 国产美女精品人人做人人爽| 欧美大白屁股肥臀xxxxxx| 久久99热狠狠色一区二区| 欧美性一级生活| 精品亚洲成av人在线观看| 国产精品久久久久婷婷| 欧美中文字幕久久| 精品一区二区三区免费| 欧美性高清videossexo| 岛国精品在线播放| 久久精品国产一区二区三| 中文字幕不卡一区| 2023国产精品自拍| 欧美情侣在线播放| 粉嫩久久99精品久久久久久夜 | 成人丝袜高跟foot| 蜜芽一区二区三区| 亚洲成av人片一区二区梦乃| 久久精品一区二区三区四区| 日韩精品成人一区二区三区| 中文字幕亚洲一区二区va在线|