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

📄 sl811.lst

📁 SL811开发资料_包含源程序_电路图_芯片资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.20c  SL811                                                                 08/21/2003 22:51:04 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE SL811
OBJECT MODULE PLACED IN SL811.OBJ
COMPILER INVOKED BY: E:\WIN98\HARDWARE\KEILC\C51\BIN\C51.EXE SL811.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "common.h"
   2          #include "SL811.H"
   3          #include "HAL.H"
   4          #include "HPI.H"
   5          
   6          extern XXGFLAGS bdata bXXGFlags;
   7          
   8          XXGPKG usbstack;
   9          unsigned char remainder;
  10          extern UART_CMD_BLOCK xdata UartCmdBlock;
  11          extern UART_RSP_BLOCK xdata UartRspBlock;
  12          unsigned char xdata DBUF[BUFFER_LENGTH];
  13          extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
  14          pUSBDEV  idata	uDev;	// Multiple USB devices attributes, Max 5 devices
  15          
  16          code unsigned char cmd_test_createfile[]=
  17          	{0x07,
  18          	 0x54,0x45,0x53,0x54,0x20,0x20,0x20,0x20,
  19          	 0x44,0x41,0x54,0x20,0x20,0x75,0xcd,0xb4,
  20          	 0xe2,0x2e,0xe2,0x20,0x20,0xce,0xb4,0xe2,
  21          	 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  22          	 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  23          	 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  24          	 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  25          	 0x20,0x20,0x20,0x20,0x20,0x20,0x20
  26          	 };
  27          code unsigned char cmd_test_writefile[]=
  28          	{
  29          	0x09,
  30          	0x00,
  31          	0x00,0x70,
  32          	0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  33          	0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  34          	0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  35          	0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  36          	0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  37          	0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  38          	0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20
  39          	};
  40          //*****************************************************************************************
  41          // SL811H variables initialization
  42          //*****************************************************************************************
  43          unsigned char SL811_GetRev(void)
  44          {
  45   1      	//SL811Write(SL811_ADDR_PORT, 0x0e);
  46   1      	return SL811Read(0x0e);
  47   1      }
  48          
  49          void USBReset(void)
  50          {
  51   1      	unsigned char temp;
  52   1          	temp=SL811Read(CtrlReg);   
  53   1       	SL811Write(CtrlReg,temp|0x08);
  54   1      	DelayMs(25);		
  55   1      	 	
C51 COMPILER V6.20c  SL811                                                                 08/21/2003 22:51:04 PAGE 2   

  56   1          	SL811Write(CtrlReg,temp);    
  57   1      }
  58          
  59          //*****************************************************************************************
  60          // usbXfer:
  61          // successful transfer = return TRUE
  62          // fail transfer = return FALSE
  63          //*****************************************************************************************
  64          unsigned char usbXfer(void)
  65          {  
  66   1      	
  67   1      	unsigned char	xferLen, data0, data1,cmd;
  68   1      	unsigned char intr,result,remainder,dataX,bufLen,addr,timeout;
  69   1      	
  70   1      	//------------------------------------------------
  71   1      	// Default setting for usb trasnfer
  72   1      	//------------------------------------------------
  73   1      	dataX=timeout=0;
  74   1      	//result 	  = SL811Read(EP0Status);	
  75   1      	data0 = EP0_Buf;					// DATA0 buffer address
  76   1      	data1 = data0 + (unsigned char)usbstack.wPayload;	// DATA1 buffer address
  77   1      	bXXGFlags.bits.DATA_STOP=FALSE;
  78   1      	bXXGFlags.bits.TIMEOUT_ERR=FALSE;
  79   1      	//------------------------------------------------
  80   1      	// Define data transfer payload
  81   1      	//------------------------------------------------
  82   1      	if (usbstack.wLen >= usbstack.wPayload)  		// select proper data payload
  83   1      		xferLen = usbstack.wPayload;			// limit to wPayload size 
  84   1      	else							// else take < payload len
  85   1      		xferLen = usbstack.wLen;			//	
  86   1      	
  87   1      	// For IN token
  88   1      	if (usbstack.pid==PID_IN)				// for current IN tokens
  89   1      	{												//
  90   2      		cmd = sDATA0_RD;			// FS/FS on Hub, sync to sof
  91   2      	}
  92   1      	// For OUT token
  93   1      	else if(usbstack.pid==PID_OUT)				// for OUT tokens
  94   1      	{  	
  95   2      		if(xferLen)									// only when there are	
  96   2      			{
  97   3      			//intr=usbstack.setup.wLength;
  98   3      			//usbstack.setup.wLength=WordSwap(usbstack.setup.wLength);
  99   3      			SL811BufWrite(data0,usbstack.buffer,xferLen); 	// data to transfer on USB
 100   3      			//usbstack.setup.wLength=intr;
 101   3      			}
 102   2      		cmd = sDATA0_WR;
 103   2      								// FS/FS on Hub, sync to sof
 104   2      	// implement data toggle
 105   2      		bXXGFlags.bits.bData1 = uDev.bData1[usbstack.endpoint];
 106   2              	uDev.bData1[usbstack.endpoint] = (uDev.bData1[usbstack.endpoint] ? 0 : 1); // DataToggle
 107   2      		
 108   2      		if(bXXGFlags.bits.bData1)
 109   2                		cmd |= 0x40;                              // Set Data1 bit in command
 110   2                	
 111   2      	}
 112   1      	// For SETUP/OUT token
 113   1      	else											// for current SETUP/OUT tokens
 114   1      	{  	
 115   2      		if(xferLen)									// only when there are	
 116   2      			{
 117   3      			intr=usbstack.setup.wLength;
C51 COMPILER V6.20c  SL811                                                                 08/21/2003 22:51:04 PAGE 3   

 118   3      			usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
 119   3      			usbstack.setup.wIndex=WordSwap(usbstack.setup.wIndex);
 120   3      			usbstack.setup.wLength=WordSwap(usbstack.setup.wLength);
 121   3      			SL811BufWrite(data0,(unsigned char *)&usbstack.setup,xferLen); 	// data to transfer on USB
 122   3      			usbstack.setup.wLength=intr;
 123   3      			}
 124   2      		cmd = sDATA0_WR;						// FS/FS on Hub, sync to sof
 125   2      	}
 126   1      	//------------------------------------------------
 127   1      	// For EP0's IN/OUT token data, start with DATA1
 128   1      	// Control Endpoint0's status stage.
 129   1      	// For data endpoint, IN/OUT data, start ????
 130   1      	//------------------------------------------------
 131   1      	if (usbstack.endpoint == 0 && usbstack.pid != PID_SETUP) 	// for Ep0's IN/OUT token
 132   1      		cmd |= 0x40; 					// always set DATA1
 133   1      	//------------------------------------------------
 134   1      	// Arming of USB data transfer for the first pkt
 135   1      	//------------------------------------------------
 136   1      	SL811Write(EP0Status,((usbstack.endpoint&0x0F)|usbstack.pid));	// PID + EP address
 137   1      	SL811Write(EP0Counter,usbstack.usbaddr);			// USB address
 138   1      	SL811Write(EP0Address,data0);					// buffer address, start with "data0"
 139   1      	SL811Write(EP0XferLen,xferLen);					// data transfer length
 140   1      	SL811Write(IntStatus,INT_CLEAR); 				// clear interrupt status
 141   1      	SL811Write(EP0Control,cmd);					// Enable ARM and USB transfer start here
 142   1      	
 143   1      	//------------------------------------------------
 144   1      	// Main loop for completing a wLen data trasnfer
 145   1      	//------------------------------------------------
 146   1      	while(TRUE)
 147   1      	{   
 148   2      		//---------------Wait for done interrupt------------------
 149   2      		while(TRUE)												// always ensure requested device is
 150   2      		{														// inserted at all time, then you will
 151   3      			//intr=SL811Read(cSOFcnt);
 152   3      			//intr=SL811Read(IntEna);
 153   3      			intr = SL811Read(IntStatus);	
 154   3      								// wait for interrupt to be done, and 
 155   3      			if((intr & USB_RESET) || (intr & INSERT_REMOVE))	// proceed to parse result from slave 
 156   3      			{													// device.
 157   4      				bXXGFlags.bits.DATA_STOP = TRUE;								// if device is removed, set DATA_STOP
 158   4      				return FALSE;									// flag true, so that main loop will 
 159   4      			}													// know this condition and exit gracefully
 160   3      			if(intr & USB_A_DONE)								
 161   3      				break;											// interrupt done !!!
 162   3      		}
 163   2      
 164   2      		SL811Write(IntStatus,INT_CLEAR); 						// clear interrupt status
 165   2      		result 	  = SL811Read(EP0Status);						// read EP0status register
 166   2      		remainder = SL811Read(EP0Counter);						// remainder value in last pkt xfer
 167   2      		//while
 168   2      		//-------------------------ACK----------------------------
 169   2      		if (result & EP0_ACK)									// Transmission ACK
 170   2      		{	
 171   3      
 172   3      			// SETUP TOKEN
 173   3      			if(usbstack.pid == PID_SETUP)								// do nothing for SETUP/OUT token 
 174   3      				break;											// exit while(1) immediately
 175   3      
 176   3      			// OUT TOKEN				
 177   3      			else if(usbstack.pid == PID_OUT)
 178   3      			{
 179   4      				usbstack.wLen  -= (WORD)xferLen;
C51 COMPILER V6.20c  SL811                                                                 08/21/2003 22:51:04 PAGE 4   

 180   4      				usbstack.buffer += xferLen;
 181   4      				//cmd ^=0x40;
 182   4      				//dataX++;
 183   4      				
 184   4      				if(!usbstack.wLen)
 185   4      					break;
 186   4      				////////////////////////////////////
 187   4      				if (usbstack.wLen >= usbstack.wPayload)  		// select proper data payload
 188   4      					xferLen = usbstack.wPayload;			// limit to wPayload size 
 189   4      				else							// else take < payload len
 190   4      					xferLen = usbstack.wLen;	
 191   4      				
 192   4      				////////////////////////////////////
 193   4      				//if(bufLen)										
 194   4      				{	
 195   5      					//addr    = (dataX & 1) ? data1:data0; 
 196   5      					addr=data0;
 197   5      					
 198   5      					SL811BufWrite(addr,usbstack.buffer,xferLen);
 199   5      					
 200   5      					cmd = sDATA0_WR;
 201   5      					bXXGFlags.bits.bData1 = uDev.bData1[usbstack.endpoint];
 202   5              				uDev.bData1[usbstack.endpoint] = (uDev.bData1[usbstack.endpoint] ? 0 : 1); // DataToggle
 203   5      		
 204   5      					if(bXXGFlags.bits.bData1)
 205   5                					cmd |= 0x40;    
 206   5      								// always sync SOF when FS, regardless 
 207   5      					SL811Write(EP0XferLen, xferLen); 		// select next xfer length
 208   5      					SL811Write(EP0Address, addr);           	// data buffer addr 
 209   5      					SL811Write(IntStatus,INT_CLEAR);		// is a LS is on Hub.
 210   5      					SL811Write(EP0Control,cmd);			// Enable USB transfer and re-arm
 211   5      				}	
 212   4      				
 213   4      			} //PID OUT
 214   3      			// IN TOKEN
 215   3      			else if(usbstack.pid == PID_IN)
 216   3      			{													// for IN token only
 217   4      				usbstack.wLen  -= (WORD)xferLen;	// update remainding wLen value
 218   4      				cmd   ^= 0x40;    			// toggle DATA0/DATA1
 219   4      				dataX++;				// point to next dataX
 220   4      
 221   4      				//------------------------------------------------	
 222   4      				// If host requested for more data than the slave 
 223   4      				// have, and if the slave's data len is a multiple
 224   4      				// of its endpoint payload size/last xferLen. Do 
 225   4      				// not overwrite data in previous buffer.
 226   4      				//------------------------------------------------	
 227   4      				if(remainder==xferLen)			// empty data detected
 228   4      					bufLen = 0;			// do not overwriten previous data
 229   4      				else					// reset bufLen to zero
 230   4      					bufLen = xferLen;		// update previous buffer length
 231   4      				
 232   4      				//------------------------------------------------	
 233   4      				// Arm for next data transfer when requested data 
 234   4      				// length have not reach zero, i.e. wLen!=0, and
 235   4      				// last xferlen of data was completed, i.e.
 236   4      				// remainder is equal to zero, not a short pkt
 237   4      				//------------------------------------------------	
 238   4      				if(!remainder && usbstack.wLen)							// remainder==0 when last xferLen
 239   4      				{												// was all completed or wLen!=0
 240   5      					addr    = (dataX & 1) ? data1:data0; 		// select next address for data
 241   5      					xferLen = (BYTE)(usbstack.wLen>=usbstack.wPayload) ? usbstack.wPayload:usbstack.wLen;	// get data len
C51 COMPILER V6.20c  SL811                                                                 08/21/2003 22:51:04 PAGE 5   

             -gth required
 242   5      					//if (FULL_SPEED)								// sync with SOF transfer
 243   5      					cmd |= 0x20;					// always sync SOF when FS, regardless 
 244   5      					SL811Write(EP0XferLen, xferLen); 		// select next xfer length

⌨️ 快捷键说明

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