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

📄 usb.lst

📁 this procedure is a game of basketball or subsystems time, the competition will record the entire ti
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   USB                                                                   11/27/2007 19:16:39 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE USB
OBJECT MODULE PLACED IN .\usb.obj
COMPILER INVOKED BY: D:\files\keil\C51\BIN\C51.EXE ..\usb.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\usb.obj)

line level    source

   1          #include <usb.h>
*** WARNING C318 IN LINE 1 OF ..\usb.c: can't open file 'usb.h'
   2          #include <delay.h>
*** WARNING C318 IN LINE 2 OF ..\usb.c: can't open file 'delay.h'
   3          
   4          #include <c8051f020.h>
   5          #include <c8051f.h>
*** WARNING C318 IN LINE 5 OF ..\usb.c: can't open file 'c8051f.h'
   6          #include <delay.h>
*** WARNING C318 IN LINE 6 OF ..\usb.c: can't open file 'delay.h'
   7          #include <stdio.h>
   8          
   9          EVENT_FLAGS EventFlags;  //定义为全局变量,用于与主程序的通信
*** ERROR C129 IN LINE 9 OF ..\USB.C: missing ';' before 'EventFlags'
  10          CONTROL_XFER xdata ControlData;  //保存SETUP包请求类型和请求数据
  11          unsigned char xdata EndPoint1Buffer[4]; //控制端点缓存
  12          unsigned char xdata EndPoint2Buffer[64];//主端点缓存
  13          
  14          //硬件提取层,多路地址/数据总线方式读写
  15          void Outportb(unsigned int Addr, unsigned char Data)
  16          {
  17                  PDIUSB_A0=Addr;
  18                  Delay1us(5);    
  19           *((unsigned char xdata *) (0x8000+Addr)) = Data;
  20          }
  21          
  22          unsigned char Inportb(unsigned int Addr)
  23          {
  24                  PDIUSB_A0=Addr;
  25                  Delay1us(5);    
  26           return *((unsigned char xdata *)(0x8000+Addr));
  27          }
  28          //**************************************************************************
  29          #define D12_DATA   0
  30          #define D12_COMMAND  1
  31          //PDIUSBD12命令接口函数
  32          void D12_SetMode(unsigned char bConfig,unsigned char bClkDiv)
  33          {
  34                  PDIUSB_CS=0;
  35                  Outportb(D12_COMMAND,0xF3);
  36                  Outportb(D12_DATA,bConfig);
  37                  Outportb(D12_DATA,bClkDiv);
  38                  PDIUSB_CS=1;
  39          }
  40          //设置端点
  41          void D12_SetEndpointStatus(unsigned char bEndp,unsigned char bStalled)
  42          {
  43                  PDIUSB_CS=0;
  44           Outportb(D12_COMMAND,0x40+bEndp);
  45           Outportb(D12_DATA,bStalled);
  46            PDIUSB_CS=1;
  47          }
  48          //应答!!!!!
  49          void D12_AcknowledgeEndpoint(unsigned char endp)
  50          {
C51 COMPILER V8.02   USB                                                                   11/27/2007 19:16:39 PAGE 2   

  51                  PDIUSB_CS=0;
  52                   Outportb(D12_COMMAND,endp);
  53                   Outportb(D12_COMMAND,0xF1);
  54                   //if(endp==0)
  55                   // Outportb(D12_COMMAND,0xF2);
  56                    PDIUSB_CS=1;
  57          }
  58          //设置地址使能
  59          void D12_SetAddressEnable(unsigned char bAddress,unsigned char bEnable)
  60          {
  61                  PDIUSB_CS=0;
  62                  Outportb(D12_COMMAND,0xd0);
  63                  if(bEnable) bAddress |= 0x80;
  64                          Outportb(D12_DATA,bAddress);
  65                  PDIUSB_CS=1;
  66          }
  67          //设置端点使能
  68          void D12_SetEndpointEnable(unsigned char bEnable)
  69          {
  70                  PDIUSB_CS=0;
  71           Outportb(D12_COMMAND,0xD8);
  72           if(bEnable)
  73            Outportb(D12_DATA,1);
  74           else
  75            Outportb(D12_DATA,0);
  76             PDIUSB_CS=1;
  77          }
  78          //读中断寄存器
  79          unsigned short D12_ReadInterruptRegister(void)
  80          {
  81                   unsigned char b1;
  82                   unsigned int j;
  83                   PDIUSB_CS=0;
  84                   Outportb(D12_COMMAND,0xF4);
  85                   b1=Inportb(D12_DATA);
  86                   j=Inportb(D12_DATA);
  87                   j<<=8;
  88                   j+=b1;
  89                   PDIUSB_CS=1;
  90                   return j;
  91          }
  92          //读取端点状态
  93          unsigned char D12_ReadEndpointStatus(unsigned char EndPoint) 
  94          {
  95           unsigned char BackValue;
  96                  PDIUSB_CS=0;
  97           if(EventFlags.Bits.InISR == 0)
  98            EA = 0;
  99          
 100           Outportb(D12_COMMAND, 0x80 + EndPoint);//读取端点状态
 101           BackValue = Inportb(D12_DATA);
 102          
 103           if(EventFlags.Bits.InISR == 0)
 104            EA = 1;
 105          
 106            PDIUSB_CS=1;
 107           return BackValue;
 108          }
 109          //读端点最后处理状态
 110          unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
 111          {
 112                  unsigned char i;
C51 COMPILER V8.02   USB                                                                   11/27/2007 19:16:39 PAGE 3   

 113                  PDIUSB_CS=0;
 114           Outportb(D12_COMMAND,0x40+bEndp);
 115           i=Inportb(D12_DATA); 
 116           PDIUSB_CS=1;  
 117           return i;
 118          }
 119          //读端口
 120          unsigned char D12_ReadEndpoint(unsigned char endp,unsigned char len,unsigned char *buf)
 121          {
 122           unsigned char i,j;
 123           PDIUSB_CS=0;
 124           Outportb(D12_COMMAND,endp);
 125           if((Inportb(D12_DATA)&0xff)==0)//"  define D12_FULLEMPTY as 0xFF  by newer
 126            return 0;
 127           Outportb(D12_COMMAND,0x80+endp);
 128           i=Inportb(D12_DATA);
 129           i=i&0x60;
 130          
 131          
 132           Outportb(D12_COMMAND,0xF0);
 133           j=Inportb(D12_DATA);
 134           j=Inportb(D12_DATA);
 135           if(j>len)
 136            j=len;
 137           for(i=0;i<j;i++)
 138            *(buf+i)=Inportb(D12_DATA);
 139           Outportb(D12_COMMAND,0xF2);
 140          
 141            PDIUSB_CS=1;
 142           return j;
 143          }
 144          
 145          unsigned char D12_ReadEndpoint_Int(unsigned char endp,unsigned char len,unsigned char *buf)
 146          {
 147                   unsigned char i,j;
 148                   PDIUSB_CS=0;
 149                   Outportb(D12_COMMAND,endp);
 150                   i=Inportb(D12_DATA);
 151                   if((i&0xff)==0)//"  define D12_FULLEMPTY as 0xFF  by newer
 152                            return 0;
 153                   if(i&0x02) printf("Eendpoint%d stalled\n",(int)endp);
 154                   Outportb(D12_COMMAND,0x80+endp);
 155                   i=Inportb(D12_DATA);
 156                   printf("ep%d status:%#x\n",(int)endp,(int)i);
 157                   i=i&0x60;
 158                  
 159                  
 160                   Outportb(D12_COMMAND,0xF0);
 161                   j=Inportb(D12_DATA);
 162                   j=Inportb(D12_DATA);
 163                   printf("data len:%d\n",(int)j);
 164                   if(j>len)
 165                            j=len;
 166                   for(i=0;i<j;i++)
 167                            *(buf+i)=Inportb(D12_DATA);
 168                   Outportb(D12_COMMAND,0xF2);
 169                   PDIUSB_CS=1;
 170                   return j;
 171          }
 172          
 173          unsigned char D12_WriteEndpoint(unsigned char endp,unsigned char len,unsigned char * buf)
 174          {
C51 COMPILER V8.02   USB                                                                   11/27/2007 19:16:39 PAGE 4   

 175           unsigned char i;
 176           PDIUSB_CS=0;
 177           Outportb(D12_COMMAND,endp);
 178           Inportb(D12_DATA);
 179           Outportb(D12_COMMAND,0xF0);
 180           Outportb(D12_DATA,0);
 181           Outportb(D12_DATA,len);
 182           for(i=0;i<len;i++)
 183            Outportb(D12_DATA,*(buf+i));
 184           Outportb(D12_COMMAND,0xFA);
 185            PDIUSB_CS=1;
 186           return len;
 187          }
 188          
 189          unsigned char D12_WriteEndpoint_Int(unsigned char endp,unsigned char len,unsigned char * buf)
 190          {
 191           unsigned char i;
 192           PDIUSB_CS=0;
 193           Outportb(D12_COMMAND,endp);
 194           Inportb(D12_DATA);
 195           Outportb(D12_COMMAND,0xF0);
 196           Outportb(D12_DATA,0);
 197           Outportb(D12_DATA,len);
 198           for(i=0;i<len;i++)
 199            Outportb(D12_DATA,*(buf+i));
 200           Outportb(D12_COMMAND,0xFA);
 201            PDIUSB_CS=1;
 202           return len;
 203          }
 204          
 205          void DisconnectUSB(void)
 206          {
 207                   D12_SetMode(0x0e,0x43);//SET TO ONE? by newer
 208          }
 209          
 210          void InitialUSBInt(void);
 211          void ConnectUSB(void)
 212          {
 213                   EventFlags.Value = 0x0000;
 214                   D12_SetMode(0x1e,0x43);
 215                   Delay1ms(100);
 216                   InitialUSBInt();
 217          }
 218          
 219          void ReconnectUSB(void)
 220          {
 221                   SUSPEND = 0;
 222                   DisconnectUSB();
 223                   Delay1ms(1000);
 224                   ConnectUSB();
 225          }
 226          
 227          void InitialUSBInt(void)
 228          {
 229                   IT0=0; //低电平中断触发
 230                   EX0=1; //允许外部中断
 231                   PX0=0; //优先级低
 232                   EA =1;
 233          }
 234          
 235          //**************************************************************************
 236          //Port And Macros And Structure And Union Definitions
