⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal4ata.lst

📁 D12 USB源代码 硬盘
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   HAL4ATA                                                               02/17/2004 14:42:23 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE HAL4ATA
OBJECT MODULE PLACED IN Hal4ata.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Hal4ata.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*
   2          //////////////////////////////////////////////////////////////////////
   3          //
   4          // Copyright (c) 1999 - 2003 PHILIPS Semiconductors - APIC
   5          //
   6          // Module Name:
   7          //
   8          //     HAL4ATA.c
   9          //
  10          // Abstract:
  11          //
  12          //     This is HAL for IDE controllers.
  13          //
  14          // Author:
  15          //
  16          //     Hilbert Zhang ZhenYu
  17          //
  18          // Environment:
  19          //
  20          //     kernel mode only
  21          //
  22          // Notes:
  23          //
  24          // Revision History:
  25          //     Create Date: Nov. 19 1999
  26          //
  27          //////////////////////////////////////////////////////////////////////////////
  28          // Implementation Notes:
  29          */
  30          
  31          #include <reg51.h>                /* special function register declarations   */
  32          
  33          #undef   GLOBAL_EXT
  34          
  35          #include "SysCnfg.h"
  36          
  37          #include "BasicTyp.h"
  38          #include "common.h"
  39          
  40          #include "Hal4Sys.h"
  41          
  42          #include "ATA.h"
  43          #include "RBC.h"
  44          #include "RBCCmd.h"
  45          #include "Hal4ATA.h"
  46          
  47          #include "TPBulk.h"
  48          
  49          /*
  50          //*************************************************************************
  51          //  Public Data
  52          //*************************************************************************
  53          */
  54          STRUC_EXT TPBLK_STRUC   DATA_SEG        TPBulk_Block;
  55          #define     TPBulk_CBW                          TPBulk_Block.TPBulk_CommandBlock
C51 COMPILER V7.06   HAL4ATA                                                               02/17/2004 14:42:23 PAGE 2   

  56          #define     RBC_CDB                                     TPBulk_CBW.cdbRBC
  57          #define     RBC_LUN                                     TPBulk_CBW.bCBW_LUN
  58          #define     TPBulk_CSW                          TPBulk_Block.TPBulk_CommandStatus
  59          #define     Hal4ATA_Atapi                       RBC_CDB
  60          
  61          STRUC_EXT   HW_ATA_DEVICES_EXTENSION    Hal4ATA_DevExt;
  62          #define     ATADevExt_IDData            Hal4ATA_DevExt.IdentifyData
  63          
  64          BIT_EXT     ATABF_IsAttached;
  65          BIT_EXT     ATABF_IsSupportMultiSector;
  66          BIT_EXT     ATABF_IDEXfer_dir;
  67          BIT_EXT     ATABF_IsSkipSetParameters;
  68          
  69          INT8_EXT    Hal4ATA_SectCntInBlk;
  70          /*
  71          //*************************************************************************
  72          //  Private Data
  73          //*************************************************************************
  74          */
  75          // Static
  76          INT8 BDATA_SEG  Hal4ATA_StatusByte;
  77          sbit                    Hal4ATA_StatusByte_ERR  = Hal4ATA_StatusByte^0;
  78          sbit                    Hal4ATA_StatusByte_IDX  = Hal4ATA_StatusByte^1;
  79          sbit                    Hal4ATA_StatusByte_CORR = Hal4ATA_StatusByte^2;
  80          sbit                    Hal4ATA_StatusByte_DRQ  = Hal4ATA_StatusByte^3;
  81          sbit                    Hal4ATA_StatusByte_DSC  = Hal4ATA_StatusByte^4;
  82          sbit                    Hal4ATA_StatusByte_DF   = Hal4ATA_StatusByte^5;
  83          sbit                    Hal4ATA_StatusByte_DRDY = Hal4ATA_StatusByte^6;
  84          sbit                    Hal4ATA_StatusByte_BSY  = Hal4ATA_StatusByte^7;
  85          
  86          INT8 BDATA_SEG  Hal4ATA_DevReg = 0xA0;
  87          sbit                    Hal4ATA_DevReg_DEV  = Hal4ATA_DevReg^4;
  88          sbit                    Hal4ATA_DevReg_b5   = Hal4ATA_DevReg^5;
  89          sbit                    Hal4ATA_DevReg_LBA  = Hal4ATA_DevReg^6;
  90          sbit                    Hal4ATA_DevReg_b7   = Hal4ATA_DevReg^7;
  91          
  92          // Temp
  93          FLEXI_INT32             Hal4ATA_Track;
  94          INT8                    Hal4ATA_drvSelect;
  95          
  96          
  97          
  98          
  99          /*
 100          //*************************************************************************
 101          //  Subroutines -- Level 1
 102          //*************************************************************************
 103          */
 104          void
 105          Hal4ATA_GetStatus(void)
 106          {
 107   1              Hal4ATA_StatusByte = Hal4Sys_ATAPortInB(ATAREG4IN_ALTERNATE_STATUS);
 108   1      }
 109          
 110          BOOLEAN
 111          Hal4ATA_WaitOnBusyNDrdy(void)
 112          {
 113   1          BOOLEAN retStatus = FALSE;
 114   1          while(TRUE)
 115   1              {
 116   2                      Hal4ATA_GetStatus();
 117   2              // if IDE_STATUS_BUSY && !IDE_STATUS_DRDY
C51 COMPILER V7.06   HAL4ATA                                                               02/17/2004 14:42:23 PAGE 3   

 118   2              //Hal4ATA_StatusByte_ERR  = Hal4ATA_StatusByte^0
 119   2                      if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
 120   2              {
 121   3                  break;
 122   3              }
 123   2              else 
 124   2                              if(Hal4ATA_StatusByte_BSY !=0 || Hal4ATA_StatusByte_DRDY !=1)
 125   2                              //if(Hal4ATA_StatusByte_BSY !=0 )
 126   2                                      Hal4Sys_Wait4US();
 127   2                      else
 128   2                      {
 129   3                      retStatus = TRUE;
 130   3                              break;
 131   3                      }
 132   2              }
 133   1              return retStatus;
 134   1      }
 135          
 136          
 137          BOOLEAN
 138          Hal4ATA_WaitOnBusyNDrq(void)
 139          {
 140   1          BOOLEAN retStatus = FALSE;
 141   1          while(TRUE)
 142   1              {       Hal4ATA_GetStatus();
 143   2                      if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
 144   2              {
 145   3                  break;
 146   3              }
 147   2              else 
 148   2                              if(Hal4ATA_StatusByte_BSY !=0 || Hal4ATA_StatusByte_DRQ !=1)
 149   2                                      Hal4Sys_Wait4US();
 150   2                      else
 151   2                      {
 152   3                                      retStatus = TRUE;
 153   3                      break;
 154   3                      }
 155   2              }
 156   1          return TRUE;
 157   1      }
 158          
 159          
 160          
 161          BOOLEAN
 162          Hal4ATA_WaitOnBusy(void)
 163          {
 164   1          BOOLEAN retStatus = FALSE;
 165   1          while(TRUE)
 166   1              {
 167   2                      Hal4ATA_GetStatus();
 168   2                      if (Hal4ATA_StatusByte_ERR != 0 || Hal4ATA_StatusByte_DF != 0)
 169   2              {
 170   3                  break;
 171   3              }
 172   2              else 
 173   2                              if(Hal4ATA_StatusByte_BSY)
 174   2                      {
 175   3                                      Hal4Sys_Wait4US();
 176   3                      }
 177   2                              else
 178   2                      {
 179   3                      retStatus = TRUE;
C51 COMPILER V7.06   HAL4ATA                                                               02/17/2004 14:42:23 PAGE 4   

 180   3                                      break;
 181   3                      }
 182   2              }
 183   1         return retStatus;
 184   1      }
 185          
 186          
 187          /*
 188          //*************************************************************************
 189          //  Subroutines -- Level 2
 190          //*************************************************************************
 191          */
 192          BOOLEAN
 193          Hal4ATA_SelDevice(void)
 194          {
 195   1          BOOLEAN retStatus = FALSE;
 196   1          if(Hal4ATA_WaitOnBusy())
 197   1          {
 198   2              // ATAREG4OUT_DEVICE_HEAD =  ATAREG_GRP0+6 = 0x56
 199   2              // ATAREG_GRP0 =0x50
 200   2              // BUFF_DIR_RD, !D12CS, !BUFF_EN, !IDE_CS1, !IDE_CS0,  A2,      A1, A0
 201   2              //0x56          0               1               0                       1               0               1       1       0
 202   2              Hal4Sys_ATAPortOutB(ATAREG4OUT_DEVICE_HEAD,Hal4ATA_DevReg);
 203   2              retStatus = Hal4ATA_WaitOnBusyNDrdy();
 204   2          }
 205   1          return retStatus;
 206   1      }
 207          
 208          
 209          /*
 210          //*************************************************************************
 211          //  Subroutines -- level 4
 212          //*************************************************************************
 213          */
 214          
 215          BOOLEAN
 216          Hal4ATA_IssueIDEIdentify(void)
 217          {
 218   1          INT16 i;
 219   1          BOOLEAN retStatus = FALSE;
 220   1          // Select device.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -