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

📄 f3xx_usb0_interruptserviceroutine.lst

📁 基于单片机的USB鼠标的实现
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   F3XX_USB0_INTERRUPTSERVICEROUTINE                                     09/12/2006 16:12:58 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE F3XX_USB0_INTERRUPTSERVICEROUTINE
OBJECT MODULE PLACED IN F3xx_USB0_InterruptServiceRoutine.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe F3xx_USB0_InterruptServiceRoutine.c DB OE

stmt level    source

   1          //-----------------------------------------------------------------------------
   2          // F3xx_USB0_InterruptServiceRoutine.c
   3          //-----------------------------------------------------------------------------
   4          // Copyright 2005 Silicon Laboratories, Inc.
   5          // http://www.silabs.com
   6          //
   7          // Program Description:
   8          //
   9          // Source file for USB firmware. Includes top level ISR with SETUP,
  10          // and Endpoint data handlers.  Also includes routine for USB suspend,
  11          // reset, and procedural stall.
  12          //
  13          //
  14          // How To Test:    See Readme.txt
  15          //
  16          //
  17          // FID:            3XX000033
  18          // Target:         C8051F32x
  19          // Tool chain:     Keil C51 7.50 / Keil EVAL C51
  20          //                 Silicon Laboratories IDE version 2.6
  21          // Command Line:   See Readme.txt
  22          // Project Name:   F3xx_MouseExample
  23          //
  24          //
  25          // Release 1.2
  26          //    -Changes by PD
  27          //    -Added SendPacket ()
  28          //    -Added EP_RX conditional statement to Endpoint 0 Handler
  29          //
  30          // Release 1.0
  31          //    -Initial Revision (DM)
  32          //    -08 NOV 2002
  33          //
  34          
  35          //-----------------------------------------------------------------------------
  36          // Includes
  37          //-----------------------------------------------------------------------------
  38          #include "c8051f3xx.h"
  39          #include "F3xx_USB0_Register.h"
  40          #include "F3xx_USB0_InterruptServiceRoutine.h"
  41          #include "F3xx_USB0_Descriptor.h"
  42          #include "F3xx_USB0_ReportHandler.h"
  43          
  44          
  45          //-----------------------------------------------------------------------------
  46          // Global Variable Definitions
  47          //-----------------------------------------------------------------------------
  48          unsigned char USB0_STATE;               // Holds the current USB State
  49                                                 // def. in F3xx_USB0_InterruptServiceRoutine.h
  50          
  51          setup_buffer SETUP;                    // Buffer for current device
  52                                                 // request information
  53          
  54          unsigned int DATASIZE;                 // Size of data to return
  55          unsigned int DATASENT;                 // Amount of data sent so far
C51 COMPILER V7.06   F3XX_USB0_INTERRUPTSERVICEROUTINE                                     09/12/2006 16:12:58 PAGE 2   

  56          unsigned char* DATAPTR;                // Pointer to data to return
  57          
  58          unsigned char EP_STATUS[3] = {EP_IDLE, EP_HALT, EP_HALT};
  59                                                 // Holds the status for each endpoint
  60          
  61          
  62          
  63          //-----------------------------------------------------------------------------
  64          // Local Function Definitions
  65          //-----------------------------------------------------------------------------
  66          void Usb_Resume (void);                // resumes USB operation
  67          void Usb_Reset (void);                 // Called after USB bus reset
  68          void Handle_Control (void);            // Handle SETUP packet on EP 0
  69          void Handle_In1 (void);                // Handle in packet on EP 1
  70          void Handle_Out1 (void);               // Handle out packet on EP 1
  71          void Usb_Suspend (void);               // This routine called when
  72                                                 // suspend signalling on bus
  73          void Fifo_Read (unsigned char, unsigned int, unsigned char *);
  74                                                 // Used for multiple byte reads
  75                                                 // of Endpoint fifos
  76          void Fifo_Write_Foreground (unsigned char, unsigned int, unsigned char *);
  77                                                 // Used for multiple byte writes
  78                                                 // of Endpoint fifos in foreground
  79          void Fifo_Write_InterruptServiceRoutine (unsigned char, unsigned int,
  80                                                                                           unsigned char *);
  81                                                 // Used for multiple byte
  82                                                 // writes of Endpoint fifos
  83          
  84          
  85          //-----------------------------------------------------------------------------
  86          // Usb_ISR
  87          //-----------------------------------------------------------------------------
  88          //
  89          // Called after any USB type interrupt, this handler determines which type
  90          // of interrupt occurred, and calls the specific routine to handle it.
  91          //
  92          //-----------------------------------------------------------------------------
  93          void Usb_ISR (void) interrupt 8        // Top-level USB ISR
  94          {
  95   1      
  96   1         unsigned char bCommon, bIn, bOut;
  97   1         POLL_READ_BYTE (CMINT, bCommon);    // Read all interrupt registers
  98   1         POLL_READ_BYTE (IN1INT, bIn);       // this read also clears the register
  99   1         POLL_READ_BYTE (OUT1INT, bOut);
 100   1         {
 101   2            if (bCommon & rbRSUINT)          // Handle Resume interrupt
 102   2            {
 103   3               Usb_Resume ();
 104   3            }
 105   2            if (bCommon & rbRSTINT)          // Handle Reset interrupt
 106   2            {
 107   3               Usb_Reset ();
 108   3            }
 109   2            if (bIn & rbEP0)                 // Handle SETUP packet received
 110   2            {                                // or packet transmitted if Endpoint 0
 111   3               Handle_Control ();            // is in transmit mode
 112   3            }
 113   2            if (bIn & rbIN1)                 // Handle In Packet sent, put new data
 114   2            {                                // on endpoint 1 fifo
 115   3               Handle_In1 ();
 116   3            }
 117   2            if (bOut & rbOUT1)               // Handle Out packet received, take
C51 COMPILER V7.06   F3XX_USB0_INTERRUPTSERVICEROUTINE                                     09/12/2006 16:12:58 PAGE 3   

 118   2            {                                // data off endpoint 2 fifo
 119   3               Handle_Out1 ();
 120   3            }
 121   2            if (bCommon & rbSUSINT)          // Handle Suspend interrupt
 122   2            {
 123   3               Usb_Suspend ();
 124   3            }
 125   2         }
 126   1      }
 127          
 128          //-----------------------------------------------------------------------------
 129          // Support Routines
 130          //-----------------------------------------------------------------------------
 131          
 132          //-----------------------------------------------------------------------------
 133          // Usb_Reset
 134          //-----------------------------------------------------------------------------
 135          //
 136          // Return Value : None
 137          // Parameters   : None
 138          //
 139          // - Set state to default
 140          // - Clear Usb Inhibit bit
 141          //
 142          //-----------------------------------------------------------------------------
 143          
 144          void Usb_Reset (void)
 145          {
 146   1         USB0_STATE = DEV_DEFAULT;           // Set device state to default
 147   1      
 148   1         POLL_WRITE_BYTE (POWER, 0x01);      // Clear usb inhibit bit to enable USB
 149   1                                             // suspend detection
 150   1      
 151   1         EP_STATUS[0] = EP_IDLE;             // Set default Endpoint Status
 152   1         EP_STATUS[1] = EP_HALT;
 153   1         EP_STATUS[2] = EP_HALT;
 154   1      }
 155          
 156          
 157          
 158          //-----------------------------------------------------------------------------
 159          // Usb_Resume
 160          //-----------------------------------------------------------------------------
 161          //
 162          // Return Value : None
 163          // Parameters   : None
 164          //
 165          // Resume normal USB operation
 166          //
 167          //-----------------------------------------------------------------------------
 168          
 169          void Usb_Resume(void)
 170          {
 171   1         volatile int k;
 172   1      
 173   1         k++;
 174   1      
 175   1         // Add code for resume
 176   1      }
 177          
 178          
 179          //-----------------------------------------------------------------------------
C51 COMPILER V7.06   F3XX_USB0_INTERRUPTSERVICEROUTINE                                     09/12/2006 16:12:58 PAGE 4   

 180          // Handle_Control
 181          //-----------------------------------------------------------------------------
 182          //
 183          // Return Value : None
 184          // Parameters   : None
 185          //
 186          // - Decode Incoming SETUP requests
 187          // - Load data packets on fifo while in transmit mode
 188          //
 189          //-----------------------------------------------------------------------------
 190          
 191          void Handle_Control (void)
 192          {
 193   1         unsigned char ControlReg;           // Temporary storage for EP control
 194   1                                             // register
 195   1      
 196   1         POLL_WRITE_BYTE (INDEX, 0);         // Set Index to Endpoint Zero
 197   1         POLL_READ_BYTE (E0CSR, ControlReg); // Read control register
 198   1      
 199   1         if (EP_STATUS[0] == EP_ADDRESS)     // Handle Status Phase of Set Address
 200   1                                             // command
 201   1         {
 202   2            POLL_WRITE_BYTE (FADDR, SETUP.wValue.c[LSB]);
 203   2            EP_STATUS[0] = EP_IDLE;
 204   2         }
 205   1      
 206   1         if (ControlReg & rbSTSTL)           // If last packet was a sent stall,
 207   1         {                                   // reset STSTL bit and return EP0
 208   2                                             // to idle state
 209   2            POLL_WRITE_BYTE (E0CSR, 0);
 210   2            EP_STATUS[0] = EP_IDLE;
 211   2            return;
 212   2         }

⌨️ 快捷键说明

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