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

📄 usb_main.lst

📁 PDIUSBD12与51接口的固件KEIL6.23调试通过
💻 LST
📖 第 1 页 / 共 5 页
字号:
 260   1      
 261   1              ControlData.pData = pRomData;
 262   1              if( ControlData.wLength >= EP0_PACKET_SIZE) {   // 如果发送代码大于包长度
 263   2                      D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
 264   2                      ControlData.wCount += EP0_PACKET_SIZE;
 265   2      
 266   2                      DISABLE;
 267   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 268   2                      ENABLE;
 269   2              }
 270   1              else {                                          //发送代码小于包长度
 271   2                      D12_WriteEndpoint(1, ControlData.wLength, pRomData);
 272   2                      ControlData.wCount += ControlData.wLength;
 273   2                      DISABLE;
 274   2                      bEPPflags.bits.control_state = USB_IDLE;
 275   2                      ENABLE;
 276   2              }
 277   1      }
 278          
 279          //---------------------------
 280          
 281          void setup_dma()
 282          {
 283   1              ioSize = ioRequest.uSize;
 284   1              ioCount = 0;
 285   1      
 286   1              DISABLE;
 287   1              bEPPflags.bits.dma_state = DMA_RUNNING;
 288   1              ENABLE;
 289   1      
 290   1              single_transmit(0, 0);
 291   1      
 292   1              if(ioRequest.bCommand & 0x1) {
 293   2                      if(ioSize > 64 || ioSize == 0) {
 294   3                              //if(bNoRAM)
 295   3                                      D12_WriteEndpoint(5, 64, EpBuf);
 296   3                              //else
 297   3                              //      D12_WriteEndpoint(5, 64, MainEpBuf);
 298   3                              ioCount += 64;
 299   3                      }
 300   2                      else {
 301   3                              //if(bNoRAM)
 302   3                                      D12_WriteEndpoint(5, ioSize, EpBuf);
 303   3                              //else
C51 COMPILER V6.23a  USB_MAIN                                                              12/24/2005 14:35:50 PAGE 6   

 304   3                              //      D12_WriteEndpoint(5, ioSize, MainEpBuf);
 305   3                              ioCount += ioSize;
 306   3                      }
 307   2              }
 308   1      }
 309          
 310          //------------------------------
 311          void control_handler()
 312          {
 313   1              unsigned char type, req;
 314   1      
 315   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; //0x60
 316   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;            //0x0F
 317   1      
 318   1              //help_devreq(type, req); // print out device request
 319   1      
 320   1              if (type == USB_STANDARD_REQUEST)
 321   1                      (*StandardDeviceRequest[req])();
 322   1              else if (type == USB_VENDOR_REQUEST)
 323   1                      (*VendorDeviceRequest[req])();
 324   1              else
 325   1                      stall_ep0();
 326   1      
 327   1      }
 328          
 329          
 330          //-------------------------------------------
 331          
 332          //-------------------------------------------
 333          
 334          void main()
 335          {
 336   1              unsigned char i;
 337   1              //bNoRam=1;
 338   1              //DISABLE;
 339   1              init_port();
 340   1      
 341   1              init_timer0();
 342   1              EA = 0;
 343   1              //for test
 344   1              MCU_LED0=0;
 345   1              MCU_LED1=0;
 346   1              MCU_LED0=1;
 347   1              MCU_LED1=1;
 348   1      
 349   1              IE1=0;
 350   1              IT1=0;
 351   1              EX1=1;
 352   1      
 353   1      
 354   1              //-----------------------
 355   1      
 356   1              //for(i = 0; i < 16; i ++)
 357   1              //      MainEpBuf[i] = i;
 358   1              //for(i = 0; i < 16; i ++) {
 359   1              //      if(MainEpBuf[i] != i)
 360   1              //              break;
 361   1              //      }
 362   1              //if(i < 16)
 363   1                      bNoRAM = FALSE;
 364   1              //else
 365   1              //      bNoRAM = FALSE;
C51 COMPILER V6.23a  USB_MAIN                                                              12/24/2005 14:35:50 PAGE 7   

 366   1      
 367   1              //--------------------------
 368   1              //bNoRam=TRUE;
 369   1              //---------------------------
 370   1      
 371   1              //----------------------------
 372   1              /*
 373   1              if(MCU_SWM0 == 0 && MCU_SWM1 == 0) {
 374   1                      MCU_D12RST = 0;
 375   1                      MCU_D12RST = 1;
 376   1                      D12_SetDMA(0x0);
 377   1              }
 378   1              */
 379   1              //if((i = D12_GetDMA()) == 0xC3)
 380   1      //              {D12_SendResume();}
 381   1              //else {
 382   1              //      bEPPflags.value = 0;
 383   1      
 384   1                      /* Power on reset, lightup LEDs for 1 sec,
 385   1                         disconnect and reconnect Soft-Connect */
 386   1                      //printf("\nPDIUSBD12 SMART evaluation board firmware V3.0.\n");
 387   1              i=D12_ReadInterruptRegister();
 388   1              i=0;
 389   1              //i=D12_ReadEndpointStatus(0);
 390   1              i=D12_ReadLastTransactionStatus(0);
 391   1              i=D12_ReadLastTransactionStatus(1);
 392   1              i=D12_ReadLastTransactionStatus(2);
 393   1              i=D12_ReadLastTransactionStatus(3);
 394   1              i=D12_ReadLastTransactionStatus(4);
 395   1              i=D12_ReadLastTransactionStatus(5);
 396   1              ENABLE;
 397   1              reconnect_USB();
 398   1              ENABLE;
 399   1       //             }
 400   1              //=======================================
 401   1              /* Main program loop */
 402   1      
 403   1              while( TRUE ){
 404   2      
 405   2                      if (bEPPflags.bits.timer)
 406   2                      {
 407   3                              DISABLE;
 408   3                              bEPPflags.bits.timer = 0;
 409   3                              ENABLE;
 410   3      
 411   3                              if(bEPPflags.bits.configuration)
 412   3                                      check_key_LED();
 413   3                      }
 414   2      
 415   2                      if (bEPPflags.bits.bus_reset)
 416   2                      {
 417   3                              DISABLE;
 418   3                              bEPPflags.bits.bus_reset = 0;
 419   3                              ENABLE;
 420   3                              // Release D12's SUSPEND pin after bus reset
 421   3                              // Enable 74HCT123 pulse generation before disconnect
 422   3                              ///D12SUSPD = 1;
 423   3                              D12SUSPD=0;
 424   3                      } // if bus reset
 425   2      
 426   2                      if (bEPPflags.bits.suspend)
 427   2                      {
C51 COMPILER V6.23a  USB_MAIN                                                              12/24/2005 14:35:50 PAGE 8   

 428   3                              DISABLE;
 429   3                              bEPPflags.bits.suspend= 0;
 430   3                              ENABLE;
 431   3      
 432   3                              if(D12SUSPD == 1) {
 433   4                                      D12SUSPD = 0;
 434   4                                      P0 = 0xFF;
 435   4                                      P1 = 0xFF;
 436   4                                      P2 = 0xFF;
 437   4                                      P3 = 0xFF;
 438   4                                      D12_SetDMA(0xC3);
 439   4                                      D12SUSPD = 1;
 440   4                                      PCON |= 0x02;
 441   4                                      while (1);
 442   4      
 443   4                              }
 444   3      
 445   3                      } // if suspend change
 446   2      
 447   2                      if (bEPPflags.bits.setup_packet){
 448   3                              DISABLE;
 449   3                              bEPPflags.bits.setup_packet = 0;
 450   3                              ENABLE;
 451   3                              control_handler();
 452   3                              //D12SUSPD = 1;
 453   3                              D12SUSPD=0;
 454   3                      } // if setup_packet
 455   2      
 456   2                      if(bEPPflags.bits.setup_dma != 0)
 457   2                      {
 458   3                              DISABLE;
 459   3                              bEPPflags.bits.setup_dma --;
 460   3                              ENABLE;
 461   3                              setup_dma();
 462   3                      } // if setup_dma
 463   2      
 464   2              } // Main Loop
 465   1      
 466   1              //on_exit();
 467   1              //=======================================
 468   1      
 469   1      }
 470          
 471          
 472          //zaq
 473          //P57命令接口-D12CI.C
 474          //===============================================================
 475          //===============================================================
 476          //---------------------------------
 477          void outportcmd(unsigned char value)
 478          {
 479   1      
 480   1       //              unsigned char xdata *ext_address;
 481   1              //     ext_address=D12_COMMAND;
 482   1              //     *ext_address = value;              //   write cycle
 483   1      //  *((INT8 xdata *)D12_command) = val;
 484   1      //*/
 485   1      //unsigned char xdata *exAddress;
 486   1      //      exAddress = nPort;
 487   1      //      *exAddress = nVal;
 488   1      
 489   1              *((unsigned char xdata *)D12_COMMAND)=value;
C51 COMPILER V6.23a  USB_MAIN                                                              12/24/2005 14:35:50 PAGE 9   

 490   1      }
 491          void outportdata(unsigned char value)
 492          {
 493   1      
 494   1         *((unsigned char xdata *)D12_DATA)=value;
 495   1      }
 496          
 497          unsigned char inportb(void)
 498          {
 499   1      
 500   1       return *((unsigned xdata *)D12_DATA);
 501   1      }
 502          
 503          //--------------------------
 504          //初始化命令-D0H
 505          void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
 506          {
 507   1              if(bEPPflags.bits.in_isr == 0)
 508   1                      DISABLE;
 509   1      
 510   1              outportcmd(0xD0);
 511   1              if(bEnable)
 512   1                      bAddress |= 0x80;
 513   1              outportdata(bAddress);
 514   1      
 515   1              if(bEPPflags.bits.in_isr == 0)
 516   1                      ENABLE;
 517   1      }
 518          
 519          void D12_SetEndpointEnable(unsigned char bEnable)
 520          {
 521   1              if(bEPPflags.bits.in_isr == 0)
 522   1                      DISABLE;
 523   1      
 524   1              outportcmd(0xD8);
 525   1              if(bEnable)
 526   1                      outportdata(1);
 527   1              else

⌨️ 快捷键说明

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