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

📄 isr.lst

📁 KeilC51下的USB的slave设备源码,MCS51开发.
💻 LST
字号:
C51 COMPILER V7.06   ISR                                                                   06/23/2003 11:17:00 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 OPTIMIZE(2,SPEED) DEBUG OBJECTEXTEND

stmt level    source

   1          /*
   2             //*************************************************************************
   3             //
   4             //                           ZLGMCU
   5             //                           www.zlgmcu.com
   6             // File Name:        isr.C
   7             // Revision:         0.4(2002-07-08)
   8             // Author:           Liu Ying Bin
   9             // Use library:  USB51S.LIB
  10             // Note:                     USB51S.LIB不带DMA控制功能
  11             //*************************************************************************
  12             */
  13          
  14          
  15          #include <stdio.h>
  16          #include <string.h>
  17          #include <reg51.h>                /* special function register declarations   */
  18          #include "isr.h"
  19          #include "mainloop.h"
  20          #include "protozlg.h"
  21          
  22          /*
  23          //*************************************************************************
  24          //  Public static data
  25          //*************************************************************************
  26          */
  27          
  28          EPPFLAGS bEPPflags;
  29          CONTROL_XFER ControlData;
  30          unsigned int data d12_addr;
  31          extern byte_count byte_cnt;
  32          unsigned int data D12_DATA;
  33          unsigned int data D12_COMMAND;
  34          
  35          
  36          /* ISR static vars */
  37          unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
  38          unsigned char idata EpBuf[EP2_PACKET_SIZE];
  39          IO_REQUEST idata ioRequest;
  40          
  41          //厂商请求入口地址
  42          code void (*VendorDeviceRequest[])(void) =
  43          {
  44                  reserved,
  45                  reserved,
  46                  reserved,
  47                  reserved,
  48                  reserved,
  49                  reserved,
  50                  reserved,
  51                  reserved,
  52                  reserved,
  53                  reserved,
  54                  reserved,
  55                  reserved,
C51 COMPILER V7.06   ISR                                                                   06/23/2003 11:17:00 PAGE 2   

  56                  read_write_register,
  57                  reserved,
  58                  reserved,
  59                  reserved
  60          };
  61          
  62          //USB总线重新连接(先断开,再连接)子程序
  63          void reconnect_USB(void)
  64          {
  65   1              unsigned long clk_cnt;
  66   1              MCU_LED0 = 0;//亮LED显示(实际应用中可去掉)
  67   1              MCU_LED1 = 0;//(实际应用中可去掉)
  68   1      
  69   1              D12SUSPD = 0;
  70   1              disconnect_USB();
  71   1              for (clk_cnt=0;clk_cnt<=0x9000;clk_cnt++) {}
  72   1              connect_USB();
  73   1      
  74   1              MCU_LED0 = 1;//灭LED显示(实际应用中可去掉)
  75   1              MCU_LED1 = 1;//(实际应用中可去掉)
  76   1      }
  77          
  78          //断开USB总线连接
  79          void disconnect_USB(void)
  80          {
  81   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
  82   1      }
  83          
  84          //连接到USB总线
  85          void connect_USB(void)
  86          {
  87   1              DISABLE;
  88   1              bEPPflags.value = 0;
  89   1              ENABLE;
  90   1              D12_SetDMA(0x0);//设置D12工作模式
  91   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
  92   1      }
  93          
  94          //总线复位服务子程序
  95          void D12_busreset(void)
  96          {
  97   1      //可添加用户代码(进行检测到总线复位的操作)
  98   1      }
  99          
 100          //DMA操作结束中断服务子程序
 101          void dma_eot(void)
 102          {
 103   1      //可添加用户代码(进行检测DMA操作结束的操作)
 104   1      }
 105          
 106          //D12挂起服务子程序
 107          void d12_suspend(void)
 108          {
 109   1      //可添加用户代码
 110   1      }
 111          
 112          //端点1输出中断操作
 113          void ep1_txdone(void)
 114          {
 115   1              D12_ReadLastTransactionStatus(3);//复位中断寄存器
 116   1              //可添加用户代码(进行检测端点号3IN令牌的操作)
 117   1      }
C51 COMPILER V7.06   ISR                                                                   06/23/2003 11:17:00 PAGE 3   

 118          
 119          //端点1输入中断操作
 120          void ep1_rxdone(void)
 121          {
 122   1              unsigned char len;
 123   1              D12_ReadLastTransactionStatus(2);//复位中断寄存器
 124   1              len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);//读取端点1接收数据
 125   1              if (len != 0)
 126   1                      bEPPflags.bits.ep1_rxdone = 1;//标志端点1接收到数据
 127   1      }
 128          
 129          //端点2输出中断操作
 130          void ep2_txdone(void)
 131          {
 132   1              D12_ReadLastTransactionStatus(5);//复位中断寄存器
 133   1              //可添加用户代码(进行检测端点号5IN令牌的操作)
 134   1              if(byte_cnt.word>0)
 135   1              {
 136   2                      if(byte_cnt.word<64)
 137   2                      {
 138   3                              D12_WriteEndpoint(5, byte_cnt.byte.low, EpBuf);
 139   3                              byte_cnt.word=0;
 140   3                      }
 141   2                      else
 142   2                      {
 143   3                              byte_cnt.word=byte_cnt.word-64;
 144   3                              D12_WriteEndpoint(5, 64, EpBuf);
 145   3                      }
 146   2              }
 147   1              
 148   1              if (D12_ReadEndpointStatus(5) & 0x60 != 0x60)
 149   1              {
 150   2                      if(byte_cnt.word>0)
 151   2                      {
 152   3                              if(byte_cnt.word<64)
 153   3                              {
 154   4                                      D12_WriteEndpoint(5, byte_cnt.byte.low, EpBuf);
 155   4                                      byte_cnt.word=0;
 156   4                              }
 157   3                              else
 158   3                              {
 159   4                                      byte_cnt.word=byte_cnt.word-64;
 160   4                                      D12_WriteEndpoint(5, 64, EpBuf);
 161   4                              }
 162   3                      }
 163   2              }       
 164   1              
 165   1      }
 166          
 167          //端点2输入中断操作
 168          void ep2_rxdone(void)
 169          {
 170   1              unsigned char len;
 171   1              D12_ReadLastTransactionStatus(4);//复位中断寄存器
 172   1              len = D12_ReadEndpoint(4, 64, EpBuf);//读取端点2接收数据
 173   1              if (bEPPflags.bits.ep2buf_full)
 174   1                      len = D12_ReadEndpoint(4, 64, EpBuf);//读取端点2接收数据
 175   1              if (len != 0)
 176   1                      bEPPflags.bits.ep2_rxdone = 1;//标志端点2接收到数据
 177   1      }
 178          

C51 COMPILER V7.06   ISR                                                                   06/23/2003 11:17:00 PAGE 4   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    315    ----
   CONSTANT SIZE    =     48    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     31       6
   IDATA SIZE       =     86    ----
   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 + -