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

📄 hpi.lst

📁 这是在SL811上实现的对U盘进行FAT32或FAT16读写的程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE HPI
OBJECT MODULE PLACED IN HPI.OBJ
COMPILER INVOKED BY: D:\Hardware\Keilc620\C51\Bin\C51.EXE HPI.C DB OE SMALL ROM(LARGE) 

stmt level    source

   1          #include "common.h"
   2          #include "TPBULK.H"
   3          #include "HPI.H"
   4          #include "HAL.H"
   5          #include "Fat.h"
   6          #include "INTRINS.H"
   7          
   8          #define DIR_IS_SUPPORTED 1
   9          
  10          extern XXGFLAGS bXXGFlags;
  11          extern unsigned char xdata DBUF[BUFFER_LENGTH];
  12          //////////////////////////////////////////
  13          //UART_CMD_BLOCK xdata inblock;
  14          unsigned char xdata UARTBUF[UARTBUF_LENGTH];
  15          SYS_INFO_BLOCK xdata DeviceInfo;
  16          UART_CMD_BLOCK xdata UartCmdBlock;
  17          UART_RSP_BLOCK xdata UartRspBlock;
  18          FILE_INFO xdata ThisFile;
  19          DIR_INFO xdata ThisDir;
  20          //extern FREE_FAT_INFO xdata FreeFat;
  21          extern unsigned char xdata CurFatSector[512];
  22          extern unsigned long idata FreeClusterNum,FreeSecNum;
  23          unsigned long xdata StartSec2Write;
  24          unsigned char xdata *BufStartAddress;
  25          unsigned long  xdata OldClusterPointer;
  26          //////////////////////////////////////////
  27          void UartSendRsp(void)
  28          {
  29   1      	unsigned int i;
  30   1      	unsigned char *pBuf=(unsigned char *)&UartRspBlock;
  31   1      	for(i=0;i<64;i++)
  32   1      		ComSendByte(*(pBuf+i));
  33   1      	if(UartRspBlock.len!=0){
  34   2      		for(i=0;i<UartRspBlock.len;i++)
  35   2      			ComSendByte(*(UartRspBlock.pbuffer+i));
  36   2      	   }
  37   1      }
  38          
  39          unsigned char UartHandler(unsigned char bEnd)
  40          {
  41   1        unsigned char retStatus;
  42   1        unsigned int len,temp,temp1,cnt;
  43   1        unsigned long pointer;
  44   1        U16 xdata itemCnt;
  45   1        itemCnt=0;
  46   1        //UartRspBlock.result=1;
  47   1         UartRspBlock.errcode=ERC_OK;
  48   1         UartRspBlock.len=0;
  49   1         ///////////////////////////
  50   1        switch(UartCmdBlock.cmd)
  51   1        {
  52   2          case CMD_RESET:
  53   2          
  54   2          	break;
  55   2           case CMD_LIST:
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 2   

  56   2          	ThisFile.bFileOpen=0;	
  57   2          	retStatus=List(&itemCnt,UARTBUF);
  58   2          	UartRspBlock.cmd=CMD_LIST_RSP;
  59   2          	break;
  60   2          case CMD_DETECT_DEVICE:
  61   2          	ThisFile.bFileOpen=0;	
  62   2          	retStatus=DetectDevice();
  63   2          	UartRspBlock.cmd=CMD_DETECT_DEVICE_RSP;
  64   2          	break;
  65   2          case CMD_OPEN_FILE:
  66   2          	retStatus=OpenFile(UartCmdBlock.CmdBlock.Cmd_OpenFile.filename);
  67   2          	UartRspBlock.cmd=CMD_OPEN_FILE_RSP;
  68   2          	break;
  69   2          case CMD_CREATE_FILE:
  70   2          	
  71   2          	retStatus=OpenFile(UartCmdBlock.CmdBlock.Cmd_OpenFile.filename);
  72   2          	if(UartRspBlock.errcode==ERC_FILENOTFOUND)
  73   2          		{	
  74   3      	    	retStatus=CreateFile(UartCmdBlock.CmdBlock.Cmd_CreateFile.item);
  75   3          		}
  76   2          	UartRspBlock.cmd=CMD_CREATE_FILE_RSP;
  77   2          	break;
  78   2          case CMD_READ_FILE:
  79   2          	len=SwapINT16(UartCmdBlock.CmdBlock.Cmd_ReadFile.readLength);
  80   2      	retStatus=ReadFile(len,UARTBUF);
  81   2          	UartRspBlock.cmd=CMD_READ_FILE_RSP;
  82   2          	break;
  83   2          case CMD_WRITE_FILE:
  84   2          	len=SwapINT16(UartCmdBlock.CmdBlock.Cmd_WriteFile.writeLength);
  85   2          	retStatus=WriteFile(len,UARTBUF,bEnd);
  86   2          	UartRspBlock.cmd=CMD_WRITE_FILE_RSP;
  87   2          	break;
  88   2         case CMD_WRITE_FILE_LARGE:
  89   2          	//len=SwapINT16(UartCmdBlock.CmdBlock.Cmd_WriteFile.writeLength);
  90   2          	for(temp=0xa1;temp<0xf8;temp++)
  91   2          		{
  92   3          		cnt=0;
  93   3          		for(temp1=0xa0;temp1<0x100;temp1++)
  94   3          			{
  95   4          			UARTBUF[cnt]=temp;
  96   4          			UARTBUF[cnt+1]=temp1;
  97   4          			cnt+=2;
  98   4          			}
  99   3          		retStatus=WriteFile(192,UARTBUF,0);
 100   3          		//temp=temp+1;
 101   3          		}
 102   2          	//retStatus=WriteFile(16384,UARTBUF,0);
 103   2          	    	
 104   2          	retStatus=WriteFile(512,UARTBUF,1);
 105   2          	//for(temp=0;temp<len-1;temp++)
 106   2          	//	{
 107   2          	//	retStatus=WriteFile(UARTBUF_LENGTH,UARTBUF,0);
 108   2          	//	if(retStatus==0)
 109   2          	//		break;
 110   2          	//	}
 111   2           	//retStatus=WriteFile(UARTBUF_LENGTH,UARTBUF,1);
 112   2          	UartRspBlock.cmd=CMD_WRITE_FILE_RSP;
 113   2          	break; 
 114   2         case CMD_REMOVE_FILE:
 115   2          	ThisFile.bFileOpen=0;	
 116   2          	retStatus=RemoveFile(UartCmdBlock.CmdBlock.Cmd_RemoveFile.filename,1);
 117   2          	UartRspBlock.cmd=CMD_REMOVE_FILE_RSP;
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 3   

 118   2          	break;
 119   2          case CMD_GET_CAPACITY:
 120   2          	ThisFile.bFileOpen=0;	
 121   2          	retStatus=GetCapacity();
 122   2          	UartRspBlock.cmd=CMD_GET_CAPACITY_RSP;
 123   2          	break;
 124   2      
 125   2          case CMD_SET_FILE_POINTER:
 126   2      	pointer=SwapINT32(UartCmdBlock.CmdBlock.Cmd_SetFilePointer.pointer);
 127   2      	retStatus=SetFilePointer(pointer);  
 128   2      	UartRspBlock.cmd=CMD_SET_FILE_POINTER_RSP;  	
 129   2          	break;
 130   2          case CMD_GET_VERSION:
 131   2      	ThisFile.bFileOpen=0;
 132   2      	retStatus=GetFirmwareVersion();   
 133   2      	UartRspBlock.cmd=CMD_GET_VERSION_RSP; 
 134   2          	break;
 135   2          ///////// 文件夹操作  //////////////////////////
 136   2      #ifdef DIR_IS_SUPPORTED
 137   2      /*    case CMD_CREATE_DIR:
 138   2          	
 139   2          	retStatus=OpenDir(UartCmdBlock.CmdBlock.Cmd_OpenFile.filename,UARTBUF);
 140   2          	if(UartRspBlock.errcode==ERC_FILENOTFOUND)
 141   2          		{	
 142   2      	    	retStatus=CreateDir(UartCmdBlock.CmdBlock.Cmd_CreateFile.item);
 143   2          		}
 144   2          	UartRspBlock.cmd=CMD_CREATE_DIR_RSP;
 145   2          	break;
 146   2           case CMD_OPEN_DIR:
 147   2          	retStatus=OpenDir(UartCmdBlock.CmdBlock.Cmd_OpenFile.filename,UARTBUF);
 148   2          	UartRspBlock.cmd=CMD_OPEN_DIR_RSP;
 149   2          	break;
 150   2           case CMD_EXIT_DIR:
 151   2          	retStatus=ExitDir();
 152   2          	UartRspBlock.cmd=CMD_EXIT_DIR_RSP;
 153   2          	break;
 154   2           case CMD_ROOT_DIR:
 155   2          	retStatus=RootDir();
 156   2          	UartRspBlock.cmd=CMD_ROOT_DIR_RSP;
 157   2          	break;
 158   2          case CMD_REMOVE_DIR:
 159   2          	ThisFile.bFileOpen=0;	
 160   2          	retStatus=RemoveDir(UartCmdBlock.CmdBlock.Cmd_RemoveFile.filename);
 161   2          	UartRspBlock.cmd=CMD_REMOVE_DIR_RSP;
 162   2          	break;
 163   2      */
 164   2      #endif
 165   2          default:
 166   2          	bXXGFlags.bCOM_ERR=1;
 167   2          	return FALSE;
 168   2        }
 169   1        ///////////////////////////////
 170   1        UartRspBlock.result=retStatus;
 171   1        UartRspBlock.pbuffer=UARTBUF;
 172   1        if(bEnd)
 173   1        	UartSendRsp();
 174   1        return TRUE;
 175   1        //return retStatus;
 176   1      }
 177          unsigned char DetectDevice(void)
 178          {
 179   1      #define RspBlockDetectDevice UartRspBlock.RspBlock.Rsp_DetectDevice
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 4   

 180   1      	return bXXGFlags.UDiskOK;
 181   1      	
 182   1      #undef RspBlockDetectDevice
 183   1      }
 184          
 185          U8 List(U16 *itemCnt,U8 *pBuffer)	//FAT16_32 ok
 186          {
 187   1      #define RspBlockList UartRspBlock.RspBlock.Rsp_List
 188   1      	unsigned int item,i,sector;
 189   1      	unsigned char j,k,bstop;
 190   1      	unsigned long sectorToRead,dirClusterPointer;
 191   1      	//RspBlockList.errcode=ERC_NODEVICE;
 192   1      	if(!bXXGFlags.UDiskOK)
 193   1      	{
 194   2      	UartRspBlock.errcode=ERC_NODEVICE;
 195   2      	return FALSE;		
 196   2      	}
 197   1      	///////////////////////////////////////////////////////////
 198   1      	item=0;
 199   1      	bstop=0;
 200   1      	sector=0;
 201   1      	dirClusterPointer=ThisDir.StartCluster;
 202   1      	
 203   1      	for(;;)
 204   1      	    {   
 205   2      		//////////////////////////////////////////////////
 206   2      		if(!SeekSectorToRead(&dirClusterPointer,&sector,&sectorToRead))
 207   2      			return FALSE;
 208   2      		//////////////////////////////////////////////////
 209   2      		if(!RBC_Read(sectorToRead,1,DBUF))
 210   2      			{
 211   3      			//item=0;
 212   3      			UartRspBlock.errcode=ERC_DEVICEERR;
 213   3      			return FALSE;			
 214   3      			}
 215   2      		///////////////////////////////////////////////////
 216   2      		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
 217   2      			{
 218   3      			if(DBUF[i]==0x00)
 219   3      				return TRUE;
 220   3      			else if(DBUF[i]==0xE5)
 221   3      				continue;
 222   3      			else if((DBUF[i]&0x40==0x40)&&(DBUF[i+11]&0x0f==0x0f))
 223   3      				{
 224   4      				j=DBUF[i]&0x0F;
 225   4      				j=j+1;
 226   4      				for(k=0;k<j*32;k++)
 227   4      					*(pBuffer+item*32+k)=DBUF[i+k];
 228   4      				i=i+(j-1)*32;
 229   4      				item=item+j;
 230   4      				*itemCnt=item;
 231   4      				RspBlockList.len=SwapINT16(item*32);
 232   4      				UartRspBlock.len=item*32;
 233   4      				}
 234   3      			else
 235   3      				{
 236   4      				for(k=0;k<32;k++)
 237   4      					*(pBuffer+item*32+k)=DBUF[i+k];
 238   4      				item=item+1;
 239   4      				*itemCnt=item;
 240   4      				RspBlockList.len=SwapINT16(item*32);
 241   4      				UartRspBlock.len=item*32;
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 5   

 242   4      				}
 243   3      			}
 244   2      		///////////////////////////////////////////////////////
 245   2      	    }
 246   1      		
 247   1      	///////////////////////////////////////////
 248   1      	return TRUE;
 249   1      	
 250   1      #undef RspBlockList
 251   1      
 252   1      }
 253          unsigned char OpenFile(unsigned char *pBuffer)
 254          {
 255   1      #define RspBlockOpenFile UartRspBlock.RspBlock.Rsp_OpenFile
 256   1      	unsigned int i,sector;
 257   1      	unsigned char j,bstop;
 258   1      	unsigned long sectorToRead,dirClusterPointer;
 259   1      	//PDIR_INFO pDirInfo;

⌨️ 快捷键说明

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