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

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

?? atareset.lst

?? HIGH_SPEED_USB_To_ATA(IDE)Firmware相關代碼(EZ USB FX2芯片)
?? LST
?? 第 1 頁 / 共 3 頁
字號:
C51 COMPILER V7.50   ATARESET                                                              11/07/2006 14:52:07 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE ATARESET
OBJECT MODULE PLACED IN atareset.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE atareset.c ROM(COMPACT) OPTIMIZE(9,SPEED) REGFILE(.\fx2_ata.ORC) BROWSE ORD
                    -ER INCDIR(c:\cypress\usb\target\inc) DEFINE(GPIF=0,FLASH=0,DEVICE_TYPE_IS_SCSI=1,DEVICE_TYPE_IS_IDE=1,VBUS_DETECT=1) DEB
                    -UG OBJECTEXTEND CODE

line level    source

   1          //-----------------------------------------------------------------------------
   2          //  Copyright (c) 1999-2001 Cypress Semiconductor, Inc. All rights reserved
   3          //-----------------------------------------------------------------------------
   4          //
   5          // This file contains the device initialization code.  
   6          //
   7          // $Archive: /USB/atapifx2/software/atareset.c $
   8          // $Date: 1/23/02 9:37a $
   9          // $Revision: 44 $
  10          //-----------------------------------------------------------------------------
  11          #include "fx2.h"
  12          #include "fx2regs.h"
  13          #include "gpif.h"
  14          
  15          char NumCylindersMSB; // global #Cyl MSB
  16          char NumCylindersLSB; // global #Cyl LSB
  17          char NumHeads;        // global #Heads
  18          char NumSectPerTrack; // global #SectorsPerTrack
  19          
  20          char MaxPIO;
  21          char udmaMode;      // global to keep track of which udma mode we are in
  22          xdata BYTE halfKBuffer[BUFFER_SIZE];
  23          idata char localSerialNumber[ATAPI_INQUIRY_SERIAL_LEN*2];
  24          bit bExtAddrSupport;
  25          
  26          void resetATAPIDevice()
  27          {
  28   1         // Select ATAPI device, read it back
  29   1         bit done = 0;
  30   1         BYTE driveStatus;
  31   1         #define MAX_COUNT 200
  32   1      
  33   1         BYTE count;
  34   1      
  35   1         while (!done)
  36   1         {
  37   2            // Pound the reset line
  38   2            hardwareReset();
  39   2      
  40   2            EZUSB_Delay(900);            // Mitsumi CR-4808TE(CYSD007) is a good test for this number.
  41   2      
  42   2            // Wait for the completion
  43   2            for (count = 0, driveStatus = readATAPI_STATUS_REG(); 
  44   2                 count < MAX_COUNT 
  45   2                     && ((driveStatus & ATAPI_STATUS_BUSY_BIT) || (driveStatus == 0x7f)) ; 
  46   2                 driveStatus = readATAPI_STATUS_REG(), count++)
  47   2            {
  48   3               EZUSB_Delay(50);            // Wait 50 ms to be polite
  49   3            }
  50   2              
  51   2            if (count == MAX_COUNT)  
  52   2               continue;
  53   2      
C51 COMPILER V7.50   ATARESET                                                              11/07/2006 14:52:07 PAGE 2   

  54   2            // Byte count should be a special code -- 0xeb14
  55   2            if (readPIO8(ATAPI_BYTE_COUNT_MSB) == 0xeb && readPIO8(ATAPI_BYTE_COUNT_LSB) == 0x14)
  56   2            {
  57   3               done = 1;
  58   3               scsi = 1;
  59   3            }
  60   2            else
  61   2            // device = ide
  62   2            {
  63   3               writePIO8(ATAPI_NULL_REG, 0xff);        // Pre-load the bus with 0xff -- Make sure someone drives
             - the 00's
  64   3               if ((readPIO8(ATA_ERROR_REG) & 0x7f) == 1)
  65   3               {
  66   4                  done = 1;
  67   4                  scsi = 0;
  68   4               }
  69   3               else
  70   3                  EZUSB_Delay(500);           // Wait 500 ms to make sure it's really ready.
  71   3            }
  72   2      
  73   2         }
  74   1      
  75   1         EZUSB_Delay(500);           // Wait 500 ms to make sure it's really ready.
  76   1      
  77   1         #if DEVICE_TYPE_IS_SCSI
  78   1         if (scsi)
  79   1            SCSITestUnitReady();
  80   1         #endif
  81   1      }
  82          
  83          
  84          
  85          void ATAPIIdDevice()
  86          {
  87   1         BYTE i;
  88   1         BYTE driveStatus;
  89   1      
  90   1         // Wait for the register block to be non-busy and for a "drive ready" condition
  91   1         do
  92   1         {
  93   2            writePIO8(ATAPI_DRIVESEL_REG, 0xa0);
  94   2            driveStatus = readATAPI_STATUS_REG();
  95   2         } while((driveStatus & (ATAPI_STATUS_BUSY_BIT | ATAPI_STATUS_DRDY_BIT)) != (ATAPI_STATUS_DRDY_BIT));   
             - // Do-while
  96   1      
  97   1         writePIO8(ATA_ERROR_REG, 0);            // Copied from Phoenix BIOS
  98   1         writePIO8(ATA_SECTOR_COUNT_REG, 1);
  99   1         writePIO8(ATA_LBA_LSB_REG     , 0xff);
 100   1         writePIO8(ATA_LBA_2SB_REG     , 0xff);
 101   1         writePIO8(ATA_LBA_MSB_REG     , 0);
 102   1         writePIO8(ATAPI_DRIVESEL_REG, 0xa0);
 103   1         writePIO8(ATAPI_CONTROL_REG, 0);        // Added later -- Make sure the nIEN bit is clear (active)
 104   1      
 105   1      
 106   1         // Send Identify device command
 107   1         if (scsi)
 108   1            writePIO8(ATAPI_COMMAND_REG, ATAPI_COMMAND_ID_DEVICE);
 109   1         else
 110   1            writePIO8(ATAPI_COMMAND_REG, IDE_COMMAND_ID_DEVICE);
 111   1      
 112   1         waitForIntrq();
 113   1              
C51 COMPILER V7.50   ATARESET                                                              11/07/2006 14:52:07 PAGE 3   

 114   1         // Wait for the register block to be non-busy and to have data ready
 115   1         do
 116   1         {
 117   2            driveStatus = readATAPI_STATUS_REG();
 118   2            if (driveStatus & ATAPI_STATUS_ERROR_BIT) // don't get stuck here with an error
 119   2               return;     
 120   2         } while((driveStatus & (ATAPI_STATUS_BUSY_BIT | ATAPI_STATUS_DRQ_BIT)) != (ATAPI_STATUS_DRQ_BIT));    /
             -/ Do-while
 121   1      
 122   1         // Read the data from the drive
 123   1         {
 124   2            char timeout = 10;
 125   2            
 126   2            while (!readPIO16toXdata(ATAPI_DATA_REG, halfKBuffer, BUFFER_SIZE, IGNORE_DRIVE_LEN))
 127   2               if (!timeout--)
 128   2                  break;
 129   2         }
 130   1      
 131   1         // Place the fields that we need into the SCSI block
 132   1         for (i = 0; i < SCSI_INQUIRY_MANUFACTURER_LEN; i++)
 133   1         {
 134   2            // swap bytes within words.  This is stored backwards!
 135   2            SCSIInquiryData_[SCSI_INQUIRY_MANUFACTURER+i] = halfKBuffer[ATAPI_INQUIRY_MANUFACTURER * 2 + (i ^ 1)
             -];
 136   2         }
 137   1      
 138   1         SCSIInquiryData_[SCSI_INQUIRY_REVISION+1] = halfKBuffer[ATAPI_INQUIRY_REVISION * 2]+'0';
 139   1         SCSIInquiryData_[SCSI_INQUIRY_REVISION+3] = halfKBuffer[ATAPI_INQUIRY_REVISION * 2 +2]+'0';
 140   1         SCSIInquiryData_[SCSI_INQUIRY_REMOVABLE_BYTE] |= SCSI_INQUIRY_REMOVABLE_BIT & halfKBuffer[ATAPI_INQUIRY
             -_REMOVABLE_BYTE];
 141   1              
 142   1         // BUG -- what is this doing? Reduce the command set for ATA
 143   1         if (!scsi)
 144   1            SCSIInquiryData_[SCSI_INQUIRY_DATA_FORMAT] = 0;
 145   1              
 146   1         // Copy serial number to our local storage area, converting zeroes to text.
 147   1         // It's stored as double byte characters, so zero every other byte.
 148   1         for (i = 0; i < ATAPI_INQUIRY_SERIAL_LEN; i++)
 149   1         {
 150   2            if (halfKBuffer[i+ATAPI_INQUIRY_SERIAL])
 151   2               localSerialNumber[i+i] = halfKBuffer[i+ATAPI_INQUIRY_SERIAL];
 152   2            else
 153   2               localSerialNumber[i+i] = '0';
 154   2            localSerialNumber[i+i+1] = 0;
 155   2         }
 156   1      
 157   1         // Check for large disk (48 bit) support.  ATA-6 spec below....
 158   1         // 6.2.1
 159   1         //    4) The contents of words (61:60) and (103:100) shall not be used to determine if 48-bit addressin
             -g is
 160   1         //       supported. IDENTIFY DEVICE bit 10 word 83 indicates support for 48-bit addressing.
 161   1         if (halfKBuffer[IDENTIFY_48BIT_ADDRESSING+1] & (1<<2))
 162   1            {
 163   2            bExtAddrSupport = 1;
 164   2            // This is actually smaller than a loop of 4!!
 165   2            // Yes, this only supports 0x100 00 00 00 sectors, which is 220,000GB (industry GB, not true)
 166   2            ((BYTE *)&driveCapacity)[3] = halfKBuffer[0+IDE_ID_TOTAL_48_BIT_SECTORS_LSW];
 167   2            ((BYTE *)&driveCapacity)[2] = halfKBuffer[1+IDE_ID_TOTAL_48_BIT_SECTORS_LSW];
 168   2            ((BYTE *)&driveCapacity)[1] = halfKBuffer[2+IDE_ID_TOTAL_48_BIT_SECTORS_LSW];
 169   2            ((BYTE *)&driveCapacity)[0] = halfKBuffer[3+IDE_ID_TOTAL_48_BIT_SECTORS_LSW];
 170   2            }
 171   1         else
C51 COMPILER V7.50   ATARESET                                                              11/07/2006 14:52:07 PAGE 4   

 172   1            {
 173   2            bExtAddrSupport = 0;
 174   2            // This is actually smaller than a loop of 4!!
 175   2            ((BYTE *)&driveCapacity)[3] = halfKBuffer[0+IDE_ID_TOTAL_SECTORS_LSW];
 176   2            ((BYTE *)&driveCapacity)[2] = halfKBuffer[1+IDE_ID_TOTAL_SECTORS_LSW];
 177   2            ((BYTE *)&driveCapacity)[1] = halfKBuffer[2+IDE_ID_TOTAL_SECTORS_LSW];
 178   2            ((BYTE *)&driveCapacity)[0] = halfKBuffer[3+IDE_ID_TOTAL_SECTORS_LSW];
 179   2            }
 180   1      
 181   1         NumCylindersMSB = halfKBuffer[IDENTIFY_NUM_CYLINDERS_MSB];
 182   1         NumCylindersLSB = halfKBuffer[IDENTIFY_NUM_CYLINDERS_LSB];
 183   1         NumHeads = halfKBuffer[IDENTIFY_NUM_HEADS];
 184   1         NumSectPerTrack = halfKBuffer[IDENTIFY_NUM_SECT_PER_TRACK];
 185   1      
 186   1         // check for PIO3 support (or greater)
 187   1         // 64 = word index to ID Device parameter block - LSB=value, MSB=reserved
 188   1         // if( (!scsi) && ( MaxPIO = halfKBuffer[(64*2)]) ).  WaveDataPio4 is used
 189   1         // for both PIO3 and PIO4, with PIO3 @ 30MHz, and PIO4 @ 48Mhz
 190   1         MaxPIO = halfKBuffer[IDENTIFY_ADVANCED_PIO];
 191   1         udmaMode = 0;
 192   1      
 193   1         // Check for UDMA support
 194   1         if ((halfKBuffer[IDENTIFY_FIELD_VALIDITY] & bmBIT2) &&
 195   1             (halfKBuffer[IDENTIFY_UDMA_MODES] & (UDMA_MODE2 | UDMA_MODE4)))
 196   1         {
 197   2            if (halfKBuffer[IDENTIFY_UDMA_MODES] & UDMA_MODE4)
 198   2            {
 199   3               udmaMode = TRANSFER_MODE_UDMA4;
 200   3            }
 201   2            else if (halfKBuffer[IDENTIFY_UDMA_MODES] & UDMA_MODE2)
 202   2            {
 203   3               udmaMode = TRANSFER_MODE_UDMA2;
 204   3            }
 205   2         }
 206   1      
 207   1         // If UDMA is supported, enable it.  If not, enable the highest PIO mode
 208   1         if (udmaMode)
 209   1         {
 210   2            configureATATransferMode(udmaMode);
 211   2            udmaErrorCount = 0;
 212   2            mymemmovexx(&GPIF_WAVE_DATA, (BYTE xdata *) WaveDataPio4, sizeof(WaveDataPio4));
 213   2         }
 214   1         else if(MaxPIO)
 215   1         {
 216   2            if(MaxPIO & PIO4) 
 217   2            {
 218   3               IFCONFIG |= 0x40;       // SET CLOCK TO 48MHZ
 219   3               configureATATransferMode(PIO_MODE4);                  // SCR_PIO4=0x0C, PIO-mode4
 220   3            }
 221   2            else if(MaxPIO & PIO3) 
 222   2            {
 223   3               configureATATransferMode(PIO_MODE3);                  // SCR_PIO3=0x0B, PIO-mode3
 224   3            }
 225   2      
 226   2            mymemmovexx(&GPIF_WAVE_DATA, (BYTE xdata *) WaveDataPio4, sizeof(WaveDataPio4));
 227   2         }
 228   1      
 229   1      
 230   1         driveCapacity -= 1;  // The command that reads drive capacity actually wants the last valid LBA.
 231   1         return;
 232   1      }
 233          
