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

📄 isr.lst

📁 D12 USB源代码 硬盘
💻 LST
字号:
C51 COMPILER V7.06   ISR                                                                   02/17/2004 14:42:22 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN Isr.OBJ
COMPILER INVOKED BY: C:\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)   1999 BY PHILIPS SINGAPORE.
   7             //                     --  ALL RIGHTS RESERVED  --
   8             //
   9             // File Name:            ISR.C
  10             // Author:           Hilbert Zhang ZhenYu
  11             //                   Chew Thing Piao
  12             // Created:          Oct. 1 99
  13             // Modified:
  14             // Revision:                 0.0.
  15             //
  16             //*************************************************************************
  17             //
  18             //*************************************************************************
  19             */
  20          #include <reg51.h>                /* special function register declarations   */
  21          #undef   GLOBAL_EXT
  22          #include "SysCnfg.h"
  23          #include "BasicTyp.h"
  24          #include "Common.h"
  25          #include "Hal4Sys.h"
  26          #include "Hal4d12.h"
  27          
  28          /*
  29          //*************************************************************************
  30          //  Public data
  31          //*************************************************************************
  32          */
  33          // bit Flags
  34          STRUC_EXT BITFLAGS  bFlags;
  35          
  36          // Timer 0
  37          BIT_EXT             MCUBF_Timer;
  38          INT8_EXT            Hal4Sys_ClockTicks;
  39          
  40          // D12 bit flags
  41          BIT_EXT D12BF_SetupOverwritten;
  42          BIT_EXT D12BF_Configuration;
  43          
  44          // DefaultControlPipe Finate State Machine [One-Hot]
  45          INT8_EXT BDATA_SEG  DCPFSMstate;
  46          BIT_EXT             DCPFSM_SetupProc;
  47          BIT_EXT             DCPFSM_Datain;
  48          BIT_EXT             DCPFSM_Dataout;
  49          BIT_EXT             DCPFSM_COhandshake;
  50          BIT_EXT             DCPFSM_CIhandshake;
  51          BIT_EXT             DCPFSM_Stall;
  52          
  53          INT8_EXT BDATA_SEG  BOTFSMstate;
  54          BIT_EXT             DCPFSM_CBWProc;
  55          BIT_EXT             BOTFSM_DataIn;
C51 COMPILER V7.06   ISR                                                                   02/17/2004 14:42:22 PAGE 2   

  56          BIT_EXT             BOTFSM_DataOut;
  57          BIT_EXT             BOTFSM_CSWProc;
  58          BIT_EXT             BOTFSM_CSW;
  59          BIT_EXT             BOTFSM_Stall;
  60          
  61          // USB Device Request
  62          STRUC_EXT DEVICE_REQUEST DCPDeviceRequest;
  63          INT8_EXT            UsbReq_Recipient;
  64          INT8_EXT            UsbReq_Type;
  65          INT8_EXT            UsbReq_Request;
  66          BIT_EXT             REQBF_DCPRequest_dir;
  67          BIT_EXT             REQBF_DCPRequest_EPdir;
  68          BIT_EXT             REQBF_StallDCPRequest;
  69          
  70          // Default Control Pipe Tansfer DCPXfer
  71          INT8_EXT BDATA_SEG  Xfer_Space;
  72          BIT_EXT             DCPXfer_atMCUCODE;
  73          BIT_EXT             DCPXfer_atMCURAM;
  74          BIT_EXT             DCPXfer_atEEROM;
  75          BIT_EXT             DCPXfer_atATA;
  76          BIT_EXT             DCPXfer_atATASTR;
  77          
  78          INT16_EXT           DCPXfer_wResidue;
  79          INT8_EXT            * DCPXfer_pData;
  80          
  81          /*
  82          //*************************************************************************
  83          //  Private data
  84          //*************************************************************************
  85          */
  86          INT8 BDATA_SEG          ISR_eplts ;
  87          sbit D12EP0LTS_SUCCESS = ISR_eplts^0;   //数据接收/发送成功
  88          sbit D12EP0LTS_SETUP = ISR_eplts^5;     //setup信息包,1表示成功接收的信息包有一个SETIP标志
  89          
  90          INT16 BDATA_SEG         ISR_IR;                 // bit addressable data(16bits) from $20H->
  91          
  92          sbit D12IS_EOT          = ISR_IR^0;     // D12 Interrupt Src
  93          sbit D12IS_SUSPENDCHANGE= ISR_IR^15;    // D12 Interrupt Src
  94          sbit D12IS_BUSRESET     = ISR_IR^14;    // D12 Interrupt Src
  95          sbit D12IS_ENDP2IN      = ISR_IR^13;    // D12 Interrupt Src
  96          sbit D12IS_ENDP2OUT     = ISR_IR^12;    // D12 Interrupt Src
  97          sbit D12IS_ENDP1IN      = ISR_IR^11;    // D12 Interrupt Src
  98          sbit D12IS_ENDP1OUT     = ISR_IR^10;    // D12 Interrupt Src
  99          sbit D12IS_ENDP0IN      = ISR_IR^9;     // D12 Interrupt Src
 100          sbit D12IS_ENDP0OUT     = ISR_IR^8;     // D12 Interrupt Src
 101          
 102          
 103          /*
 104          //*************************************************************************
 105          //  Private Functions
 106          //*************************************************************************
 107          */
 108          
 109          void ep0_txdone(void);
 110          void ep0_rxdone(void);
 111          
 112          void ep1_txdone(void);
 113          void ep1_rxdone(void);
 114          
 115          /*
 116          //*************************************************************************
 117          //  Functions
C51 COMPILER V7.06   ISR                                                                   02/17/2004 14:42:22 PAGE 3   

 118          //*************************************************************************
 119          */
 120          
 121          timer_isr() interrupt 1
 122          {
 123   1              RaiseIRQL();
 124   1          TIMER0_LOW = 0x00;    // 1 MS interval @24MHz
 125   1          TIMER0_HIGH =TIMER0_AT24MHZ;    // 0xF8
 126   1          Hal4Sys_ClockTicks++;
 127   1          MCUBF_Timer = 1;
 128   1          LowerIRQL();
 129   1      }
 130          
 131          
 132          usb_isr() interrupt 0
 133          {
 134   1              RaiseIRQL();
 135   1              Hal4D12_ReadInterruptRegister(&ISR_IR);
 136   1          Hal4D12_ReadLastTransactionStatus(4);
 137   1      
 138   1              if(ISR_IR != 0)
 139   1          {
 140   2                  if(D12IS_BUSRESET)
 141   2              {
 142   3                  DCPFSMstate = USBFSM4DCP_IDLE;   //USBFSM4DCP_IDLE =0x00
 143   3                  BOTFSMstate = USBFSM4BOT_IDLE;   //USBFSM4BOT_IDLE =0x01
 144   3                  D12BF_SetupOverwritten = 0;
 145   3                  D12SUSPD = 1;
 146   3              }
 147   2          
 148   2                  if(D12IS_SUSPENDCHANGE)    //挂起,进入掉电模式
 149   2                         {
 150   3                                      if( D12BF_SetupOverwritten==1 )
 151   3                                              D12SUSPD=1;
 152   3                                      else
 153   3                                              D12SUSPD=0;
 154   3      
 155   3                                      if(D12SUSPD == 1)
 156   3                                              {
 157   4                              P0 = 0xFF;
 158   4                                      P1 = 0xFF;
 159   4                                              P2 = 0xFF;
 160   4                                              P3 = 0xFF;
 161   4                      PCON |= 0x02; //Powerdown bit set
 162   4                                      while (1);              
 163   4                                              }
 164   3                        }
 165   2      
 166   2                      if(D12IS_ENDP0OUT)
 167   2                              ep0_rxdone();
 168   2                      if(D12IS_ENDP0IN)
 169   2                              ep0_txdone();
 170   2                      if(D12IS_ENDP1IN)
 171   2                              ep1_txdone();
 172   2                      if(D12IS_ENDP1OUT)
 173   2                              ep1_rxdone();
 174   2              }
 175   1          LowerIRQL();
 176   1      }
 177          
 178          void ep0_rxdone(void)           //接收处理
 179          {
C51 COMPILER V7.06   ISR                                                                   02/17/2004 14:42:22 PAGE 4   

 180   1              ISR_eplts = Hal4D12_ReadLastTransactionStatus(0); // Clear interrupt flag
 181   1          
 182   1          if (!D12EP0LTS_SUCCESS)//数据接收不成功,返回(sbit D12EP0LTS_SUCCESS = ISR_eplts^0)
 183   1              return;
 184   1      
 185   1          if (D12EP0LTS_SETUP)        //接收到SETUP信号
 186   1          {
 187   2              if(DCPFSM_SetupProc || DCPFSM_Dataout || DCPFSM_Datain )
 188   2              {
 189   3                              D12BF_SetupOverwritten = 1;
 190   3              }
 191   2              DCPFSMstate = USBFSM4DCP_SETUPPROC;//USBFSM4DCP_SETUPPROC =0x01
 192   2              }
 193   1              else /* not a setup packet, just a Data Out Packet */
 194   1              {
 195   2              if (DCPFSM_CIhandshake)
 196   2              {
 197   3                              DCPFSMstate = USBFSM4DCP_IDLE;//USBFSM4BOT_IDLE =0x01
 198   3              }
 199   2              // else just let it stay in FIFO of Control-Out
 200   2          }
 201   1      }
 202          
 203          
 204          
 205          void ep0_txdone(void)                   //发送处理
 206          {
 207   1              ISR_eplts = Hal4D12_ReadLastTransactionStatus(1); // Clear interrupt flag
 208   1          if ( !D12EP0LTS_SUCCESS )   //数据接收不成功,返回
 209   1              return;
 210   1      
 211   1          if (DCPFSM_Datain)  //DCPFSM_DataIn = DCPFSMstate^1
 212   1          {
 213   2              if( DCPXfer_wResidue >= EP0_PACKET_SIZE)
 214   2                  {
 215   3                  if(DCPXfer_atMCUCODE)
 216   3                      Hal4D12_WriteEPAtCode(1, EP0_PACKET_SIZE, DCPXfer_pData);
 217   3                  else if(DCPXfer_atMCURAM)
 218   3                      Hal4D12_WriteEndpoint(1, EP0_PACKET_SIZE, DCPXfer_pData);
 219   3                  else
 220   3                      return;
 221   3                              DCPXfer_pData += EP0_PACKET_SIZE;
 222   3                  DCPXfer_wResidue -= EP0_PACKET_SIZE;
 223   3                          /*
 224   3                          // State remains at USBFSM4DCP_DATAIN
 225   3                              */
 226   3                  }
 227   2                  else if( DCPXfer_wResidue != 0)
 228   2                  {
 229   3                  if(DCPXfer_atMCUCODE)
 230   3                      Hal4D12_WriteEPAtCode(1, (INT8)DCPXfer_wResidue, DCPXfer_pData );
 231   3                  else if(DCPXfer_atMCURAM)
 232   3                      Hal4D12_WriteEndpoint(1, (INT8)DCPXfer_wResidue, DCPXfer_pData );
 233   3                  else
 234   3                      return;
 235   3                              //DCPXfer_pData += DCPXfer_wResidue;
 236   3                  DCPXfer_wResidue = 0;
 237   3                              DCPFSMstate = USBFSM4DCP_HANDSHAKE4CI;
 238   3                      }
 239   2                  else //  DCPXfer_wResidue == 0
 240   2                  {
 241   3                  // Send zero packet at the end
C51 COMPILER V7.06   ISR                                                                   02/17/2004 14:42:22 PAGE 5   

 242   3                          Hal4D12_WriteEndpoint(1, 0, 0);
 243   3                          DCPFSMstate = USBFSM4DCP_HANDSHAKE4CI;      // USBFSM4DCP_HANDSHAKE4CI =0x10
 244   3                  }
 245   2          }
 246   1              else if( DCPFSM_COhandshake )
 247   1          {
 248   2              DCPFSMstate = USBFSM4DCP_IDLE;                          // USBFSM4BOT_IDLE =0x01
 249   2          }
 250   1          // else just exit
 251   1      #undef DCPXfer_wResidue
 252   1      }
 253          
 254          
 255          void ep1_txdone(void)                   //端点1,发送处理
 256          {
 257   1              Hal4D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
 258   1      }
 259          
 260          void ep1_rxdone(void)                   //端点1,接收处理
 261          {
 262   1              Hal4D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
 263   1      }
 264          
 265          
 266          
 267          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    348    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   IDATA SIZE       =   ----    ----
   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 + -