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

📄 mainloop.lst

📁 飞利浦 pusbd12 usb源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 265   4                                                      printf("DMA_State = DMA_RUNNING.\n");
 266   4                                              else if(bEPPflags.bits.dma_state == DMA_PENDING)
 267   4                                                      printf("DMA_State = DMA_PENDING.\n");
 268   4      
 269   4                                              printf("Last Device Request: bmRequestType = 0x%bx, bRequest= 0x%bx, wValue = 0x%x, wLength = 0x%x, w
             -Index = 0x%x.\n",
 270   4      
 271   4                                                      ControlData.DeviceRequest.bmRequestType,
 272   4                                                      ControlData.DeviceRequest.bRequest,
 273   4                                                      ControlData.DeviceRequest.wValue,
 274   4                                                      ControlData.DeviceRequest.wLength,
 275   4                                                      ControlData.DeviceRequest.wIndex);
 276   4      
 277   4                                              printf("Data: ");
 278   4                                              for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
 279   4                                                      printf("0x%bx, ", *((ControlData.dataBuffer)+i));
 280   4                                              printf("\n");
 281   4      
 282   4                                              break;
 283   4                                      case '\r':
 284   4                                              reconnect_USB();
 285   4                                              break;
 286   4      
 287   4                                      case 'v':
 288   4                                              if(bEPPflags.bits.verbose == 0) {
 289   5                                                      printf("Verbose Mode = ON.\n");
 290   5                                                      DISABLE;
 291   5                                                      bEPPflags.bits.verbose = 1;
 292   5                                                      ENABLE;
 293   5                                              }
 294   4                                              else {
 295   5                                                      printf("Verbose Mode = OFF.\n");
 296   5                                                      DISABLE;
 297   5                                                      bEPPflags.bits.verbose = 0;
 298   5                                                      ENABLE;
 299   5                                              }
 300   4                                              break;
C51 COMPILER V7.02b   MAINLOOP                                                             11/08/2003 21:22:47 PAGE 6   

 301   4                                      default:
 302   4                                              break;
 303   4                              }
 304   3                      }
 305   2      
 306   2                      if (bEPPflags.bits.bus_reset) {//设备复位处理
 307   3                              DISABLE;
 308   3                              bEPPflags.bits.bus_reset = 0;
 309   3                              ENABLE;
 310   3                              // Release D12's SUSPEND pin after bus reset
 311   3                              // Enable 74HCT123 pulse generation before disconnect
 312   3                              D12SUSPD = 1;
 313   3                      } // if bus reset
 314   2      
 315   2                      if (bEPPflags.bits.suspend) {//挂起改变处理
 316   3                              DISABLE;
 317   3                              bEPPflags.bits.suspend= 0;
 318   3                              ENABLE;
 319   3      
 320   3                              if(D12SUSPD == 1) {//挂起处理
 321   4                                      D12SUSPD = 0;
 322   4                                      P0 = 0xFF;
 323   4                                      P1 = 0xFF;
 324   4                                      P2 = 0xFF;
 325   4                                      P3 = 0xFF;
 326   4                                      D12_SetDMA(0xC3);
 327   4                                      D12SUSPD = 1;
 328   4                                      PCON |= 0x02;
 329   4                                      while (1);
 330   4                              }
 331   3                      } // if suspend change
 332   2      
 333   2                      if (bEPPflags.bits.setup_packet){//Setup包处理
 334   3                              DISABLE;
 335   3                              bEPPflags.bits.setup_packet = 0;
 336   3                              ENABLE;
 337   3                              control_handler();//调用请求处理子程序
 338   3                              D12SUSPD = 1;
 339   3                      } // if setup_packet
 340   2      
 341   2                      if(bEPPflags.bits.setup_dma != 0) {//DMA状态改变处理
 342   3                              DISABLE;
 343   3                              bEPPflags.bits.setup_dma --;
 344   3                              ENABLE;
 345   3                              setup_dma();
 346   3                      } // if setup_dma
 347   2      
 348   2              } // Main Loop
 349   1      }
 350          
 351          
 352          /**************************************************************************************************/
 353          /*************************************************************************************************/
 354          
 355          
 356          
 357          //返回stall应答
 358          void stall_ep0(void)
 359          {
 360   1              D12_SetEndpointStatus(0, 1);
 361   1              D12_SetEndpointStatus(1, 1);
 362   1      }
C51 COMPILER V7.02b   MAINLOOP                                                             11/08/2003 21:22:47 PAGE 7   

 363          
 364          //断开USB总线
 365          void disconnect_USB(void)
 366          {
 367   1              // Initialize D12 configuration
 368   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 369   1      }
 370          
 371          //连接USB总线
 372          void connect_USB(void)
 373          {
 374   1              // reset event flags
 375   1              DISABLE;
 376   1              bEPPflags.value = 0;//清除所有状态
 377   1              ENABLE;
 378   1      
 379   1              // V2.1 enable normal+sof interrupt
 380   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 381   1      
 382   1              // Initialize D12 configuration
 383   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 384   1      }
 385          
 386          //重新连接到USB总线
 387          void reconnect_USB(void)
 388          {
 389   1              unsigned long clk_cnt;
 390   1      
 391   1              MCU_LED0 = 0;
 392   1              MCU_LED1 = 0;
 393   1      
 394   1              // Pull-down D12's SUSPEND pin
 395   1              // Disable 74HCT123 pulse generation before disconnect
 396   1              // Release D12's SUSPEND pin after receiving bus reset from host
 397   1              D12SUSPD = 0;
 398   1              disconnect_USB();
 399   1      
 400   1              printf("Wait for 1 second ...\n");
 401   1      
 402   1              clk_cnt = ClockTicks;
 403   1              while(ClockTicks < clk_cnt + 20)
 404   1                      ;
 405   1      
 406   1              connect_USB();
 407   1      
 408   1              MCU_LED0 = 1;
 409   1              MCU_LED1 = 1;
 410   1      }
 411          
 412          //恢复到未配置状态
 413          void init_unconfig(void)
 414          {
 415   1      //      unsigned char i;
 416   1      
 417   1              D12_SetEndpointEnable(0);       /* Disable all endpoints but EPP0. */
 418   1      }
 419          
 420          //设置配置状态
 421          void init_config(void)
 422          {
 423   1              D12_SetEndpointEnable(1);       /* Enable  generic/iso endpoints. */
 424   1      }
C51 COMPILER V7.02b   MAINLOOP                                                             11/08/2003 21:22:47 PAGE 8   

 425          
 426          //从端点号1发送数据
 427          void single_transmit(unsigned char * buf, unsigned char len)
 428          {
 429   1              if( len <= EP0_PACKET_SIZE) {
 430   2                      D12_WriteEndpoint(1, len, buf);
 431   2              }
 432   1      }
 433          
 434          //发送端点号1建立代码
 435          void code_transmit(unsigned char code * pRomData, unsigned short len)
 436          {
 437   1              ControlData.wCount = 0;
 438   1              if(ControlData.wLength > len)
 439   1                      ControlData.wLength = len;
 440   1      
 441   1              ControlData.pData = pRomData;
 442   1              if( ControlData.wLength >= EP0_PACKET_SIZE) {
 443   2                      D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);//发送16字节数据
 444   2                      ControlData.wCount += EP0_PACKET_SIZE;
 445   2                      DISABLE;
 446   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 447   2                      ENABLE;
 448   2              }
 449   1              else {
 450   2                      D12_WriteEndpoint(1, ControlData.wLength, pRomData);//发送16字节内数据
 451   2                      ControlData.wCount += ControlData.wLength;
 452   2                      DISABLE;
 453   2                      bEPPflags.bits.control_state = USB_IDLE;
 454   2                      ENABLE;
 455   2              }
 456   1      }
 457          
 458          //LED和按键处理子程序
 459          void check_key_LED(void)
 460          {
 461   1              static unsigned char c, last_key = 0xf;
 462   1      
 463   1              c = MCU_SWM0 & MCU_SWM1;
 464   1              c &= 0x0f;
 465   1              if (c != last_key) {
 466   2                      D12_WriteEndpoint(3, 1, &c);//发送按键状态
 467   2              }
 468   1      
 469   1              last_key = c;
 470   1      
 471   1              if(bEPPflags.bits.ep1_rxdone) {
 472   2                      DISABLE;
 473   2                      bEPPflags.bits.ep1_rxdone = 0;
 474   2                      ENABLE;
 475   2                      MCU_LED0 = !(GenEpBuf[3] & 0x1);//改变LED状态
 476   2                      MCU_LED1 = !(GenEpBuf[3] & 0x2);
 477   2              }
 478   1      }
 479          
 480          //DMA建立子程序
 481          void setup_dma()
 482          {
 483   1              ioSize = ioRequest.uSize;
 484   1              ioCount = 0;
 485   1      
 486   1              DISABLE;
C51 COMPILER V7.02b   MAINLOOP                                                             11/08/2003 21:22:47 PAGE 9   

 487   1              bEPPflags.bits.dma_state = DMA_RUNNING;
 488   1              ENABLE;
 489   1      
 490   1              single_transmit(0, 0);
 491   1      
 492   1              if(ioRequest.bCommand & 0x1) {
 493   2                      if(ioSize > 64 || ioSize == 0) {
 494   3                              //传输大于64字节数据
 495   3                              D12_WriteEndpoint(5, 64, EpBuf);
 496   3                              ioCount += 64;
 497   3                      }
 498   2                      else {
 499   3                              //传输64字节数据
 500   3                              D12_WriteEndpoint(5, ioSize, EpBuf);
 501   3                              ioCount += ioSize;
 502   3                      }
 503   2              }
 504   1      }
 505          
 506          //请求处理子程序
 507          void control_handler()
 508          {
 509   1              unsigned char type, req;
 510   1      
 511   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
 512   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
 513   1      
 514   1              help_devreq(type, req); //显示设备请求
 515   1      
 516   1              if (type == USB_STANDARD_REQUEST)
 517   1                      (*StandardDeviceRequest[req])();//调用标准请求
 518   1              else if (type == USB_VENDOR_REQUEST)
 519   1                      (*VendorDeviceRequest[req])();//调用厂商请求
 520   1              else
 521   1                      stall_ep0();
 522   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1324    ----
   CONSTANT SIZE    =    919    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26      18
   IDATA SIZE       =   ----    ----
   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 + -