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

📄 chap_9.lst

📁 PDIUSBD12 firmware USB communication C51 real timer and UART
💻 LST
📖 第 1 页 / 共 2 页
字号:
 234   1              else if(ctrl_buf.dev_req.value==1)
 235   1              {
 236   2                      single_transmit(0,0);
 237   2                      init_unconfig();
 238   2                      init_config();
 239   2                      DISABLE_ALL_INTERRUPT;
 240   2                      flag.bits.config=1;
 241   2                      ENABLE_ALL_INTERRUPT;
C51 COMPILER V7.07   CHAP_9                                                                06/04/2004 18:36:43 PAGE 5   

 242   2              }
 243   1              else
 244   1                      stall_ep0();
 245   1      }
 246          /**************************************
 247          
 248          **************************************/
 249          void get_interface()
 250          {
 251   1              
 252   1              unsigned char txdat=0;
 253   1              //printf("get interface \n");
 254   1              single_transmit(&txdat,1);
 255   1      }
 256          /**************************************
 257          
 258          **************************************/
 259          void set_interface()
 260          {
 261   1              if((ctrl_buf.dev_req.value==0)&&(ctrl_buf.dev_req.index==0))
 262   1                      single_transmit(0,0);
 263   1              else
 264   1                      stall_ep0();
 265   1      }
 266          /**************************************
 267          
 268          **************************************/
 269          void set_feature()
 270          {
 271   1              unsigned char endp;
 272   1              unsigned char bRecipient=ctrl_buf.dev_req.req_type & USB_RECIPIENT;
 273   1              if(bRecipient==USB_RECIPIENT_DEVICE && ctrl_buf.dev_req.value == USB_FEATURE_REMOTE_WAKEUP )
 274   1              {
 275   2                      DISABLE_ALL_INTERRUPT;
 276   2                      flag.bits.remote_wakup=1;
 277   2                      ENABLE_ALL_INTERRUPT;
 278   2                      single_transmit(0,0);
 279   2              }
 280   1              else if(bRecipient==USB_RECIPIENT_ENDPOINT && ctrl_buf.dev_req.value == USB_FEATURE_ENDPOINT_STALL)
 281   1              {
 282   2                      endp=(unsigned char)(ctrl_buf.dev_req.index & 0x0F);
 283   2                      if(ctrl_buf.dev_req.index & (unsigned char)USB_ENDPOINT_DIRECTION_MASK )
 284   2                              d12_set_endpoint_status(endp*2+1,1);
 285   2                      else
 286   2                              d12_set_endpoint_status(endp*2,1);
 287   2                      single_transmit(0,0);
 288   2              }
 289   1              else
 290   1                      stall_ep0();
 291   1      }
 292          /**************************************
 293          
 294          **************************************/
 295          void clear_feature()
 296          {
 297   1              unsigned char endp;
 298   1              unsigned char bRecipient=ctrl_buf.dev_req.req_type & USB_RECIPIENT;
 299   1              if(bRecipient==USB_RECIPIENT_DEVICE && ctrl_buf.dev_req.value == USB_FEATURE_REMOTE_WAKEUP )
 300   1              {
 301   2                      DISABLE_ALL_INTERRUPT;
 302   2                      flag.bits.remote_wakup=0;
 303   2                      ENABLE_ALL_INTERRUPT;
C51 COMPILER V7.07   CHAP_9                                                                06/04/2004 18:36:43 PAGE 6   

 304   2                      single_transmit(0,0);
 305   2              }
 306   1              else if(bRecipient==USB_RECIPIENT_ENDPOINT && ctrl_buf.dev_req.value == USB_FEATURE_ENDPOINT_STALL)
 307   1              {
 308   2                      endp=(unsigned char)(ctrl_buf.dev_req.index & 0x0F);
 309   2                      if(ctrl_buf.dev_req.index & (unsigned char)USB_ENDPOINT_DIRECTION_MASK )
 310   2                              d12_set_endpoint_status(endp*2+1,0);
 311   2                      else
 312   2                              d12_set_endpoint_status(endp*2,0);
 313   2                      single_transmit(0,0);
 314   2              }
 315   1              else
 316   1                      stall_ep0();            
 317   1      }
 318          /**************************************
 319          
 320          /**************************************/
 321          //标准请求中用到的例程
 322          /**************************************/
 323          
 324          
 325          /**************************************
 326          
 327          **************************************/
 328          void stall_ep0()
 329          {
 330   1              d12_set_endpoint_status(0,0);
 331   1      }
 332          /**************************************
 333          
 334          **************************************/
 335          void reserved()
 336          {
 337   1              stall_ep0();
 338   1      }
 339          /**************************************
 340          
 341          **************************************/
 342          void init_unconfig()
 343          {
 344   1              d12_set_endpoint_enable(0);
 345   1      }
 346          /**************************************
 347          
 348          **************************************/
 349          void init_config()
 350          {
 351   1              d12_set_endpoint_enable(1);
 352   1      }
 353          
 354          
 355          /**************************************
 356          
 357          **************************************/
 358          void single_transmit(unsigned char *buf,unsigned char len)
 359          {
 360   1              if(len<=EP0_PACKET_SIZE)
 361   1              {
 362   2                      d12_write_endpoint(1,buf,len);
 363   2              }
 364   1      }
 365          /**************************************
C51 COMPILER V7.07   CHAP_9                                                                06/04/2004 18:36:43 PAGE 7   

 366          
 367          **************************************/
 368          void code_transmit(unsigned char code *pRomData,unsigned short len)
 369          {
 370   1              ctrl_buf.count=0;
 371   1              if(ctrl_buf.len>len)
 372   1                      ctrl_buf.len=len;
 373   1              ctrl_buf.buf=pRomData;
 374   1              if(ctrl_buf.len>EP0_PACKET_SIZE)
 375   1              {
 376   2                      d12_write_endpoint(1,ctrl_buf.buf,EP0_PACKET_SIZE);
 377   2                      ctrl_buf.count+=EP0_PACKET_SIZE;
 378   2                      DISABLE_ALL_INTERRUPT;
 379   2                      flag.bits.ctrl_state=USB_TRANSMIT;
 380   2                      ENABLE_ALL_INTERRUPT;
 381   2              }
 382   1              else
 383   1              {
 384   2                      d12_write_endpoint(1,pRomData,ctrl_buf.len);
 385   2                      ctrl_buf.count+=ctrl_buf.len;
 386   2                      DISABLE_ALL_INTERRUPT;
 387   2                      flag.bits.ctrl_state=USB_IDLE;
 388   2                      ENABLE_ALL_INTERRUPT;
 389   2              }
 390   1      }
 391          
 392          
 393          
 394          
 395          
 396          
 397          
 398          
 399          
 400          
 401          
 402          
 403          
 404          
 405          
 406          
 407          
 408          
 409          
 410          
 411          
 412          
 413          
 414          
 415          
 416          
 417          
 418          
 419          
 420          
 421          
 422          
 423          
 424          
 425          
 426          
 427          
C51 COMPILER V7.07   CHAP_9                                                                06/04/2004 18:36:43 PAGE 8   

 428          
 429          
 430          
 431          
 432          
 433          
 434          
 435          
 436          
 437          
 438          
 439          
 440          
 441          
 442          
 443          
 444          
 445          
 446          
 447          
 448          
 449          
 450          
 451          
 452          
 453          
 454          
 455          
 456          
 457          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    613    ----
   CONSTANT SIZE    =     64    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      14
   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 + -