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

📄 exam(chiese).txt

📁 该软件为在sunplus的61单片机上实现的mp3播放器.里面有完整的源代码.
💻 TXT
📖 第 1 页 / 共 4 页
字号:
				 if(BOTXfer_wResidue==0x00)		
				     BOTFSMstate=USBFSM4BOT_IDLE;
				 
			}// BOTFWM_CSW	*/    	
}
//=====================================================================
// 函数:    F_Main_RxDone (Host -> Device)
// 语法:    void F_Main_RxDone(void)
// 描述:    端点2,接收数据处理
// 参数:    无
// 返回:    无
//=====================================================================
void F_Main_RxDone(void)
{
	unsigned int EP2Len;
//	F_D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
	
    if( BOTFSM_IDLE)   //BOTFSM_IDLE = BOTFSMstate^0
       {
        TPBulk_CBWHandler(); 	// Goto BOTFSMstate_CBWProc
       } // if BOT in IDLE              

     while(BOTFSM_DataOut) //BOTFSM_DataOut = BOTFSMstate^3
       {
        F_InitWriteD12();
        F_WriteCmdToD12(0x04);		//Select EP BulkOut
	    F_InitReadD12();
        if(!(F_ReadD12() & 0x01)) // if fifo is empty
            continue;                    
        EP2Len=F_D12_ReadEndpointAndClrD12Int(4, 64,BOTXfer_pData);
/*        if(EP2Len == 0x1f)
        	{
        		if(TPBulksup_IsCBWValid())
        			RBC_Handler();		
        	} 
*/        	
		BOTXfer_pData += EP2Len;
		BOTXfer_wResidue -= EP2Len;
//		UartSendData(0x55);
//		UartSendData(BOTXfer_wResidue>>8);
//		UartSendData(BOTXfer_wResidue);
/*		
  if(BOTXfer_wResidue <=0x40)
   {		
		UartSendData(0x66);
   		for(EP2Len=0; EP2Len<512; EP2Len++)
   				UartSendData(g_RWBuf[EP2Len]);		
   		UartSendData(0x77);
   	}	
*/   			
        if(BOTXfer_wResidue == 0)
            { 
             // After Add NF and RamRom handler
             if(BOTXfer_atNF)
             //NF_PageProgram(0x0000,LBA_Write,g_RWBuf);
               UartSendData("0x38");
             TPBulk_CSWHandler(); // Goto BOTFSMstate_CSWProc
		    }
        }//BOTFSM_DATAOUT
        		
	 if (BOTFSM_DataIn)//BOTFSM_DataIn = BOTFSMstate^2
        {
		  if(BOTXfer_wResidue>64)
			 {
			  EP2Len=F_D12_WriteEndpointAndClrD12Int(5,64,BOTXfer_pData);//回送数据
			  BOTXfer_pData+=EP2Len;
			  BOTXfer_wResidue-=EP2Len;	
			 }
		  else
			 {
			  EP2Len=F_D12_WriteEndpointAndClrD12Int(5,BOTXfer_wResidue,BOTXfer_pData);//回送数据
			  BOTXfer_pData+=EP2Len;
			  BOTXfer_wResidue-=EP2Len;
			  if(BOTXfer_wResidue==0)		
				  TPBulk_CSWHandler();	
			  }	  						 
		}//BOTFSM_DataIn			

		if(BOTFSM_CSW)	//BOTFSM_CSW = BOTFSMstate^5
		    {            	
				EP2Len=F_D12_WriteEndpointAndClrD12Int(5,13,BOTXfer_pData);//回送数据
				BOTXfer_wResidue=0x00;
				BOTFSMstate=USBFSM4BOT_IDLE ;
			}// BOTFWM_CSW	*/ 	
}

