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

📄 f3xx_usb0_interruptserviceroutine.lst

📁 hid to rs232 usb_hid 转 串口程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.17   F3XX_USB0_INTERRUPTSERVICEROUTINE                                     03/18/2009 09:55:18 PAGE 1   


C51 COMPILER V8.17, 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 BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //-----------------------------------------------------------------------------
   2          // F3xx_USB0_InterruptServiceRoutine.c
   3          //-----------------------------------------------------------------------------
   4          // Copyright 2008 Silicon Laboratories, Inc.
   5          // http://www.silabs.com
   6          //
   7          // Program Description:
   8          //
   9          // Stub file for Firmware Template.
  10          //
  11          //
  12          // How To Test:    See Readme.txt
  13          //
  14          //
  15          // FID             
  16          // Target:         C8051F32x/C8051F340
  17          // Tool chain:     Keil C51 7.50 / Keil EVAL C51
  18          //                 Silicon Laboratories IDE version 2.6
  19          // Command Line:   See Readme.txt
  20          // Project Name:   HIDtoUART
  21          //
  22          // Release 1.0
  23          //    -Initial Revision (PD)
  24          //    -04 JUN 2008
  25          //
  26          
  27          //-----------------------------------------------------------------------------
  28          // Includes
  29          //-----------------------------------------------------------------------------
  30          #include "c8051f3xx.h"
  31          #include "F3xx_USB0_Register.h"
  32          #include "F3xx_USB0_InterruptServiceRoutine.h"
  33          #include "F3xx_USB0_Descriptor.h"
  34          #include "F3xx_USB0_ReportHandler.h"
  35          #include "F3xx_HIDtoUART.h"
  36          
  37          //-----------------------------------------------------------------------------
  38          // Global Variable Definitions
  39          //-----------------------------------------------------------------------------
  40          unsigned char USB0_STATE;              // Holds the current USB State
  41                                                 // def. in F3xx_USB0_InterruptServiceRoutine.h
  42          
  43          setup_buffer SETUP;                    // Buffer for current device
  44                                                 // request information
  45          
  46          unsigned int DATASIZE;                 // Size of data to return
  47          unsigned int DATASENT;                 // Amount of data sent so far
  48          unsigned char* DATAPTR;                // Pointer to data to return
  49          
  50          unsigned char EP_STATUS[3] = {EP_IDLE, EP_HALT, EP_HALT};
  51                                                 // Holds the status for each endpoint
  52          
  53          //-----------------------------------------------------------------------------
  54          // Local Function Definitions
  55          //-----------------------------------------------------------------------------
C51 COMPILER V8.17   F3XX_USB0_INTERRUPTSERVICEROUTINE                                     03/18/2009 09:55:18 PAGE 2   

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

 118          // Support Routines
 119          //-----------------------------------------------------------------------------
 120          
 121          //-----------------------------------------------------------------------------
 122          // Usb_Reset
 123          //-----------------------------------------------------------------------------
 124          //
 125          // Return Value : None
 126          // Parameters   : None
 127          //
 128          // - Set state to default
 129          // - Clear Usb Inhibit bit
 130          //
 131          //-----------------------------------------------------------------------------
 132          
 133          void Usb_Reset (void)
 134          {
 135   1         USB0_STATE = DEV_DEFAULT;           // Set device state to default
 136   1      
 137   1         POLL_WRITE_BYTE (POWER, 0x01);      // Clear usb inhibit bit to enable USB
 138   1                                             // suspend detection
 139   1      
 140   1         EP_STATUS[0] = EP_IDLE;             // Set default Endpoint Status
 141   1         EP_STATUS[1] = EP_HALT;
 142   1         EP_STATUS[2] = EP_HALT;
 143   1      }
 144          
 145          
 146          
 147          //-----------------------------------------------------------------------------
 148          // Usb_Resume
 149          //-----------------------------------------------------------------------------
 150          //
 151          // Return Value : None
 152          // Parameters   : None
 153          //
 154          // Resume normal USB operation
 155          //
 156          //-----------------------------------------------------------------------------
 157          
 158          void Usb_Resume(void)
 159          {
 160   1         volatile int k;
 161   1      
 162   1         k++;
 163   1      
 164   1         // Add code for resume
 165   1      }
 166          
 167          
 168          //-----------------------------------------------------------------------------
 169          // Handle_Control
 170          //-----------------------------------------------------------------------------
 171          //
 172          // Return Value : None
 173          // Parameters   : None
 174          //
 175          // - Decode Incoming SETUP requests
 176          // - Load data packets on fifo while in transmit mode
 177          //
 178          //-----------------------------------------------------------------------------
 179          
C51 COMPILER V8.17   F3XX_USB0_INTERRUPTSERVICEROUTINE                                     03/18/2009 09:55:18 PAGE 4   

 180          void Handle_Control (void)
 181          {
 182   1         unsigned char ControlReg;           // Temporary storage for EP control
 183   1                                             // register
 184   1      
 185   1         POLL_WRITE_BYTE (INDEX, 0);         // Set Index to Endpoint Zero
 186   1         POLL_READ_BYTE (E0CSR, ControlReg); // Read control register
 187   1      
 188   1         if (EP_STATUS[0] == EP_ADDRESS)     // Handle Status Phase of Set Address
 189   1                                             // command
 190   1         {
 191   2            POLL_WRITE_BYTE (FADDR, SETUP.wValue.c[LSB]);
 192   2            EP_STATUS[0] = EP_IDLE;
 193   2         }
 194   1      
 195   1         if (ControlReg & rbSTSTL)           // If last packet was a sent stall,
 196   1         {                                   // reset STSTL bit and return EP0
 197   2                                             // to idle state
 198   2            POLL_WRITE_BYTE (E0CSR, 0);
 199   2            EP_STATUS[0] = EP_IDLE;
 200   2            return;
 201   2         }
 202   1      
 203   1         if (ControlReg & rbSUEND)           // If last SETUP transaction was
 204   1         {                                   // ended prematurely then set
 205   2            POLL_WRITE_BYTE (E0CSR, rbDATAEND);
 206   2            // Serviced SETUP End bit and return EP0
 207   2            POLL_WRITE_BYTE (E0CSR, rbSSUEND);
 208   2            EP_STATUS[0] = EP_IDLE;          // To idle state
 209   2         }
 210   1      
 211   1         if (EP_STATUS[0] == EP_IDLE)        // If Endpoint 0 is in idle mode
 212   1         {
 213   2            if (ControlReg & rbOPRDY)        // Make sure that EP 0 has an Out Packet

⌨️ 快捷键说明

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