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

📄 mainloop.lst

📁 基于PDIUSBD12芯片的USB开发板固件程序
💻 LST
字号:
C51 COMPILER V7.02a   MAINLOOP                                                             09/20/2005 15:10:00 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN MAINLOOP.OBJ
COMPILER INVOKED BY: D:\Program Files\Keilc7\C51\BIN\C51.EXE MAINLOOP.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*
   2             //*************************************************************************
   3             //
   4             //                  P H I L I P S   P R O P R I E T A R Y
   5             //
   6             //           COPYRIGHT (c)   1997 BY PHILIPS SINGAPORE.
   7             //                     --  ALL RIGHTS RESERVED  --
   8             //
   9             // File Name:        MainLoop.C
  10             // Author:           Wenkai Du
  11             // Created:          19 Dec 97
  12             // Modified:
  13             // Revision:         3.0
  14             //
  15             //*************************************************************************
  16             //
  17             // 98/11/25          Added I/O access support on Main endpoints. (WK)
  18             //*************************************************************************
  19             */
  20          
  21          
  22          
  23          #include <reg51.h>                /* special function register declarations   */
  24          
  25          #include "epphal.h"
  26          #include "d12ci.h"
  27          #include "mainloop.h"
  28          #include "usb100.h"
  29          #include "chap_9.h"
  30          #include "ISP.h"
  31          /*
  32          //*************************************************************************
  33          // USB protocol function pointer arrays
  34          //*************************************************************************
  35          */
  36          code void (*StandardDeviceRequest[])(void) =
  37          {
  38                  get_status,
  39                  clear_feature,
  40                  reserved,
  41                  set_feature,
  42                  reserved,
  43                  set_address,
  44                  get_descriptor,
  45                  reserved,
  46                  get_configuration,
  47                  set_configuration,
  48                  get_interface,
  49                  set_interface,
  50                  reserved,
  51                  reserved,
  52                  reserved,
  53                  reserved
  54          };
  55          