/*
		For Mass Storage 
*/
void F_MainRxHandler()
{
unsigned int EP2Len;
/*** C B W ***/
if ( BOTFSM_IDLE)   //BOTFSM_IDLE = BOTFSMstate^0
   {
     TPBulk_CBWHandler(); 	// Goto BOTFSMstate_CBWProc
    } // if BOT in IDLE
                  
/*** Data Out Stage ***/
while (BOTFSM_DataOut) //BOTFSM_DataOut = BOTFSMstate^3
    {
     F_InitWriteD12();
     F_WriteCmdToD12(0x04);		//Select EP BulkOut
	 F_InitReadD12();
     if(!(F_ReadD12() & 0x01)) // if fifo is empty
          break;                     
     EP2Len=F_D12_ReadEndpointAndClrD12Int(4, 64,BOTXfer_pData);
	
	 BOTXfer_pData += EP2Len;
	 BOTXfer_wResidue -= EP2Len;
	 
  	 if(BOTXfer_wResidue == 0)
         { 
          // After Add NF and RamRom handler
          if(BOTXfer_atNF)
          //NF_PageProgram(0x0000,LBA_Write,g_RWBuf);
             UartSendData("0x38");
          TPBulk_CSWHandler(); // Goto BOTFSMstate_CSWProc
		  }
		  
      }//DATAOUT END
}
void F_MainTxHandler()
{
unsigned int EP2Len;      
/*** Data In Stage ***/        	
while (BOTFSM_DataIn)//BOTFSM_DataIn = BOTFSMstate^2
   {
     F_InitWriteD12();
     F_WriteCmdToD12(0x05);		//Select EP BulkOut
	 F_InitReadD12();
if(!(F_ReadD12() & 0x01)) // if fifo is empty
     {                             
 	 if(BOTXfer_wResidue>64)
	    {
		 EP2Len=F_D12_WriteEndpoint(5,64,BOTXfer_pData);//回送数据
	     BOTXfer_pData+=EP2Len;
	     BOTXfer_wResidue-=EP2Len;	
	    }
	 else
		{
		 EP2Len=F_D12_WriteEndpoint(5,BOTXfer_wResidue,BOTXfer_pData);//回送数据
		 BOTXfer_pData+=EP2Len;
		 BOTXfer_wResidue-=EP2Len;
		 // 数据接收完毕,处理CSW
		 if(BOTXfer_wResidue==0)		
				TPBulk_CSWHandler();	
		 }
	 }	 	  						 
	}//DataIn END	
		
/*** CSW Stage ***/
if (BOTFSM_CSW)	//BOTFSM_CSW = BOTFSMstate^5
	{
	 F_InitWriteD12();
     F_WriteCmdToD12(0x05);		//Select EP BulkOut
	 F_InitReadD12();
	 if(!(F_ReadD12() & 0x01)) // if fifo is empty            	
	 	{
	 	EP2Len=F_D12_WriteEndpoint(5,13,BOTXfer_pData);//回送数据
	 	BOTXfer_wResidue=0x00;	
	 	BOTFSMstate=USBFSM4BOT_IDLE;				 
	 	}
	}// CSW	END*/    	
F_D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
}	


//  Init Write D12
		r1=[P_IOA_Dir];
		r1|=0xff00; 
		[P_IOA_Dir]=r1;
		
		r1=[P_IOA_Attrib];
		r1|=0xff00;				//DB7(A.15)~DB0(A.8),D12_WE(A.7),D12_RE(A.6)->OutputPort 
		[P_IOA_Attrib]=r1;
		
		r1=[P_IOA_Buffer];
		r1|=0x00c0;				
		[P_IOA_Buffer]=r1; 		//RE=1 WE=1
		
		r1=[P_IOB_Buffer];	
		r1|=0x0090; 		
		r1&=0xffdf; 			//D12_CE=0	NF_CE=1 LCD_CE=1					           
	    [P_IOB_Buffer]=r1;  
	    
//   Write CMD(04) To D12
		r1=[P_IOA_Buffer];
		
        r1|=0x0402;					//D12_DC=1(Select Command)
        r1&=0x04ff;
        
        [P_IOA_Buffer]=r1;         	// Send Data  			
        
		r1&=0xffbf;        			//WE AT PA.6
		[P_IOA_Buffer]=r1;			//D12_WE=0	
		  
		r1|=0x0040;					//WE AT PA.6
		[P_IOA_Buffer]=r1;			//D12_WE=1  
			    			
//   Init Read D12
		r1=[P_IOA_Dir];
		r1&=0x00ff; 
		[P_IOA_Dir]=r1;
		
		r1=[P_IOA_Attrib];
		r1&=0x00ff;
		[P_IOA_Attrib]=r1;
		
		r1=[P_IOA_Buffer];
		r1|=0x00c0;				
		[P_IOA_Buffer]=r1; 		//RE=1 WE=1
		
		r1=[P_IOB_Buffer];	
		r1|=0x0090; 		
		r1&=0xffdf; 			//D12_CE=0	NF_CE=1 LCD_CE=1			          
	    [P_IOB_Buffer]=r1;  
	    
//  Read D12
		r1=[P_IOA_Buffer];	
		r1&=0xff7d;					//WE AT PA.7
		[P_IOA_Buffer]=r1;			//D12_RE=0						

        r2 = [P_IOA_Data];       	// Get data
              
		r1=[P_IOA_Buffer];	
		r1|=0x0080;                 //RE AT PA.7
		[P_IOA_Buffer]=r1;			//D12_RE=1  
//===================================================================================================
// 函  数:    	F_DMA_NFtoD12()
// 语  法:    	void F_DMA_NFtoD12(unsigned int nbsector)
// 描  述:   	向NandFlash写数据地址
// 参  数:   	Address
// 返回值:   	无
//===================================================================================================             
_F_DMA_NFtoD12:	.proc
	push bp to [sp];
	bp=sp+1;
	push r1,r5 to [sp]
	r5=[bp+3];		//Get nbSector of the Transfer Data 
	
F_DMA_NFtoD12SecRep:	
	r4=8;		//nbPage
F_DMA_NFtoD12PageRep:
//  CS D12		
					    	    
//	r2 &= 0x0100;
//	jz   F_DMA_NFtoD12PageNext
//	goto F_DMA_NFtoD12PageRep
F_DMA_NFtoD12PageNext:		
//  Wait D12 is Empty
	call _WaitD12Empty
	call _InitwD12
	r3=64;       //nbByte
