📄 sl811s.lst
字号:
582 1 SL811Write(EP0AControl,DATA1_IN); // armed to transmit to host, DATA1
583 1 else
584 1 SL811Write(EP0AControl,DATA0_IN); // armed to transmit to host, DATA0
585 1
586 1 }
587
588 //*****************************************************************************************
589 // EP0's SETUP/OUT Token Arming (using Set A)
590 //*****************************************************************************************
591 void EP0A_OUT_Arm(BYTE len)
592 {
593 1 SL811Write(EP0AAddress,EP0A_Slave_Buf); // ep0 address buffer start adress
594 1 SL811Write(EP0AXferLen,len); // max length of transfer allowed
595 1 SL811Write(EP0AControl,DATA0_OUT); // armed to receive from host
596 1 }
597
598 //*****************************************************************************************
599 // SL811S variables initialization
600 //*****************************************************************************************
601 void sl811s_init(void)
602 {
603 1 int i;
604 1
605 1 //----------------------------
606 1 // Application-Specific
607 1 //----------------------------
608 1 OUTB |= ACTIVE_LED; // Clear Active LED
609 1 OUTC |= PORTX_LED; // turn off all LEDs
610 1
611 1 flags = 0; // clear flag
612 1 sof_cnt = 0; // sof counter equal zero
613 1 ep1_toggle = 0; // ep1 toggle state
C51 COMPILER V7.09 SL811S 10/04/2004 17:01:23 PAGE 11
614 1 Audio_Keys = 0; // clear Audio Control Keys
615 1 Prev_Audio_Keys = 0;
616 1 Internet_Keys = 0; // clear Internet Control Keys
617 1 Prev_Internet_Keys = 0;
618 1
619 1 //----------------------------
620 1 // SL811S-Specific
621 1 //----------------------------
622 1 BUS_POWERED = 1; // define as a bus powered device
623 1 Slave_USBaddr = 0; // set to default USB address zero
624 1 Slave_ConfigVal = 0; // default device config value
625 1 Slave_Protocol = 0; // HID class default boot protocol
626 1 Slave_IdleRate = 0; // HID class default idle rate
627 1 Slave_RemoteWU = 0; // device remote wakeup support
628 1 Slave_inEPstall = 0; // EP0 ~ EP7's IN
629 1 Slave_outEPstall = 0; // EP0 ~ EP7's OUT
630 1 for(i=0;i<MAXIFCNUM;i++) // reset alternate setting
631 1 Slave_IfcAlt[i] = 0;
632 1 for(i=0;i<EP0_LEN;i++) // clear EP0 Buffer
633 1 SL811Write(EP0A_Slave_Buf+i,0);
634 1 for(i=0;i<EP1_LEN;i++) // clear EP1 Buffer
635 1 SL811Write(EP1A_Slave_Buf+i,0);
636 1
637 1 SL811Write(USBAddress,0x00); // usb address
638 1 SL811Write(IntEna,0x63); // enable SOF, EP0, EP1, USB Reset interrupts
639 1 SL811Write(IntStatus,0xFF); // clear all interrupts
640 1 EP0A_OUT_Arm(EP0_LEN); // ready to receive from host
641 1 }
642
643 //*****************************************************************************************
644 // 8051 variables initialization
645 //*****************************************************************************************
646 void uC8051_init(void)
647 {
648 1 ISOCTL |= 0x01; // free up iso endpoints for external data space (1024)
649 1
650 1 //----------------------------
651 1 // Variable initialization
652 1 //----------------------------
653 1 SL811H_DATA = 0x00;
654 1 SL811H_ADDR = 0x00;
655 1
656 1 //----------------------------
657 1 // 8051's I/Os Setup
658 1 //----------------------------
659 1 PORTACFG = 0x00; // Set to output
660 1 OEA = 0xFF; // Set PA7~PA0(Output)
661 1 OUTA = 0xFF; // Default output high
662 1
663 1 PORTBCFG = 0x20; // Select i/o function for PB7~PB0, except PB5-INT#5
664 1 OEB = 0xDF; // Set PB6(O),PB4(I),PB1(O),PB0(O) - PB2(0),PB3(O),PB5(I),PB7(O)
665 1 OUTB = 0xDF; // Default output high
666 1
667 1 PORTCCFG = 0xC0; // Select alternate function nWR(PC6) & nRD(PC7),
668 1 // OEC = 0x3F; // Set PC5~PC0 (Output) For LEDs only
669 1 // OUTC = 0x3F; // Default output high
670 1 OEC = 0x38; // Set PC5~PC3(Output) For LEDs, PC2~PC0 (Input) For Audio Buttons
671 1 OUTC = 0x38; // Default output high
672 1
673 1 EA = 1; // enable 8051 interrupt
674 1 EIEX5 = 1; // enable INT#5 for toggle switch
675 1 EXIF &= 0x7F; // clear INT#5 flag
C51 COMPILER V7.09 SL811S 10/04/2004 17:01:23 PAGE 12
676 1
677 1
678 1 //----------------------------
679 1 // SL811ST hardware reset
680 1 //----------------------------
681 1 OUTB &= ~nRESET; // reset SL811HST
682 1 EZUSB_Delay(5); // for 5ms
683 1 OUTB |= nRESET; // clear reset
684 1
685 1 // OUTB &= ~nHOST_SLAVE_MODE; // set to Host mode
686 1 OUTB |= nHOST_SLAVE_MODE; // set to Slave mode
687 1
688 1 SL811Write(IntEna,0x40); // enable USB Reset interrupt
689 1 SL811Write(CtrlReg,0x01); // enable USB, FullSpeed
690 1 SL811Write(IntStatus,0xFF); // clear all interrupts
691 1 }
692
693 //*****************************************************************************************
694 // Main loop start here
695 //*****************************************************************************************
696 void main(void)
697 {
698 1 BYTE int_status;
699 1
700 1 uC8051_init(); // initialized 8051 uC
701 1
702 1 while(TRUE) // Main Loop
703 1 {
704 2 //--------------------------------------------
705 2 // USB-Specific Tasks
706 2 //--------------------------------------------
707 2 int_status = SL811Read(IntStatus);
708 2 if(int_status & USB_RESET_DONE) // wait for USB Reset interrupt
709 2 sl811s_init();
710 2 else if(int_status & EP0_DONE) // wait for EP0 interrupt
711 2 ep0_isr();
712 2 else if(int_status & EP1_DONE) // wait for EP1 interrupt
713 2 ep1_isr();
714 2 else if(int_status & SOF_DONE) // wait for SOF interrupt
715 2 sof_isr();
716 2
717 2 //--------------------------------------------
718 2 // Application-Specific Tasks (every 5msec)
719 2 //--------------------------------------------
720 2 if(timeout && enum_done) // do some task now
721 2 {
722 3 audio_key_scan(); // Audio Keys Scan
723 3 internet_key_scan(); // Internet Keys Scan
724 3 timeout = 0;
725 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -