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

📄 bulk_only.lst

📁 源码 : KIEL C 单片机 : C8051F320 功能 : U盘 (64M) 关键字 : C8051F320,U盘,NANDFLASH,FAT,SCH 描述 : 源码完全可运行
💻 LST
📖 第 1 页 / 共 2 页
字号:
 181          {
 182   1      	TransCSW();
 183   1      }
 184          void SCSI_Verify(void)
 185          {
 186   1      	TransCSW();
 187   1      }
 188          void SCSI_Reserved(void)
 189          {
 190   1      }
 191          void TransCSW()
 192          {
 193   1      	Fifo_Write(FIFO_EP1, 13, Bulk_CSW);
 194   1      	UWrite_Byte(INDEX, 1);
 195   1      	UWrite_Byte(EINCSRL, rbInINPRDY);   
 196   1      	Bulk_Status=BULK_IDLE;                                 
 197   1      }
 198          ///////////////////////////////////////////////////////////////////////////////////////////////////
 199          void SCSI_Read10()
 200          {
 201   1      	unsigned int i=0;
 202   1      	LED=~LED;
 203   1      	for(i=0;i<4;i++)						// 计算LBA,CBWCB的第2、3、4和5位代表LBA
 204   1      	{
 205   2      		LBA=(LBA<<8)+Bulk_CBW.CBWCB[2+i];
 206   2      	}
 207   1      	Transfer_Length = Bulk_CBW.CBWCB[7]*256 + Bulk_CBW.CBWCB[8];	//传输的长度,CBWCB的第6和7位代表传输长度
 208   1      	nCurrentBlock = LBA / 32;		//计算FLASH的物理地址	
 209   1      	nCurrentPage  = LBA % 32;
 210   1      
 211   1      	Flash_Read_Page(nCurrentBlock,nCurrentPage,Bulk_PACKET,512);	//向页缓冲区读1页
 212   1      
 213   1      	Transfer_Length--;		//待传输的扇区数减1
 214   1      	nCurrentPage++;			//当前页序号加1
 215   1      
 216   1      	Bulk_Status = BULK_DATA_TRANS;		//Bulk在传输状态
 217   1      	pCurrentBuf = Bulk_PACKET;			//指针指向页缓冲区
 218   1      	nBufCount=0;	
 219   1      
 220   1      	Fifo_Write(FIFO_EP1,EP1_PACKET_SIZE,pCurrentBuf+nBufCount);		//在双缓冲方式,一次可以向FIFO写两个数据包
 221   1      	UWrite_Byte(INDEX, 1);
 222   1      	UWrite_Byte(EINCSRL, rbInINPRDY);
 223   1      	nBufCount+=EP1_PACKET_SIZE;
 224   1      	Fifo_Write(FIFO_EP1,EP1_PACKET_SIZE,pCurrentBuf+nBufCount);
 225   1      	UWrite_Byte(INDEX, 1);
 226   1      	UWrite_Byte(EINCSRL, rbInINPRDY);		
 227   1      }
 228          void TransDataGoOn()
 229          {
 230   1      	unsigned int i=0;
 231   1      
 232   1      	if(nBufCount<384)
 233   1      	{
 234   2      		nBufCount+=EP1_PACKET_SIZE;		
 235   2      		Fifo_Write(FIFO_EP1,EP1_PACKET_SIZE,pCurrentBuf+nBufCount);	//在双缓冲方式,一次可以向FIFO写两个数据包
 236   2      		UWrite_Byte(INDEX, 1);
C51 COMPILER V6.12  BULK_ONLY                                                              08/20/2006 19:41:23 PAGE 5   

 237   2      		UWrite_Byte(EINCSRL, rbInINPRDY);
 238   2      		nBufCount+=EP1_PACKET_SIZE;
 239   2      		Fifo_Write(FIFO_EP1,EP1_PACKET_SIZE,pCurrentBuf+nBufCount);
 240   2      		UWrite_Byte(INDEX, 1);
 241   2      		UWrite_Byte(EINCSRL, rbInINPRDY);			
 242   2      	}
 243   1      	else if(Transfer_Length>0)
 244   1      	{
 245   2      		if(nCurrentPage==32)
 246   2      		{
 247   3      			nCurrentBlock++;
 248   3      			nCurrentPage=0;
 249   3      		}
 250   2      		else
 251   2      		{}
 252   2      		Flash_Read_Page(nCurrentBlock,nCurrentPage,Bulk_PACKET,512);
 253   2      		nCurrentPage++;
 254   2      		Transfer_Length--;
 255   2      		nBufCount=0;
 256   2      		pCurrentBuf=Bulk_PACKET;
 257   2      		Bulk_Status=BULK_DATA_TRANS;
 258   2      		Fifo_Write(FIFO_EP1,EP1_PACKET_SIZE,pCurrentBuf+nBufCount);//在双缓冲方式,一次可以向FIFO写两个数据包
 259   2      		UWrite_Byte(INDEX, 1);
 260   2      		UWrite_Byte(EINCSRL, rbInINPRDY);	
 261   2      		nBufCount+=EP1_PACKET_SIZE;
 262   2      		Fifo_Write(FIFO_EP1,EP1_PACKET_SIZE,pCurrentBuf+nBufCount);
 263   2      		UWrite_Byte(INDEX, 1);
 264   2      		UWrite_Byte(EINCSRL, rbInINPRDY);	
 265   2      	}
 266   1      	else
 267   1      	{
 268   2      		Bulk_Status=BULK_DATA_END;
 269   2      		nBufCount=0;
 270   2      		TransCSW();
 271   2      	}
 272   1      }
 273          /////////////////////////////////////////////////////////////////////////////////////////////////
 274          void SCSI_Write10(void)
 275          {
 276   1      	unsigned int i=0;
 277   1      	LED=~LED;
 278   1      	for(i=0;i<4;i++)
 279   1      	{
 280   2      		LBA=(LBA<<8)+Bulk_CBW.CBWCB[2+i];
 281   2      	}
 282   1      	Transfer_Length = Bulk_CBW.CBWCB[7]*256 + Bulk_CBW.CBWCB[8];
 283   1      	nCurrentBlock=LBA/32;	
 284   1      	nCurrentPage =LBA%32;
 285   1      	nBegainPage = nCurrentPage;
 286   1      
 287   1      	Bulk_Status = BULK_DATA_RECIEVE;
 288   1      	pCurrentBuf = Bulk_PACKET;
 289   1      	nBufCount   = 0;
 290   1      
 291   1      	Flash_Erase_Block(Bufer_Block);			//擦除缓冲区BLOCK
 292   1      
 293   1      }
 294          
 295          void Bulk_Receive_Data()
 296          {
 297   1      	unsigned int i=0;
 298   1      	Copy(pCurrentBuf+nBufCount,Bulk_Buffer,EP2_PACKET_SIZE);
C51 COMPILER V6.12  BULK_ONLY                                                              08/20/2006 19:41:23 PAGE 6   

 299   1      	nBufCount+=EP2_PACKET_SIZE;
 300   1      	if(nBufCount==512)							//如果一扇区内容接收完毕
 301   1      	{
 302   2      		Flash_Write_Page(Bufer_Block,nCurrentPage,Bulk_PACKET,512);	//将数据暂时写到缓冲区BLOCK	
 303   2      		nCurrentPage++;							//页指针加1
 304   2      		Transfer_Length--;						//待传输数据长度减1
 305   2      		nBufCount=0;
 306   2      	}
 307   1      
 308   1      	if((Transfer_Length>0)&&(nCurrentPage == 32))		//如果一个BLOCK写完毕
 309   1      	{
 310   2      		for(i=0;i<nBegainPage;i++)
 311   2      		{
 312   3      			Flash_Read_Page(nCurrentBlock,i,Bulk_PACKET,512);
 313   3      			Flash_Write_Page(Bufer_Block,i,Bulk_PACKET,512);
 314   3      		}
 315   2      		Flash_Erase_Block(nCurrentBlock);
 316   2      		for(i=0;i<32;i++)
 317   2      		{
 318   3      			Flash_Read_Page(Bufer_Block,i,Bulk_PACKET,512);
 319   3      			Flash_Write_Page(nCurrentBlock,i,Bulk_PACKET,512);
 320   3      		}
 321   2      		nCurrentBlock++;
 322   2      		nCurrentPage=0;
 323   2      		nBufCount=0;
 324   2      		nBegainPage=0;
 325   2      		Flash_Erase_Block(Bufer_Block);
 326   2      	}
 327   1      
 328   1      	if(Transfer_Length==0)
 329   1      	{
 330   2      		for(i=0;i<nBegainPage;i++)
 331   2      		{
 332   3      			Flash_Read_Page(nCurrentBlock,i,Bulk_PACKET,512);
 333   3      			Flash_Write_Page(Bufer_Block,i,Bulk_PACKET,512);
 334   3      		}
 335   2      		for(i=nCurrentPage;i<32;i++)
 336   2      		{
 337   3      			Flash_Read_Page(nCurrentBlock,i,Bulk_PACKET,512);
 338   3      			Flash_Write_Page(Bufer_Block,i,Bulk_PACKET,512);
 339   3      		}
 340   2      		Flash_Erase_Block(nCurrentBlock);
 341   2      		for(i=0;i<32;i++)
 342   2      		{
 343   3      			Flash_Read_Page(Bufer_Block,i,Bulk_PACKET,512);
 344   3      			Flash_Write_Page(nCurrentBlock,i,Bulk_PACKET,512);
 345   3      		}
 346   2      		TransCSW();	                                  
 347   2      	}
 348   1      }
 349          void Copy(unsigned char *PEnd,unsigned char *PSource,unsigned int num)
 350          {
 351   1      	unsigned int i=0;
 352   1      	for(i=0;i<num;i++)
 353   1      	{
 354   2      		*(PEnd+i)=*(PSource+i);
 355   2      	}
 356   1      }
 357          
 358          ////////////////////////////////////////////////////////////////////////////////////////////////


C51 COMPILER V6.12  BULK_ONLY                                                              08/20/2006 19:41:23 PAGE 7   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1801    ----
   CONSTANT SIZE    =     68    ----
   XDATA SIZE       =    607    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     29      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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