C51 COMPILER V7.02a   MAINLOOP                                                             09/20/2005 15:10:00 PAGE 2   

  56          /*
  57          //*************************************************************************
  58          //  Public static data
  59          //*************************************************************************
  60          */
  61          
  62          extern EPPFLAGS bEPPflags;
  63          extern unsigned char idata GenEpBuf[];
  64          extern unsigned char idata EpBuf[];
  65          //extern IO_REQUEST idata ioRequest;
  66          
  67          
  68          CONTROL_XFER ControlData;
  69          
  70          
  71          void init_special_interrupts(void)
  72          {
  73   1              EA=1;
  74   1              EX1=1;
  75   1      }
  76          
  77          void init_port()
  78          {
  79   1              P0 = 0xFF;
  80   1              P1 = 0xFF;
  81   1              P2 = 0xFF;
  82   1              P3 = 0xFF;
  83   1              D12SUSPD = 0;
  84   1      }
  85          
  86          void init_flags()
  87          {
  88   1      //      bEPPflags.bits.bus_reset=0;           
  89   1      //      bEPPflags.bits.suspend=0;             
  90   1              bEPPflags.bits.setup_packet=0;            
  91   1              bEPPflags.bits.remote_wakeup=0;         
  92   1              bEPPflags.bits.in_isr=0;                      
  93   1              bEPPflags.bits.control_state=0;         
  94   1              bEPPflags.bits.configuration=0;         
  95   1              bEPPflags.bits.ep1_rxdone=0;
  96   1              bEPPflags.bits.main_rxdone=0;   
  97   1      }
  98          
  99          void main(void)
 100          {
 101   1              init_port();
 102   1              init_special_interrupts();
 103   1              init_flags();
 104   1              reconnect_USB();
 105   1              while( TRUE )
 106   1              {               
 107   2      /*              if (bEPPflags.bits.bus_reset) 
 108   2                      {
 109   2                              DISABLE;
 110   2                              bEPPflags.bits.bus_reset = 0;
 111   2                              ENABLE;
 112   2                              D12SUSPD = 1;
 113   2                      } 
 114   2                      if (bEPPflags.bits.suspend) 
 115   2                      {
 116   2                              DISABLE;
 117   2                              bEPPflags.bits.suspend= 0;
C51 COMPILER V7.02a   MAINLOOP                                                             09/20/2005 15:10:00 PAGE 3   

 118   2                              ENABLE;
 119   2                              if(D12SUSPD == 1) 
 120   2                              {
 121   2                                      D12SUSPD = 0;
 122   2                                      P0 = 0xFF;
 123   2                                      P1 = 0xFF;
 124   2                                      P2 = 0xFF;
 125   2                                      P3 = 0xFF;
 126   2                                      D12SUSPD = 1;
 127   2                                      PCON |= 0x02;
 128   2                                      while (1);
 129   2                              }
 130   2                      } // if suspend change*/
 131   2      
 132   2                      if (bEPPflags.bits.setup_packet)
 133   2                      {
 134   3                              DISABLE;
 135   3                              bEPPflags.bits.setup_packet = 0;
 136   3                              ENABLE;
 137   3                              control_handler();
 138   3                              D12SUSPD = 1;
 139   3                      } // if setup_packet
 140   2              if(bEPPflags.bits.configuration)                                
 141   2                              IspControl();
 142   2              } // Main Loop
 143   1      
 144   1      }
 145          
 146          void stall_ep0(void)
 147          {
 148   1              D12_SetEndpointStatus(0, 1);
 149   1              D12_SetEndpointStatus(1, 1);
 150   1      }
 151          
 152          void init_unconfig(void)
 153          {
 154   1      //      unsigned char i;
 155   1      
 156   1              D12_SetEndpointEnable(0);       /* Disable all endpoints but EPP0. */
 157   1      }
 158          
 159          void init_config(void)
 160          {
 161   1              D12_SetEndpointEnable(1);       /* Enable  generic/iso endpoints. */
 162   1      }
 163          
 164          void single_transmit(unsigned char * buf, unsigned char len)
 165          {
 166   1              if( len <= EP0_PACKET_SIZE) {
 167   2                      D12_WriteEndpoint(1, len, buf);
 168   2              }
 169   1      }
 170          
 171          void code_transmit(unsigned char code * pRomData, unsigned short len)
 172          {
 173   1              ControlData.wCount = 0;
 174   1              if(ControlData.wLength > len)
 175   1                      ControlData.wLength = len;
 176   1      
 177   1              ControlData.pData = pRomData;
 178   1              if( ControlData.wLength >= EP0_PACKET_SIZE) {
 179   2                      D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
C51 COMPILER V7.02a   MAINLOOP                                                             09/20/2005 15:10:00 PAGE 4   

 180   2                      ControlData.wCount += EP0_PACKET_SIZE;
 181   2      
 182   2                      DISABLE;
 183   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 184   2                      ENABLE;
 185   2              }
 186   1              else {
 187   2                      D12_WriteEndpoint(1, ControlData.wLength, pRomData);
 188   2                      ControlData.wCount += ControlData.wLength;
 189   2                      DISABLE;
 190   2                      bEPPflags.bits.control_state = USB_IDLE;
 191   2                      ENABLE;
 192   2              }
 193   1      }
 194          
 195          void IspControl(void)
 196          {
 197   1              unsigned char a;
 198   1              unsigned char time;
 199   1              int Addr;
 200   1              unsigned char i;
 201   1              unsigned char j;
 202   1              unsigned char nBit;
 203   1              while(!bEPPflags.bits.ep1_rxdone) 
 204   1                      {}
 205   1              DISABLE;
 206   1              bEPPflags.bits.ep1_rxdone = 0;
 207   1              ENABLE;
 208   1              a=GenEpBuf[0];
 209   1              PreparePro();   
 210   1              switch(a)
 211   1              {
 212   2              case 0:
 213   2                      Erase();
 214   2                      GenEpBuf[0]=1;
 215   2                      D12_WriteEndpoint(3,4, GenEpBuf);
 216   2                      GenEpBuf[0]=0;
 217   2                      break;
 218   2              case 1:         
 219   2                      time=GenEpBuf[1];
 220   2                      for(i=0;i<time;i++)
 221   2                      {
 222   3                              while(!bEPPflags.bits.main_rxdone)
 223   3                                      {}
 224   3                              DISABLE;
 225   3                              bEPPflags.bits.main_rxdone = 0;
 226   3                              ENABLE;
 227   3                              D12SUSPD=1;
 228   3                              for(j=0;j<64;j++)
 229   3                              {
 230   4                                      Addr=j+i*64;
 231   4                                      Write(EpBuf[j],Addr);
 232   4                                      if(Read(Addr)!=EpBuf[j])
 233   4                                      {
 234   5                                              GenEpBuf[0]=2;
 235   5                                              D12_WriteEndpoint(3,4, GenEpBuf);
 236   5                                              GenEpBuf[0]=0;
 237   5                                              return;
 238   5                                      }       
 239   4                              }
 240   3                              D12SUSPD=0;
 241   3                              GenEpBuf[0]=1;
C51 COMPILER V7.02a   MAINLOOP                                                             09/20/2005 15:10:00 PAGE 5   

 242   3                              D12_WriteEndpoint(3,4, GenEpBuf);
 243   3                              GenEpBuf[0]=0;
 244   3                      }
 245   2                      break;
 246   2              case 2:
 247   2                      time=GenEpBuf[1];
 248   2                      for(i=0;i<time;i++)
 249   2                      {
 250   3                              for(j=0;j<64;j++)
 251   3                              {
 252   4                                      Addr=j+i*64;
 253   4                                      EpBuf[j]=Read(Addr);
 254   4                              }
 255   3                              D12_WriteEndpoint(5,64,EpBuf);
 256   3                              GenEpBuf[0]=1;
 257   3                              D12_WriteEndpoint(3,4, GenEpBuf);
 258   3                      }
 259   2                      GenEpBuf[0]=0;
 260   2                      break;
 261   2              case 3:
 262   2                      ReadSign(GenEpBuf);
 263   2                      if(GenEpBuf[0]==0)
 264   2                              GenEpBuf[0]=2;
 265   2                      D12_WriteEndpoint(3,4, GenEpBuf);
 266   2                      GenEpBuf[0]=0;
 267   2                      break;
 268   2              case 4:
 269   2                      nBit=GenEpBuf[1];
 270   2                      LockBit(nBit);
 271   2                      GenEpBuf[0]=1;
 272   2                      D12_WriteEndpoint(3,4, GenEpBuf);
 273   2                      GenEpBuf[0]=0;
 274   2                      break;
 275   2              }
 276   1              ProOver();
 277   1      }
 278          
 279          void control_handler()
 280          {
 281   1              unsigned char type, req;
 282   1      
 283   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
 284   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
 285   1              if (type == USB_STANDARD_REQUEST)
 286   1                      (*StandardDeviceRequest[req])();
 287   1              else
 288   1                      stall_ep0();
 289   1      }
 290          
 291          void reconnect_USB(void)
 292          {
 293   1              D12SUSPD = 0;
 294   1              disconnect_USB();
 295   1              connect_USB();
 296   1      }
 297          
 298          void disconnect_USB(void)
 299          {
 300   1              // Initialize D12 configuration
 301   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 302   1      }
 303          
C51 COMPILER V7.02a   MAINLOOP                                                             09/20/2005 15:10:00 PAGE 6   

 304          void connect_USB(void)
 305          {
 306   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 307   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 308   1      }
 309          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    712    ----
   CONSTANT SIZE    =     48    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24       8
   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 + -