C51 COMPILER V7.50   ATARESET                                                              11/07/2006 14:52:07 PAGE 5   

 234          void configureATATransferMode(BYTE mode)
 235          {
 236   1            // select the drive and set new speed
 237   1            writePIO8(ATAPI_DRIVESEL_REG, 0xa0);
 238   1            writePIO8(ATA_SECTOR_COUNT_REG, mode);      
 239   1            writePIO8(ATAPI_FEATURE_REG, 0x03);                            // opcode 0x03 used for transfer mode
 240   1            writePIO8(ATAPI_COMMAND_REG, ATAPI_COMMAND_SET_FEATURES);      // execute the command   
 241   1      }
C51 COMPILER V7.50   ATARESET                                                              11/07/2006 14:52:07 PAGE 6   

ASSEMBLY LISTING OF GENERATED OBJECT CODE

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品毛片a∨一区二区三区| 日本韩国欧美在线| 丝袜亚洲精品中文字幕一区| 亚洲女同一区二区| 国产精品福利电影一区二区三区四区| 精品国产一区a| 精品美女在线观看| 精品免费视频.| 国产欧美一区二区精品婷婷| 久久久久久久久久久久电影| 久久久精品黄色| 国产精品国产三级国产普通话三级| 国产亚洲欧美中文| 中文一区二区完整视频在线观看| 国产欧美久久久精品影院| 日本一区二区三区四区| 日韩美女啊v在线免费观看| 亚洲美女一区二区三区| 午夜婷婷国产麻豆精品| 男女男精品视频| 国产99久久久国产精品| www.日本不卡| 欧美色视频在线| 久久久久久综合| ㊣最新国产の精品bt伙计久久| 一区二区三区.www| 精品一区精品二区高清| 波多野结衣欧美| 欧美日韩精品专区| 久久久久久亚洲综合| 亚洲精品国久久99热| 视频一区视频二区在线观看| 国产成都精品91一区二区三| 欧美日韩一区二区三区视频| 久久综合中文字幕| 成人欧美一区二区三区视频网页| 午夜一区二区三区在线观看| 蜜臀久久久99精品久久久久久| 成人高清视频在线| 欧美美女激情18p| 欧美成人艳星乳罩| 亚洲影视资源网| 国产suv一区二区三区88区| 777奇米四色成人影色区| 国产欧美精品一区aⅴ影院| 日日欢夜夜爽一区| 91女人视频在线观看| 久久亚洲捆绑美女| 日韩高清在线不卡| 在线区一区二视频| 亚洲图片激情小说| 国产成人精品免费网站| 欧美一级片免费看| 亚洲一区二区三区不卡国产欧美| 国产福利不卡视频| 这里只有精品视频在线观看| 亚洲三级在线播放| 高清不卡在线观看| 久久久国产一区二区三区四区小说| 亚洲一区视频在线| 欧美在线free| 伊人性伊人情综合网| eeuss国产一区二区三区| 精品国产免费人成在线观看| 首页国产欧美久久| 91精品国产综合久久婷婷香蕉 | 久久女同精品一区二区| 亚洲成人午夜电影| 欧美在线短视频| 依依成人综合视频| 欧美在线观看视频一区二区三区| 亚洲欧美日韩在线| 日本韩国一区二区三区| 伊人一区二区三区| 欧美日韩国产综合视频在线观看 | 精品国产成人在线影院 | 一区二区三区不卡视频| 色综合久久久久久久久| 最近中文字幕一区二区三区| 风间由美一区二区av101| 亚洲国产精品激情在线观看 | 在线一区二区视频| 夜色激情一区二区| 欧美老肥妇做.爰bbww视频| 亚洲成人www| 欧美一区二区高清| 国产一区二区三区高清播放| 久久精品日韩一区二区三区| 高清日韩电视剧大全免费| 中文字幕亚洲电影| 欧美撒尿777hd撒尿| 奇米精品一区二区三区四区| 久久综合国产精品| 不卡的av在线播放| 亚洲成人综合网站| 精品欧美久久久| 91香蕉视频黄| 日韩激情中文字幕| 久久精品亚洲国产奇米99| 97久久超碰国产精品| 亚洲成av人影院| 久久久久久久综合色一本| 色婷婷精品大在线视频| 麻豆视频一区二区| 自拍偷拍国产亚洲| 精品国产乱码久久久久久免费 | 成人丝袜高跟foot| 亚洲高清免费视频| 久久无码av三级| 色欧美乱欧美15图片| 久久福利资源站| 夜夜嗨av一区二区三区| 久久久99精品久久| 制服丝袜中文字幕一区| 粉嫩绯色av一区二区在线观看| 亚洲va韩国va欧美va精品| 国产欧美久久久精品影院| 欧美另类久久久品| 不卡一区中文字幕| 国产一区二区三区免费播放| 亚洲综合偷拍欧美一区色| 欧美xxxx老人做受| 欧美三级日韩三级| 99久久国产综合精品色伊| 蜜臀av一区二区在线免费观看| 亚洲靠逼com| 欧美精彩视频一区二区三区| 欧美日韩国产精选| 色婷婷综合久久久| 国内外成人在线| 麻豆精品一区二区av白丝在线| 亚洲美女视频在线观看| 国产亚洲欧美一级| 精品国产凹凸成av人导航| 精品视频999| 91九色最新地址| 色哟哟国产精品免费观看| 国产精品一区一区三区| 狠狠色丁香婷综合久久| 奇米四色…亚洲| 天天综合天天综合色| 亚洲精品第一国产综合野| 国产欧美日韩精品一区| 国产午夜亚洲精品理论片色戒| 9191国产精品| 欧美丰满嫩嫩电影| 欧美日韩久久久久久| 精品视频123区在线观看| 欧美亚洲尤物久久| 欧美日本一道本在线视频| 欧美亚洲一区三区| 欧美日韩精品专区| 91精品国产综合久久久久久久| 欧美日韩一区在线| 精品婷婷伊人一区三区三| 欧美唯美清纯偷拍| 制服丝袜亚洲网站| 337p粉嫩大胆噜噜噜噜噜91av| 日韩精品专区在线影院观看| 欧美一级片在线观看| 精品国产乱码久久久久久影片| 欧美α欧美αv大片| 国产婷婷一区二区| 中文av一区特黄| 亚洲精品少妇30p| 午夜精品一区二区三区三上悠亚 | 国产精品久久久久aaaa樱花| 国产精品电影院| 亚洲伦理在线精品| 水野朝阳av一区二区三区| 九一久久久久久| 国产激情偷乱视频一区二区三区| 成人黄色在线看| 欧美日韩色一区| 欧美大片日本大片免费观看| 国产亚洲欧美中文| 亚洲午夜av在线| 久久激情五月婷婷| 99久久精品一区二区| 欧美性videosxxxxx| 欧美一卡二卡三卡| 日本一区二区三区四区在线视频| 亚洲免费观看高清完整| 日韩高清不卡在线| 成人免费毛片嘿嘿连载视频| 91激情五月电影| 26uuu精品一区二区| 亚洲欧美激情在线| 理论电影国产精品| 日本韩国视频一区二区| 久久人人97超碰com| 一区二区三区四区av| 国产一区二区不卡在线| 在线观看视频一区| 国产婷婷色一区二区三区四区| 一区二区三区在线视频观看58| 国产尤物一区二区在线| 欧美精品乱码久久久久久| 国产精品国产三级国产普通话三级| 麻豆久久久久久|