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

📄 exam(chiese).txt

📁 该软件为在sunplus的61单片机上实现的mp3播放器.里面有完整的源代码.
💻 TXT
📖 第 1 页 / 共 4 页
字号:
	 	DBR.bOEMName[2]='M';
	 	DBR.bOEMName[3]='-';	 	 
	 	DBR.bOEMName[4]='S';
	 	DBR.bOEMName[5]='S';	 
	 	DBR.bOEMName[6]='L';
	 	DBR.bOEMName[7]=' ';	
	 /* Byte Per Sector */
	 	DBR.BPB_wBytesPerSec[0]=SECTOR_SIZE;		//	Low Byte
	 	DBR.BPB_wBytesPerSec[1]=SECTOR_SIZE >> 8;	//	High Byte	 								
	 /* Sector Per Cluster */
	 /* FAT Number */
	 	DBR.BPB_bNumFATs=FATS;
	 /* Root Entry Files */
	 	DBR.BPB_wRootEntry[0]=ROOT_ENTRY&0xff;
	 	DBR.BPB_wRootEntry[1]=(ROOT_ENTRY>>8)&0xff;	 	
	 /* Sector Per Cluster */	
	 	DBR.BPB_bSecPerClus=nbSectorPerCluster;
	 /* Reserved Sector Number */
	 	DBR.BPB_wReservedSec[0]=RESERVED_SECTOR&0xff;
	 	DBR.BPB_wReservedSec[1]=(RESERVED_SECTOR>>8)&0xff;
	 	
	 	DBR.BPB_wRootEntry[0]=(ROOT_ENTRY&0xff);	 	
	 	DBR.BPB_wRootEntry[1]=(ROOT_ENTRY>>8)&0xff;	 	
	 /* Total Sector (<32M User)*/
	 	DBR.BPB_wTotalSec[0]=totalSector&0xff;
	 	DBR.BPB_wTotalSec[1]=(totalSector>>8)&0xff;
	 /* Media */
	 	DBR.BPB_bMedia=0xF8;
	 /* Sector Per FAT */
	 	DBR.BPB_wSecPerFAT[0]=(SECTOR_PER_FAT) & 0xff;
	 	DBR.BPB_wSecPerFAT[1]=((SECTOR_PER_FAT) >>8) & 0xff;
	 /* Sector Per Trk */
	 	DBR.BPB_wSecPerTrk[0]=nbSector&0xff;
	 	DBR.BPB_wSecPerTrk[1]=(nbSector>>8)&0xff;	 	
	 /* Heads Number */
	 	DBR.BPB_wHeads[0]=	nbHead&0xff;
	 	DBR.BPB_wHeads[1]= (nbHead>>8)&0xff;
	 /* Hidden Sector Number */
	    DBR.BPB_dHiddSec[0]=0x00;	//Low  Byte
	    DBR.BPB_dHiddSec[1]=0x00;	//MidL Byte	   
	    DBR.BPB_dHiddSec[2]=0x00;	//MidH Byte
	    DBR.BPB_dHiddSec[3]=0x00;	//High Byte		     
	 /* Big Total Sector (>=32M Used) */
	    DBR.BPB_dBigTotalSec[0]=0x00;
	    DBR.BPB_dBigTotalSec[1]=0x00;	
	    DBR.BPB_dBigTotalSec[2]=0x00;
	    DBR.BPB_dBigTotalSec[3]=0x00;
	 /* Drive Number */   		        
	 	DBR.bDrvNum=0x81;
	 /* Reserved1 */
	 	DBR.bReserved1=0x00;
	 /* Boot Signa */	
	 	DBR.bBootSig=FAT_EXT_SIGN;
	 /* Volume ID */
	    DBR.bVolID[0]=0x00;
	    DBR.bVolID[1]=0x00;	 
	    DBR.bVolID[2]=0x00;
	    DBR.bVolID[3]=0x00;	 
	 /* Volume Lable */
	 	DBR.bVolLab[0]='V';
	 	DBR.bVolLab[1]='I';	 	
	 	DBR.bVolLab[2]='C';
	 	DBR.bVolLab[3]='T';	 
	 	DBR.bVolLab[4]='O';
	 	DBR.bVolLab[5]='R';	 	
	 	DBR.bVolLab[6]='Y';
	 	DBR.bVolLab[7]=' ';
	 	DBR.bVolLab[8]='1';
	 	DBR.bVolLab[9]='.'; 	
	 	DBR.bVolLab[10]='0';
	 /* File System Type */
	    DBR.FileSysType[0]='F';
	    DBR.FileSysType[1]='A';	 
	    DBR.FileSysType[2]='T';
	    DBR.FileSysType[3]='1';	 	     
	    DBR.FileSysType[4]='6';
	    DBR.FileSysType[5]=' ';	 
	    DBR.FileSysType[6]=' ';
	    DBR.FileSysType[7]=' ';	 	     
	 /* Execu Table Code */
	    for(i=0; i<448; i++)
	 		DBR.ExecutableCode[i]=0x00;
	 /* Ending Flag (0x55AA) */	   	 		 		 	  	       		
		DBR.EndingFlag[0]=0x55;
		DBR.EndingFlag[1]=0xaa;											 		    		
