📄 subp.lst
字号:
600 3 }
601 2 }
602 1 //----------------------------------------------------------------------------------------
603 1 // End of ACK received
604 1 //----------------------------------------------------------------------------------------
605 1
606 1 //----------------------------------------------------------------------------------------
607 1 // If a STALL was sent out by device, it will still interrupt, but
608 1 // STALL bit in status register does not reflect this when in slave mode.
609 1 //----------------------------------------------------------------------------------------
610 1 else if( SL811Read(EP0AControl)&0x20 ) // check for previous stall sent
611 1 EP0A_OUT_Arm(EP0_LEN); // get ready for next SETUP token
C51 COMPILER V7.20 SUBP 05/16/2004 23:08:35 PAGE 11
612 1
613 1
614 1 // return;
615 1 }
616
617 //*****************************************************************************************
618 // EP0's IN Token Arming (using Set A)
619 //*****************************************************************************************
620 void EP0A_IN_Arm( unsigned char buf_adr, unsigned char len, unsigned char seq)
621 {
622 1 SL811Write(EP0AAddress,buf_adr); // ep0 address buffer start adress
623 1 SL811Write(EP0AXferLen,len); // max length of transfer allowed
624 1
625 1 if(seq)
626 1 { SL811Write(EP0AControl,DATA1_IN); // armed to transmit to host, DATA1
627 2 P35_LED=0; }
628 1
629 1 else
630 1 { SL811Write(EP0AControl,DATA0_IN); // armed to transmit to host, DATA0
631 2 }
632 1 }
633
634 //*****************************************************************************************
635 // EP0's SETUP/OUT Token Arming (using Set A)
636 //*****************************************************************************************
637 void EP0A_OUT_Arm( unsigned char len)
638 {
639 1 //SL811Write(cDATASet,0);
640 1 SL811Write(EP0AAddress,EP0A_Slave_Buf); // ep0 address buffer start adress after 64 unsigned char
641 1 SL811Write(EP0AXferLen,len); // max length of transfer allowed
642 1 SL811Write(EP0AControl,DATA0_OUT); // armed to receive from host 03
643 1 }
644
645 //*****************************************************************************************
646 // SL811S variables initialization
647 //*****************************************************************************************
648 void sl811s_init(void)
649 {
650 1 int i;
651 1
652 1 //----------------------------
653 1 // Application-Specific
654 1 //----------------------------
655 1 P1 |=AUDIO_KEYS ; // Clear Active LED
656 1 // P3 |= ACTIVE_LED; //PORTX_LED; // turn off all LEDs
657 1 P35_LED=1;
658 1 flags = 0; // clear flag
659 1 sof_cnt = 0; // sof counter equal zero
660 1 ep1_toggle = 0; // ep1 toggle state
661 1 // Audio_Keys = 0; // clear Audio Control Keys
662 1 // Prev_Audio_Keys = 0;
663 1 // Internet_Keys = 0; // clear Internet Control Keys
664 1 // Prev_Internet_Keys = 0;
665 1
666 1 //----------------------------
667 1 // SL811S-Specific
668 1 //----------------------------
669 1 BUS_POWERED = 1; // define as a bus powered device
670 1 Slave_USBaddr = 0; // set to default USB address zero
671 1 Slave_ConfigVal = 0; // default device config value
672 1 Slave_Protocol = 0; // HID class default boot protocol
673 1 Slave_IdleRate = 0; // HID class default idle rate
C51 COMPILER V7.20 SUBP 05/16/2004 23:08:35 PAGE 12
674 1 Slave_RemoteWU = 0; // device remote wakeup support
675 1 Slave_inEPstall = 0; // EP0 ~ EP7's IN
676 1 Slave_outEPstall = 0; // EP0 ~ EP7's OUT
677 1 // SL811Write(cSOFcnt,0x00);
678 1
679 1 for(i=0;i<MAXIFCNUM;i++)//8 // reset alternate setting
680 1 Slave_IfcAlt[i] = 0;
681 1 for(i=0;i<EP0_LEN;i++) // clear EP0 Buffer
682 1 SL811Write(EP0A_Slave_Buf+i,0);
683 1 for(i=0;i<EP1_LEN;i++) // clear EP1 Buffer
684 1 SL811Write(EP1A_Slave_Buf+i,0);
685 1
686 1 SL811Write(USBAddress,0x00); //07h on power on and reset usb address set to 00
687 1 SL811Write(IntEna,0x63); //06h enable SOF, EP0, EP1, USB Reset interrupts
688 1 SL811Write(IntStatus,0xff); //0dh clear all interrupts
689 1 SL811Write(CtrlReg,0x21);
690 1 EP0A_OUT_Arm(EP0_LEN); // ready to receive from host 64=ep0_len
691 1 }
692
693 //*****************************************************************************************
694 // 8051 variables initialization
695 //*****************************************************************************************
696 void C51_init(void)
697 {
698 1
699 1 SL811H_DATA = 0x00; //FF00
700 1 SL811H_ADDR = 0x00; //FE00
701 1
702 1 P0=0xFF; // Default output high
703 1
704 1 P1=0xFF; // Default output high
705 1 P2=0xff;
706 1 P3=0xff; // Default output high
707 1 // TMOD=0x01;
708 1 // TL0=0xd0;
709 1 // TH0=0x07;
710 1 // ET0=1;
711 1 // TR0=1;
712 1 // EA = 1; // enable 8051 interrupt
713 1
714 1 //----------------------------
715 1 // SL811ST hardware reset
716 1 //----------------------------
717 1 // P3 &= ~nRESET; // reset SL811HST
718 1 P34_RES=0;
719 1 Delay(); // for 5ms
720 1 P34_RES=1;
721 1 // P3 |= nRESET; // clear reset
722 1
723 1 // OUTB &= ~nHOST_SLAVE_MODE; // set to Host mode
724 1 // P3 |= nHOST_SLAVE_MODE; // set to Slave mode
725 1 // P33_SLA=1;
726 1 SL811Write(cSOFcnt,0x40); //LowSpeed(0x40),FullSpeed(0x00)
727 1 SL811Write(IntEna,0x40); // enable USB Reset interrupt
728 1 SL811Write(CtrlReg,0x21); // enable USB, FullSpeed(01);LowSpeed(21h)
729 1 SL811Write(IntStatus,0xFF); // clear all interrupts
730 1 //EP0A_OUT_Arm(EP0_LEN);
731 1 }
732
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.20 SUBP 05/16/2004 23:08:35 PAGE 13
CODE SIZE = 1841 ----
CONSTANT SIZE = 255 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 41 13
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -