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

📄 aplif.lst

📁 FS7805 使用ATA硬盘的demo
💻 LST
字号:
C51 COMPILER V7.02b   APLIF                                                                01/29/2007 09:36:07 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE APLIF
OBJECT MODULE PLACED IN .\Output\Aplif.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Aplif.c LARGE OPTIMIZE(SIZE) BROWSE INCDIR(.\Includes) DEBUG OBJECTEXTEND P
                    -RINT(.\Output\Aplif.lst) OBJECT(.\Output\Aplif.obj)

stmt level    source

   1          /*
   2          *********************************************************************************************************
   3          * File:     aplif.C
   4          * Contents:
   5          *
   6          * $Date:    04/06/06    Kimi    v0.1
   7          *           01/05/07    kevin   v0.2
   8          *           01/08/07    kevin   v0.3
   9          *
  10          * Copyright (c) 2007 Fameg, Inc. All rights reserved
  11          *********************************************************************************************************
  12          */
  13          
  14          #include "fs7805.h"
  15          #include "fs7805regs.h"
  16          #include "aplif.h"
  17          #include "string.h"
  18          
  19          
  20          /*
  21          *********************************************************************************************************
  22          *                                             ReadPIO8
  23          *
  24          * Description: Read ATA device register value
  25          *
  26          * Arguments  : register address
  27          *
  28          * Returns    : register value
  29          *********************************************************************************************************
  30          */
  31          BYTE  ReadPIO8 (BYTE addr)
  32          {
  33   1          BYTE    retval;
  34   1      
  35   1      
  36   1          while (!AplifIdle());             //wait for aplif idle
  37   1      
  38   1          OUTATAPI        = addr | (~ATAPI_ADDR_MASK & ATAPI_IDLE_VALUE);       //set register address
  39   1      
  40   1          retval          = APLIFS_DATX_L;  //start single read
  41   1      
  42   1          while (!AplifIdle());             //wait for read flow done
  43   1      
  44   1          retval          = APLIFS_DAT_L;   //read the regiser value
  45   1      
  46   1          return (retval);
  47   1      }
  48          
  49          
  50          /*
  51          *********************************************************************************************************
  52          *                                             ReadUDMA
  53          *
  54          * Description: Read data from ATA device with ultra dma mode
C51 COMPILER V7.02b   APLIF                                                                01/29/2007 09:36:07 PAGE 2   

  55          *
  56          * Arguments  : data number need to be read
  57          *
  58          * Returns    : none
  59          *********************************************************************************************************
  60          */
  61          
  62          void  ReadUDMA (WORD count)
  63          {
  64   1          INT8U   temp,i=0;
  65   1      
  66   1          SectorCount     = 0x01;
  67   1          while (!AplifIdle());                  //wait for aplif idle
  68   1      
  69   1          OUTATAPI=CS(3) | DA(0) | (~ATAPI_ADDR_MASK & ATAPI_IDLE_VALUE); //set chip select and Device address v
             -alue for the udma mode
  70   1      
  71   1          APLIFTCH        = (count >> 1) >> 8;  //set transaction count value
  72   1          APLIFTCL        = (count >> 1) & 0xFF;
  73   1      
  74   1          if (SectorCount == 0x80)
  75   1          {
  76   2              APLIFTCL    = 0x00;
  77   2              APLIFTCH    = 0x80;
  78   2          }
  79   1      
  80   1          FLOWSTATE       = 0x82;                    //enter into flowstate
  81   1      
  82   1          temp            = EPCAPLIFTRIG;            //start udma read flow
  83   1      
  84   1          while (1)
  85   1          {
  86   2              if ( SFI_EPINT & 0x04 )                 //wait for slave fifo interrupt
  87   2              {
  88   3                  PassIn();                           //reverse SW_IN_FIFO_Toggle
  89   3                  SFI_EPINT  = SFI_EPINT & ~0x04;     //clear slave fifo interrupt
  90   3                  EPCCS      = EPCCS | bmEP_RXTXEN;  // Enable RXTX  send data to usb bus
  91   3                  i++;
  92   3                  if (i == SectorCount) break;
  93   3              }
  94   2          }
  95   1          while (!(AplifIdle()));  //after all the usb data been sent and aplif enter in idle state then stop th
             -is IN transaction
  96   1          FLOWSTATE = 0x00 ;                          //leave flowstate
  97   1      }
  98          
  99           
 100          
 101          
 102          /*
 103          *********************************************************************************************************
 104          *                                             WritePIO8
 105          *
 106          * Description: write ATA device register
 107          *
 108          * Arguments  : register address and value need to be write
 109          *
 110          * Returns    : none
 111          *********************************************************************************************************
 112          */
 113          void  WritePIO8 (BYTE addr, BYTE indata)
 114          {
C51 COMPILER V7.02b   APLIF                                                                01/29/2007 09:36:07 PAGE 3   

 115   1      
 116   1          while (!AplifIdle());      //wait for aplif idle
 117   1      
 118   1          OUTATAPI        = addr | (~ATAPI_ADDR_MASK & ATAPI_IDLE_VALUE); //set register address
 119   1      
 120   1          APLIFS_DATX_L   = indata;  //start single write
 121   1      
 122   1          while (!AplifIdle());      //wait for write flow done
 123   1      
 124   1          OUTATAPI        = ATAPI_IDLE_VALUE;
 125   1      }
 126          
 127          
 128          /*
 129          *********************************************************************************************************
 130          *                                             WriteUDMA
 131          *
 132          * Description: Write data to ATA device with UDMA mode
 133          *
 134          * Arguments  : data number need to be write
 135          *
 136          * Returns    : none
 137          *********************************************************************************************************
 138          */
 139          
 140          
 141          void  WriteUDMA (WORD count) //manual
 142          {
 143   1           unsigned char i = 0;
 144   1      
 145   1          PassOut();                               //pass the first frame data to slave fifo
 146   1          SectorCount     = 0x01;
 147   1          while (!AplifIdle());                    //wait for aplif idle
 148   1      
 149   1          OUTATAPI=CS(3) | DA(0) | (~ATAPI_ADDR_MASK & ATAPI_IDLE_VALUE); //set chip select and Device address v
             -alue for the udma mode
 150   1      
 151   1          APLIFTCL        = (count >> 1) & 0xFF;  //set transaction count value
 152   1          APLIFTCH        = (count >> 1) >> 8;
 153   1      
 154   1          if (SectorCount == 0x80)
 155   1          {
 156   2              APLIFTCL        = 0x00;
 157   2              APLIFTCH        = 0x80;
 158   2          }
 159   1      
 160   1          FLOWSTATE       = 0x83;                   //enter into flowstate
 161   1      
 162   1          EPAAPLIFTRIG    = 0xAA;                   //start udma write flow
 163   1      
 164   1          while (1)
 165   1          {
 166   2              if ( SFI_EPINT & 0x01 )               //wait for slave fifo interrupt
 167   2              {
 168   3                  i++;
 169   3                  SFI_EPINT  = SFI_EPINT & ~0x01;   //clear slave fifo interrupt
 170   3                  EP1CS      = EP1CS | bmEP_RXTXEN; //enable usb receive next frame data
 171   3                  if (i < SectorCount)
 172   3                  {
 173   4                      while ((!(EPAFIFOCS & bmFIFO0_FULL)) && (!(EPAFIFOCS & bmFIFO1_FULL))); //wait for next fr
             -ame data received in fifo then start operation
 174   4                      PassOut();                    //pass usb data to slave fifo
C51 COMPILER V7.02b   APLIF                                                                01/29/2007 09:36:07 PAGE 4   

 175   4                  }
 176   3                  else
 177   3                  {
 178   4                      break;
 179   4                  }
 180   3              }
 181   2          }
 182   1          while (!AplifIdle());  //after all the usb data been sent and aplif enter in idle state then stop this
             - IN transaction
 183   1          FLOWSTATE       = 0x00;
 184   1      }
 185          
 186          
 187          
 188          /*
 189          *********************************************************************************************************
 190          *                                             ReadATAPI_STATUS_REG
 191          *
 192          * Description: Read ATA device status register value
 193          *
 194          * Arguments  : none
 195          *
 196          * Returns    : Status register value
 197          *********************************************************************************************************
 198          */
 199          BYTE  ReadATAPI_STATUS_REG (void)
 200          {
 201   1          return (ReadPIO8(ATA_ALT_STATUS_REG));
 202   1      }
 203          
 204          /*
 205          *********************************************************************************************************
 206          *                                             AbortAplif
 207          *
 208          * Description: Abort aplif transaction
 209          *
 210          * Arguments  : none
 211          *
 212          * Returns    : none
 213          *********************************************************************************************************
 214          */
 215          void  AbortAplif (void)
 216          {
 217   1          APLIFABORT      = 0xAA;
 218   1      }
 219          
 220          
 221          /*
 222          *********************************************************************************************************
 223          *                                             setFeatures
 224          *
 225          * Description: Set
 226          *
 227          * Arguments  : none
 228          *
 229          * Returns    : none
 230          *********************************************************************************************************
 231          */
 232          void setFeatures(BYTE command,BYTE subcommand)
 233          { 
 234   1          WritePIO8(ATA_DRIVESEL_REG, 0xE0);
 235   1          WaitForBusyBit();
C51 COMPILER V7.02b   APLIF                                                                01/29/2007 09:36:07 PAGE 5   

 236   1          WritePIO8(ATA_SECTOR_COUNT_REG,subcommand);  
 237   1          WritePIO8(ATAPI_FEATURE_REG,command);       // opcode 0x03 used for transfer mode 
 238   1          WritePIO8(ATAPI_COMMAND_REG,0xef);          // execute the command 
 239   1          WaitForBusyBit();
 240   1      }
 241          
 242          void init_udma_read()
 243          {
 244   1          FSLOGIC     = 0x36;//0xf1
 245   1          FSEQ0CTL    = 0x00;
 246   1          FSEQ1CTL    = 0x02;
 247   1          FSTB        = 0x90;
 248   1          FSHOLDON    = 0x19;
 249   1      }
 250          
 251          void init_udma_write()
 252          {
 253   1          FSLOGIC     = 0x70;
 254   1          FSEQ0CTL    = 0x00;
 255   1          FSEQ1CTL    = 0x08;
 256   1          FSTB        = 0x11;
 257   1      }
 258          
 259          
 260          
 261          void WaitForBusyBit(void)
 262          {
 263   1          while((ReadATAPI_STATUS_REG()&ATAPI_STATUS_BUSY_BIT));
 264   1          ReadATAPI_STATUS_REG();
 265   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    494    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       7
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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