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

📄 mainloop.lst

📁 PDIUSBD12固件编程简单实例
💻 LST
字号:
C51 COMPILER V8.02   MAINLOOP                                                              03/28/2009 00:39:53 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN MAINLOOP.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE MAINLOOP.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*本程序套用smartUSB板的固件程序。如有什么问题请到我的blog:unaided.21ic.org上讨论 */
   2          
   3          
   4          
   5          #include <reg51.h>                /* special function register declarations   */
   6          #include <stdio.h>
   7          #include <string.h>
   8          #include "epphal.h"
   9          #include "d12ci.h"
  10          #include "mainloop.h"
  11          #include "usb100.h"
  12          #include "chap_9.h"
  13          
  14          /*
  15          //*************************************************************************
  16          // USB protocol function pointer arrays
  17          //*************************************************************************
  18          */
  19          code void (*StandardDeviceRequest[])(void) =
  20          {
  21                  get_status,
  22                  clear_feature,
  23                  reserved,
  24                  set_feature,
  25                  reserved,
  26                  set_address,
  27                  get_descriptor,
  28                  reserved,
  29                  get_configuration,
  30                  set_configuration,
  31                  get_interface,
  32                  set_interface,
  33                  reserved,
  34                  reserved,
  35                  reserved,
  36                  reserved
  37          };
  38          
  39          /*
  40          //*************************************************************************
  41          //  Public static data
  42          //*************************************************************************
  43          */
  44          
  45          extern EPPFLAGS bEPPflags;
  46          extern unsigned char idata GenEpBuf[];
  47          extern unsigned char idata EpBuf[];
  48          //extern IO_REQUEST idata ioRequest;
  49          
  50          
  51          CONTROL_XFER ControlData;
  52          
  53          
  54          void init_special_interrupts(void)
  55          {
C51 COMPILER V8.02   MAINLOOP                                                              03/28/2009 00:39:53 PAGE 2   

  56   1              EA=1;
  57   1              IT1=0;
  58   1              EX1=1;
  59   1              PX1=1;
  60   1      }
  61          
  62          void init_port()
  63          {
  64   1              P0 = 0xFF;
  65   1              P1 = 0xFF;
  66   1              P2 = 0xFF;
  67   1              P3 = 0xFF;
  68   1      //      D12SUSPD = 0;
  69   1      }
  70          
  71          
  72          void init_flags()
  73          {
  74   1              bEPPflags.bits.bus_reset=0;           
  75   1              bEPPflags.bits.suspend=0;             
  76   1              bEPPflags.bits.setup_packet=0;            
  77   1              bEPPflags.bits.remote_wakeup=0;         
  78   1              bEPPflags.bits.in_isr=0;                      
  79   1              bEPPflags.bits.control_state=0;         
  80   1              bEPPflags.bits.configuration=0;         
  81   1              bEPPflags.bits.ep1_rxdone=0;
  82   1              bEPPflags.bits.main_rxdone=0;   
  83   1      }
  84          
  85          
  86          void main(void)
  87          {
  88   1              unsigned short ID;
  89   1              unsigned char high,low;
  90   1              init_port();
  91   1              init_special_interrupts();;     
  92   1              init_flags();   
  93   1              ID=D12_ReadChipID();
  94   1              high=(unsigned char)(ID>>8);
  95   1              low=(unsigned char)ID;
  96   1              reconnect_USB();
  97   1              while( TRUE )
  98   1              {       
  99   2                      if (bEPPflags.bits.bus_reset) 
 100   2                      {
 101   3                              DISABLE;
 102   3                              bEPPflags.bits.bus_reset = 0;
 103   3                              ENABLE;
 104   3      //                      D12SUSPD = 1;
 105   3                      } 
 106   2      /*              if (bEPPflags.bits.suspend) 
 107   2                      {
 108   2                              DISABLE;
 109   2                              bEPPflags.bits.suspend= 0;
 110   2                              ENABLE;
 111   2                              if(D12SUSPD == 1) 
 112   2                              {
 113   2                                      D12SUSPD = 0;
 114   2                                      P0 = 0xFF;
 115   2                                      P1 = 0xFF;
 116   2                                      P2 = 0xFF;
 117   2                                      P3 = 0xFF;
C51 COMPILER V8.02   MAINLOOP                                                              03/28/2009 00:39:53 PAGE 3   

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

 180   2                      ControlData.wCount += ControlData.wLength;
 181   2                      DISABLE;
 182   2                      bEPPflags.bits.control_state = USB_IDLE;
 183   2                      ENABLE;
 184   2              }
 185   1      }
 186          
 187          void IspControl(void)
 188          {
 189   1              P1=GenEpBuf[0];
 190   1      }
 191          
 192          void control_handler()
 193          {
 194   1              unsigned char type, req;
 195   1      
 196   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
 197   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
 198   1              if (type == USB_STANDARD_REQUEST)
 199   1                      (*StandardDeviceRequest[req])();
 200   1              else
 201   1                      stall_ep0();
 202   1      }
 203          
 204          void reconnect_USB(void)
 205          {
 206   1      //      D12SUSPD = 0;
 207   1              disconnect_USB();
 208   1              connect_USB();
 209   1      }
 210          
 211          void disconnect_USB(void)
 212          {
 213   1              // Initialize D12 configuration
 214   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 215   1      }
 216          
 217          void connect_USB(void)
 218          {
 219   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 220   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 221   1      }
 222          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    390    ----
   CONSTANT SIZE    =     48    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       4
   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 + -