📄 test02.lst
字号:
402 3 if(ep1toggle) USB_CTL2 = 0x98;
403 3 else USB_CTL2 = 0x88;
404 3
405 3 while(!(USB_STA0 & 0x04));
406 3 USB_CTL2 = USB_CTL2 & 0x7F; //clear tx1e
407 3 USB_STA0 = USB_STA0 | 0x04; //txd1f=0
408 3 ep1toggle = ~ep1toggle;
409 3
410 3 kb_idle_cnt = 0;
411 3 key_make = 0;
412 3
413 3 }
414 2
415 2 if(MS_idle_rate & (ms_idle_cnt>(MS_idle_rate << 2))){
416 3 //forced tx one mouse packet
417 3 USB_EPP = 0;
418 3 USB_EP2 = 1; //Report ID = 1
419 3 USB_EP2 = 0;
420 3 USB_EP2 = 0;
421 3 USB_EP2 = 0;
422 3 USB_EP2 = 0;
423 3
424 3 if(ep2toggle) USB_CTL3 = 0x95;
425 3 else USB_CTL3 = 0x85;
426 3
427 3 while(!(USB_STA0 & 0x10));
C51 COMPILER V7.07 TEST02 01/26/2007 14:58:49 PAGE 8
428 3 USB_CTL3 = USB_CTL3 & 0x7F; //clear tx2e
429 3 USB_STA0 = USB_STA0 | 0x10; //txd2f=0
430 3 ep2toggle = ~ep2toggle;
431 3
432 3 ms_idle_cnt=0;
433 3
434 3 }
435 2
436 2 if(configured == 0) goto restart;
437 2 } // while loop
438 1
439 1 }
440
441 void wait100us(void)
442 {
443 1 int iii;
444 1 for(iii=0;iii<1000;iii++);
445 1 }
446
447
448 void xreg_init(void)
449 {
450 1 IEN0 = 0;
451 1 IEN1 = 0;
452 1 //
453 1 USB_CTL0 = 0;
454 1 USB_CTL1 = 0;
455 1 USB_CTL2 = 0;
456 1 USB_CTL3 = 0;
457 1 USB_CTL4 = 0;
458 1 USB_CTL5 = 0; //device address
459 1 USB_STA0 = 0xFF;
460 1 USB_EPP = 0;
461 1 PS2A_CTL = 0xF2; //enable PS2A
462 1 PS2A_STA = 0xFF;
463 1 //
464 1 PS2B_CTL = 0xF2; //enable PS2B
465 1 PS2B_STA = 0xFF;
466 1 }
467
468
469
470 void USB_ISR (void) interrupt 12
471 {
472 1
473 1 if(USB_STA0 & 0x40) { //host reset signalling
474 2 USB_CTL0 = 0x90; //set usben,pullen
475 2 USB_CTL1 = 0x00;
476 2 USB_CTL2 = 0x00;
477 2 USB_CTL3 = 0x00;
478 2 USB_CTL4 = 0x41; //set urstie,rxd0ie
479 2 USB_CTL5 = 0x00;
480 2 USB_EPP = 0x00;
481 2 USB_STA0 = 0xff; //clr all interrupt flags
482 2 configured= 0;
483 2 ep1toggle = 0;
484 2 ep2toggle = 0;
485 2
486 2 return;
487 2 }
488 1
489 1 if(USB_STA0 & 0x80) { //host resume signalling
C51 COMPILER V7.07 TEST02 01/26/2007 14:58:49 PAGE 9
490 2 USB_STA0 = USB_STA0 | 0x80; //clr resumef
491 2 return;
492 2 }
493 1
494 1 if(USB_STA0 & 0x01) { //ep0 rx packet
495 2 if(USB_STA1 & 0x80) { //setup packet
496 3 //disable further interrupt
497 3 USB_CTL4 = USB_CTL4 & 0xFE; //clear rxd0ie=0
498 3 USB_STA0 = USB_STA0 | 0x01; //clear rxd0f
499 3 SETUP_PROC();
500 3 USB_CTL4 = USB_CTL4 | 0x01; //set rxd0ie=1
501 3 return;
502 3 }
503 2 else { // out data packet
504 3 USB_STA0 = USB_STA0 | 0x01; //clear rxd0f
505 3 return;
506 3 }
507 2 }
508 1
509 1 }
510
511
512
513 void SETUP_PROC(void)
514 {
515 1 unsigned char UADDR;
516 1
517 1 if((USB_STA1 & 0x1F) != 0x08) return;
518 1 else {
519 2 USB_EPP = 0;
520 2 SETUPR0 = USB_EP0;
521 2 SETUPR1 = USB_EP0;
522 2 SETUPR2 = USB_EP0;
523 2 SETUPR3 = USB_EP0;
524 2 SETUPR4 = USB_EP0;
525 2 SETUPR5 = USB_EP0;
526 2 SETUPR6 = USB_EP0;
527 2 SETUPR7 = USB_EP0;
528 2
529 2 //b6-b5=(00)=standard, (01)=class
530 2 if((SETUPR0 & 0x60)==0){
531 3
532 3 switch (SETUPR1) {
533 4 case SET_ADDRESS: {
534 5 if((SETUPR0 == 0) & (SETUPR6 == 0) & (SETUPR7 == 0)) {
535 6 UADDR = SETUPR2;
536 6 in_status();
537 6 USB_CTL5 = UADDR;
538 6 }
539 5 else {
540 6 USB_CTL1 = USB_CTL1 | 0x20; //ostall0=1
541 6 USB_CTL2 = USB_CTL2 | 0x40; //istall0=1
542 6 }
543 5 break;
544 5 }
545 4 case GET_DESCRIPTOR:
546 4 switch(SETUPR3){
547 5 case DEVICE_DESC:
548 5 //if((SETUPR7==0) & (SETUPR6 < dev_desc_table[0])) len = SETUPR6;
549 5 //else len = dev_desc_table[0];
550 5 if((SETUPR7==0) & (SETUPR6 < 0x12)) len = SETUPR6;
551 5 else len = 0x12;
C51 COMPILER V7.07 TEST02 01/26/2007 14:58:49 PAGE 10
552 5 toggle = 1;
553 5 j=0;
554 5 USB_CTL1 = USB_CTL1 | 0x40; //enable rxd0e
555 5 while(len){
556 6 if(len > 0x08) len1 = 0x08;
557 6 else len1 = len;
558 6 USB_EPP = 0;
559 6 for(i=0;i<len1;i++,j++) USB_EP0 = dev_desc_table[j];
560 6
561 6 if(len1 >= 0x08) {
562 7 if(toggle) USB_CTL1 = 0xd8;
563 7 else USB_CTL1 = 0xc8;
564 7 }
565 6 else {
566 7 USB_CTL1 = 0x40;
567 7 USB_CTL1 = USB_CTL1 | len1;
568 7 if(toggle) USB_CTL1 = USB_CTL1 | 0xd0;
569 7 else USB_CTL1 = USB_CTL1 | 0xc0;
570 7 }
571 6
572 6 len -= len1;
573 6
574 6 while(!(USB_STA0 & 0x02)) if(USB_STA0 & 0x01) {out_status(); return;}
575 6 USB_CTL1 = USB_CTL1 & 0x7F; //clear tx0e
576 6 USB_STA0 = USB_STA0 | 0x02; //txd0f=0
577 6 toggle = ~toggle;
578 6
579 6 if((len1==8) & (len==0)) {
580 7 if(toggle) USB_CTL1 = USB_CTL1 | 0xd0;
581 7 else USB_CTL1 = USB_CTL1 | 0xc0;
582 7 while(!(USB_STA0 & 0x02)) if(USB_STA0 & 0x01) {out_status(); return;}
583 7 USB_CTL1 = USB_CTL1 & 0x7F; //clear tx0e
584 7 USB_STA0 = USB_STA0 | 0x02; //txd0f=0
585 7 }
586 6 }
587 5 out_status();
588 5 break;
589 5
590 5 case CONFIGURATION_DESC:
591 5
592 5 if((SETUPR7==0) & (SETUPR6 < conf_desc_table[2])) len = SETUPR6;
593 5 else len = conf_desc_table[2];
594 5
595 5 toggle = 1;
596 5 j=0;
597 5 USB_CTL1 = USB_CTL1 | 0x40; //enable rxd0e
598 5 while(len){
599 6 if(len > 0x08) len1 = 0x08;
600 6 else len1 = len;
601 6 USB_EPP = 0;
602 6 for(i=0;i<len1;i++,j++) USB_EP0 = conf_desc_table[j];
603 6 if(len >= 0x08) {
604 7 USB_CTL1 = 0x40;
605 7 if(toggle) USB_CTL1 = USB_CTL1 | 0x98;
606 7 else USB_CTL1 = USB_CTL1 | 0x88;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -