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

📄 isr.lst

📁 USB接口芯片pdiusbd12固件源程序
💻 LST
字号:
C51 COMPILER V7.06   ISR                                                                   03/19/2006 13:40:25 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN ISR.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ISR.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)   1997 BY PHILIPS SINGAPORE.
   7             //                     --  ALL RIGHTS RESERVED  --
   8             //
   9             // File Name:        ISR.C
  10             // Author:           Wenkai Du
  11             // Created:          19 Dec 97
  12             // Modified:
  13             // Revision:         3.0
  14             //
  15             //*************************************************************************
  16             //
  17             // 98/11/25          Added I/O mode Main endpoints access. (WK)
  18             //*************************************************************************
  19             */
  20          #include <stdio.h>
  21          #include <string.h>
  22          #ifdef __C51__
  23          #include <reg51.h>                /* special function register declarations   */
  24          #endif
  25          #include "epphal.h"
  26          #include "d12ci.h"
  27          #include "mainloop.h"
  28          #include "usb100.h"
  29          
  30          extern void bus_reset(void);
  31          extern void dma_eot();
  32          extern void ep0_txdone(void);
  33          extern void ep0_rxdone(void);
  34          
  35          extern void ep1_txdone(void);
  36          extern void ep1_rxdone(void);
  37          extern void main_txdone(void);
  38          extern void main_rxdone(void);
  39          
  40          /*
  41          //*************************************************************************
  42          //  Public static data
  43          //*************************************************************************
  44          */
  45          
  46          EPPFLAGS bEPPflags;
  47          
  48          /* Control endpoint TX/RX buffers */
  49          extern CONTROL_XFER ControlData;
  50          
  51          /* ISR static vars */
  52          unsigned char idata GenEpBuf[EP1_PACKET_SIZE]={0,0,0,0};
  53          unsigned char idata EpBuf[EP2_PACKET_SIZE];
  54          //IO_REQUEST idata ioRequest;
  55          
C51 COMPILER V7.06   ISR                                                                   03/19/2006 13:40:25 PAGE 2   

  56          
  57          usb_isr() interrupt 2
  58          {
  59   1              DISABLE;
  60   1              fn_usb_isr();
  61   1              ENABLE;
  62   1      }
  63          
  64          void fn_usb_isr()
  65          {
  66   1              unsigned int i_st;
  67   1      
  68   1              bEPPflags.bits.in_isr = 1;
  69   1      
  70   1              i_st = D12_ReadInterruptRegister();
  71   1      
  72   1              if(i_st != 0) {
  73   2                      if(i_st & D12_INT_BUSRESET) 
  74   2                      {
  75   3                              bus_reset();
  76   3                              bEPPflags.bits.bus_reset = 1;
  77   3                      }
  78   2                      else
  79   2                      {
  80   3                              if(i_st & D12_INT_EOT)
  81   3                                      dma_eot();
  82   3                              if(i_st & D12_INT_SUSPENDCHANGE)
  83   3                                      bEPPflags.bits.suspend = 1;
  84   3              
  85   3                              if(i_st & D12_INT_ENDP0IN)
  86   3                                      ep0_txdone();
  87   3                              if(i_st & D12_INT_ENDP0OUT)
  88   3                                      ep0_rxdone();
  89   3                              if(i_st & D12_INT_ENDP1IN)
  90   3                                      ep1_txdone();
  91   3                              if(i_st & D12_INT_ENDP1OUT)
  92   3                                      ep1_rxdone();
  93   3                              if(i_st & D12_INT_ENDP2IN)
  94   3                                      main_txdone();
  95   3                              if(i_st & D12_INT_ENDP2OUT)
  96   3                                      main_rxdone();
  97   3                      }
  98   2              }
  99   1      
 100   1              bEPPflags.bits.in_isr = 0;
 101   1      }
 102          
 103          void bus_reset(void)
 104          {
 105   1      }
 106          
 107          void ep0_rxdone(void)
 108          {
 109   1              unsigned char ep_last, i;
 110   1      
 111   1              ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
 112   1      
 113   1              if (ep_last & D12_SETUPPACKET) {
 114   2      
 115   2                      ControlData.wLength = 0;
 116   2                      ControlData.wCount = 0;
 117   2      
C51 COMPILER V7.06   ISR                                                                   03/19/2006 13:40:25 PAGE 3   

 118   2                      if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
 119   2                              (unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
 120   3                              //setup包出错,返回
 121   3                              D12_SetEndpointStatusIsr(0, 1);
 122   3                              D12_SetEndpointStatusIsr(1, 1);
 123   3                              bEPPflags.bits.control_state = USB_IDLE;
 124   3                              
 125   3                              return;
 126   3                      }
 127   2      
 128   2                      ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
 129   2                      ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
 130   2                      ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
 131   2      
 132   2                      // Acknowledge setup here to unlock in/out endp
 133   2                      D12_AcknowledgeEndpoint(0);
 134   2                      D12_AcknowledgeEndpoint(1);
 135   2      
 136   2                      ControlData.wLength = ControlData.DeviceRequest.wLength;
 137   2                      ControlData.wCount = 0;
 138   2      
 139   2                      if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
 140   3                              bEPPflags.bits.setup_packet = 1;
 141   3                              bEPPflags.bits.control_state = USB_TRANSMIT;            /* get command */
 142   3                      }
 143   2                      else {
 144   3                              if (ControlData.DeviceRequest.wLength == 0) {
 145   4                                      bEPPflags.bits.setup_packet = 1;
 146   4                                      bEPPflags.bits.control_state = USB_IDLE;                /* set command */
 147   4                              }
 148   3                              else {
 149   4                                      if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
 150   5                                              bEPPflags.bits.control_state = USB_IDLE;
 151   5                                              D12_SetEndpointStatusIsr(0, 1);
 152   5                                              D12_SetEndpointStatusIsr(1, 1);
 153   5                                      }
 154   4                                      else {
 155   5                                              bEPPflags.bits.control_state = USB_RECEIVE;     /* set command with OUT token */
 156   5                                      }
 157   4                              } // set command with data
 158   3                      } // else set command
 159   2              } // if setup packet
 160   1      
 161   1              else if (bEPPflags.bits.control_state == USB_RECEIVE) {
 162   2                      i =     D12_ReadEndpoint(0, EP0_PACKET_SIZE,
 163   2                              ControlData.dataBuffer + ControlData.wCount);
 164   2      
 165   2                      ControlData.wCount += i;
 166   2                      if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
 167   3                              bEPPflags.bits.setup_packet = 1;
 168   3                              bEPPflags.bits.control_state = USB_IDLE;
 169   3                      }
 170   2              }
 171   1      
 172   1              else {
 173   2                      bEPPflags.bits.control_state = USB_IDLE;
 174   2              }
 175   1      }
 176          
 177          void ep0_txdone(void)
 178          {
 179   1              short i = ControlData.wLength - ControlData.wCount;
C51 COMPILER V7.06   ISR                                                                   03/19/2006 13:40:25 PAGE 4   

 180   1      
 181   1              D12_ReadLastTransactionStatus(1); // Clear interrupt flag
 182   1      
 183   1              if (bEPPflags.bits.control_state != USB_TRANSMIT) 
 184   1                      return;
 185   1      
 186   1              if( i >= EP0_PACKET_SIZE) {
 187   2                      D12_WriteEndpointIsr(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
 188   2                      ControlData.wCount += EP0_PACKET_SIZE;
 189   2      
 190   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 191   2              }
 192   1              else if( i != 0) {
 193   2                      D12_WriteEndpointIsr(1, i, ControlData.pData + ControlData.wCount);
 194   2                      ControlData.wCount += i;
 195   2      
 196   2                      bEPPflags.bits.control_state = USB_IDLE;
 197   2              }
 198   1              else if (i == 0){
 199   2                      D12_WriteEndpointIsr(1, 0, 0); // Send zero packet at the end ???
 200   2      
 201   2                      bEPPflags.bits.control_state = USB_IDLE;
 202   2              }
 203   1      }
 204          
 205          void dma_eot(void)
 206          {
 207   1      
 208   1      }
 209          
 210          void ep1_txdone(void)
 211          {
 212   1              D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
 213   1      }
 214          
 215          void ep1_rxdone(void)
 216          {
 217   1              unsigned char len;
 218   1      
 219   1              D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
 220   1      
 221   1              len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);
 222   1      
 223   1              if(len != 0)
 224   1              {
 225   2                      bEPPflags.bits.ep1_rxdone = 1;
 226   2      
 227   2              }
 228   1      }
 229          
 230          void main_txdone(void)
 231          {
 232   1              D12_ReadLastTransactionStatus(5);
 233   1      }
 234          
 235          void main_rxdone(void)
 236          {
 237   1              unsigned char len;
 238   1              D12_ReadLastTransactionStatus(4);
 239   1              len = D12_ReadEndpoint(4, sizeof(EpBuf),EpBuf);
 240   1      
 241   1              if(len != 0)
C51 COMPILER V7.06   ISR                                                                   03/19/2006 13:40:25 PAGE 5   

 242   1              {
 243   2                      bEPPflags.bits.main_rxdone = 1;
 244   2              }
 245   1      }
 246          
 247          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    635    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       4
   IDATA SIZE       =     68    ----
   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 + -