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

📄 ata.lst

📁 HardDiskUSBconnectsourcecode
💻 LST
📖 第 1 页 / 共 2 页
字号:
 214   1              {       
 215   2                      
C51 COMPILER V8.05a   ATA                                                                  05/22/2009 15:28:37 PAGE 5   

 216   2                      if ( ATAWaitDataReady() ) return 1;//WAIT BSY=0,DRQ=1.
 217   2                      //printf("ATAWaitdataReady\n");
 218   2                      
 219   2                      Read1Sector();
 220   2                      if(gbRunMode==USBMode)
 221   2                      {
 222   3                              bcnt=0;
 223   3                              for(j=0;j<8;j++)//64BYTE Packetsize*8 
 224   3                              {
 225   4                              
 226   4                                      for(Fcnt=0;Fcnt<64;Fcnt++)
 227   4                                      {
 228   5                                              UEPDATX=DMA_BUF[bcnt];
 229   5                                              bcnt++;
 230   5                                      }
 231   4                              
 232   4      
 233   4                                      if(begin_ping_pong==0)begin_ping_pong =1;
 234   4                                      else 
 235   4                                      {
 236   5                                              while (!Usb_tx_complete_bit()){} 
 237   5                                              Usb_clear_TXCMPL_bit();            //ack transfer 
 238   5                                      }
 239   4                                      
 240   4                                      Usb_set_TXRDY_bit();                      //start usb transfer 
 241   4                                      gCBWDataLen=gCBWDataLen-64;     
 242   4                              }
 243   3      
 244   3                      }
 245   2              }
 246   1              if(gbRunMode==USBMode)
 247   1              {
 248   2                      while (!Usb_tx_complete_bit()){} 
 249   2                      Usb_clear_TXCMPL_bit();                 //last ack transfer 
 250   2              }
 251   1              if (ATAWaitCardReady(5000)) return 1;           
 252   1              return 0;
 253   1      }
 254          
 255          /**************************************************************************
 256           *  Function Name:ATAMultipleWrite
 257           *
 258           *  Descriptions:
 259           *
 260           *  Arguments:
 261           *
 262           *  Returns: None
 263           **************************************************************************/
 264          UINT8   ATAMultipleWrite(UINT32 u32SectorNo)
 265          {
 266   1              UINT8 i,j,Fcnt;
 267   1              UINT16 bcnt=0;
 268   1              union 
 269   1              {       
 270   1              UINT32 sn; 
 271   1              UINT8  secno[4]; 
 272   1              } s;
 273   1              s.sn=u32SectorNo;
 274   1              
 275   1              if (ATAWaitCardReady(3600))  return 1; 
 276   1             
 277   1          WriteReg(DRV_HEAD,((s.secno[0] & 0x0f) | 0xE0));
C51 COMPILER V8.05a   ATA                                                                  05/22/2009 15:28:37 PAGE 6   

 278   1              WriteReg(CYH,(s.secno[1]));
 279   1              WriteReg(CYL,(s.secno[2]));
 280   1              WriteReg(SN, (s.secno[3]));
 281   1              WriteReg(SC,gSectors);
 282   1              WriteReg(COMMAND,0X30);
 283   1              Set_Adr_DATA();
 284   1      
 285   1              
 286   1              for(i=0;i<gSectors;i++)
 287   1              {               
 288   2                      
 289   2      
 290   2                      if(i>0){
 291   3                      
 292   3                              if ( ATAWaitDataReady() )  {return 1; } 
 293   3                      }
 294   2                      
 295   2                      for(j=0;j<8;j++){//collect one sector
 296   3                      while (!Usb_receive_out_data()); /* wait end of reception */    
 297   3                              for(Fcnt=0;Fcnt<32;Fcnt++)
 298   3                              {
 299   4                                      //DMA_BUF[bcnt]=UEPDATX;
 300   4                                      //bcnt++;
 301   4                                      P0=UEPDATX;//DATA7~0 
 302   4                                      P2=UEPDATX;//DATA15~8
 303   4                                      P3_6=0;
 304   4                                      msDelay(1);
 305   4                                      P3_6=1;
 306   4                                      msDelay(1);
 307   4                              }               
 308   3                      Usb_clear_RXOUT_PP();       /* usb read acknowledgement */
 309   3                     }
 310   2                      
 311   2              }
 312   1              
 313   1              if (ATAWaitCardReady(3600)) return 1; 
 314   1              
 315   1              return 0;
 316   1      
 317   1      
 318   1      }
 319          
 320          /**************************************************************************
 321           *  Function Name:ATAIsReady
 322           *
 323           *  Descriptions:
 324           *
 325           *  Arguments:
 326           *
 327           *  Returns: None
 328           **************************************************************************/
 329          UINT8 ATAIsReady(void)
 330          {               
 331   1               return(1); // ATA_RDY 
 332   1      }
 333          
 334          /**************************************************************************
 335           *  Function Name:WriteReg
 336           *
 337           *  Descriptions:
 338           *
 339           *  Arguments:
C51 COMPILER V8.05a   ATA                                                                  05/22/2009 15:28:37 PAGE 7   

 340           *
 341           *  Returns: None
 342           **************************************************************************/
 343          void WriteReg(UINT8 reg,UINT8 Data)
 344          {
 345   1              
 346   1              if(reg==DRV_HEAD)
 347   1                      Set_Adr_DRV_HEAD()
 348   1              else if(reg==COMMAND)   
 349   1                      Set_Adr_COMMAND()
 350   1              else if(reg==DEV_CTR)
 351   1                      Set_Adr_DEV_CTR() 
 352   1              else if(reg==CYL)
 353   1                      Set_Adr_CYL()
 354   1              else if(reg==CYH)
 355   1                      Set_Adr_CYH() 
 356   1              else if(reg==SN)
 357   1                      Set_Adr_SN()
 358   1              else if(reg==SC)
 359   1                      Set_Adr_SC()
 360   1              
 361   1              P0=Data;
 362   1              _nop_();
 363   1              _nop_();
 364   1              _nop_();
 365   1              P3_6=0;
 366   1              msDelay(1);
 367   1              P3_6=1;
 368   1              _nop_();
 369   1              _nop_();
 370   1              _nop_();
 371   1              
 372   1      }
 373          
 374          /**************************************************************************
 375           *  Function Name:ReadReg
 376           *
 377           *  Descriptions:
 378           *
 379           *  Arguments:
 380           *
 381           *  Returns: None
 382           **************************************************************************/
 383          UINT8 ReadReg(UINT8 Reg)
 384          {
 385   1       UINT8 temp;
 386   1              if(Reg==STATUS)
 387   1                      Set_Adr_STATUS()
 388   1              else if(Reg==ALT_STATUS)        
 389   1                      Set_Adr_ALT_STATUS()    
 390   1              
 391   1              P0=0xff;
 392   1              P3_7=0;
 393   1              msDelay(1);
 394   1              temp=P0;
 395   1              msDelay(1);
 396   1              P3_7=1;
 397   1              return temp;    
 398   1      
 399   1      }       
 400          /**************************************************************************
 401           *  Function Name:Read1Sector
C51 COMPILER V8.05a   ATA                                                                  05/22/2009 15:28:37 PAGE 8   

 402           *
 403           *  Descriptions:
 404           *
 405           *  Arguments:
 406           *
 407           *  Returns: None
 408           **************************************************************************/
 409          void Read1Sector(void)
 410          {       UINT16 bcnt;
 411   1              Set_Adr_DATA(); 
 412   1              for(bcnt=0;bcnt<=255;bcnt++)
 413   1              {
 414   2                      P3_7=0;
 415   2                      _nop_();
 416   2                      _nop_();
 417   2                      DMA_BUF[(bcnt<<1)]=P0;  
 418   2                      DMA_BUF[(bcnt<<1)+1]=P2;
 419   2                      P3_7=1;
 420   2                      _nop_();
 421   2                      _nop_();
 422   2              }
 423   1              
 424   1      }
 425          /**************************************************************************
 426           *  Function Name:msDelay
 427           *
 428           *  Descriptions:
 429           *
 430           *  Arguments:
 431           *
 432           *  Returns: None
 433           **************************************************************************/
 434          void msDelay(UINT8 i) // in ms.
 435          {
 436   1              UINT8 j;
 437   1              
 438   1              for (j=0; j<200 ; j++) {
 439   2                              
 440   2              }
 441   1      
 442   1      }
*** WARNING C280 IN LINE 434 OF ATA.C: 'i': unreferenced local variable
 443          


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


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

⌨️ 快捷键说明

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