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

📄 xxgisr.lst

📁 一个51写的usb程序 测试过的
💻 LST
字号:
C51 COMPILER V6.20c  XXGISR                                                                01/16/2003 10:36:17 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE XXGISR
OBJECT MODULE PLACED IN Xxgisr.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Xxgisr.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //#include <reg51.h>                /* special function register declarations   */
   2          #include <stdio.h>
   3          #include <string.h>
   4          
   5          #include "xxghal.h"
   6          #include "xxgd12ci.h"
   7          #include "xxgmain.h"
   8          #include "xxgUSB100.h"
   9          
  10          void bus_reset(void);
  11          
  12          void ep0_txdone(void);
  13          void ep0_rxdone(void);
  14          void ep1_txdone(void);
  15          void ep1_rxdone(void);
  16          void main_txdone(void);
  17          void main_rxdone(void);
  18          
  19          //void dma_eot(void);
  20          
  21          /*
  22          //*************************************************************************
  23          //  Public static data
  24          //*************************************************************************
  25          */
  26          EPPFLAGS bEPPflags;
  27          
  28          /* Control endpoint TX/RX buffers */
  29          extern CONTROL_XFER ControlData;
  30          
  31          /* ISR static vars */
  32          unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
  33          unsigned char idata EpBuf[EP2_PACKET_SIZE];
  34          IO_REQUEST idata ioRequest;
  35          unsigned char ioSize, ioCount;
  36          
  37          unsigned long ClockTicks = 0;
  38          unsigned char xdata MainEpBuf[256];
  39          
  40          extern BOOL bNoRAM;
  41          
  42          timer_isr() interrupt 1
  43          {
  44   1      	DISABLE;
  45   1      	ClockTicks++;
  46   1      	bEPPflags.bits.timer = 1;
  47   1      	ENABLE;
  48   1      }
  49          
  50          /*
  51          void fn_usb_isr()
  52          {
  53          	//unsigned int st;
  54          	unsigned char x,st;
  55          	bEPPflags.bits.in_isr = 1;
C51 COMPILER V6.20c  XXGISR                                                                01/16/2003 10:36:17 PAGE 2   

  56          	x = D12_ReadInterruptRegister();
  57          	//st=x;
  58          	//i=st;
  59          	if(x != 0) {
  60          		//if(i_st & D12_INT_BUSRESET) {
  61          		if(x & 0x40) {
  62          			bus_reset();
  63          			bEPPflags.bits.bus_reset = 1;
  64          		}
  65          
  66          		if(x & D12_INT_EOT)
  67          			dma_eot();
  68          
  69          		if(x & D12_INT_SUSPENDCHANGE)
  70          			bEPPflags.bits.suspend = 1;
  71          
  72          		
  73          		if(x & D12_INT_ENDP0IN)
  74          			ep0_txdone();
  75          		if(x & D12_INT_ENDP0OUT)
  76          			ep0_rxdone();
  77          		if(x & D12_INT_ENDP1IN)
  78          			ep1_txdone();
  79          		if(x & D12_INT_ENDP1OUT)
  80          			ep1_rxdone();
  81          		if(x & D12_INT_ENDP2IN)
  82          			main_txdone();
  83          		if(x & D12_INT_ENDP2OUT)
  84          			main_rxdone();
  85          		
  86          	}
  87          	
  88          	bEPPflags.bits.in_isr = 0;
  89          	
  90          }
  91          */
  92          usb_isr() interrupt 0
  93          {
  94   1      	unsigned char x,st;
  95   1      	DISABLE;
  96   1      	//fn_usb_isr();
  97   1      		//unsigned int st;
  98   1      	//unsigned char x,st;
  99   1      	bEPPflags.bits.in_isr = 1;
 100   1      	x = D12_ReadInterruptRegister();
 101   1      	//st=x;
 102   1      	//i=st;
 103   1      	if(x != 0) {
 104   2      		//if(i_st & D12_INT_BUSRESET) {
 105   2      		if(x & 0x40) {
 106   3      			bus_reset();
 107   3      			bEPPflags.bits.bus_reset = 1;
 108   3      		}
 109   2      
 110   2      		//if(x & D12_INT_EOT)
 111   2      			//dma_eot();
 112   2      
 113   2      		if(x & D12_INT_SUSPENDCHANGE)
 114   2      			bEPPflags.bits.suspend = 1;
 115   2      
 116   2      		
 117   2      		if(x & D12_INT_ENDP0IN)
C51 COMPILER V6.20c  XXGISR                                                                01/16/2003 10:36:17 PAGE 3   

 118   2      			ep0_txdone();
 119   2      		if(x & D12_INT_ENDP0OUT)
 120   2      			ep0_rxdone();
 121   2      		if(x & D12_INT_ENDP1IN)
 122   2      			ep1_txdone();
 123   2      		if(x & D12_INT_ENDP1OUT)
 124   2      			ep1_rxdone();
 125   2      		if(x & D12_INT_ENDP2IN)
 126   2      			main_txdone();
 127   2      		if(x & D12_INT_ENDP2OUT)
 128   2      			main_rxdone();
 129   2      		
 130   2      	}
 131   1      	
 132   1      	bEPPflags.bits.in_isr = 0;
 133   1      	
 134   1      	
 135   1      	
 136   1      	ENABLE;
 137   1      }
