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

📄 kmain.lst

📁 USB D12驱动源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
  43                  reserved,
  44                  reserved,
  45                  reserved,
  46                  reserved,
  47                  reserved,
  48                  reserved,
  49                  reserved,
  50                  reserved,
  51                  reserved,
  52                  read_write_register,
  53                  reserved,
C51 COMPILER V7.06   KMAIN                                                                 11/11/2003 20:11:04 PAGE 15  

  54                  reserved,
  55                  reserved
  56          };
  57          
  58          
  59          
  60          /*
  61          //*************************************************************************
  62          //  Public static data
  63          //*************************************************************************
  64          */
  65          extern EPPFLAGS bEPPflags;
  66          extern unsigned long ClockTicks;
  67          
  68          extern unsigned char idata GenEpBuf[];
  69          extern IO_REQUEST idata ioRequest;
  70          
  71          extern unsigned char ioSize, ioCount;
  72          extern unsigned char xdata MainEpBuf[];
  73          extern unsigned char idata EpBuf[];
  74          //------------
  75          extern void fn_usb_isr(void);
  76          //-----------
  77          
  78          CONTROL_XFER ControlData;
  79          unsigned char bNoRAM;
  80          
  81          
  82          //==================================================
  83          /*
  84            PCON:         SMOD | - | - | - | GF1|GF0|PD |IDL|
  85            TCON:         TF1  | - |TF0| - |IE1 |IT1|IE0|IT0|
  86              
  87          */
  88          /* Configure Timer 0
  89             - Mode                  = 1
  90             - Interrupt                   = ENABLED
  91             - Clock Source                = INTERNAL
  92             - Enable Gating Control    = DISABLED
  93          */
  94          
  95          
  96          void init_timer0(void)
  97          {
  98   1              TMOD &= 0XF0;                /* clear Timer 0   */
  99   1              TMOD  |= 0X1;
 100   1              TL0 = 0X0;                   /* value set by user    */
 101   1              TH0 = 0X0;                   /* value set by user  */
 102   1              ET0 = 1;                     /* IE.1*/
 103   1              TR0 = 1;                     /* TCON.4 start timer  */
 104   1              PT0 = 1;
 105   1      
 106   1              //EA = 1;
 107   1      }
 108          
 109          
 110          void init_port()
 111          {
 112   1              P0 = 0xFF;
 113   1              P1 = 0xFF;
 114   1              P2 = 0xFF;
 115   1              P3 = 0xFF;
C51 COMPILER V7.06   KMAIN                                                                 11/11/2003 20:11:04 PAGE 16  

 116   1              MCU_D12CS = 0x0;        //D12 Select
 117   1              D12SUSPD = 0;           //D12 not in Suspend
 118   1      }
 119          
 120          /*Serial Port */
 121          /*Mode            = 1  /8-bit UART
 122            Serial Port Interrupt    = Disabled         */
 123          /*Receive         = Enabled   */
 124          /*Auto Addressing    = Disabled   */
 125          void init_serial(void)
 126          {
 127   1              SCON = 0X52;            /* SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI          */
 128   1              PCON = 0X80 | PCON;     /* PCON: SMOD | - | - | - | GF1|GF0|PD |IDL|    */
 129   1              TMOD = 0X20;            /* TMOD: GATE|C/T|M1|M0|GATE|C/T|M1|M0 */
 130   1              TCON = 0x69;            /* TCON: TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0 */
 131   1              TH1 = 0xF3;             /*TH1=0xF3: */
 132   1      }
 133          //----------------------------
 134          /*
 135          void help_devreq(unsigned char typ, unsigned char req)
 136          {
 137                  typ >>= 5;
 138          
 139                  if(typ == USB_STANDARD_REQUEST) {
 140                  }
 141                  else {
 142                          if(bEPPflags.bits.verbose)
 143                                  printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[typ],
 144                                          req);
 145                  }
 146          }
 147          */
 148          
 149          //=================================================================
 150          void disconnect_USB(void)
 151          {
 152   1              // Initialize D12 configuration
 153   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 154   1      }
 155          
 156          void connect_USB(void)
 157          {
 158   1              // reset event flags
 159   1      
 160   1              DISABLE;
 161   1              bEPPflags.value = 0;
 162   1              ENABLE;
 163   1      
 164   1              // V2.1 enable normal+sof interrupt
 165   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 166   1      
 167   1              // Initialize D12 configuration
 168   1      
 169   1              //D12_SetMode(D12_NOLAZYCLOCK ,D12_SETTOONE | D12_CLOCK_12M );
 170   1              D12_SetMode(D12_NOLAZYCLOCK | D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_12M );
 171   1      
 172   1      }
 173          
 174          
 175          void reconnect_USB(void)
 176          {
 177   1              unsigned long clk_cnt;
C51 COMPILER V7.06   KMAIN                                                                 11/11/2003 20:11:04 PAGE 17  

 178   1      
 179   1              MCU_LED0 = 0;
 180   1              MCU_LED1 = 0;
 181   1      
 182   1              // Pull-down D12's SUSPEND pin
 183   1              // Disable 74HCT123 pulse generation before disconnect
 184   1              // Release D12's SUSPEND pin after receiving bus reset from host
 185   1              D12SUSPD = 0;
 186   1              disconnect_USB();
 187   1      
 188   1              //printf("Wait for 1 second ...\n");
 189   1      
 190   1              clk_cnt = ClockTicks;
 191   1              while(ClockTicks < clk_cnt + 20)
 192   1                      ;
 193   1      
 194   1              connect_USB();
 195   1      
 196   1              MCU_LED0 = 1;
 197   1              MCU_LED1 = 1;
 198   1      
 199   1      }
 200          //------------------------------
 201          void stall_ep0(void)
 202          {
 203   1              D12_SetEndpointStatus(0, 1);
 204   1              D12_SetEndpointStatus(1, 1);
 205   1      }
 206          
 207          //---------------
 208          void on_exit(void)
 209          {
 210   1       
 211   1      }
 212          //----------------------------------
 213          void check_key_LED(void)
 214          {
 215   1              static unsigned char c, last_key = 0xf;
 216   1      
 217   1              c = MCU_SWM0 & MCU_SWM1;
 218   1              c &= 0x0f;
 219   1              if (c != last_key) {
 220   2                      D12_WriteEndpoint(3, 1, &c);
 221   2              }
 222   1      
 223   1              last_key = c;
 224   1      
 225   1              if(bEPPflags.bits.ep1_rxdone) {
 226   2                      DISABLE;
 227   2                      bEPPflags.bits.ep1_rxdone = 0;
 228   2                      ENABLE;
 229   2                      MCU_LED0 = !(GenEpBuf[3] & 0x1);
 230   2                      MCU_LED1 = !(GenEpBuf[3] & 0x2);
 231   2              }
 232   1      }
 233          //--------------------------
 234          void init_unconfig(void)
 235          {
 236   1              //unsigned char i;
 237   1      
 238   1              D12_SetEndpointEnable(0);       /* Disable all endpoints but EPP0. */
 239   1      }
