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

📄 usbcore.lst

📁 自定义的USB设备单片机固件程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V8.05a   USBCORE                                                              04/21/2009 19:44:21 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE USBCORE
OBJECT MODULE PLACED IN UsbCore.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE UsbCore.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************
   2             本程序只供学习使用,未经作者许可,不得用于其它任何用途
   3                                  
   4                  欢迎访问我的USB专区:http://group.ednchina.com/93/
   5                  欢迎访问我的blog:   http://www.ednchina.com/blog/computer00
   6                                       http://computer00.21ic.org
   7          
   8                  感谢PCB赞助商——电子园: http://bbs.cepark.com/
   9          
  10          UsbCore.c file
  11          
  12          作者:电脑圈圈
  13          建立日期: 2008.06.29
  14          修改日期: 2008.08.22
  15          版本:V1.1
  16          版权所有,盗版必究。
  17          Copyright(C) 电脑圈圈 2008-2018
  18          All rights reserved            
  19          *******************************************************************/
  20          
  21          #include "config.h"
  22          #include "pdiusbd12.h"
  23          #include "uart.h"
  24          #include "usbcore.h"
  25          #include "led.h"
  26          
  27          idata uint8 Buffer[16];  //读端点0用的缓冲区
  28          
  29          //USB设备请求的各字段
  30          uint8  bmRequestType;
  31          uint8  bRequest;
  32          uint16 wValue;
  33          uint16 wIndex;
  34          uint16 wLength;
  35          //当前发送数据的位置
  36          uint8 * pSendData;
  37          //需要发送数据的长度
  38          uint16 SendLength;
  39          //是否需要发送0数据包的标志。在USB控制传输的数据过程中,
  40          //当返回的数据包字节数少于最大包长时,会认为数据过程结束。
  41          //当请求的字节数比实际需要返回的字节数长,而实际返回的字节
  42          //数又刚好是端点0大小的整数倍时,就需要返回一个0长度的数据包
  43          //来结束数据过程。因此这里增加一个标志,供程序决定是否需要返回
  44          //一个0长度的数据包。
  45          uint8 NeedZeroPacket;
  46          
  47          //当前的配置值。只有在设置非0配置后
  48          uint8 ConfigValue;
  49          
  50          //端点1缓冲是否忙的标志。当缓冲区中有数据时,该标志为真。
  51          //当缓冲区中空闲时,该标志为假。
  52          uint8 Ep1InIsBusy;
  53          
  54          //端点2缓冲是否忙的标志。当缓冲区中有数据时,该标志为真。
  55          //当缓冲区中空闲时,该标志为假。
