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

📄 mainloop.lst

📁 philiphs D12 firmware驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 272   4                                                      printf("Control state = USB_IDLE.");
 273   4                                              else if(bEPPflags.bits.control_state == USB_RECEIVE)
 274   4                                                      printf("Control state = USB_RECEIVE.");
 275   4                                              else if(bEPPflags.bits.control_state == USB_TRANSMIT)
 276   4                                                      printf("Control state = USB_TRANSMIT.");
 277   4                                              printf(" ControlData.wCount = %x.\n", ControlData.wCount);
 278   4                                              printf("Endpoint 4 (Bulk Out) Status = %bx, Endpoint 5 (Bulk In) Status = %bx.\n",
 279   4                                                 D12_ReadEndpointStatus(4), D12_ReadEndpointStatus(5));
 280   4                                              if(bEPPflags.bits.dma_state == DMA_IDLE)
 281   4                                                      printf("DMA_State = DMA_IDLE.\n");
 282   4                                              else if(bEPPflags.bits.dma_state == DMA_RUNNING)
 283   4                                                      printf("DMA_State = DMA_RUNNING.\n");
 284   4                                              else if(bEPPflags.bits.dma_state == DMA_PENDING)
 285   4                                                      printf("DMA_State = DMA_PENDING.\n");
 286   4      
 287   4                                              printf("Last Device Request: bmRequestType = 0x%bx, bRequest= 0x%bx, wValue = 0x%x, wLength = 0x%x, w
             -Index = 0x%x.\n",
 288   4      
 289   4                                                      ControlData.DeviceRequest.bmRequestType,
 290   4                                                      ControlData.DeviceRequest.bRequest,
 291   4                                                      ControlData.DeviceRequest.wValue,
 292   4                                                      ControlData.DeviceRequest.wLength,
 293   4                                                      ControlData.DeviceRequest.wIndex);
 294   4      
 295   4                                              printf("Data: ");
 296   4                                              for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
 297   4                                                      printf("0x%bx, ", *((ControlData.dataBuffer)+i));
 298   4                                              printf("\n");
 299   4      
 300   4                                              break;
 301   4                                      case '\r':
 302   4                                              reconnect_USB();
C51 COMPILER V7.06   MAINLOOP                                                              08/06/2006 09:11:07 PAGE 6   

 303   4                                              break;
 304   4      
 305   4                                      case 'v':
 306   4                                              if(bEPPflags.bits.verbose == 0) {
 307   5                                                      printf("Verbose Mode = ON.\n");
 308   5                                                      DISABLE;
 309   5                                                      bEPPflags.bits.verbose = 1;
 310   5                                                      ENABLE;
 311   5                                              }
 312   4                                              else {
 313   5                                                      printf("Verbose Mode = OFF.\n");
 314   5                                                      DISABLE;
 315   5                                                      bEPPflags.bits.verbose = 0;
 316   5                                                      ENABLE;
 317   5                                              }
 318   4                                              break;
 319   4                                      default:
 320   4                                              break;
 321   4                              }
 322   3                      }
 323   2      
 324   2      
 325   2                      if (bEPPflags.bits.bus_reset) {
 326   3                              DISABLE;
 327   3                              bEPPflags.bits.bus_reset = 0;
 328   3                              ENABLE;
 329   3                              // Release D12's SUSPEND pin after bus reset
 330   3                              // Enable 74HCT123 pulse generation before disconnect
 331   3                              D12SUSPD = 1;
 332   3                      } // if bus reset
 333   2      
 334   2                      if (bEPPflags.bits.suspend) {
 335   3                              DISABLE;
 336   3                              bEPPflags.bits.suspend= 0;
 337   3                              ENABLE;
 338   3      
 339   3                              if(D12SUSPD == 1) {
 340   4                                      D12SUSPD = 0;
 341   4                                      P0 = 0xFF;
 342   4                                      P1 = 0xFF;
 343   4                                      P2 = 0xFF;
 344   4                                      P3 = 0xFF;
 345   4                                      D12_SetDMA(0xC3);
 346   4                                      D12SUSPD = 1;
 347   4                                      PCON |= 0x02;
 348   4                                      while (1);
 349   4                              }
 350   3                      } // if suspend change
 351   2      
 352   2                      if (bEPPflags.bits.setup_packet){
 353   3                              DISABLE;
 354   3                              bEPPflags.bits.setup_packet = 0;
 355   3                              ENABLE;
 356   3                              control_handler();
 357   3                              D12SUSPD = 1;
 358   3                      } // if setup_packet
 359   2      
 360   2                      if(bEPPflags.bits.setup_dma != 0) {
 361   3                              DISABLE;
 362   3                              bEPPflags.bits.setup_dma --;
 363   3                              ENABLE;
 364   3                              setup_dma();
C51 COMPILER V7.06   MAINLOOP                                                              08/06/2006 09:11:07 PAGE 7   

 365   3                      } // if setup_dma
 366   2      
 367   2              } // Main Loop
 368   1      
 369   1              on_exit();
 370   1      }
 371          
 372          void stall_ep0(void)
 373          {
 374   1              D12_SetEndpointStatus(0, 1);
 375   1              D12_SetEndpointStatus(1, 1);
 376   1      }
 377          
 378          void disconnect_USB(void)
 379          {
 380   1              // Initialize D12 configuration
 381   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 382   1      }
 383          
 384          void connect_USB(void)
 385          {
 386   1              // reset event flags
 387   1              DISABLE;
 388   1              bEPPflags.value = 0;
 389   1              ENABLE;
 390   1      
 391   1              // V2.1 enable normal+sof interrupt
 392   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 393   1      
 394   1              // Initialize D12 configuration
 395   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 396   1      }
 397          
 398          
 399          void reconnect_USB(void)
 400          {
 401   1              unsigned long clk_cnt;
 402   1      
 403   1              MCU_LED0 = 0;
 404   1              MCU_LED1 = 0;
 405   1      
 406   1              // Pull-down D12's SUSPEND pin
 407   1              // Disable 74HCT123 pulse generation before disconnect
 408   1              // Release D12's SUSPEND pin after receiving bus reset from host
 409   1              D12SUSPD = 0;
 410   1              disconnect_USB();
 411   1      
 412   1              printf("Wait for 1 second ...\n");
 413   1      
 414   1              clk_cnt = ClockTicks;
 415   1              while(ClockTicks < clk_cnt + 20)
 416   1                      ;
 417   1      
 418   1              connect_USB();
 419   1      
 420   1              MCU_LED0 = 1;
 421   1              MCU_LED1 = 1;
 422   1      }
 423          
 424          void init_unconfig(void)
 425          {
 426   1              unsigned char i;
C51 COMPILER V7.06   MAINLOOP                                                              08/06/2006 09:11:07 PAGE 8   

 427   1      
 428   1              D12_SetEndpointEnable(0);       /* Disable all endpoints but EPP0. */
 429   1      }
*** WARNING C280 IN LINE 426 OF MAINLOOP.C: 'i': unreferenced local variable
 430          
 431          void init_config(void)
 432          {
 433   1              D12_SetEndpointEnable(1);       /* Enable  generic/iso endpoints. */
 434   1      }
 435          
 436          void single_transmit(unsigned char * buf, unsigned char len)
 437          {
 438   1              if( len <= EP0_PACKET_SIZE) {
 439   2                      D12_WriteEndpoint(1, len, buf);
 440   2              }
 441   1      }
 442          
 443          void code_transmit(unsigned char code * pRomData, unsigned short len)
 444          {
 445   1              ControlData.wCount = 0;
 446   1              if(ControlData.wLength > len)
 447   1                      ControlData.wLength = len;
 448   1      
 449   1              ControlData.pData = pRomData;
 450   1              if( ControlData.wLength >= EP0_PACKET_SIZE) {
 451   2                      D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
 452   2                      ControlData.wCount += EP0_PACKET_SIZE;
 453   2      
 454   2                      DISABLE;
 455   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 456   2                      ENABLE;
 457   2              }
 458   1              else {
 459   2                      D12_WriteEndpoint(1, ControlData.wLength, pRomData);
 460   2                      ControlData.wCount += ControlData.wLength;
 461   2                      DISABLE;
 462   2                      bEPPflags.bits.control_state = USB_IDLE;
 463   2                      ENABLE;
 464   2              }
 465   1      }
 466          
 467          void check_key_LED(void)
 468          {
 469   1              static unsigned char c, last_key = 0xf;
 470   1      
 471   1              c = MCU_SWM0 & MCU_SWM1;
 472   1              c &= 0x0f;
 473   1              if (c != last_key) {
 474   2                      D12_WriteEndpoint(3, 1, &c);
 475   2              }
 476   1      
 477   1              last_key = c;
 478   1      
 479   1              if(bEPPflags.bits.ep1_rxdone) {
 480   2                      DISABLE;
 481   2                      bEPPflags.bits.ep1_rxdone = 0;
 482   2                      ENABLE;
 483   2                      MCU_LED0 = !(GenEpBuf[3] & 0x1);
 484   2                      MCU_LED1 = !(GenEpBuf[3] & 0x2);
 485   2              }
 486   1      }
 487          
C51 COMPILER V7.06   MAINLOOP                                                              08/06/2006 09:11:07 PAGE 9   

 488          void setup_dma()
 489          {
 490   1              ioSize = ioRequest.uSize;
 491   1              ioCount = 0;
 492   1      
 493   1              DISABLE;
 494   1              bEPPflags.bits.dma_state = DMA_RUNNING;
 495   1              ENABLE;
 496   1      
 497   1              single_transmit(0, 0);
 498   1      
 499   1              if(ioRequest.bCommand & 0x1) {
 500   2                      if(ioSize > 64 || ioSize == 0) {
 501   3                              if(bNoRAM)
 502   3                                      D12_WriteEndpoint(5, 64, EpBuf);
 503   3                              else
 504   3                                      D12_WriteEndpoint(5, 64, MainEpBuf);
 505   3                              ioCount += 64;
 506   3                      }
 507   2                      else {
 508   3                              if(bNoRAM)
 509   3                                      D12_WriteEndpoint(5, ioSize, EpBuf);
 510   3                              else
 511   3                                      D12_WriteEndpoint(5, ioSize, MainEpBuf);
 512   3                              ioCount += ioSize;
 513   3                      }
 514   2              }
 515   1      }
 516          
 517          
 518          void control_handler()
 519          {
 520   1              unsigned char type, req;
 521   1      
 522   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
 523   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
 524   1      
 525   1              help_devreq(type, req); // print out device request
 526   1      
 527   1              if (type == USB_STANDARD_REQUEST)
 528   1                      (*StandardDeviceRequest[req])();
 529   1              else if (type == USB_VENDOR_REQUEST)
 530   1                      (*VendorDeviceRequest[req])();
 531   1              else
 532   1                      stall_ep0();
 533   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1237    ----
   CONSTANT SIZE    =    969    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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