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

📄 upsd3400_usb_app.lst

📁 uPSD34xx Disk driver
💻 LST
📖 第 1 页 / 共 4 页
字号:
 912   5                break;
 913   5               }
 914   4      
 915   4              case OP_MODE_SELECT10:
 916   4               {
 917   5                OnModeSelect10();
 918   5                break;
 919   5               }
 920   4      
 921   4      
 922   4              case OP_MODE_SENSE6:
 923   4               {
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 16  

 924   5                OnModeSense6();
 925   5                break;
 926   5               }
 927   4      
 928   4              case OP_MODE_SELECT6:
 929   4               {
 930   5                OnModeSelect6();
 931   5                break;
 932   5               }
 933   4      
 934   4      
 935   4              case OP_READ_CAPACITY:
 936   4               {
 937   5                DoReadCapacity();
 938   5                break;
 939   5               }
 940   4      
 941   4              case OP_READ_FORMAT_CAPACITIES:
 942   4               {
 943   5                DoReadFormatCapacity();
 944   5                break;
 945   5               }
 946   4      
 947   4      
 948   4              case OP_MEDIA_REMOVEAL:
 949   4               {
 950   5                gbCSWStatus = FAIL;
 951   5                ReturnCSW();                       // return status
 952   5                break;
 953   5               }
 954   4      
 955   4              case OP_VERIFY:
 956   4               {
 957   5                gbCSWStatus = FAIL;              //implement your own checking mechanism
 958   5                ReturnCSW();                       // return status
 959   5                break;
 960   5               }
 961   4      
 962   4              default:
 963   4               {
 964   5                gbCSWStatus = FAIL;
 965   5                STALL_EP1();                       // unknown command
 966   5                gbBulkPipeStage = BS_CSW_PHASE;
 967   5                break;
 968   5               }
 969   4             }
 970   3           }
 971   2          else
 972   2           {
 973   3            ReturnCSW();                           // no command, return status
 974   3           }
 975   2      
 976   2         }
 977   1        else
 978   1         {
 979   2          gbCSWStatus = FAIL;
 980   2          STALL_EP1();                             // unknown command block type, STALL
 981   2          gbBulkPipeStage = BS_CBW_PHASE;
 982   2         }
 983   1       }
 984          
 985          unsigned char USB_ISR_Counter;               // incremented every USB INT event
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 17  

 986          
 987          void UsbIsr(void) interrupt USB_VECTOR using 2
 988          /******************************************************************************
 989           Function   : void UsbIsr()
 990           Parameters : none
 991           Description: USB interrupt service routine.
 992           Note:        Do not modify this routine !!!
 993           ******************************************************************************/
 994           {
 995   1        UCTL |= VISIBLE;                           // enable USB FIFO mapping in XDATA
 996   1      
 997   1        if (RSTF)
 998   1         {
 999   2          OnUsbReset();                            // USB Reset int
1000   2      
1001   2          UIE1  |= UMSC_MASK_IN_ENDPOINT;          //Enable EP0 IN INT
1002   2          UIE2  |= UMSC_MASK_OUT_ENDPOINT;         //Enable EP0 OUT INT
1003   2      
1004   2          USEL   = OUTDIR | UMSC_OUT_ENDPOINT;     //Select EP OUT
1005   2          UCON   = ENABLE_FIFO | EPFIFO_BSY;
1006   2      
1007   2          USEL   = INDIR | UMSC_IN_ENDPOINT;       //Select EP IN
1008   2          UCON   = ENABLE_FIFO;
1009   2      
1010   2          UIF1 = 0;
1011   2          UIF2 = 0;
1012   2          UIF3 = 0;
1013   2          UIF0 = 0;
1014   2          RSTF = 0;
1015   2          SUSPNDF = 0;
1016   2      
1017   2          if (UCON & TOGGLE)                       //only silicon revision #0
1018   2           {
1019   3            USIZE = 0;                            //send an empty packet to reach DATA=0
1020   3           }
1021   2      
1022   2          USTA = 0;                                //silicon revision #0
1023   2          UADDR = 0;                         //Reset device address, silicon revision #0
1024   2      
1025   2          gbBulkPipeStage = BS_CBW_PHASE;
1026   2      
1027   2         }
1028   1      
1029   1      /* IN packets servicing, invoked when TuPSD+ sent an ACKed packet to a host */
1030   1        if (INF)
1031   1         {
1032   2          if (UIF1 & IN0F)                         // EP0 IN
1033   2           {
1034   3            UIF1 &= ~IN0F;
1035   3            TransmitEP0();
1036   3            if (usbState == US_ADDRESSED)     // DEVICE ADDRESS change after SET_ADDRESS
1037   3             {
1038   4              UADDR    = setupPacket.wValue.lo;    //device address
1039   4              usbState = US_DEFAULT;
1040   4             }
1041   3           }
1042   2          if (UIF1 & UMSC_MASK_IN_ENDPOINT)        // EP IN
1043   2           {
1044   3            switch (gbBulkPipeStage)
1045   3             {
1046   4              case BS_DATA_PHASE:
1047   4               {
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 18  

1048   5                UIF1 &= ~UMSC_MASK_IN_ENDPOINT;
1049   5                ReadBufferFromFlash();
1050   5                break;
1051   5               }
1052   4              case BS_CBW_PHASE:
1053   4               {
1054   5                                                   //UIF1 &= ~UMSC_MASK_IN_ENDPOINT;
1055   5                break;
1056   5               }
1057   4              case BS_CSW_PHASE:                   // DATA phase finished, preparing CSW
1058   4               {
1059   5                UIF1 &= ~UMSC_MASK_IN_ENDPOINT;
1060   5                ReturnCSW();
1061   5                break;
1062   5               }
1063   4              case BS_CSW_DONE_PHASE:              //CSW sent, IN FIFO became empty
1064   4               {
1065   5                UIF1 &= ~UMSC_MASK_IN_ENDPOINT;
1066   5                gbBulkPipeStage = BS_CBW_PHASE;    //CBW
1067   5                break;
1068   5               }
1069   4             }
1070   3           }
1071   2      /*
1072   2          if (UIF1 & IN2F)                         //EP2 IN
1073   2          {
1074   2          UIF1 &= ~IN2F;                         // User code area
1075   2          }
1076   2      
1077   2          if (UIF1 & IN3F)                         //EP3 IN
1078   2          {
1079   2          UIF1 &= ~IN3F;                         // User code area
1080   2          }
1081   2      
1082   2          if (UIF1 & IN4F)                         //EP4 IN
1083   2          {
1084   2          UIF1 &= ~IN4F;                         // User code area
1085   2          }
1086   2          */
1087   2         }
1088   1      
1089   1      /* OUT packets servicing,invoked when TuPSD+ receives an OUT packet from a host*/
1090   1        if (OUTF)
1091   1         {
1092   2          if (UIF2 & OUT0F)                        // EP0 OUT
1093   2           {
1094   3            UIF2 &= ~OUT0F;
1095   3            if (USTA & SETUP)
1096   3             {
1097   4              ReadSetupPacket();
1098   4              OnSetupPacket();
1099   4              if (usbState == US_CONFIGURED)
1100   4               {
1101   5                USEL  = INDIR | UMSC_IN_ENDPOINT;  //Select EP IN
1102   5                if (UCON & TOGGLE)                 //only silicon revision #0
1103   5                 {
1104   6                  USIZE = 0;                      //send an empty packet to reach DATA=0
1105   6                 }
1106   5      //    UCON &= ~TOGGLE;                       //clear toggle
1107   5                USEL  = OUTDIR | UMSC_OUT_ENDPOINT;//Select EP OUT
1108   5      //    UCON &= ~TOGGLE;                       //clear toggle
1109   5               }
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 19  

1110   4             }
1111   3            else
1112   3             {
1113   4             }
1114   3            gbBulkPipeStage = BS_CBW_PHASE;
1115   3           }
1116   2      
1117   2      /*
1118   2          if (UIF2 & OUT1F)                        // EP1 OUT
1119   2          {
1120   2          UIF2 &= ~OUT1F;                        // User code area
1121   2          }
1122   2      
1123   2          if (UIF2 & OUT2F)                        // EP2 OUT
1124   2          {
1125   2          UIF2 &= ~OUT2F;                        // User code area
1126   2          }
1127   2          */
1128   2      
1129   2          if (UIF2 & UMSC_MASK_OUT_ENDPOINT)       // EP3 OUT
1130   2           {
1131   3            switch (gbBulkPipeStage)
1132   3             {
1133   4              case BS_CBW_PHASE:                   // Command received
1134   4               {
1135   5                UIF2 &= ~UMSC_MASK_OUT_ENDPOINT;
1136   5                CheckReceiveCBW();
1137   5                break;
1138   5               }
1139   4              case BS_DATA_PHASE:                  // Data block received
1140   4               {
1141   5                UIF2 &= ~UMSC_MASK_OUT_ENDPOINT;
1142   5                WriteBufferToFlash();
1143   5                break;
1144   5               }
1145   4              case BS_CSW_PHASE:
1146   4               {
1147   5                break;
1148   5               }
1149   4              case BS_CSW_DONE_PHASE:
1150   4               {
1151   5                break;
1152   5               }
1153   4             }
1154   3      
1155   3           }
1156   2      /*
1157   2          if (UIF2 & OUT4F)                        // EP4 OUT
1158   2          {
1159   2          UIF2 &= ~OUT4F;                        // User code area
1160   2          }
1161   2          */
1162   2         }
1163   1      
1164   1        if (SUSPNDF)
1165   1         {
1166   2          if (RESUMF)
1167   2           {
1168   3            UIE0     |=  SUSPENDIE;
1169   3            UIE0     &= ~RESUMEIE;
1170   3            OnUsbResume();                         // resume int
1171   3            RESUMF  = 0;
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 20  

1172   3            SUSPNDF = 0;
1173   3            gbBulkPipeStage = BS_CBW_PHASE;
1174   3                                                   // only for DK3420
1175   3            ET0   = 1;                             // enable timer 0 interrupt
1176   3           }
1177   2          else
1178   2           {
1179   3            UIE0     |=  RESUMEIE;
1180   3            UIE0     &= ~SUSPENDIE;
1181   3            OnUsbSuspend();                        // suspend int
1182   3            gbBulkPipeStage = BS_CBW_PHASE;
1183   3                                                   // only for DK3420
1184   3            ET0       = 0;                         // disable timer 0 interrupt
1185   3            P4_0      = 1;                         // GREEN LED OFF
1186   3            UPSD_xreg.DATAOUT_D = 255;             // RED LED OFF
1187   3           }
1188   2         }
1189   1      
1190   1        UCTL  &= ~VISIBLE;                         // Disable USB FIFO mapping in XDATA
1191   1        USB_ISR_Counter++;                         // USB activity indicator
1192   1      
1193   1       }
1194          
1195          /* *************************************************************************
1196            ***                                                                      ***
1197            **                         *** End of File ***                            **
1198            ***                                                                      ***
1199            *************************************************************************  */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1675    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34      10
   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 + -