//  Add NandFlash Page Write Code		
	 	NF_PageProgram(DBR_START_LOCATE,&FATDW1.FAT_GU[0]);
	
/*
	*** Creat FAT1  *** ::: Note: SectorPerFAT 4
*/	//FATDW1.FAT_GU[512]
		FATDW1.FAT_GU[0]=0xf8;
		FATDW1.FAT_GU[1]=0xff;
		for(i=2; i<512; i++)
			FATDW1.FAT_GU[i]=0x00;		
		NF_PageProgram(FAT1_START_LOCATE,(unsigned int )&FATDW1.FAT_GU);
		
		for(j=1; j<4; j++)
			{
			for(i=0; i<512; i++)
				FATDW1.FAT_GU[i]=0x00;
				NF_PageProgram(FAT1_START_LOCATE+(j*512),(unsigned int )&FATDW1.FAT_GU);
			}		
/*
	*** Creat FAT2  ***
*/
		FATDW1.FAT_GU[0]=0xf8;
		FATDW1.FAT_GU[1]=0xff;
		for(i=2; i<512; i++)
			FATDW1.FAT_GU[i]=0x00;		
		NF_PageProgram(FAT2_START_LOCATE,(unsigned int )&FATDW1.FAT_GU);
		for(j=1; j<4; j++)
			{
			 for(i=0; i<512; i++)
				FATDW1.FAT_GU[i]=0x00;
				
			 NF_PageProgram(FAT2_START_LOCATE+(j*512),(unsigned int )&FATDW1.FAT_GU);		
			}			
/*
	*** Creat Boot Directory Entries 
*/				
		//WriteNfPage;
		for(j=0; j<42; j++)
			{
			 for(i=0; i<512; i++)
				FATDW1.FAT_GU[i]=0x00;
			 NF_PageProgram(ROOT_DIR_START_LOCATE+(j*512),(unsigned int )&FATDW1.FAT_GU);	
			}		 	
}

void BlockRead()
{
	unsigned int pBuf[528],i;
	for(i=1; i<2; i++)	
   	   NF_PageRead((512*i)+MBR_START_LOCATE, pBuf);
}			



#ifndef	__FAT_h__
#define	__FAT_h__
/*H**************************************************************************
* 文件名:       filename.h         
*----------------------------------------------------------------------------
* 版权          (c) 2004 TGE.
*----------------------------------------------------------------------------
* 释放:         Spce061A      
* 版本:         1.13     
*----------------------------------------------------------------------------
* 目的:
* 
*****************************************************************************/

/*_____    包括     ________________________________________________________*/