C51 COMPILER V8.02   USB                                                                   11/27/2007 19:16:39 PAGE 5   

 237          #define SWAP(x)   ((((x) & 0x00FF) << 8) | (((x) >> 8) & 0x00FF)) //交换高低8位
 238          #define MSB(x)    (((x) >> 8) & 0x00FF)        //取数据高8位
 239          #define LSB(x)    ((x) & 0x00FF)         //取数据低8位
 240          
 241          //**************************************************************************
 242          //**************************************************************************
 243          //中断服务程序
 244          void EP0_Out(void)
 245          {
 246                   unsigned char ep_last,i;
 247                   ep_last=D12_ReadLastTransactionStatus(0);//interrupt symbol
 248          
 249                   printf("ep_last=%#x\n",(int)ep_last);
 250          
 251                   if(ep_last&D12_SETUPPACKET)
 252                   { //recieved SETUP packet  ---by newer
 253                            ControlData.wLength=0;
 254                            ControlData.wCount=0;
 255                            if(D12_ReadEndpoint_Int(0,sizeof(ControlData.DeviceRequest),(unsigned char *)(&(ControlData.DeviceRequ
             -est)))!=sizeof(DEVICE_REQUEST))
 256                            {
 257                                     printf("DeviceReqest size error!\n");
 258                                     D12_SetEndpointStatus(0,1);
 259                                     D12_SetEndpointStatus(1,1);
 260                                     EventFlags.Bits.ControlState=0; //should define USB_IDLE first --by newer
 261                                     return;
 262                            }
 263                            printf("bmRequestType=%#x\t,bRequest=%d\t",(int)ControlData.DeviceRequest.bmRequestType,(int)ControlDa
             -ta.DeviceRequest.bRequest);
 264                            printf("wValue=%d\t,wIndex=%#x\t,wLength=%d\n",ControlData.DeviceRequest.wValue,ControlData.DeviceRequ
             -est.wIndex,ControlData.DeviceRequest.wLength);
 265                            ControlData.DeviceRequest.wValue=SWAP(ControlData.DeviceRequest.wValue);
 266                            ControlData.DeviceRequest.wIndex=SWAP(ControlData.DeviceRequest.wIndex);

⌨️ 快捷键说明

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