C51 COMPILER V8.05a   USBCORE                                                              04/21/2009 19:44:21 PAGE 2   

  56          uint8 Ep2InIsBusy;
  57          
  58          //返回了多少次报告的计数器
  59          uint32 Count=0;
  60          
  61          //USB设备描述符的定义
  62          code uint8 DeviceDescriptor[0x12]=  //设备描述符为18字节
  63          {
  64          //bLength字段。设备描述符的长度为18(0x12)字节
  65           0x12,
  66           
  67          //bDescriptorType字段。设备描述符的编号为0x01
  68           0x01,
  69           
  70          //bcdUSB字段。这里设置版本为USB1.1,即0x0110。
  71          //由于是小端结构,所以低字节在先,即0x10,0x01。
  72           0x10,
  73           0x01,
  74           
  75          //bDeviceClass字段。用户自定义USB设备,代码为0xFF
  76           0xFF,
  77           
  78          //bDeviceSubClass字段。为0,没有规定子类。
  79           0x00,
  80           
  81          //bDeviceProtocol字段。为0,没有规定协议。
  82           0x00,
  83           
  84          //bMaxPacketSize0字段。PDIUSBD12的端点0大小的16字节。
  85           0x10,
  86           
  87          //idVender字段。厂商ID号,我们这里取0x8888,仅供实验用。
  88          //实际产品不能随便使用厂商ID号,必须跟USB协会申请厂商ID号。
  89          //注意小端模式,低字节在先。
  90           0x88,
  91           0x88,
  92           
  93          //idProduct字段。产品ID号,由于是第11个实验,我们这里取0x000B。
  94          //注意小端模式,低字节应该在前。
  95           0x0B,
  96           0x00,
  97           
  98          //bcdDevice字段。设备版本号,取1.0版,即0x0100。
  99          //小端模式,低字节在先。
 100           0x00,
 101           0x01,
 102           
 103          //iManufacturer字段。厂商字符串的索引值,为了方便记忆和管理,
 104          //字符串索引就从1开始吧。
 105           0x01,
 106          
 107          //iProduct字段。产品字符串的索引值。刚刚用了1,这里就取2吧。
 108          //注意字符串索引值不要使用相同的值。
 109           0x02,
 110           
 111          //iSerialNumber字段。设备的序列号字符串索引值。
 112          //这里取3就可以了。
 113           0x03,
 114          
 115          //bNumConfigurations字段。该设备所具有的配置数。
 116          //我们只需要一种配置就行了,因此该值设置为1。
 117           0x01
C51 COMPILER V8.05a   USBCORE                                                              04/21/2009 19:44:21 PAGE 3   

 118          };
 119          //////////////////////////设备描述符完毕//////////////////////////////
 120          
 121          //USB配置描述符集合的定义
 122          //配置描述符总长度为9+9+9+7+7字节
 123          code uint8 ConfigurationDescriptor[9+9+7+7+7+7]=
 124          {
 125           /***************配置描述符***********************/
 126           //bLength字段。配置描述符的长度为9字节。
 127           0x09,
 128           
 129           //bDescriptorType字段。配置描述符编号为0x02。
 130           0x02,
 131           
 132           //wTotalLength字段。配置描述符集合的总长度,
 133           //包括配置描述符本身、接口描述符、类描述符、端点描述符等。
 134           sizeof(ConfigurationDescriptor)&0xFF, //低字节
 135           (sizeof(ConfigurationDescriptor)>>8)&0xFF, //高字节
 136           
 137           //bNumInterfaces字段。该配置包含的接口数,只有一个接口。
 138           0x01,
 139           
 140           //bConfiguration字段。该配置的值为1。
 141           0x01,
 142           
 143           //iConfigurationz字段,该配置的字符串索引。这里没有,为0。
 144           0x00,
 145           
 146           //bmAttributes字段,该设备的属性。由于我们的板子是总线供电的,
 147           //并且我们不想实现远程唤醒的功能,所以该字段的值为0x80。
 148           0x80,
 149           
 150           //bMaxPower字段,该设备需要的最大电流量。由于我们的板子
 151           //需要的电流不到100mA,因此我们这里设置为100mA。由于每单位
 152           //电流为2mA,所以这里设置为50(0x32)。
 153           0x32,
 154           
 155           /*******************接口描述符*********************/
 156           //bLength字段。接口描述符的长度为9字节。
 157           0x09,
 158           
 159           //bDescriptorType字段。接口描述符的编号为0x04。
 160           0x04,
 161           
 162           //bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
 163           0x00,
 164           
 165           //bAlternateSetting字段。该接口的备用编号,为0。
 166           0x00,
 167           
 168           //bNumEndpoints字段。非0端点的数目。本实例需要四个端点,因此该值为4。
 169           0x04,
 170           
 171           //bInterfaceClass字段。该接口所使用的类,未指定。该设备类在设备描述符中已指定。
 172           0x00,
 173           
 174           //bInterfaceSubClass字段。该接口所使用的子类,未指定
 175           0x00,
 176           
 177           //bInterfaceProtocol字段。该接口所使用的协议,未指定。
 178           0x00,
 179           
C51 COMPILER V8.05a   USBCORE                                                              04/21/2009 19:44:21 PAGE 4   

 180           //iConfiguration字段。该接口的字符串索引值。这里没有,为0。
 181           0x00,
 182           
 183           /**********************中断输入端点描述符***********************/
 184           //bLength字段。端点描述符长度为7字节。
 185           0x07,
 186           
 187           //bDescriptorType字段。端点描述符编号为0x05。
 188           0x05,
 189           
 190           //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
 191           //D7位表示数据方向,输入端点D7为1。所以输入端点1的地址为0x81。
 192           0x81,
 193           
 194           //bmAttributes字段。D1~D0为端点传输类型选择。
 195           //该端点为中断端点。中断端点的编号为3。其它位保留为0。
 196           0x03,
 197           
 198           //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
 199           //注意低字节在先。
 200           0x10,
 201           0x00,
 202           
 203           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 204           0x0A,
 205           
 206           /**********************中断输出端点描述符***********************/
 207           //bLength字段。端点描述符长度为7字节。
 208           0x07,
 209           
 210           //bDescriptorType字段。端点描述符编号为0x05。
 211           0x05,
 212           
 213           //bEndpointAddress字段。端点的地址。我们使用D12的输出端点1。
 214           //D7位表示数据方向,输出端点D7为0。所以输出端点1的地址为0x01。
 215           0x01,
 216           
 217           //bmAttributes字段。D1~D0为端点传输类型选择。
 218           //该端点为中断端点。中断端点的编号为3。其它位保留为0。
 219           0x03,
 220           
 221           //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
 222           //注意低字节在先。
 223           0x10,
 224           0x00,
 225           
 226           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 227           0x0A,
 228           
 229            /*************** 批量输入端点2描述符 ******************/
 230           //bLength字段。端点描述符长度为7字节。
 231           0x07,
 232           
 233           //bDescriptorType字段。端点描述符编号为0x05。
 234           0x05,
 235           
 236           //bEndpointAddress字段。端点的地址。我们使用D12的输入端点2。
 237           //D7位表示数据方向,输入端点D7为1。所以输入端点2的地址为0x82。
 238           0x82,
 239           
 240           //bmAttributes字段。D1~D0为端点传输类型选择。
 241           //该端点为批量端点,批量端点的编号为0x02。其它位保留为0。
C51 COMPILER V8.05a   USBCORE                                                              04/21/2009 19:44:21 PAGE 5   

 242           0x02,
 243           
 244           //wMaxPacketSize字段。该端点的最大包长。端点2的最大包长为64字节。
 245           //注意低字节在先。
 246           0x40,

⌨️ 快捷键说明

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