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

📄 isr.lst

📁 基于MCU的U盘源码
💻 LST
字号:
C51 COMPILER V7.09   ISR                                                                   05/11/2005 17:30:29 PAGE 1   


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

line level    source

   1          //#include <reg51.h>                /* special function register declarations   */ 
   2          #include <stdio.h>
   3          #include <string.h>
   4          
   5          #include "d12ci.h"
   6          #include "main.h"
*** ERROR C129 IN LINE 101 OF MAIN.H: missing ';' before 'struct'
   7          #include "USB100.h"
   8          #include "isr.h"
   9          //#include "..\inc\44b.h"
  10          
  11          #include "bulk_only.h"
  12          
  13          /*
  14          //*************************************************************************
  15          //  Public static data
  16          //*************************************************************************
  17          */
  18          
  19          /* Control endpoint TX/RX buffers */
  20          extern CONTROL_XFER ControlData;
  21          extern EPPFLAGS bEPPflags;
  22                  
  23          // ISR static vars ;
  24          
  25          unsigned char  EpBuf[EP2_PACKET_SIZE];
  26          unsigned char  GenEpBuf[EP1_PACKET_SIZE];
  27          IO_REQUEST  ioRequest;
  28          unsigned char ioSize, ioCount;
  29          
  30          unsigned long ClockTicks = 0;
  31          unsigned char MainEpBuf[256];
  32          
  33          extern unsigned char bulk_state;
  34          
  35          
  36          
  37          void usb_isr()
  38          {
  39                  int i;
  40                  unsigned int i_st;
  41                  DISABLE;
  42                  rI_ISPC=BIT_EINT2;//clear regiester
  43          
  44                  //fn_usb_isr() begin;
  45                  bEPPflags.bits.in_isr = 1;
  46                  
  47                  i_st = D12_ReadInterruptRegister();
  48          
  49                  if(i_st != 0) {
  50          
  51                          if(i_st & D12_INT_ENDP0IN){
  52                                  ep0_txdone();
  53                                  }
  54                          if(i_st & D12_INT_ENDP0OUT){
C51 COMPILER V7.09   ISR                                                                   05/11/2005 17:30:29 PAGE 2   

  55                                  ep0_rxdone();
  56                          }
  57          
  58                          if(i_st & D12_INT_ENDP2IN){
  59                                  main_txdone();
  60                                  }
  61                          if(i_st & D12_INT_ENDP2OUT){
  62                                  main_rxdone();
  63                                  }
  64                  }
  65                  bEPPflags.bits.in_isr = 0;
  66          
  67                  ENABLE;
  68          }
  69          
  70          void bus_reset(void)
  71          {
  72          ;
  73          }
  74          void dma_eot(void)
  75          {
  76          ;
  77          }
  78          //---------------------------------
  79          void ep0_rxdone(void)
  80          {
  81                  unsigned char ep_last, i;
  82                  ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
  83                  if (ep_last & D12_SETUPPACKET) {
  84          
  85                          ControlData.wLength = 0;
  86                          ControlData.wCount = 0;
  87                  //判断端点是否满,如是,则取出
  88                          if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
  89                                  (unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
  90          
  91                                  D12_SetEndpointStatus(0, 1);
  92                                  D12_SetEndpointStatus(1, 1);
  93                                  bEPPflags.bits.control_state = USB_IDLE;
  94                                  
  95                                  return;
  96                          }
  97          
  98                          Uart_Printf("bmRequestType=0x%x,bRequest=0x%x,wValue=0x%x,wIndex=0x%x,wLength=0x%x\n",
  99                                                                  ControlData.DeviceRequest.bmRequestType,
 100                                                                  ControlData.DeviceRequest.bRequest,
 101                                                                  ControlData.DeviceRequest.wValue,
 102                                                                  ControlData.DeviceRequest.wIndex,
 103                                                                  ControlData.DeviceRequest.wLength);
 104          
 105          
 106                          // Acknowledge setup here to unlock in/out endp
 107                  //向控制输出端点发送应答建立命令以重新使能下一个建立阶段
 108                          D12_AcknowledgeEndpoint(0);
 109                          D12_AcknowledgeEndpoint(1);
 110          
 111                          ControlData.wLength = ControlData.DeviceRequest.wLength;
 112                          ControlData.wCount = 0;
 113                  //需要证实控制传输是控制读还是写,如果是读:
 114                  //如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向
 115                  //主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输
 116                  //模式即准备在主机发送请求时发送数据
C51 COMPILER V7.09   ISR                                                                   05/11/2005 17:30:29 PAGE 3   

 117          
 118                          if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
 119                                  bEPPflags.bits.setup_packet = 1;
 120                                  bEPPflags.bits.control_state = USB_IDLE;                /* get command */
 121                          }
 122                  //如果是写
 123                          else {
 124                                  if (ControlData.DeviceRequest.wLength == 0) {
 125                                          bEPPflags.bits.setup_packet = 1;
 126                                          bEPPflags.bits.control_state = USB_IDLE;                /* set command */
 127                                  }
 128                                  else {
 129                                          if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
 130                                                  bEPPflags.bits.control_state = USB_IDLE;
 131                                                  D12_SetEndpointStatus(0, 1);
 132                                                  D12_SetEndpointStatus(1, 1);
 133                                          }
 134                                          else {
 135                                                  bEPPflags.bits.control_state = USB_RECEIVE;     /* set command with OUT token */
 136                                          }
 137                                  } // set command with data
 138                          } // else set command
 139                  } // if setup packet
 140          
 141                  else if (bEPPflags.bits.control_state == USB_RECEIVE) {
 142                          i =     D12_ReadEndpoint(0, EP0_PACKET_SIZE,
 143                                  ControlData.dataBuffer + ControlData.wCount);
 144          
 145                          ControlData.wCount += i;
 146                          if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
 147                                  bEPPflags.bits.setup_packet = 1;
 148                                  bEPPflags.bits.control_state = USB_IDLE;
 149                          }
 150                  }
 151          
 152                  else {
 153                          bEPPflags.bits.control_state = USB_IDLE;
 154                  }
 155          
 156          }
 157          //----------------------------------
 158          void ep0_txdone(void)
 159          {
 160                  short i = ControlData.wLength - ControlData.wCount;
 161                  D12_ReadLastTransactionStatus(1); // Clear interrupt flag
 162                  if (bEPPflags.bits.control_state != USB_TRANSMIT) 
 163                          return;
 164                  //-------------------------
 165                  if( i >= EP0_PACKET_SIZE) {
 166                          D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
 167                          ControlData.wCount = ControlData.wCount + EP0_PACKET_SIZE;
 168          
 169                          bEPPflags.bits.control_state = USB_TRANSMIT;
 170                  }
 171                  else if( i != 0) {
 172                          D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
 173                          ControlData.wCount = ControlData.wCount + i;
 174          
 175                          bEPPflags.bits.control_state = USB_IDLE;
 176                  }
 177                  else if (i == 0){
 178                          D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???
C51 COMPILER V7.09   ISR                                                                   05/11/2005 17:30:29 PAGE 4   

 179          
 180                          bEPPflags.bits.control_state = USB_IDLE;
 181                  }
 182          
 183          }
 184          
 185          void main_txdone(void)
 186          {
 187          
 188                  D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
 189          
 190                  switch(bulk_state){
 191                          case BULK_DATA_TRANS:
 192                                  TransDataGoOn();
 193                                  break;
 194                          case BULK_DATA_END:
 195                                  TransmitCSW();
 196                                  break;
 197                          case BULK_REQEST_TRANS:
 198                                  TransRequestGoOn();
 199                                  break;
 200                          case BULK_CSW_END:
 201                                  break;
 202                          default:        return;
 203                          }
 204          
 205          }
 206          
 207          void main_rxdone(void)
 208          {
 209                  int i;
 210                  D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
 211                  
 212                  D12_ReadEndpoint(4, 64, EpBuf);
 213                  for(i=0;i<0x40;i++) Uart_Printf("%x ",EpBuf[i]);
 214                  if((bulk_state != BULK_DATA_RECIEVE) &&(EpBuf[0] == 0x55)) InterpretCBW();
 215                  else Trans_Data2PC();
 216          
 217          }
 218          

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

⌨️ 快捷键说明

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