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

📄 isr.lst

📁 采用菲利普的USBD12芯片
💻 LST
字号:
C51 COMPILER V7.50   ISR                                                                   03/17/2005 14:08:55 PAGE 1   


C51 COMPILER V7.50, 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             /*
   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          #include <rtx51tny.h>
  22          
  23          /*
  24          //*************************************************************************
  25          //  Public static data
  26          //*************************************************************************
  27          */
  28          
  29          EPPFLAGS bEPPflags;
  30          CONTROL_XFER ControlData;
  31          unsigned int data d12_addr;
  32          extern byte_count byte_cnt;
  33          unsigned int data D12_DATA;
  34          unsigned int data D12_COMMAND;
  35          
  36          
  37          /* ISR static vars */
  38          unsigned char idata GenEpBuf[10];
  39          unsigned char idata EpBuf[EP2_PACKET_SIZE];
  40          IO_REQUEST idata ioRequest;
  41          
  42          //厂商请求入口地址
  43          code void (*VendorDeviceRequest[])(void) =
  44          {
  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.50   ISR                                                                   03/17/2005 14:08:55 PAGE 2   

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

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


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