/*_____    宏       ________________________________________________________*/
#define SECTOR_PER_FAT	(((totalSector/nbSectorPerCluster)*2)/SECTOR_SIZE)+1
#define SECTOR_SIZE   	512
#define RESERVED_SECTOR	1
#define ROOT_ENTRY 		352
#define DIR_SIZE		32 
#define FATS        	2
#define FAT_EXT_SIGN    0x29

/* MEMORY LOCATE DEFINE*/
#define	  MBR_START_LOCATE			0x00000000
#define   DBR_START_LOCATE			0x00000200
#define   FAT1_START_LOCATE			0x00000400
#define   FAT2_START_LOCATE			0x00000C00
#define   ROOT_DIR_START_LOCATE		0x00001400
#define   DATA_START_LOCATE        	0x00004000

#define Uchar unsigned char
#define Uint  unsigned int
#define Ulong unsigned long int

/*_____    定义     ________________________________________________________*/
typedef struct{
	Uchar bootcode[446];
	Uchar PT1[16];
	Uchar PT2[16];
	Uchar PT3[16];
	Uchar PT4[16];
	Uchar EndingFlag[2];
}MBR_Tag;

typedef struct{
	Uchar bJmpBoot[3];
	Uchar bOEMName[8];
	Uint  BPB_wBytesPerSec[2];
	Uchar BPB_bSecPerClus;
	Uint  BPB_wReservedSec[2];
	Uint  BPB_bNumFATs;
	Uint  BPB_wRootEntry[2];
	Uint  BPB_wTotalSec[2];	//<32M User
	Uint  BPB_bMedia;
	Uint  BPB_wSecPerFAT[2];
	Uint  BPB_wSecPerTrk[2];
	Uint  BPB_wHeads[2];
	Uint  BPB_dHiddSec[4];
	Uint  BPB_dBigTotalSec[4];
	Uint  bDrvNum;
	Uint  bReserved1;
	Uint  bBootSig;
	Uchar bVolID[4];
	Uchar bVolLab[11];
	Uchar FileSysType[8];
	Uchar ExecutableCode[448];
	Uchar EndingFlag[2];		
}DBR_Tag;

typedef union _FATDW{
	MBR_Tag FAT_MBR;
	DBR_Tag FAT_DBR;
	Uchar   FAT_GU[512];
} FATDW;

/*_____    声明     ________________________________________________________*/
void	FormatFAT16(void);		
void 	BlockRead();	
#endif


 /* 
  F_InitWriteNF(); 
  NF_WP_CLOSE();    
  Addr32 = Addr32<<5 ;		//(Sector -> Block) Address
  Nf_wait_busy();
  F_WriteCmdToNF(NF_READ_A_AREA_CMD);
  F_WriteCmdToNF(NF_BLOCK_ERASE_CMD);       	/* Auto Block Erase Setup     */
/*  
  UartSendData(Addr32&0xff);
  UartSendData((Addr32>>8)&0xff);
  F_WriteAddrToNF( Addr32 & 0xff );         	/* 2nd address cycle          */]
/*  
  F_WriteAddrToNF((Addr32>>8)&0xff); 			/* 3rd address cycle          */
/*
  F_WriteCmdToNF(NF_BLOCK_ERASE_CONFIRM_CMD);	/* Erase command              */
//  Nf_wait_busy();
//  F_WriteCmdToNF(NF_READ_STATUS_CMD );			/*Read Status */
//  F_InitReadNF();
/*  
  if(F_ReadNF() & 0x01)
  	;//UartSendData('F');
  else
  	;//UartSendData('S');	
  NF_WP_OPEN();   
  return (1);									//Return Status  */
  
  
