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

📄 chap_9.lst

📁 采用PDIUSBD12开发的USB总线与429总线数据转换的单片机固件程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.12  CHAP_9                                                                 12/16/2004 15:21:55 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE CHAP_9
OBJECT MODULE PLACED IN E:\MCU\USB_FIRM\CHAP_9.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\MCU\USB_FIRM\CHAP_9.C DB SB OE

stmt level    source

   1          #include "D12ci.h"
   2          #include "chap_9.h"
   3          
   4          #include <reg51.h>
   5          
   6          //#define EP0_PACKET_SIZE    16
   7          //#define EP2_PACKET_SIZE    64
   8          #define NUM_ENDPOINTS	   4
   9          
  10          #define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
  11          									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
  12          									+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))
  13          
  14          
  15          //extern unsigned char idata EpBuf[];
  16          extern EPPFLAGS bEPPflags;
  17          extern CONTROL_XFER ControlData;
  18          void stall_ep0(void);
  19          void single_transmit(unsigned char * buf, unsigned char len);
  20          
  21          void get_firmware_version(void);
  22          void get_buffer_size(void);
  23          
  24          
  25          //USB标准设备请求入口地址指针表
  26          code void (*StandardDeviceRequest[])(void) =
  27          {
  28          	get_status,
  29          	clear_feature,
  30          	reserved,
  31          	set_feature,
  32          	reserved,
  33          	set_address,
  34          	get_descriptor,
  35          	reserved,
  36          	get_configuration,
  37          	set_configuration,
  38          	get_interface,
  39          	set_interface,
  40          	reserved,
  41          	reserved,
  42          	reserved,
  43          	reserved
  44          };
  45          
  46          //厂商请求入口地址
  47          code void (*VendorDeviceRequest[])(void) =
  48          {
  49          	reserved,
  50          	reserved,
  51          	reserved,
  52          	reserved,
  53          	reserved,
  54          	reserved,
  55          	reserved,
C51 COMPILER V6.12  CHAP_9                                                                 12/16/2004 15:21:55 PAGE 2   

  56          	reserved,
  57          	reserved,
  58          	reserved,
  59          	reserved,
  60          	reserved,
  61          	reserved,//read_write_register,
  62          	reserved,
  63          	reserved,
  64          	reserved
  65          };
  66          
  67          
  68          
  69          
  70          /******************************************************************
  71                                  协议控制子程序
  72                当主循环检测到bEPPflags.bits.setup_packet=1时,主循环就调用协
  73                议控制子程序来区分是usb标准请求,还是厂商请求,并根据请求类型
  74                跳转到相应的子程序,使用的是函数指针
  75          ******************************************************************/
  76          void setup_handler()
  77          {
  78   1          unsigned char type,req;//读取请求类型,保留bits5,bits6
  79   1          type=ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
  80   1                                 //读取请求代码,保留低四位
  81   1          req=ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
  82   1      
  83   1          if(type==USB_STANDARD_REQUEST)
  84   1              (*StandardDeviceRequest[req])();//标准请求
  85   1          else if(type==USB_VENDOR_REQUEST)
  86   1              (*VendorDeviceRequest[req])();//厂商请求
  87   1          else
  88   1              stall_ep0();//无效请求,返回STALL
  89   1      }
  90          
  91          
  92          void init_unconfig(void)
  93          {
  94   1      	D12_SetEndpointEnable(0);	/* Disable all endpoints but EPP0. */
  95   1      }
  96          
  97          void init_config(void)
  98          {
  99   1      	D12_SetEndpointEnable(1);	/* Enable  generic/iso endpoints. */
 100   1      }
 101          
 102          
 103          void single_transmit(unsigned char * buf, unsigned char len)
 104          {
 105   1      	if( len <= EP0_PACKET_SIZE)
 106   1          {
 107   2      		D12_WriteEndpoint(1, len, buf);
 108   2      	}
 109   1      }
 110          
 111          void code_transmit(unsigned char code* pRomData,unsigned short len)
 112          {
 113   1      	ControlData.wCount=0;
 114   1      	if(ControlData.wLength>len)
 115   1      		ControlData.wLength=len;
 116   1      	ControlData.pData=pRomData;
 117   1      	if(ControlData.wLength>=EP0_PACKET_SIZE)
C51 COMPILER V6.12  CHAP_9                                                                 12/16/2004 15:21:55 PAGE 3   

 118   1      	{
 119   2      		D12_WriteEndpoint(1,EP0_PACKET_SIZE,ControlData.pData);
 120   2      		ControlData.wCount+=EP0_PACKET_SIZE;
 121   2      		DISABLE;
 122   2      		bEPPflags.bits.control_state=USB_TRANSMIT;
 123   2      		ENABLE;
 124   2      	}
 125   1      	else
 126   1      	{
 127   2      		D12_WriteEndpoint(1,ControlData.wLength,pRomData);
 128   2      		ControlData.wCount+=ControlData.wLength;//发送字节统计
 129   2      		DISABLE;
 130   2      		bEPPflags.bits.control_state=USB_IDLE;
 131   2      		ENABLE;
 132   2      	}
 133   1      }
 134          
 135          
 136          void stall_ep0(void)
 137          {
 138   1      	D12_SetEndpointStatus(0, 1);
 139   1      	D12_SetEndpointStatus(1, 1);
 140   1      }
 141          
 142          //设备描述符
 143          code USB_DEVICE_DESCRIPTOR DeviceDescr =
 144          {
 145              sizeof(USB_DEVICE_DESCRIPTOR),
 146              USB_DEVICE_DESCRIPTOR_TYPE,
 147              SWAP(0x0100),
 148              USB_CLASS_CODE_TEST_CLASS_DEVICE,
 149              0, 0,
 150              EP0_PACKET_SIZE,
 151          	SWAP(0x0471),
 152          	SWAP(0x0666),
 153          	SWAP(0x0100),
 154              0, 0, 0,
 155          	1//**********************************************************************此处本来是25,现改为1
 156          };
 157          
 158          //配置描述符
 159          code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
 160          {
 161              sizeof(USB_CONFIGURATION_DESCRIPTOR),
 162              USB_CONFIGURATION_DESCRIPTOR_TYPE,
 163              SWAP(CONFIG_DESCRIPTOR_LENGTH),
 164          	1,
 165          	1,
 166              0,
 167          	0x60,
 168          	0x1
 169          };
 170          
 171          //接口描述符
 172          code USB_INTERFACE_DESCRIPTOR InterfaceDescr =
 173          {
 174              sizeof(USB_INTERFACE_DESCRIPTOR),
 175              USB_INTERFACE_DESCRIPTOR_TYPE,
 176              0,
 177              0,
 178              NUM_ENDPOINTS,
 179              USB_CLASS_CODE_TEST_CLASS_DEVICE,
C51 COMPILER V6.12  CHAP_9                                                                 12/16/2004 15:21:55 PAGE 4   

 180              USB_SUBCLASS_CODE_TEST_CLASS_D12,
 181              USB_PROTOCOL_CODE_TEST_CLASS_D12,
 182              0
 183          };
 184          
 185          //端点描述符
 186          code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
 187          {
 188          	sizeof(USB_ENDPOINT_DESCRIPTOR),
 189          	USB_ENDPOINT_DESCRIPTOR_TYPE,
 190          	0x81,
 191          	USB_ENDPOINT_TYPE_INTERRUPT,
 192          	SWAP(EP1_PACKET_SIZE),
 193          	10
 194          };
 195          
 196          code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
 197          {
 198          	sizeof(USB_ENDPOINT_DESCRIPTOR),
 199          	USB_ENDPOINT_DESCRIPTOR_TYPE,
 200          	0x1,
 201          	USB_ENDPOINT_TYPE_INTERRUPT,
 202          	SWAP(EP1_PACKET_SIZE),
 203          	10
 204          };
 205          
 206          code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
 207          {
 208          	sizeof(USB_ENDPOINT_DESCRIPTOR),
 209          	USB_ENDPOINT_DESCRIPTOR_TYPE,
 210          	0x82,
 211          	USB_ENDPOINT_TYPE_BULK,
 212          	SWAP(EP2_PACKET_SIZE),
 213          	10
 214          };
 215          
 216          code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
 217          {
 218          	sizeof(USB_ENDPOINT_DESCRIPTOR),
 219          	USB_ENDPOINT_DESCRIPTOR_TYPE,
 220          	0x2,
 221          	USB_ENDPOINT_TYPE_BULK,
 222          	SWAP(EP2_PACKET_SIZE),
 223          	10
 224          };
 225          
 226          //保留子程序
 227          void reserved(void)
 228          {
 229   1          stall_ep0();//返回
 230   1      }
 231          
 232          //获取状态
 233          void get_status(void)
 234          {

⌨️ 快捷键说明

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