//  CS D12 & NF	
	r1=[P_IOB_Buffer];	
	r1|=0x0090; 		
	r1&=0xffcf; 			//D12_CE=0	NF_CE=0  LCD_CE=1			          
	[P_IOB_Buffer]=r1;  
				
	r1=[P_IOA_Data];	
F_DMA_NFtoD12ByteRep:
//  --\_
	r1&=0xffbd;
	[P_IOA_Data]=r1;	
//  --<Data>--
	r1=[P_IOA_Data];	
	[P_IOA_Data]=r1;
//      _/-- 	
	r1|=0x0040;
	[P_IOA_Data]=r1;
	
	r3-=1;
	jnz  F_DMA_NFtoD12ByteRep
	call _ClearD12Int
	r4-=1;
	jz   F_DMA_NFtoD12PageOver
	goto F_DMA_NFtoD12PageRep
	
F_DMA_NFtoD12PageOver:	
	r5-=1;
	jz   F_DMA_NFtoD12SecOver	
	goto F_DMA_NFtoD12SecRep
	
F_DMA_NFtoD12SecOver:		
    pop r1,r5 from [sp] ;
    pop bp from [sp] ;   	
	retf
	
	.endp      
	
	
//  Function:
//	void F_DMA_NFtoD12_64B(void)        
_F_DMA_NFtoD12_64B:	.proc
	push r1,r4 to [sp]
	
	r1=[P_IOA_Dir];
	r1&=0x00ff;
	[P_IOA_Dir]=r1;
		
	r1=[P_IOA_Attrib];
	r1&=0x00ff;
	[P_IOA_Attrib]=r1;
		
	r1=[P_IOA_Data];
	r1|=0xffc0;				
	[P_IOA_Data]=r1; 		//RE=1 WE=1
			
//  CS D12 & NF	
	r1=[P_IOB_Buffer];	
	r1|=0x0090; 		
	r1&=0xffcf; 			//D12_CE=0	NF_CE=0  LCD_CE=1			          
	[P_IOB_Buffer]=r1;  
		
	r3=8;
	r1=[P_IOA_Data];
	r2=0x00bd;
	r4=0x0040;
F_DMA_NFtoD12_64B_Rep:
//  < --- BYTE 0 --- >
//  --\_
//	r1&=r2;
    r1&=0x00bd;	
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];

//      _/-- 	
//	r1|=r4;
	r1|=0x0040;
	[P_IOA_Data]=r1;

//  < --- BYTE 1 --- >
//  --\_
//	r1&=r2;	
	r1&=0x00bd;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];

//      _/-- 	
//	r1|=r4;
	r1|=0x0040;
	[P_IOA_Data]=r1;
	
//  < --- BYTE 2 --- >
//  --\_
	r1&=r2;	
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];

//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;
	
//  < --- BYTE 3 --- >
//  --\_
	r1&=r2;	
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];

//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;
	
//  < --- BYTE 4 --- >
//  --\_
	r1&=r2;	
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];

//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;

//  < --- BYTE 5 --- >
//  --\_
	r1&=r2;	
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];

//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;
	
//  < --- BYTE 6 --- >
//  --\_
	r1&=r2;	
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];

//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;
	
//  < --- BYTE 7 --- >
//  --\_
	r1&=r2;	
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];

//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;
					
	r3-=1;
	jz   F_DMA_NFtoD12_64B_Exit
	goto F_DMA_NFtoD12_64B_Rep
	
F_DMA_NFtoD12_64B_Exit:	
	pop r1,r4 from [sp]
	retf
	.endp        
	
	
//  Function
//  void F_DMA_D12toNF_64B(void)	
_F_DMA_D12toNF_64B:	.proc
	push r1,r3 to [sp]
	
	r1=[P_IOA_Dir];
	r1&=0x00ff;
	[P_IOA_Dir]=r1;
		
	r1=[P_IOA_Attrib];
	r1&=0x00ff;
	[P_IOA_Attrib]=r1;
		
	r1=[P_IOA_Data];
	r1|=0xffc0;				
	[P_IOA_Data]=r1; 		//RE=1 WE=1
			
//  CS D12 & NF	
	r1=[P_IOB_Buffer];	
	r1|=0x0090; 		
	r1&=0xffcf; 			//D12_CE=0	NF_CE=0  LCD_CE=1			          
	[P_IOB_Buffer]=r1;  
		
	r3=8;
	r2=0x007d;
	r4=0x0080;
	r1=[P_IOA_Data];	
F_DMA_D12toNF_64B_Rep:
//  <-- BYTE0 -->
//  --\_
	r1&=r2;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];	
	
//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;

//  <-- BYTE1 -->
//  --\_
	r1&=r2;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];	
	
//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;

//  <-- BYTE2 -->
//  --\_
	r1&=r2;
	[P_IOA_Data]=r1;
		
//  --<Data>--
	r1=[P_IOA_Data];	
	
//      _/-- 	
	r1|=r4;
	[P_IOA_Data]=r1;

//  <-- BYTE3 -->
//  --\_

⌨️ 快捷键说明

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