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

📄 isr.lst

📁 基于PDIUSBD12芯片的USB开发板固件程序
💻 LST
字号:
C51 COMPILER V7.02a   ISR                                                                  09/20/2005 15:10:00 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN ISR.OBJ
COMPILER INVOKED BY: D:\Program Files\Keilc7\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          
  23          #include <reg51.h>                /* special function register declarations   */
  24          
  25          #include "epphal.h"
  26          #include "d12ci.h"
  27          #include "mainloop.h"
  28          #include "usb100.h"
  29          
  30          extern void bus_reset(void);
  31          
  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          //extern void main_txdone(void);
  41          //extern void main_rxdone(void);
  42          
  43          //extern void dma_eot(void);
  44          
  45          /*
  46          //*************************************************************************
  47          //  Public static data
  48          //*************************************************************************
  49          */
  50          
  51          EPPFLAGS bEPPflags;
  52          
  53          /* Control endpoint TX/RX buffers */
  54          extern CONTROL_XFER ControlData;
  55          
C51 COMPILER V7.02a   ISR                                                                  09/20/2005 15:10:00 PAGE 2   

  56          /* ISR static vars */
  57          unsigned char idata GenEpBuf[EP1_PACKET_SIZE]={0,0,0,0};
  58          unsigned char idata EpBuf[EP2_PACKET_SIZE];
  59          //IO_REQUEST idata ioRequest;
  60          
  61          
  62          usb_isr() interrupt 2
  63          {
  64   1              DISABLE;
  65   1              fn_usb_isr();
  66   1              ENABLE;
  67   1      }
  68          
  69          void fn_usb_isr()
  70          {
  71   1              unsigned int i_st;
  72   1      
  73   1              bEPPflags.bits.in_isr = 1;
  74   1      
  75   1              i_st = D12_ReadInterruptRegister();
  76   1      
  77   1              if(i_st != 0) {
  78   2      /*              if(i_st & D12_INT_BUSRESET) 
  79   2                      {
  80   2                              bEPPflags.bits.bus_reset = 1;
  81   2                      }
  82   2                      if(i_st & D12_INT_SUSPENDCHANGE)
  83   2                              bEPPflags.bits.suspend = 1;*/
  84   2      
  85   2                      if(i_st & D12_INT_ENDP0IN)
  86   2                              ep0_txdone();
  87   2                      if(i_st & D12_INT_ENDP0OUT)
  88   2                              ep0_rxdone();
  89   2                      if(i_st & D12_INT_ENDP1IN)
  90   2                              ep1_txdone();
  91   2                      if(i_st & D12_INT_ENDP1OUT)
  92   2                              ep1_rxdone();
  93   2                      if(i_st & D12_INT_ENDP2IN)
  94   2                              main_txdone();
  95   2                      if(i_st & D12_INT_ENDP2OUT)
  96   2                              main_rxdone();
  97   2              }
  98   1      
  99   1              bEPPflags.bits.in_isr = 0;
 100   1      }
 101          
 102          void ep0_rxdone(void)
 103          {
 104   1              unsigned char ep_last, i;
 105   1      
 106   1              ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
 107   1      
 108   1              if (ep_last & D12_SETUPPACKET) {
 109   2      
 110   2                      ControlData.wLength = 0;
 111   2                      ControlData.wCount = 0;
 112   2      
 113   2                      if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
 114   2                              (unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
 115   3      
 116   3                              D12_SetEndpointStatusIsr(0, 1);
 117   3                              D12_SetEndpointStatusIsr(1, 1);
C51 COMPILER V7.02a   ISR                                                                  09/20/2005 15:10:00 PAGE 3   

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.02a   ISR                                                                  09/20/2005 15:10:00 PAGE 5   

   CODE SIZE        =    583    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3       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 + -