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

📄 main.lst

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


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

stmt level    source

   1          /*
   2          *********************************************************************************************************
   3          * File:     Main.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          #define ALLOCATE_EXTERN                                // Declare GLOBAL variables and functions
  15          
  16          #include "Include.h" 
  17          #include "fs7805regs.h" 
  18          #include "aplif.h"
  19          #include "string.h" 
  20           
  21          xdata INT8U OutBuffer[512];
  22          union FIFODataLen
  23          {
  24              INT16U  Val;
  25              INT8U   Byte[2];
  26          }; 
  27          static  union FIFODataLen Length;
  28          
  29          
  30          
  31          
  32          
  33          
  34          void main(void)
  35          { 
  36   1          TdInit();
  37   1          WriteOutFIFO(0x01);                       //move data to OutFIFO  
  38   1          WriteOneSector(0x07);                     //write data to IDE device 
  39   1          ReadOneSector(0x07);                      //read the 7th sector data from IDE device  
  40   1          while(1);
  41   1      }
  42          
  43          void  WriteOneSector (INT8U sector)
  44          {
  45   1          WritePIO8(ATA_DRIVESEL_REG, 0xE0);        
  46   1          WritePIO8(ATA_SECTOR_COUNT_REG,1);        //write sector counter value to IDE register 
  47   1          WritePIO8(ATA_LBA_LSB_REG, sector);       //write address to IDE register 
  48   1          WritePIO8(ATA_LBA_2SB_REG, 0);
  49   1          WritePIO8(ATA_LBA_MSB_REG, 0);
  50   1          
  51   1          init_udma_write();                        //initialize UDMA relegated register
  52   1          while ((ReadATAPI_STATUS_REG() != 0x50)); //wait for IDE device ready 
  53   1          WritePIO8 (ATA_COMMAND_REG, 0xCA);        //write WRITE command to IDE register 
  54   1          while ((ReadATAPI_STATUS_REG() & 0x88) != 0x08); //wait for IDE device ready 
C51 COMPILER V7.02b   MAIN                                                                 01/29/2007 09:36:07 PAGE 2   

  55   1          WriteUDMA(0x200);                         //FS7805 start write data with APLIF  
  56   1          while ((ReadATAPI_STATUS_REG() != 0x50));
  57   1      }
  58           
  59           
  60          void  ReadOneSector (INT8U sector)
  61          {
  62   1          WritePIO8(ATA_DRIVESEL_REG, 0xE0); 
  63   1          WritePIO8(ATA_SECTOR_COUNT_REG,1);         //write sector counter value to IDE register
  64   1          WritePIO8(ATA_LBA_LSB_REG, sector);        //write address to IDE register 
  65   1          WritePIO8(ATA_LBA_2SB_REG, 0); 
  66   1          WritePIO8(ATA_LBA_MSB_REG, 0);
  67   1          
  68   1          init_udma_read();                          //initialize UDMA relegated register
  69   1          WritePIO8(ATA_COMMAND_REG, 0xC8);          //write READ command to IDE register 
  70   1          while ((ReadATAPI_STATUS_REG() & 0x88) != 0x08); //wait for IDE device ready 
  71   1          ReadUDMA(0x200);                           //FS7805 start read data with APLIF 
  72   1          while ((ReadATAPI_STATUS_REG() != 0x50));
  73   1          
  74   1      } 
  75          
  76          void  WriteOutFIFO (INT8U sector)
  77          {
  78   1          union
  79   1          {
  80   1              INT8U   Val;
  81   1              struct
  82   1              {
  83   1                  INT8U   Count0 : 3;
  84   1                  INT8U          : 1;
  85   1                  INT8U   Count1 : 3;
  86   1                  INT8U          : 1;
  87   1              } Bit;
  88   1          } HighReg;
  89   1          INT16U   i;
  90   1      
  91   1           for (i = 0; i < BYTES_PER_SECTOR; i++)
  92   1              OutBuffer[i]        = (i + sector) ;
  93   1      
  94   1          Length.Val              = BYTES_PER_SECTOR;
  95   1          HighReg.Val             = EP1CNTH;
  96   1          ParseOut();
  97   1          EP1CNT0L                = Length.Byte[1];          // Write count low byte
  98   1          if (UsbDmaBuffer==DMA_FIFOA0)
  99   1          {
 100   2              HighReg.Bit.Count0  = Length.Byte[0] & 0x07;
 101   2              HighReg.Val         = HighReg.Val | bmCNT0HWEN;
 102   2          }
 103   1          else
 104   1          {
 105   2              HighReg.Bit.Count1  = Length.Byte[0] & 0x07;
 106   2              HighReg.Val         = HighReg.Val | bmCNT1HWEN;
 107   2          }
 108   1          EP1CNTH                 = HighReg.Val;             // Write count high byte 
 109   1       
 110   1          memcpy((INT8U xdata *)UsbDmaBuffer, OutBuffer, BYTES_PER_SECTOR);// Copy data 
 111   1      
 112   1          if (UsbDmaBuffer==DMA_FIFOA0)
 113   1          {                                                   
 114   2              EPAFIFOCS               = 0x44;                // Set FULL bit
 115   2              SFI_SKIP                = 0x01;
 116   2          }
C51 COMPILER V7.02b   MAIN                                                                 01/29/2007 09:36:07 PAGE 3   

 117   1          else
 118   1          {
 119   2              EPAFIFOCS               = 0x88;                // Set FULL bit
 120   2              SFI_SKIP                = 0x41;
 121   2          } 
 122   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    362    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    516       3
   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 + -