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

📄 f3xx_usb0_interruptserviceroutine.lst

📁 基于344单片机的HID设备的USB鼠标代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.05a   F3XX_USB0_INTERRUPTSERVICEROUTINE                                    10/16/2008 16:50:25 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE F3XX_USB0_INTERRUPTSERVICEROUTINE
OBJECT MODULE PLACED IN F3xx_USB0_InterruptServiceRoutine.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe F3xx_USB0_InterruptServiceRoutine.c DB OE

line 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:            
  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.1
  26          //    -Minor code comment changes
  27          //    -16 NOV 2006
  28          // Release 1.0
  29          //    -Initial Revision (PD)
  30          //    -07 DEC 2005
  31          //
  32          
  33          //-----------------------------------------------------------------------------
  34          // Includes
  35          //-----------------------------------------------------------------------------
  36          #include "c8051f3xx.h"
  37          #include "F3xx_USB0_Register.h"
  38          #include "F3xx_USB0_InterruptServiceRoutine.h"
  39          #include "F3xx_USB0_Descriptor.h"
  40          #include "F3xx_USB0_ReportHandler.h"
  41          
  42          
  43          //-----------------------------------------------------------------------------
  44          // Global Variable Definitions
  45          //-----------------------------------------------------------------------------
  46          unsigned char USB0_STATE;               // Holds the current USB State
  47                                                 // def. in F3xx_USB0_InterruptServiceRoutine.h
  48          
  49          setup_buffer SETUP;                    // Buffer for current device
  50                                                 // request information
  51          
  52          unsigned int DATASIZE;                 // Size of data to return
  53          unsigned int DATASENT;                 // Amount of data sent so far
  54          unsigned char* DATAPTR;                // Pointer to data to return
  55          
C51 COMPILER V8.05a   F3XX_USB0_INTERRUPTSERVICEROUTINE                                    10/16/2008 16:50:25 PAGE 2   

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

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

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

⌨️ 快捷键说明

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