C51 COMPILER V7.06   KMAIN                                                                 11/11/2003 20:11:04 PAGE 18  

 240          
 241          void init_config(void)
 242          {
 243   1              D12_SetEndpointEnable(1);       /* Enable  generic/iso endpoints. */
 244   1      }
 245          //--------------------------
 246          
 247          void single_transmit(unsigned char * buf, unsigned char len)
 248          {
 249   1              if( len <= EP0_PACKET_SIZE) {
 250   2                      D12_WriteEndpoint(1, len, buf);
 251   2              }
 252   1      }
 253          
 254          void code_transmit(unsigned char code * pRomData, unsigned short len)
 255          {
 256   1              ControlData.wCount = 0;
 257   1              if(ControlData.wLength > len)
 258   1                      ControlData.wLength = len;
 259   1      
 260   1              ControlData.pData = pRomData;
 261   1              if( ControlData.wLength >= EP0_PACKET_SIZE) {   // 如果发送代码大于包长度
 262   2                      D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
 263   2                      ControlData.wCount += EP0_PACKET_SIZE;
 264   2      
 265   2                      DISABLE;
 266   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 267   2                      ENABLE;
 268   2              }
 269   1              else {                                          //发送代码小于包长度
 270   2                      D12_WriteEndpoint(1, ControlData.wLength, pRomData);
 271   2                      ControlData.wCount += ControlData.wLength;
 272   2                      DISABLE;
 273   2                      bEPPflags.bits.control_state = USB_IDLE;
 274   2                      ENABLE;
 275   2              }
 276   1      }
 277          
 278          //---------------------------
 279          void setup_dma()
 280          {
 281   1              ioSize = ioRequest.uSize;
 282   1              ioCount = 0;
 283   1      
 284   1              DISABLE;
 285   1              bEPPflags.bits.dma_state = DMA_RUNNING;
 286   1              ENABLE;
 287   1      
 288   1              single_transmit(0, 0);
 289   1      
 290   1              if(ioRequest.bCommand & 0x1) {
 291   2                      if(ioSize > 64 || ioSize == 0) {
 292   3                              //if(bNoRAM)
 293   3                                      D12_WriteEndpoint(5, 64, EpBuf);
 294   3                              //else
 295   3                              //      D12_WriteEndpoint(5, 64, MainEpBuf);
 296   3                              ioCount += 64;
 297   3                      }
 298   2                      else {
 299   3                              //if(bNoRAM)
 300   3                                      D12_WriteEndpoint(5, ioSize, EpBuf);
 301   3                              //else
C51 COMPILER V7.06   KMAIN                                                                 11/11/2003 20:11:04 PAGE 19  

 302   3                              //      D12_WriteEndpoint(5, ioSize, MainEpBuf);
 303   3                              ioCount += ioSize;
 304   3                      }
 305   2              }
 306   1      }
 307          
 308          //------------------------------
 309          void control_handler()
 310          {
 311   1              unsigned char type, req;
 312   1              
 313   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; //0x60
 314   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;            //0x0F
 315   1      
 316   1              //help_devreq(type, req); // print out device request
 317   1      
 318   1              if (type == USB_STANDARD_REQUEST)
 319   1                      (*StandardDeviceRequest[req])();
 320   1              else if (type == USB_VENDOR_REQUEST)
 321   1                      (*VendorDeviceRequest[req])();
 322   1              else
 323   1                      stall_ep0();
 324   1              
 325   1      }
 326          
 327          

⌨️ 快捷键说明

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