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

📄 mainloop.lst

📁 D12 USB源代码 硬盘
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAINLOOP                                                              02/17/2004 14:42:22 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN Mainloop.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Mainloop.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*
   2             //*************************************************************************
   3             //
   4             //                  P H I L I P S   P R O P R I E T A R Y
   5             //
   6             //           COPYRIGHT (c)   1999 BY PHILIPS SINGAPORE.
   7             //                     --  ALL RIGHTS RESERVED  --
   8             //
   9             // File Name:        MainLoop.C
  10             // Author:       Hilbert Zhang ZhenYu
  11             // Created:      Nov. 19 99
  12             // Modified:
  13             // Revision:         0.0.
  14             //
  15             //*************************************************************************
  16             // Implementation Notes:
  17             //
  18             //   4. Bulk-Only Transport FSM
  19             //      IDLE Stage ->  CBW -> CBW Proc -> DATA OUT Stage -> CSW Proc -> CSW Stage -> IDLE
  20             //      IDLE Stage ->  CBW -> CBW Proc -> DATA IN Stage -> CSW Proc -> CSW Stage -> IDLE
  21             //      STALL Stage ->  IDLE -> ...
  22             //
  23             //
  24             //   3. Default Control Pipe Finite State Machine
  25             //      SETUP Stage -> SETUP Proc -> DATA OUT Stage -> CONTROL OUT Handshake -> STATUS Stage -> IDLE
  26             //      SETUP Stage -> SETUP Proc -> CONTROL OUT Handshake -> STATUS Stage -> IDLE
  27             //      SETUP Stage -> SETUP Proc -> DATA IN Stage-> CONTROL IN Handshake ->STATUS Stage -> IDLE
  28             //      STALL -> SETUP Stage -> ...
  29             //
  30             //   2. Stack Overflow Avoidance.
  31             //      Setup TK overwritten allowance.
  32             //
  33             //   1. System Modeling
  34             //       A. D12
  35             //       B. 8051
  36             //       C. ATA controller emulation by 8051
  37             //
  38             //   0. 8051 Modeling
  39             //       A. Target 8051 , 128B RAM, 16KB ROM
  40             //       B. Choose 2 IRQL levels, Interrupt Priority 0 as IRQL_1, Mainloop as IRQL_0
  41             //       C. Bit Address Space, Byte Ram Addess Space, Code Address Space, IO port Space
  42             //
  43             //*************************************************************************
  44             // Development Environment
  45             //
  46             //   1. Use VC++ IDE instead of DOS enviroment
  47             //   0. Keil C Ver4
  48             //
  49             //*************************************************************************
  50          */
  51          
  52          #include <reg51.h>                /* special function register declarations */
  53          
  54          #define GLOBAL_EXT                      //定义全局
  55          
C51 COMPILER V7.06   MAINLOOP                                                              02/17/2004 14:42:22 PAGE 2   

  56          #include "SysCnfg.h"
  57          #include "BasicTyp.H"
  58          
  59          #include "usb100.h"
  60          
  61          #include "Common.h"
  62          #include "Hal4Sys.h"
  63          #include "Hal4d12.h"
  64          #include "Hal4ata.h"
  65          
  66          //#include "ATA.h"
  67          #include "RBCCmd.h"
  68          #include "RBC.h"
  69          
  70          #include "mainloop.h"
  71          #include "chap_9.h"
  72          #include "TPBulk.h"
  73          
  74          /*
  75          //*************************************************************************
  76          //  Public data
  77          //*************************************************************************
  78          */
  79          sfr AUXR = 0xDA;
  80          
  81          // bit Flags
  82          STRUC_EXT BITFLAGS BDATA_SEG    bFlags;
  83          
  84          // MCU Timer bit flags
  85          BIT_EXT             MCUBF_Timer = bFlags.value^0;
  86          INT8_EXT            Hal4Sys_ClockTicks = 0;
  87          
  88          // D12 bit flags
  89          BIT_EXT             D12BF_SetupOverwritten = bFlags.value^1;
  90          BIT_EXT             D12BF_Configuration  = bFlags.value^2;
  91          
  92          //USB
  93          // DefaultControlPipe Finite State Machine [One-Hot]
  94          INT8_EXT BDATA_SEG  DCPFSMstate;
  95          BIT_EXT             DCPFSM_SetupProc = DCPFSMstate^0;
  96          BIT_EXT             DCPFSM_DataIn = DCPFSMstate^1;
  97          BIT_EXT             DCPFSM_DataOut = DCPFSMstate^2;
  98          BIT_EXT             DCPFSM_COhandshake = DCPFSMstate^3;
  99          BIT_EXT             DCPFSM_CIhandshake = DCPFSMstate^4;
 100          BIT_EXT             DCPFSM_Stall = DCPFSMstate^7;
 101          //      DCP FSM
 102          //      SETUP Stage -> SETUP Proc -> DATA OUT Stage -> CONTROL OUT Handshake -> STATUS Stage -> IDLE
 103          //      SETUP Stage -> SETUP Proc -> CONTROL OUT Handshake -> STATUS Stage -> IDLE
 104          //      SETUP Stage -> SETUP Proc -> DATA IN Stage-> CONTROL IN Handshake ->STATUS Stage -> IDLE
 105          //
 106          
 107          // USB Device Request
 108          STRUC_EXT DEVICE_REQUEST DATA_SEG DCPDeviceRequest;
 109          INT8_EXT            UsbReq_Recipient;
 110          INT8_EXT            UsbReq_Type;
 111          INT8_EXT            UsbReq_Request;
 112          BIT_EXT             REQBF_DCPRequest_dir = bFlags.value^3;
 113          BIT_EXT             REQBF_DCPRequest_EPdir = bFlags.value^4;
 114          BIT_EXT             REQBF_StallDCPRequest = bFlags.value^5;
 115          
 116          INT16_EXT           DCPXfer_wResidue;
 117          INT8_EXT            * DCPXfer_pdata;
C51 COMPILER V7.06   MAINLOOP                                                              02/17/2004 14:42:22 PAGE 3   

 118          
 119          // Bulk-Only TP Finite State Machine [One-Hot]      端点状态
 120          INT8_EXT BDATA_SEG BOTFSMstate;
 121          BIT_EXT             BOTFSM_IDLE = BOTFSMstate^0;
 122          BIT_EXT             BOTFSM_CBWProc = BOTFSMstate^1;
 123          BIT_EXT             BOTFSM_DataIn = BOTFSMstate^2;
 124          BIT_EXT             BOTFSM_DataOut = BOTFSMstate^3;
 125          BIT_EXT             BOTFSM_CSWProc = BOTFSMstate^4;
 126          BIT_EXT             BOTFSM_CSW = BOTFSMstate^5;
 127          BIT_EXT             BOTFSM_Stall = BOTFSMstate^7;
 128          //      BOT FSM
 129          //      IDLE Stage ->  CBW -> CBW Proc -> DATA OUT Stage -> CSW Proc -> CSW Stage -> IDLE
 130          //      IDLE Stage ->  CBW -> CBW Proc -> DATA IN Stage -> CSW Proc -> CSW Stage -> IDLE
 131          //      STALL Stage ->  IDLE
 132          //
 133          INT16_EXT   BOTXfer_wResidue;   //数据沉余
 134          INT8_EXT    * BOTXfer_pdata;
 135          STRUC_EXT       TPBLK_STRUC     DATA_SEG        TPBulk_Block;
 136          #define     TPBulk_CBW                          TPBulk_Block.TPBulk_CommandBlock
 137          #define     RBC_CDB                                     TPBulk_CBW.cdbRBC
 138          #define     RBC_LUN                                     TPBulk_CBW.bCBW_LUN
 139          #define     Hal4ATA_Atapi                       RBC_CDB
 140          #define     TPBulk_CSW                          TPBulk_Block.TPBulk_CommandStatus
 141          BIT_EXT             BOTXfer_Abort = bFlags.value^8;
 142          BIT_EXT             BOTBF_StallAtBulkOut = bFlags.value^6;
 143          BIT_EXT             BOTBF_StallAtBulkIn = bFlags.value^7;
 144          
 145          // Xfer_Space
 146          INT8_EXT BDATA_SEG  Xfer_Space;
 147          BIT_EXT             DCPXfer_atMCUCODE = Xfer_Space^0;
 148          BIT_EXT             DCPXfer_atMCURAM = Xfer_Space^1;
 149          BIT_EXT             DCPXfer_atEEROM = Xfer_Space^2;
 150          BIT_EXT             DCPXfer_atATA = Xfer_Space^3;
 151          BIT_EXT             BOTXfer_atRAM = Xfer_Space^4;
 152          BIT_EXT             BOTXfer_atATA = Xfer_Space^5;
 153          BIT_EXT             BOTXfer_atROM = Xfer_Space^6;
 154          
 155          
 156          STRUC_EXT HW_ATA_DEVICES_EXTENSION      Hal4ATA_DevExt;
 157          #define     ATADevExt_IDData            Hal4ATA_DevExt.IdentifyData
 158          
 159          BIT_EXT             ATABF_IsAttached = bFlags.value^9;
 160          BIT_EXT             ATABF_IsSupportMultiSector = bFlags.value^10;
 161          BIT_EXT             ATABF_IDEXfer_dir = bFlags.value^11;
 162          BIT_EXT             ATABF_IsSkipSetParameters = bFlags.value^12;
 163          
 164          INT8_EXT            Hal4ATA_SectCntInBlk;
 165          /*
 166          //*************************************************************************
 167          //  Public temp var
 168          //*************************************************************************
 169          */
 170          
 171          STRUC_EXT FLEXI_INT32 tempvars4UsbReq;          //????????????????
 172          
 173          INT8_EXT BDATA_SEG  FlexByte;
 174          BIT_EXT             FlexByte_b0 = FlexByte^0;
 175          BIT_EXT             FlexByte_b1 = FlexByte^1;
 176          BIT_EXT             FlexByte_b2 = FlexByte^2;
 177          BIT_EXT             FlexByte_b3 = FlexByte^3;
 178          BIT_EXT             FlexByte_b4 = FlexByte^4;
 179          BIT_EXT             FlexByte_b5 = FlexByte^5;
C51 COMPILER V7.06   MAINLOOP                                                              02/17/2004 14:42:22 PAGE 4   

 180          BIT_EXT             FlexByte_b6 = FlexByte^6;
 181          BIT_EXT             FlexByte_b7 = FlexByte^7;
 182          
 183          //INT8_EXT            TempByte;
 184          
 185          
 186          /*
 187          //*************************************************************************
 188          // USB protocol function pointer arrays协议函数指针
 189          //*************************************************************************
 190          */
 191          
 192          code void (*StandardDeviceRequest[MAX_STD_REQUEST])(void) =
 193          {
 194                  Chap9_GetStatus,
 195                  Chap9_ClearFeature,
 196                  MLsup_StallEP0,
 197                  Chap9_SetFeature,
 198                  MLsup_StallEP0,
 199                  Chap9_SetAddress,
 200                  Chap9_GetDescriptor,
 201                  MLsup_StallEP0,
 202                  Chap9_GetConfiguration,
 203                  Chap9_SetConfiguration,
 204                  Chap9_GetInterface,
 205                  Chap9_SetInterface,
 206          };
 207          
 208          code void (*ClassDeviceRequest[MAX_CLASS_REQUEST])(void) =
 209          {
 210                  TPBulk_ResetATA,
 211              TPBulk_GetMaxLUN
 212          };
 213          
 214          /*
 215          code void (*VendorDeviceRequest[MAX_VENDOR_REQUEST])(void) =
 216          {
 217                  MLsup_StallEP0
 218          };
 219          */
 220          
 221          /*
 222          //*************************************************************************
 223          //  Functions
 224          //*************************************************************************
 225          */
 226          
 227          void main(void)
 228          {
 229   1          AUXR = 0x01;          //使用P89C51RD2,使用内RAM和,ALE输出
 230   1          RaiseIRQL();                                //关中断
 231   1              Hal4Sys_InitMCU();                      //初始化端口
 232   1              Hal4Sys_InitTimer0();           //初始化定时器0
 233   1              D12SUSPD        = 0;                    //
 234   1          Hal4ATA_FindIDEDevice();    //查找IDE设备
 235   1      
 236   1          Hal4Sys_InitD12();                  //初始化D12
 237   1      // Connect to USB Host
 238   1          MLsup_ReconnectUSB();
 239   1      
 240   1          // Init FSM
 241   1              DCPFSMstate = USBFSM4DCP_IDLE;
C51 COMPILER V7.06   MAINLOOP                                                              02/17/2004 14:42:22 PAGE 5   

 242   1          BOTFSMstate = USBFSM4BOT_IDLE;// USBFSM4BOT_IDLE=0x01
 243   1      
 244   1      
 245   1              LowerIRQL();  //LowerIRQL() == EA=1 , (no IRQ when EA=0!)
 246   1              // USB Control Pipe
 247   1      
 248   1          /* Main program loop */
 249   1          while(TRUE)
 250   1          {
 251   2                      // Enable Interrupt for Interrupt Type Event Stimulie
 252   2              LowerIRQL();  //LowerIRQL() == EA=1 , (no IRQ when EA=0!)
 253   2              // USB Control Pipe
 254   2              if (DCPFSM_SetupProc)   // DCPFSM_SetupProc=DCPFSMstate^0
 255   2              {
 256   3                      RaiseIRQL();                                            //关中断
 257   3                  MLsup_USBSetupTokenHandler();
 258   3                  LowerIRQL();                                                //开中断
 259   3                      } // if SetupProc
 260   2      
 261   2                      // USB Bulk Pipe
 262   2              RaiseIRQL();
 263   2              {

⌨️ 快捷键说明

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