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

📄 chap_9.lst

📁 嵌入式系统中一些外围设备驱动示例程序集
💻 LST
📖 第 1 页 / 共 5 页
字号:
 796   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
 797   3                              break;
 798   3                      case  0x0100   :
 799   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
C51 COMPILER V7.06   CHAP_9                                                                07/02/2003 10:27:50 PAGE 14  

 800   3                              break;
 801   3                      case  0x8200   :
 802   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
 803   3                              break;
 804   3                      case  0x0200   :
 805   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
 806   3                              break;
 807   3                      case  0x8300   :
 808   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
 809   3                              break;
 810   3                      case  0x0300   :
 811   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
 812   3                              break;
 813   3                      case  0x8400   :
 814   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
 815   3                              break;
 816   3                      case  0x0400   :
 817   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
 818   3                              break;
 819   3                      case  0x8500   :
 820   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
 821   3                              break;
 822   3                      case  0x0500   :
 823   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
 824   3                              break;
 825   3                      case  0x8600   :
 826   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
 827   3                              break;
 828   3                      case  0x0600   :
 829   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
 830   3                              break;
 831   3                      case  0x8700   :
 832   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
 833   3                              break;
 834   3                      case  0x0700   :
 835   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
 836   3                              break;
 837   3                      default        :  
 838   3                              break;
 839   3                      }                                                                                                      
 840   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
 841   2                      Kernel_Flag.BITS.Endpt_Stall = 0;
 842   2                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF;                 //disable FIFO
 843   2                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON;                  //disable FIFO
 844   2                      ep0in_ack();
 845   2                      USB_Device.BITS.Halt = 0;
 846   2              }                                                                                       
 847   1              else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
 848   1              {       //远程唤醒
 849   2                      USB_Device.BITS.Remote_Wakeup = 0;
 850   2                      ep0in_ack();
 851   2              }
 852   1              else
 853   1              {
 854   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 855   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
 856   2                      while(!USB_Int_Flag.BITS.EP0SETUP)
 857   2                      {
 858   3                              //读取ISP1581中断寄存器
 859   3                              USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
 860   3                              //回写ISP1581中断寄存器
 861   3                              D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
C51 COMPILER V7.06   CHAP_9                                                                07/02/2003 10:27:50 PAGE 15  

 862   3                              if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
 863   3                                      return;
 864   3                      }
 865   2                      USB_Int_Flag.BITS.EP0TX = 0;
 866   2              }
 867   1      }       
 868          
 869          //Get_Status获取设备状态
 870          void get_status(void)
 871          {
 872   1              if(USB_Device_Request.bmRequestType == 0x80)
 873   1              {
 874   2                      //端点0IN返回0x01,0x00两字节
 875   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 876   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 877   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 878   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = 1;
 879   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
 880   2                      //等待发送完毕
 881   2                      wait_ep0tx();
 882   2                      ep0out_ack();
 883   2              }
 884   1      
 885   1              if(USB_Device_Request.bmRequestType == 0x81)
 886   1              {
 887   2                      //端点0IN返回0x00,0x00两字节
 888   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 889   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 890   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 891   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0;
 892   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
 893   2                      wait_ep0tx();
 894   2                      ep0out_ack();
 895   2              }
 896   1      
 897   1              if(USB_Device_Request.bmRequestType == 0x82)
 898   1              {
 899   2                      Temp = 0;
 900   2                      Temp = USB_Device.BITS.Halt;
 901   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 902   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 903   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 904   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = (UC) Temp;
 905   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = (UC) (Temp >> 8);
 906   2                      wait_ep0tx();
 907   2                      ep0out_ack();
 908   2              }
 909   1      }       
 910          
 911          
 912          
 913          //Set_Feature特性设置
 914          //不支持测试模式
 915          void set_feature(void)
 916          {
 917   1              unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
 918   1              //端点
 919   1              if(bRecipient == 0x02 && USB_Device_Request.wValue == 0x0000)
 920   1              {
 921   2                      switch(USB_Device_Request.wIndex)
 922   2                      {
 923   3                      case  0x8000   :
C51 COMPILER V7.06   CHAP_9                                                                07/02/2003 10:27:50 PAGE 16  

 924   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 925   3                              break;
 926   3                      case  0x0000   :
 927   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
 928   3                              break;
 929   3                      case  0x8100   :
 930   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
 931   3                              break;
 932   3                      case  0x0100   :
 933   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
 934   3                              break;
 935   3                      case  0x8200   :
 936   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
 937   3                              break;
 938   3                      case  0x0200   :
 939   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
 940   3                              break;
 941   3                      case  0x8300   :
 942   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
 943   3                              break;
 944   3                      case  0x0300   :
 945   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
 946   3                              break;
 947   3                      case  0x8400   :
 948   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
 949   3                              break;
 950   3                      case  0x0400   :
 951   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
 952   3                              break;
 953   3                      case  0x8500   :
 954   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
 955   3                              break;
 956   3                      case  0x0500   :
 957   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
 958   3                              break;
 959   3                      case  0x8600   :
 960   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
 961   3                              break;
 962   3                      case  0x0600   :
 963   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
 964   3                              break;
 965   3                      case  0x8700   :
 966   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
 967   3                              break;
 968   3                      case  0x0700   :
 969   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
 970   3                              break;
 971   3                      default        :  
 972   3                              break;
 973   3                      }                                                                                                      
 974   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
 975   2                      Kernel_Flag.BITS.Endpt_Stall = 1;
 976   2                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF;                 //disable FIFO
 977   2                      //D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON;                        //disable FIFO
 978   2                      ep0in_ack();
 979   2                      USB_Device.BITS.Halt = 0;
 980   2              }                                                                                       
 981   1              else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
 982   1              {       //远程唤醒
 983   2                      USB_Device.BITS.Remote_Wakeup = 1;
 984   2                      ep0in_ack();
 985   2              }
C51 COMPILER V7.06   CHAP_9                                                                07/02/2003 10:27:50 PAGE 17  

 986   1              else
 987   1              {
 988   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 989   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
 990   2                      while(!U

⌨️ 快捷键说明

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