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

📄 chap_9.lst

📁 PDIUSBD12 USB1.1 C51源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V4.01,  CHAP_9                                                                07/07/01  13:16:08  PAGE 1   


DOS C51 COMPILER V4.01, COMPILATION OF MODULE CHAP_9
OBJECT MODULE PLACED IN CHAP_9.OBJ
COMPILER INVOKED BY: C:\KEIL\C51V4\BIN\C51.EXE CHAP_9.C DEBUG SMALL CODE SYMBOLS OBJECTEXTEND NOAMAKE

stmt level    source

   1          /*
   2             //*************************************************************************
   3             //
   4             //                  P H I L I P S   P R O P R I E T A R Y
   5             //
   6             //           COPYRIGHT (c)   1997 BY PHILIPS SINGAPORE.
   7             //                     --  ALL RIGHTS RESERVED  --
   8             //
   9             // File Name:	CHAP_9.C
  10             // Created:		19 Dec 97
  11             // Modified:
  12             // Revision:		3.0
  13             //
  14             //*************************************************************************
  15          */
  16          
  17          #include <stdio.h>
  18          #include <string.h>
  19          
  20          #include <reg51.h>                /* special function register declarations   */
  21          
  22          #include "epphal.h"
  23          #include "d12ci.h"
  24          #include "mainloop.h"
  25          #include "usb100.h"
  26          #include "chap_9.h"
  27          
  28          #define NUM_ENDPOINTS	4
  29          
  30          #define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
  31          									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
  32          									+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))
  33          
  34          extern CONTROL_XFER ControlData;
  35          extern IO_REQUEST idata ioRequest;
  36          extern EPPFLAGS bEPPflags;
  37          
  38          code USB_DEVICE_DESCRIPTOR DeviceDescr =
  39          {
  40          	sizeof(USB_DEVICE_DESCRIPTOR),
  41              USB_DEVICE_DESCRIPTOR_TYPE,
  42              SWAP(0x0100),
  43              USB_CLASS_CODE_TEST_CLASS_DEVICE,
  44              0, 0,
  45          	EP0_PACKET_SIZE,
  46          	SWAP(0x0471),
  47          	SWAP(0x0666),
  48          	SWAP(0x0100),
  49              0, 0, 0,
  50          	25
  51          };
  52          
  53          code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
  54          {
  55              sizeof(USB_CONFIGURATION_DESCRIPTOR),
  56              USB_CONFIGURATION_DESCRIPTOR_TYPE,
  57              SWAP(CONFIG_DESCRIPTOR_LENGTH),
  58          	1,
  59          	1,
C51 COMPILER V4.01,  CHAP_9                                                                07/07/01  13:16:08  PAGE 2   

  60              0,
  61          	0x60,
  62          	0x1
  63          };
  64          
  65          code USB_INTERFACE_DESCRIPTOR InterfaceDescr =
  66          {
  67              sizeof(USB_INTERFACE_DESCRIPTOR),
  68              USB_INTERFACE_DESCRIPTOR_TYPE,
  69              0,
  70              0,
  71          	NUM_ENDPOINTS,
  72          	USB_CLASS_CODE_TEST_CLASS_DEVICE,
  73          	USB_SUBCLASS_CODE_TEST_CLASS_D12,
  74          	USB_PROTOCOL_CODE_TEST_CLASS_D12,
  75          	0
  76          };
  77          
  78          code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
  79          {
  80          	sizeof(USB_ENDPOINT_DESCRIPTOR),
  81          	USB_ENDPOINT_DESCRIPTOR_TYPE,
  82          	0x81,
  83          	USB_ENDPOINT_TYPE_INTERRUPT,
  84          	SWAP(EP1_PACKET_SIZE),
  85          	10
  86          };
  87          
  88          code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
  89          {
  90          	sizeof(USB_ENDPOINT_DESCRIPTOR),
  91          	USB_ENDPOINT_DESCRIPTOR_TYPE,
  92          	0x1,
  93          	USB_ENDPOINT_TYPE_INTERRUPT,
  94          	SWAP(EP1_PACKET_SIZE),
  95          	10
  96          };
  97          
  98          code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
  99          {
 100          	sizeof(USB_ENDPOINT_DESCRIPTOR),
 101          	USB_ENDPOINT_DESCRIPTOR_TYPE,
 102          	0x82,
 103          	USB_ENDPOINT_TYPE_BULK,
 104          	SWAP(EP2_PACKET_SIZE),
 105          	10
 106          };
 107          
 108          code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
 109          {
 110          	sizeof(USB_ENDPOINT_DESCRIPTOR),
 111          	USB_ENDPOINT_DESCRIPTOR_TYPE,
 112          	0x2,
 113          	USB_ENDPOINT_TYPE_BULK,
 114          	SWAP(EP2_PACKET_SIZE),
 115          	10
 116          };
 117          
 118          /*
 119             //*************************************************************************
 120             // USB Protocol Layer
 121             //*************************************************************************
 122          */
 123          
 124          void reserved(void)
 125          {
C51 COMPILER V4.01,  CHAP_9                                                                07/07/01  13:16:08  PAGE 3   

 126   1      	stall_ep0();
 127   1      }
 128          
 129          /*
 130             //*************************************************************************
 131             // USB standard device requests
 132             //*************************************************************************
 133          */
 134          
 135          void get_status(void)
 136          {
 137   1      	unsigned char endp, txdat[2];
 138   1      	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
 139   1      	unsigned char c;
 140   1      
 141   1      	if (bRecipient == USB_RECIPIENT_DEVICE) {
 142   2      		if(bEPPflags.bits.remote_wakeup == 1)
 143   2      			txdat[0] = 3;
 144   2      		else
 145   2      			txdat[0] = 1;
 146   2      		txdat[1]=0;
 147   2      		single_transmit(txdat, 2);
 148   2      	} else if (bRecipient == USB_RECIPIENT_INTERFACE) {
 149   2      		txdat[0]=0;
 150   2      		txdat[1]=0;
 151   2      		single_transmit(txdat, 2);
 152   2      	} else if (bRecipient == USB_RECIPIENT_ENDPOINT) {
 153   2      		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
 154   2      		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 155   2      			c = D12_SelectEndpoint(endp*2 + 1);	/* Control-in */
 156   2      		else
 157   2      			c = D12_SelectEndpoint(endp*2);	/* Control-out */
 158   2      		if(c & D12_STALL)
 159   2      			txdat[0] = 1;
 160   2      		else
 161   2      			txdat[0] = 0;
 162   2      		txdat[1] = 0;
 163   2      		single_transmit(txdat, 2);
 164   2      	} else
 165   1      		stall_ep0();
 166   1      }
 167          
 168          void clear_feature(void)
 169          {
 170   1      	unsigned char endp;
 171   1      	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
 172   1      
 173   1      	if (bRecipient == USB_RECIPIENT_DEVICE
 174   1      		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
 175   2      		DISABLE;
 176   2      		bEPPflags.bits.remote_wakeup = 0;
 177   2      		ENABLE;
 178   2      		single_transmit(0, 0);
 179   2      	}
 180   1      	else if (bRecipient == USB_RECIPIENT_ENDPOINT
 181   1      		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
 182   2      		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
 183   2      		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 184   2      			/* clear TX stall for IN on EPn. */
 185   2      			D12_SetEndpointStatus(endp*2 + 1, 0);
 186   2      		else
 187   2      			/* clear RX stall for OUT on EPn. */
 188   2      			D12_SetEndpointStatus(endp*2, 0);
 189   2      		single_transmit(0, 0);
 190   2      	} else
 191   1      		stall_ep0();
C51 COMPILER V4.01,  CHAP_9                                                                07/07/01  13:16:08  PAGE 4   

 192   1      }
 193          
 194          void set_feature(void)
 195          {
 196   1      	unsigned char endp;
 197   1      	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
 198   1      
 199   1      	if (bRecipient == USB_RECIPIENT_DEVICE
 200   1      		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
 201   2      		DISABLE;
 202   2      		bEPPflags.bits.remote_wakeup = 1;
 203   2      		ENABLE;
 204   2      		single_transmit(0, 0);
 205   2      	}
 206   1      	else if (bRecipient == USB_RECIPIENT_ENDPOINT
 207   1      		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
 208   2      		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
 209   2      		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 210   2      			/* clear TX stall for IN on EPn. */
 211   2      			D12_SetEndpointStatus(endp*2 + 1, 1);
 212   2      		else
 213   2      			/* clear RX stall for OUT on EPn. */
 214   2      			D12_SetEndpointStatus(endp*2, 1);
 215   2      		single_transmit(0, 0);
 216   2      	} else
 217   1      		stall_ep0();
 218   1      }
 219          
 220          void set_address(void)
 221          {
 222   1      	D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &
 223   1      		DEVICE_ADDRESS_MASK), 1);
 224   1      	single_transmit(0, 0);
 225   1      }
 226          
 227          void get_descriptor(void)
 228          {
 229   1      	unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);
 230   1      
 231   1      	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) {
 232   2      		code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
 233   2      	} else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) {
 234   2      		code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
 235   2      	} else
 236   1      		stall_ep0();
 237   1      }
 238          
 239          void get_configuration(void)
 240          {
 241   1      	unsigned char c = bEPPflags.bits.configuration;
 242   1      
 243   1      	single_transmit(&c, 1);
 244   1      }
 245          
 246          void set_configuration(void)
 247          {
 248   1      	if (ControlData.DeviceRequest.wValue == 0) {
 249   2      		/* put device in unconfigured state */
 250   2      		single_transmit(0, 0);
 251   2      		DISABLE;
 252   2      		bEPPflags.bits.configuration = 0;
 253   2      		ENABLE;
 254   2      		init_unconfig();
 255   2      	} else if (ControlData.DeviceRequest.wValue == 1) {
 256   2      		/* Configure device */
 257   2      		single_transmit(0, 0);
C51 COMPILER V4.01,  CHAP_9                                                                07/07/01  13:16:08  PAGE 5   

 258   2      
 259   2      		init_unconfig();
 260   2      		init_config();
 261   2      		
 262   2      		DISABLE;
 263   2      		bEPPflags.bits.configuration = 1;

⌨️ 快捷键说明

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