*** WARNING C280 IN LINE 94 OF XXGISR.C: 'st': unreferenced local variable
 138          void bus_reset(void)
 139          {
 140   1      }
 141          //void dma_eot(void)
 142          //{
 143          //}
 144          //---------------------------------
 145          void ep0_rxdone(void)
 146          {
 147   1      	unsigned char ep_last, i;
 148   1      
 149   1      	ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
 150   1      	if (ep_last & D12_SETUPPACKET) {
 151   2      
 152   2      		ControlData.wLength = 0;
 153   2      		ControlData.wCount = 0;
 154   2      	//判断端点是否满,如是,则取出
 155   2      		if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
 156   2      			(unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
 157   3      
 158   3      			D12_SetEndpointStatus(0, 1);
 159   3      			D12_SetEndpointStatus(1, 1);
 160   3      			bEPPflags.bits.control_state = USB_IDLE;
 161   3      			
 162   3      			return;
 163   3      		}
 164   2      
 165   2      		ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
 166   2      		ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
 167   2      		ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
 168   2      
 169   2      		// Acknowledge setup here to unlock in/out endp
 170   2      	//向控制输出端点发送应答建立命令以重新使能下一个建立阶段
 171   2      		D12_AcknowledgeEndpoint(0);
 172   2      		D12_AcknowledgeEndpoint(1);
 173   2      
 174   2      		ControlData.wLength = ControlData.DeviceRequest.wLength;
 175   2      		ControlData.wCount = 0;
 176   2      	//需要证实控制传输是控制读还是写,如果是读:
 177   2      	//如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向
 178   2      	//主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输
C51 COMPILER V6.20c  XXGISR                                                                01/16/2003 10:36:17 PAGE 4   

 179   2      	//模式即准备在主机发送请求时发送数据
 180   2      
 181   2      		if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
 182   3      			bEPPflags.bits.setup_packet = 1;
 183   3      			bEPPflags.bits.control_state = USB_IDLE;		/* get command */
 184   3      		    }
 185   2      	//如果是写
 186   2      		else {
 187   3      			if (ControlData.DeviceRequest.wLength == 0) {
 188   4      				bEPPflags.bits.setup_packet = 1;
 189   4      				bEPPflags.bits.control_state = USB_IDLE;		/* set command */
 190   4      			     }
 191   3      			else {
 192   4      				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
 193   5      					bEPPflags.bits.control_state = USB_IDLE;
 194   5      					D12_SetEndpointStatus(0, 1);
 195   5      					D12_SetEndpointStatus(1, 1);
 196   5      				        }
 197   4      				else {
 198   5      					bEPPflags.bits.control_state = USB_RECEIVE;	/* set command with OUT token */
 199   5      				      }
 200   4      			     } // set command with data
 201   3      		      } // else set command
 202   2      	   } // if setup packet
 203   1      
 204   1      	else if (bEPPflags.bits.control_state == USB_RECEIVE) {
 205   2      		i =	D12_ReadEndpoint(0, EP0_PACKET_SIZE,
 206   2      			ControlData.dataBuffer + ControlData.wCount);
 207   2      
 208   2      		ControlData.wCount += i;
 209   2      		if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
 210   3      			bEPPflags.bits.setup_packet = 1;
 211   3      			bEPPflags.bits.control_state = USB_IDLE;
 212   3      		}
 213   2      	}
 214   1      
 215   1      	else {
 216   2      		bEPPflags.bits.control_state = USB_IDLE;
 217   2      	}
 218   1      
 219   1      }
 220          //----------------------------------
 221          void ep0_txdone(void)
 222          {
 223   1      	short i = ControlData.wLength - ControlData.wCount;
 224   1      
 225   1      	D12_ReadLastTransactionStatus(1); // Clear interrupt flag
 226   1      
 227   1      	if (bEPPflags.bits.control_state != USB_TRANSMIT) 
 228   1      		return;
 229   1      	//-------------------------
 230   1      	if( i >= EP0_PACKET_SIZE) {
 231   2      		D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
 232   2      		ControlData.wCount += EP0_PACKET_SIZE;
 233   2      
 234   2      		bEPPflags.bits.control_state = USB_TRANSMIT;
 235   2      	}
 236   1      	else if( i != 0) {
 237   2      		D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
 238   2      		ControlData.wCount += i;
 239   2      
 240   2      		bEPPflags.bits.control_state = USB_IDLE;
C51 COMPILER V6.20c  XXGISR                                                                01/16/2003 10:36:17 PAGE 5   

 241   2      	}
 242   1      	else if (i == 0){
 243   2      		D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???
 244   2      
 245   2      		bEPPflags.bits.control_state = USB_IDLE;
 246   2      	}
 247   1      
 248   1      }
 249          //----------------------------------
 250          void ep1_txdone(void)
 251          {
 252   1      	D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
 253   1      }
 254          
 255          void ep1_rxdone(void)
 256          {
 257   1      	unsigned char len;
 258   1      
 259   1      	D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
 260   1      
 261   1      	len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);
 262   1      
 263   1      	if(len != 0)
 264   1      		bEPPflags.bits.ep1_rxdone = 1;
 265   1      }
 266          //---------------------------------
 267          void main_txdone(void)
 268          {
 269   1      	unsigned char len;
 270   1      
 271   1      	D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
 272   1      
 273   1      	len = ioSize - ioCount;
 274   1      	if(len == 0) {
 275   2      		if(bEPPflags.bits.dma_state == DMA_PENDING)
 276   2      			bEPPflags.bits.setup_dma ++;
 277   2      		else
 278   2      			bEPPflags.bits.dma_state = DMA_IDLE;
 279   2      	}
 280   1      	else {
 281   2      		if(len > 64)
 282   2      			len = 64;
 283   2      		if(bNoRAM)
 284   2      			len = D12_WriteEndpoint(5, len, EpBuf + ioCount);
 285   2      		else
 286   2      			len = D12_WriteEndpoint(5, len, MainEpBuf + ioCount);
 287   2      		ioCount += len;
 288   2      	}
 289   1      }
 290          
 291          void main_rxdone(void)
 292          {
 293   1      	unsigned char len;
 294   1      
 295   1      	D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
 296   1      
 297   1      	if(bNoRAM)
 298   1      		len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
 299   1      	else
 300   1      		len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
 301   1      	ioCount += len;
 302   1      	if(bNoRAM)
C51 COMPILER V6.20c  XXGISR                                                                01/16/2003 10:36:17 PAGE 6   

 303   1      		len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
 304   1      	else
 305   1      		len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
 306   1      	ioCount += len;
 307   1      	if(ioCount >= ioSize) {
 308   2      		if(bEPPflags.bits.dma_state == DMA_PENDING)
 309   2      			bEPPflags.bits.setup_dma ++;
 310   2      		else
 311   2      			bEPPflags.bits.dma_state = DMA_IDLE;
 312   2      	}
 313   1      	
 314   1      }
 315          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    859    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    256    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       5
   IDATA SIZE       =     74    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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