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

📄 mainloop.lst

📁 烧录器的上位机控制程序代码,和下位机程序代码,包括USB通讯固件
💻 LST
字号:
C51 COMPILER V8.02   MAINLOOP                                                              12/19/2007 17:51:25 PAGE 1   


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

line level    source

   1          #include "define.h"
   2          #include "epphal.h"
   3          #include "d12ci.h"
   4          #include "mainloop.h"
   5          #include "usb100.h"
   6          #include "chap_9.h"
   7          #include "protodma.h"
   8          #include "otp.h"
   9          
  10          
  11          /*
  12          //*************************************************************************
  13          // USB protocol function pointer arrays
  14          //*************************************************************************
  15          */
  16          
  17          //USB标准请求
  18          code void (*StandardDeviceRequest[])(void) =
  19          {
  20                  get_status,
  21                  clear_feature,
  22                  reserved,
  23                  set_feature,
  24                  reserved,
  25                  set_address,
  26                  get_descriptor,
  27                  reserved,
  28                  get_configuration,
  29                  set_configuration,
  30                  get_interface,
  31                  set_interface,
  32                  reserved,
  33                  reserved,
  34                  reserved,
  35                  reserved
  36          };
  37          
  38          /*
  39          //*************************************************************************
  40          //  Public static data
  41          //*************************************************************************
  42          */
  43          
  44          extern EPPFLAGS bEPPflags;
  45          bit _want_connect=1;
  46          CONTROL_XFER ControlData;
  47          
  48          
  49          code char * _NAME_USB_REQUEST_DIRECTION[] =
  50          {
  51          "Host_to_device",
  52          "Device_to_host"
  53          };
  54          
  55          code char * _NAME_USB_REQUEST_RECIPIENT[] =
C51 COMPILER V8.02   MAINLOOP                                                              12/19/2007 17:51:25 PAGE 2   

  56          {
  57          "Device",
  58          "Interface",
  59          "Endpoint(0)",
  60          "Other"
  61          };
  62          
  63          code char * _NAME_USB_REQUEST_TYPE[] =
  64          {
  65          "Standard",
  66          "Class",
  67          "Vendor",
  68          "Reserved"
  69          };
  70          
  71          code char * _NAME_USB_STANDARD_REQUEST[] =
  72          {
  73          "GET_STATUS",
  74          "CLEAR_FEATURE",
  75          "RESERVED",
  76          "SET_FEATURE",
  77          "RESERVED",
  78          "SET_ADDRESS",
  79          "GET_DESCRIPTOR",
  80          "SET_DESCRIPTOR",
  81          "GET_CONFIGURATION",
  82          "SET_CONFIGURATION",
  83          "GET_INTERFACE",
  84          "SET_INTERFACE",
  85          "SYNC_FRAME"
  86          };
  87          
  88          /* Interrupt Control Unit */
  89          /*   ****  Enabled interrupts in Interrupt Enable Register ****
  90                   ****  GLOBAL INTERRUPT MUST BE ENABLED FOR ANY OTHER
  91                   ****  INTERRUPT TO WORK!
  92          */
  93          /*                  GLOBAL INTERRUPT DISABLED ALL INTERRUPTS
  94                                                  ARE DISABLED          */
  95          /*                    External interrupt 0      */
  96          /*                        Priority Level = 0    */
  97          /*                        Timer 0 interrupt     */
  98          /*                       Priority Level = 0     */
  99          //中断设置
 100          void init_special_interrupts(void)
 101          {
 102   1              IT0 = 0;
 103   1              EX0 = 1;
 104   1              PX0 = 0;
 105   1      }
 106          
 107           void InitialUart(unsigned int baudrate)        
 108          {
 109   1              SCON=0X50;
 110   1              TMOD=0X21;
 111   1              TH1=TL1=256-(28800*2/baudrate);
 112   1              TR1=1;
 113   1              ET1=0;
 114   1              ES=0;
 115   1      }
 116          
 117          
C51 COMPILER V8.02   MAINLOOP                                                              12/19/2007 17:51:25 PAGE 3   

 118          
 119          void main(void)
 120          {
 121   1          DelayNms(200);
 122   1          bEPPflags.bits.configuration = 0;
 123   1          init_sub();
 124   1          initial_timer0();
 125   1              InitialUart(19200);        //???test
 126   1          init_special_interrupts();//设置中断
 127   1          buzzer_1();
 128   1          reconnect_USB();//重新连接USB
 129   1          
 130   1              while( TRUE )
 131   1              {       
 132   2                      //===============================       自动检测USB设备 
 133   2                      P3_2=1;
 134   2                      if (P3_2)
 135   2                      {
 136   3                              if (!bEPPflags.bits.configuration)
 137   3                              {
 138   4                                      if (_want_connect)
 139   4                                      {
 140   5                                              _want_connect=0;
 141   5                                              reconnect_USB();//重新连接USB
 142   5                                      }                       
 143   4                              }
 144   3                              IT0=1;
 145   3                      }
 146   2                      else
 147   2                      {
 148   3                              IT0=0;
 149   3                      }
 150   2                      //==================================
 151   2                      
 152   2              check_buttton();
 153   2                      
 154   2                      if (bEPPflags.bits.setup_packet){//Setup包处理
 155   3                              DISABLE;
 156   3                              bEPPflags.bits.setup_packet = 0;
 157   3                              ENABLE;
 158   3                              control_handler();//调用请求处理子程序
 159   3                              //      D12SUSPD = 1;
 160   3                      } // if setup_packet
 161   2              } // Main Loop
 162   1      }
 163          
 164          //返回stall应答
 165          void stall_ep0(void)
 166          {
 167   1              D12_SetEndpointStatus(0, 1);
 168   1              D12_SetEndpointStatus(1, 1);
 169   1      }
 170          
 171          //断开USB总线
 172          void disconnect_USB(void)
 173          {
 174   1              // Initialize D12 configuration
 175   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 176   1      }
 177          
 178          //连接USB总线
 179          void connect_USB(void)
C51 COMPILER V8.02   MAINLOOP                                                              12/19/2007 17:51:25 PAGE 4   

 180          {
 181   1      
 182   1              // V2.1 enable normal+sof interrupt
 183   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 184   1      
 185   1              // Initialize D12 configuration
 186   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 187   1      }
 188          
 189          //重新连接到USB总线
 190          void reconnect_USB(void)
 191          {
 192   1              disconnect_USB();
 193   1      //      printf("Wait for 1 second ...\n");
 194   1          
 195   1              connect_USB();
 196   1      }
 197          
 198          //恢复到未配置状态
 199          void init_unconfig(void)
 200          {
 201   1      //      unsigned char i;
 202   1      
 203   1              D12_SetEndpointEnable(0);       /* Disable all endpoints but EPP0. */
 204   1      }
 205          
 206          //设置配置状态
 207          void init_config(void)
 208          {
 209   1              D12_SetEndpointEnable(1);       /* Enable  generic/iso endpoints. */
 210   1      }
 211          
 212          //从端点号1发送数据
 213          void single_transmit(unsigned char * buf, unsigned char len)
 214          {
 215   1              if( len <= EP0_PACKET_SIZE) {
 216   2                      D12_WriteEndpoint(1, len, buf);
 217   2              }
 218   1      }
 219          
 220          //发送端点号1建立代码
 221          void code_transmit(unsigned char code * pRomData, unsigned short len)
 222          {
 223   1              ControlData.wCount = 0;
 224   1              if(ControlData.wLength > len)
 225   1                      ControlData.wLength = len;
 226   1      
 227   1              ControlData.pData = pRomData;
 228   1              if( ControlData.wLength >= EP0_PACKET_SIZE) {
 229   2                      D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);//发送16字节数据
 230   2                      ControlData.wCount += EP0_PACKET_SIZE;
 231   2                      DISABLE;
 232   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 233   2                      ENABLE;
 234   2              }
 235   1              else {
 236   2                      D12_WriteEndpoint(1, ControlData.wLength, pRomData);//发送16字节内数据
 237   2                      ControlData.wCount += ControlData.wLength;
 238   2                      DISABLE;
 239   2                      bEPPflags.bits.control_state = USB_IDLE;
 240   2                      ENABLE;
 241   2              }
C51 COMPILER V8.02   MAINLOOP                                                              12/19/2007 17:51:25 PAGE 5   

 242   1      }
 243          //请求处理子程序
 244          void control_handler()
 245          {
 246   1              unsigned char type, req;
 247   1      
 248   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
 249   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
 250   1      
 251   1              if (type == USB_STANDARD_REQUEST)
 252   1                      (*StandardDeviceRequest[req])();//调用标准请求
 253   1              else
 254   1                      stall_ep0();
 255   1      }
 256          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    344    ----
   CONSTANT SIZE    =    376    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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