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

📄 isr.lst

📁 usblab usb程序开发实验 一个实例
💻 LST
字号:
C51 COMPILER V8.01   ISR                                                                   04/24/2006 19:23:09 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN ISR.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ISR.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2             //************************************************************************* //
   3             //                  
   4             //
   5             //           COPYRIGHT (c)   2006 BY FOSHAN LX.
   6             //                     --  ALL RIGHTS RESERVED  --
   7             //
   8             // File Name:        ISR.C
   9             // Author:           guobin
  10             // Created:          2006/04/20
  11             // Modified:
  12             // Revision:         2.0
  13             //
  14             //*************************************************************************
  15          */
  16             
  17          #include <stdio.h>
  18          #include <string.h>
  19          
  20          #include "hardware.h"
  21          
  22          #include "d12ci.h"
  23          #include "mainloop.h"
  24          #include "usb100.h"
  25          
  26          /*
  27          //*************************************************************************
  28          //  Public static data
  29          //*************************************************************************
  30          */
  31          
  32          EPPFLAGS bEPPflags;
  33          
  34          UCHAR   idata   EP1GetBuff[EP1_PACKET_SIZE];
  35          
  36          bit     bdata   LRNLEDFlag;
  37          
  38          /* Control endpoint TX/RX buffers */
  39          extern CONTROL_XFER ControlData;
  40          
  41          extern  UCHAR   LNLEData,RNLEData;
  42          
  43          
  44          code UCHAR      LEDCode[]=                                //数码管编码表
  45          {
  46          0xFC,   //'0'
  47          0x60,   //'1'
  48          0xDA,   //'2'
  49          0xF2,   //'3'
  50          0x66,   //'4'
  51          0xB6,   //'5'
  52          0xBE,   //'6'
  53          0xE0,   //'7'
  54          0xFE,   //'8'
  55          0xF6,   //'9'
C51 COMPILER V8.01   ISR                                                                   04/24/2006 19:23:09 PAGE 2   

  56          };
  57          
  58          void HC164(UCHAR Dat)
  59          {
  60   1              UCHAR i;
  61   1      
  62   1              HC164_CLK=0;
  63   1              for(i=0;i<8;i++)
  64   1              {
  65   2              if(Dat&0x01)                            //移为顺序:LSB位先移出
  66   2                      HC164_AB=1;
  67   2              else
  68   2                      HC164_AB=0;
  69   2              HC164_CLK=1;
  70   2              HC164_CLK=0;
  71   2              Dat>>=1;
  72   2              }
  73   1      }
  74          
  75          void OutPutNLED(void)
  76          {
  77   1              #define LLED    0
  78   1              #define RLED    1
  79   1      
  80   1              NLEDL=NLEDR=1;
  81   1              if(LRNLEDFlag==LLED)
  82   1                      {
  83   2                      HC164(LEDCode[LNLEData]);
  84   2                      NLEDL=0;
  85   2                      }
  86   1              else
  87   1                      {
  88   2                      HC164(LEDCode[RNLEData]);
  89   2                      NLEDR=0;
  90   2                      }
  91   1      
  92   1              LRNLEDFlag=~LRNLEDFlag;
  93   1              
  94   1              #undef  LLED
  95   1              #undef  RLED            
  96   1      }
  97          
  98          void    T0_IRQ(void)    interrupt       1
  99          {
 100   1              DISABLE;
 101   1              TH0=0xE8;                       //T0:1ms
 102   1              TL0=0x78;
 103   1              
 104   1              OutPutNLED();
 105   1              
 106   1              ENABLE;
 107   1      }
 108          
 109          void ep0_rxdone(void)
 110          {
 111   1              unsigned char ep_last, i;
 112   1      
 113   1              ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
 114   1      
 115   1              if (ep_last & D12_SETUPPACKET) {
 116   2      
 117   2                      ControlData.wLength = 0;
C51 COMPILER V8.01   ISR                                                                   04/24/2006 19:23:09 PAGE 3   

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

 180          {
 181   1              short i = ControlData.wLength - ControlData.wCount;
 182   1      
 183   1              D12_ReadLastTransactionStatus(1); // Clear interrupt flag
 184   1      
 185   1              if (bEPPflags.bits.control_state != USB_TRANSMIT) 
 186   1                      return;
 187   1      
 188   1              if( i >= EP0_PACKET_SIZE) {
 189   2                      D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, EP0_PACKET_SIZE);
 190   2                      ControlData.wCount += EP0_PACKET_SIZE;
 191   2      
 192   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 193   2              }
 194   1              else if( i != 0) {
 195   2                      D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, i);
 196   2                      ControlData.wCount += i;
 197   2      
 198   2                      bEPPflags.bits.control_state = USB_IDLE;
 199   2              }
 200   1              else if (i == 0){
 201   2                      D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???
 202   2      
 203   2                      bEPPflags.bits.control_state = USB_IDLE;
 204   2              }
 205   1      }
 206          
 207          void ep1_txdone(void)
 208          {
 209   1              D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
 210   1      }
 211          
 212          void ep1_rxdone(void)
 213          {
 214   1              D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
 215   1      
 216   1              D12_ReadEndpoint(2, EP1GetBuff, EP1_PACKET_SIZE);
 217   1      
 218   1              bEPPflags.bits.ep1_rxdone=1;
 219   1      }
 220          
 221          void main_rxdone(void)
 222          {
 223   1              D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
 224   1      
 225   1              D12_ReadEndpoint(4, EP1GetBuff, EP1_PACKET_SIZE);
 226   1      
 227   1              bEPPflags.bits.ep2_rxdone=1;
 228   1      }
 229          
 230          void main_txdone(void)
 231          {
 232   1              D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
 233   1      }
 234          
 235          void fn_usb_isr()
 236          {
 237   1              unsigned int i_st;
 238   1      
 239   1              bEPPflags.bits.in_isr = 1;
 240   1      
 241   1              i_st = D12_ReadInterruptRegister();
C51 COMPILER V8.01   ISR                                                                   04/24/2006 19:23:09 PAGE 5   

 242   1      
 243   1              if(i_st != 0) {
 244   2                      if(i_st & D12_INT_BUSRESET) 
 245   2                              bEPPflags.bits.bus_reset = 1;
 246   2      
 247   2                      if(i_st & D12_INT_SUSPENDCHANGE)
 248   2                              bEPPflags.bits.suspend = 1;
 249   2      
 250   2                      if(i_st & D12_INT_ENDP0IN)
 251   2                              ep0_txdone();
 252   2                      if(i_st & D12_INT_ENDP0OUT)
 253   2                              ep0_rxdone();
 254   2                      if(i_st & D12_INT_ENDP1IN)
 255   2                              ep1_txdone();
 256   2                      if(i_st & D12_INT_ENDP1OUT)
 257   2                              ep1_rxdone();
 258   2                      if(i_st & D12_INT_ENDP2IN)
 259   2                              main_txdone();
 260   2                      if(i_st & D12_INT_ENDP2OUT)
 261   2                              main_rxdone();
 262   2              }
 263   1      
 264   1              bEPPflags.bits.in_isr = 0;
 265   1      }
 266          
 267          void usb_isr(void) interrupt 2
 268          {
 269   1              DISABLE;
 270   1              fn_usb_isr();
 271   1              ENABLE;
 272   1      }
 273          
 274          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    712    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       4
   IDATA SIZE       =     16    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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