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

📄 ata.lst

📁 ATMEL AT89C51SND1 IDE TO USB READER
💻 LST
📖 第 1 页 / 共 2 页
字号:
 201   1              WriteReg(DRV_HEAD,((s.secno[0] & 0x0f) | 0xE0));
 202   1              WriteReg(CYH,(s.secno[1]));
 203   1              WriteReg(CYL,(s.secno[2]));
 204   1              WriteReg(SN, (s.secno[3]));
 205   1              WriteReg(SC,gSectors);
 206   1              WriteReg(COMMAND,0X20); 
 207   1      
 208   1      
 209   1              for(i=0;i<gSectors;i++)//how many sector must to read
 210   1              {       
 211   2      
 212   2      
 213   2                      if ( ATAWaitDataReady() ) return 1;//WAIT BSY=0,DRQ=1.
 214   2                      Set_Adr_DATA(); 
 215   2                      P0 = 0xff;
 216   2                      P2 = 0xff;
C51 COMPILER V7.50   ATA                                                                   11/03/2008 13:09:04 PAGE 5   

 217   2                      bcnt=0;
 218   2      
 219   2                      for(j=0;j<8;j++)//64BYTE Packetsize*8 
 220   2                      {
 221   3                              for(Fcnt=0;Fcnt<64;Fcnt++)
 222   3                              {
 223   4                                      P3_7 = 0;
 224   4                                      UEPDATX = P0;//DATA7~0 
 225   4                                      Fcnt++;
 226   4                                      UEPDATX = P2;//DATA15~8
 227   4                                      P3_7 = 1;
 228   4                              }
 229   3                              Usb_set_TXRDY_bit();                       
 230   3                              while (!Usb_tx_complete_bit()){} 
 231   3                              Usb_clear_TXCMPL_bit();            //ack transfer 
 232   3      
 233   3                              gCBWDataLen=gCBWDataLen-64;     
 234   3                      }
 235   2              }
 236   1              if (ATAWaitCardReady()) return 1;
 237   1              return 0;
 238   1      }
 239          
 240          /**************************************************************************
 241          *  Function Name:ATAMultipleWrite
 242          *
 243          *  Descriptions:
 244          *
 245          *  Arguments:
 246          *
 247          *  Returns: None
 248          **************************************************************************/
 249          UINT8   ATAMultipleWrite(UINT32 u32SectorNo)
 250          {
 251   1              UINT8 i,j,Fcnt;
 252   1              UINT16 bcnt=0;
 253   1              union 
 254   1              {       
 255   1                      UINT32 sn; 
 256   1                      UINT8  secno[4]; 
 257   1              } s;
 258   1              s.sn=u32SectorNo;
 259   1              if (ATAWaitCardReady())  return 1; 
 260   1              WriteReg(DRV_HEAD,((s.secno[0] & 0x0f) | 0xE0));
 261   1              WriteReg(CYH,(s.secno[1]));
 262   1              WriteReg(CYL,(s.secno[2]));
 263   1              WriteReg(SN, (s.secno[3]));
 264   1              WriteReg(SC,gSectors);
 265   1              WriteReg(COMMAND,0X30);
 266   1              for(i=0;i<gSectors;i++)
 267   1              {               
 268   2                      if(i>0){
 269   3                              if ( ATAWaitDataReady() )  {return 1; } 
 270   3                      }
 271   2                      Set_Adr_DATA();
 272   2                      for(j=0;j<8;j++){//collect one sector
 273   3      
 274   3                              while(!(RXOUTB0||RXOUTB1));
 275   3                              for(Fcnt=0;Fcnt<64;Fcnt++)
 276   3                              {
 277   4      
 278   4                                      P3_6=0;
C51 COMPILER V7.50   ATA                                                                   11/03/2008 13:09:04 PAGE 6   

 279   4                                      P0=UEPDATX;//DATA7~0 
 280   4                                      Fcnt++;
 281   4                                      P2=UEPDATX;//DATA15~8
 282   4                                      P3_6=1;
 283   4                              }               
 284   3                              UEPSTAX=UEPSTAX & (~0x42);
 285   3                      }
 286   2      
 287   2              }
 288   1              if (ATAWaitCardReady()) return 1; 
 289   1              return 0;
 290   1      
 291   1      
 292   1      }
 293          
 294          /**************************************************************************
 295          *  Function Name:ATAIsReady
 296          *
 297          *  Descriptions:
 298          *
 299          *  Arguments:
 300          *
 301          *  Returns: None
 302          **************************************************************************/
 303          UINT8 ATAIsReady(void)
 304          {               
 305   1              return(1); // ATA_RDY 
 306   1      }
 307          
 308          /**************************************************************************
 309          *  Function Name:WriteReg
 310          *
 311          *  Descriptions:
 312          *
 313          *  Arguments:
 314          *
 315          *  Returns: None
 316          **************************************************************************/
 317          void WriteReg(UINT8 reg,UINT8 Data)
 318          {
 319   1      
 320   1              if(reg==DRV_HEAD)
 321   1                      Set_Adr_DRV_HEAD()
 322   1              else if(reg==COMMAND)   
 323   1              Set_Adr_COMMAND()
 324   1              else if(reg==DEV_CTR)
 325   1              Set_Adr_DEV_CTR() 
 326   1              else if(reg==CYL)
 327   1              Set_Adr_CYL()
 328   1              else if(reg==CYH)
 329   1              Set_Adr_CYH() 
 330   1              else if(reg==SN)
 331   1              Set_Adr_SN()
 332   1              else if(reg==SC)
 333   1              Set_Adr_SC()
 334   1      
 335   1              P0=Data;
 336   1              _nop_();
 337   1              _nop_();
 338   1              _nop_();
 339   1              P3_6=0;
 340   1              msDelay();
C51 COMPILER V7.50   ATA                                                                   11/03/2008 13:09:04 PAGE 7   

 341   1              P3_6=1;
 342   1              _nop_();
 343   1              _nop_();
 344   1              _nop_();
 345   1      
 346   1      }
 347          
 348          /**************************************************************************
 349          *  Function Name:ReadReg
 350          *
 351          *  Descriptions:
 352          *
 353          *  Arguments:
 354          *
 355          *  Returns: None
 356          **************************************************************************/
 357          UINT8 ReadReg(UINT8 Reg)
 358          {
 359   1              UINT8 temp;
 360   1              if(Reg==STATUS)
 361   1                      Set_Adr_STATUS()
 362   1              else if(Reg==ALT_STATUS)        
 363   1              Set_Adr_ALT_STATUS()    
 364   1      
 365   1              P0=0xff;
 366   1              P3_7=0;
 367   1              msDelay();
 368   1              temp=P0;
 369   1              msDelay();
 370   1              P3_7=1;
 371   1              return temp;    
 372   1      
 373   1      }       
 374          /**************************************************************************
 375          *  Function Name:Read1Sector
 376          *
 377          *  Descriptions:
 378          *
 379          *  Arguments:
 380          *
 381          *  Returns: None
 382          **************************************************************************/
 383          void Read1Sector(void)
 384          {       UINT16 bcnt;
 385   1      Set_Adr_DATA(); 
 386   1      for(bcnt=0;bcnt<=255;bcnt++)
 387   1      {
 388   2              P3_7=0;
 389   2              _nop_();
 390   2              _nop_();
 391   2              DMA_BUF[(bcnt<<1)]=P0;  
 392   2              DMA_BUF[(bcnt<<1)+1]=P2;
 393   2              P3_7=1;
 394   2              _nop_();
 395   2              _nop_();
 396   2      }
 397   1      
 398   1      }
 399          /**************************************************************************
 400          *  Function Name:msDelay
 401          *
 402          *  Descriptions:
C51 COMPILER V7.50   ATA                                                                   11/03/2008 13:09:04 PAGE 8   

 403          *
 404          *  Arguments:
 405          *
 406          *  Returns: None
 407          **************************************************************************/
 408          void msDelay() // in ms.
 409          {
 410   1              UINT8 j;
 411   1      
 412   1              for (j=0; j<200 ; j++) {
 413   2      
 414   2              }
 415   1      
 416   1      }
 417          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    844    ----
   CONSTANT SIZE    =      7    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      19
   IDATA SIZE       =      3    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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