/*
void Nf_write_open_B_area(address_sector, nb_byte)                       
{
     F_WriteCmdToNF(NF_READ_B_AREA_CMD);                                 
     F_WriteCmdToNF(NF_SEQUENTIAL_DATA_INPUT_CMD);                       
     F_WriteAddrToNF( nb_byte );                                                  
     F_WriteAddrToNF( ((Byte*)&address_sector)[3] );                      
     F_WriteAddrToNF( ((Byte*)&address_sector)[2] );  
}
  
void Nf_write_open_A_area(address_sector, nb_byte)                       
{
     F_WriteCmdToNF(NF_READ_A_AREA_CMD);                                 
     F_WriteCmdToNF(NF_SEQUENTIAL_DATA_INPUT_CMD);                       
     F_WriteAddrToNF( nb_byte );                                                  
     F_WriteAddrToNF( ((Byte*)&address_sector)[3] );                      
     F_WriteAddrToNF( ((Byte*)&address_sector)[2] );
}
  
void Nf_write_open_C_area(address_sector, nb_byte)                       
     F_WriteCmdToNF(NF_READ_C_AREA_CMD);                                 
     F_WriteCmdToNF(NF_SEQUENTIAL_DATA_INPUT_CMD);                       
     F_WriteAddrToNF( nb_byte );                                                 
     F_WriteAddrToNF( ((Byte*)&address_sector)[3] );                      
     F_WriteAddrToNF( ((Byte*)&address_sector)[2] );
  
void Nf_read_open_B_area(address_sector, nb_byte)                        
{
    F_WriteCmdToNF(NF_READ_B_AREA_CMD);                                 
    F_WriteAddrToNF( nb_byte );                                                  
    F_WriteAddrToNF( ((Byte*)&address_sector)[3] );                      
    F_WriteAddrToNF( ((Byte*)&address_sector)[2] );                      
    Nf_wait_busy();
}
  
void Nf_read_open_C_area(address_sector, nb_byte)   
{                     
    F_WriteCmdToNF(NF_READ_C_AREA_CMD);                                 
    F_WriteAddrToNF ( nb_byte );                                                  
    F_WriteAddrToNF ( ((Byte*)&address_sector)[3] );                      
    F_WriteAddrToNF ( ((Byte*)&address_sector)[2] );                      
    Nf_wait_busy();
}
  
void Nf_read_open_A_area(address_sector, nb_byte)                        
{
	F_WriteCmdToNF(NF_READ_A_AREA_CMD);                                 
    F_WriteAddrToNF ( nb_byte );                                                  
    F_WriteAddrToNF ( ((Byte*)&address_sector)[3] );                      
    F_WriteAddrToNF ( ((Byte*)&address_sector)[2] );                      
    Nf_wait_busy();
}        // */  	


//====================================================================================//
// 文件名:    ExterInt.asm
// 描  述:   该文件的程序主要用于处理PDIUSBD12中断
// 日  期:   2003/04/03
//====================================================================================//
#include "..\\d12\\D12CI.h"
#include "chap9.h"
#include "..\\spce061\\061reg.h"
#include "..\\usb\\TPBulk.h"
#include "..\\Uart\\Uart.h"
extern unsigned int  *BOTXfer_pData;		//global variable 
extern unsigned int  BOTXfer_wResidue;

extern unsigned long int  LBA_Write;
extern unsigned long int g_RWaddress;   //global read/write address
extern unsigned int *g_pRWaddr;		//global Read/Write Addr Point
extern unsigned int g_RWBuf[512];

extern BIT_STATUS bFlags;
extern unsigned int  BOTFSMstate;

extern CONTROL_TRANSFERS ControlData;
extern void F_Ep0_RxDone_Detail(void);
extern void F_Ep0_TxDone_Detail(void);
extern EPPFLAGS bEPPflags;

void F_USB_Isr(void);
void F_Ep0_TxDone(void);
void F_Ep0_RxDone(void);
void F_Ep1_TxDone(void);
void F_Ep1_RxDone(void);
void F_Main_TxDone(void);
void F_Main_RxDone(void);
void F_DMA_Eot(void);
unsigned int  i_st;
unsigned int ep_last;
//=====================================================================
// 函数:    F_USB_Isr
// 语法:    void F_USB_Isr(void)
// 描述:    PDIUSBD12中断的各个中断源的处理
// 参数:    无
// 返回:    无
//=====================================================================

