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

📄 d12isr.lst

📁 usb_232(仅枚举)
💻 LST
📖 第 1 页 / 共 2 页
字号:
 197   3      
 198   3                              D12_SetEndpointStatus(0, 1);
 199   3                              D12_SetEndpointStatus(1, 1);
 200   3                              bEPPflags.bits.control_state = USB_IDLE;
 201   3                              
 202   3                              return;
 203   3                      }
 204   2      
 205   2                      ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
 206   2                      ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
 207   2                      ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
 208   2      
 209   2                      // Acknowledge setup here to unlock in/out endp
 210   2              //向控制输出端点发送应答建立命令以重新使能下一个建立阶段
 211   2                      D12_AcknowledgeEndpoint(0);
 212   2                      D12_AcknowledgeEndpoint(1);
 213   2      
 214   2                      ControlData.wLength = ControlData.DeviceRequest.wLength;
 215   2                      ControlData.wCount = 0;
 216   2              //需要证实控制传输是控制读还是写,如果是读:
 217   2              //如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向
 218   2              //主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输
 219   2              //模式即准备在主机发送请求时发送数据
 220   2      
 221   2                      if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 222   2                      {
 223   3                              bEPPflags.bits.setup_packet = 1;
 224   3                              bEPPflags.bits.control_state = USB_TRANSMIT;            /* get command *///设置状态
 225   3                      }
 226   2              //如果是写
 227   2                      else 
 228   2                      {
 229   3                              if (ControlData.DeviceRequest.wLength == 0)
 230   3                               {
 231   4                                      bEPPflags.bits.setup_packet = 1;
 232   4                                      bEPPflags.bits.control_state = USB_IDLE;                /* set command */
 233   4                               }
 234   3                              else 
 235   3                              {
 236   4                                      if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) 
 237   4                                      {
 238   5                                              bEPPflags.bits.control_state = USB_IDLE;
 239   5                                              D12_SetEndpointStatus(0, 1);
C51 COMPILER V7.01  D12ISR                                                                 11/14/2003 09:44:52 PAGE 5   

 240   5                                              D12_SetEndpointStatus(1, 1);
 241   5                                      }
 242   4                                      else 
 243   4                                      {
 244   5                                              bEPPflags.bits.control_state = USB_RECEIVE;     /* set command with OUT token */
 245   5                                      }
 246   4                              } // set command with data
 247   3                      } // else set command
 248   2              } // if setup packet
 249   1      
 250   1              else if (bEPPflags.bits.control_state == USB_RECEIVE) 
 251   1              {//接受数据完毕
 252   2                      i =D12_ReadBuffer(0, ControlData.dataBuffer + ControlData.wCount,EP0_PACKET_SIZE);
 253   2      
 254   2                      ControlData.wCount += i;
 255   2              
 256   2                      if( (i != EP0_PACKET_SIZE) || (ControlData.wCount >= ControlData.wLength))
 257   2                      {//数据接受完毕
 258   3                              bEPPflags.bits.setup_packet = 1;       
 259   3                              bEPPflags.bits.control_state = USB_IDLE;
 260   3                      }
 261   2              }
 262   1      
 263   1              else 
 264   1              {
 265   2                      bEPPflags.bits.control_state = USB_IDLE;//进入等待状态
 266   2              }
 267   1      
 268   1      }
 269          //control  in function
 270          void ep0_txdone(void)
 271          {
 272   1              short i = ControlData.wLength - ControlData.wCount;
 273   1      
 274   1              D12_ReadLastTransactionStatus(1); // Clear interrupt flag
 275   1      
 276   1              if (bEPPflags.bits.control_state != USB_TRANSMIT) 
 277   1                      
 278   1                      {
 279   2                      return;     //非发送状态,返回
 280   2                      }
 281   1              //-------------------------
 282   1              
 283   1                  if( i >= EP0_PACKET_SIZE) 
 284   1                   {//剩下数据大于16B,发送16B
 285   2                      //ControlData.pData=&ControlData.dataBuffer;
 286   2                      D12_WriteBuffer(1, ControlData.pData + ControlData.wCount,EP0_PACKET_SIZE);
 287   2                      
 288   2                      ControlData.wCount += EP0_PACKET_SIZE;
 289   2      
 290   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 291   2                    }
 292   1                    else if( i != 0) 
 293   1                    {// 发送剩下数据
 294   2                      D12_WriteBuffer(1,ControlData.pData + ControlData.wCount,i);
 295   2                      
 296   2                      ControlData.wCount += i;
 297   2      
 298   2                      bEPPflags.bits.control_state = USB_IDLE;
 299   2                     }
 300   1                     else if (i == 0)
 301   1                     {
C51 COMPILER V7.01  D12ISR                                                                 11/14/2003 09:44:52 PAGE 6   

 302   2                      D12_WriteBuffer(1, 0, 0); // Send zero packet at the end ???
 303   2      
 304   2                      bEPPflags.bits.control_state = USB_IDLE;
 305   2                     }
 306   1      }
 307          //----------------------------------
 308          void ep1_txdone(void)
 309          {
 310   1              
 311   1              D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
 312   1              
 313   1              //dd[0]=0x01;
 314   1              //dd[1]=0x12;
 315   1              //dd[2]=0x13;
 316   1              //dd[3]=0x11;
 317   1             //for(k=0;k<10;k++)
 318   1             //{ D12_WriteBuffer(3,dd,2);}
 319   1      }
 320          
 321          void ep1_rxdone(void)
 322          {
 323   1              unsigned char len;
 324   1      
 325   1              D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
 326   1              
 327   1              len = D12_ReadBuffer(2,GenEpBuf,sizeof(GenEpBuf));
 328   1      
 329   1              if(len != 0)
 330   1              
 331   1                bEPPflags.bits.ep1_rxdone = 1;
 332   1      }
 333          
 334          
 335          void main_txdone(void)
 336          {
 337   1              unsigned char len;
 338   1      
 339   1              D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
 340   1      
 341   1              len = ioSize - ioCount;
 342   1              /*if(len == 0) 
 343   1              {
 344   1                      if(bEPPflags.bits.dma_state == DMA_PENDING)
 345   1                              bEPPflags.bits.setup_dma ++;
 346   1                      else
 347   1                              bEPPflags.bits.dma_state = DMA_IDLE;
 348   1              }
 349   1              else 
 350   1              {*/
 351   1                      if(len > 64)
 352   1                              len = 64;
 353   1                      if(bNoRAM)
 354   1                              
 355   1                              
 356   1                              len = D12_WriteBuffer(5, EpBuf+ ioCount , len);
 357   1                      else
 358   1                              
 359   1                              len = D12_WriteBuffer(5, MainEpBuf+ ioCount ,len );
 360   1                               ioCount += len;
 361   1              //}
 362   1      }
 363          
C51 COMPILER V7.01  D12ISR                                                                 11/14/2003 09:44:52 PAGE 7   

 364          void main_rxdone(void)
 365          {
 366   1              unsigned char len;
 367   1      
 368   1              D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
 369   1      
 370   1              if(bNoRAM)
 371   1                      len = D12_ReadBuffer(4,  EpBuf + ioCount,64);
 372   1              else
 373   1                      len = D12_ReadBuffer(4, MainEpBuf + ioCount,64 );
 374   1              //ioCount += len;
 375   1              
 376   1              /*if(ioCount >= ioSize) 
 377   1              {
 378   1                      if(bEPPflags.bits.dma_state == DMA_PENDING)
 379   1                              bEPPflags.bits.setup_dma ++;
 380   1                      else
 381   1                              bEPPflags.bits.dma_state = DMA_IDLE;
 382   1              }*/
 383   1              
 384   1      }
 385          
 386          
 387          
 388          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    838    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    256    ----
   PDATA SIZE       =      9       5
   DATA SIZE        =   ----    ----
   IDATA SIZE       =     90    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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