void F_USB_Isr(void)
{
do{
	bEPPflags.bits.in_isr = 1;
	i_st = F_D12_ReadInterruptRegister();
	if(i_st != 0)
	{
		if(i_st & D12_INT_BUSRESET)      
		{
			bEPPflags.bits.bus_reset = 1;
		}
		if(i_st & D12_INT_EOT) 
		{
			F_DMA_Eot();
		}
		if(i_st & D12_INT_SUSPENDCHANGE)
		{
			bEPPflags.bits.suspend = 1;
		}
		if(i_st & D12_INT_ENDP0IN)   
		{
		 	F_Ep0_RxDone();
		}
		if(i_st & D12_INT_ENDP0OUT)    
		{
			F_Ep0_TxDone();
		}
			
		if(i_st & D12_INT_ENDP1IN)
		{
			F_Ep1_TxDone();
		}
		if(i_st & D12_INT_ENDP1OUT)
		{
			F_Ep1_RxDone();
		}
		if(i_st & D12_INT_ENDP2IN)
		{
		//	F_MainRxHandler();
		}
		
		if(i_st & D12_INT_ENDP2OUT)
		{
		//	F_MainTxHandler();
		}
		
	}
	bEPPflags.bits.in_isr = 0;
}
while(!(*P_IOB_Data & 0x08));	
}
//=====================================================================
// 函数:    F_DMA_Eot
// 语法:    void F_DMA_Eot(void)
// 描述:    PDIUSBD12的DMA处理
// 参数:    无
// 返回:    无
//=====================================================================
void F_DMA_Eot(void)
{
}
//=====================================================================
// 函数:    F_Ep0_RxDone
// 语法:    void F_Ep0_RxDone(void)
// 描述:    端点0,接收数据处理
// 参数:    无
// 返回:    无
//=====================================================================
void F_Ep0_RxDone(void)
{
	ep_last = F_D12_ReadLastTransactionStatus(0); // Clear interrupt flag
	F_Ep0_RxDone_Detail();
}
//=====================================================================
// 函数:    F_Ep0_TxDone
// 语法:    void F_Ep0_TxDone(void)
// 描述:    端点0,发送数据处理
// 参数:    无
// 返回:    无
//=====================================================================
void F_Ep0_TxDone(void)
{
    
	F_D12_ReadLastTransactionStatus(1);
	F_Ep0_TxDone_Detail();

}
//=====================================================================
// 函数:    F_Ep1_TxDone
// 语法:    void F_Ep1_TxDone(void)
// 描述:    端点1,发送数据处理
// 参数:    无
// 返回:    无
//=====================================================================
void F_Ep1_TxDone(void)
{
	bEPPflags.bits.Ep1_SendDataFlag=1;
	F_D12_ReadLastTransactionStatus(3); //Clear interrupt flag
}
//=====================================================================
// 函数:    F_Ep1_RxDone
// 语法:    void F_Ep1_RxDone(void)
// 描述:    端点1,接收数据处理
// 参数:    无
// 返回:    无
//=====================================================================
void F_Ep1_RxDone(void)
{
	bEPPflags.bits.Ep1_ReceiveDataFlag=1;
	F_D12_ReadLastTransactionStatus(2); // Clear interrupt flag 
}

//=====================================================================
// 函数:    F_Main_TxDone (Device -> Host)
// 语法:    void F_Main_TxDone(void)
// 描述:    端点1,发送数据处理
// 参数:    无
// 返回:    无
//=====================================================================
void F_Main_TxDone(void)
{
	unsigned int EP2Len;
	bEPPflags.bits.Ep2_SendDataFlag=1;
//	F_D12_ReadLastTransactionStatus(5); // Clear D12 interrupt flag 
     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_WriteEndpoint(5,BOTXfer_wResidue,BOTXfer_pData);//回送数据
				 EP2Len=F_D12_WriteEndpointAndClrD12Int(5,13,BOTXfer_pData);//回送数据
				 BOTXfer_pData += EP2Len;
				 BOTXfer_wResidue -= EP2Len;

⌨️ 快捷键说明

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