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

📄 isr.lst

📁 STC51+PDIUSBD12 USB鼠标源代码
💻 LST
字号:
C51 COMPILER V8.02   ISR                                                                   03/04/2008 13:50:51 PAGE 1   


C51 COMPILER V8.02, 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          #include "d12.h"
   2          #include "D12CI.H"
   3          #include "uart.h"
   4          #include "mytype.h"
   5          #define SWAP(x)     ((((uint16)(x))<<8)|(((uint16)(x))>>8))   
   6          EPPFLAGS bEPPflags;
   7          
   8          /* Control endpoint TX/RX buffers */
   9          extern CONTROL_XFER ControlData;
  10          extern void bus_reset(void);
  11          
  12          extern void ep0_txdone(void);
  13          extern void ep0_rxdone(void);
  14          
  15          extern void ep1_txdone(void);
  16          extern void ep1_rxdone(void);
  17          
  18          extern void main_txdone(void);
  19          extern void main_rxdone(void);
  20          
  21          extern void dma_eot(void);
  22          unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
  23          unsigned char idata EpBuf[EP2_PACKET_SIZE];
  24          //中断服务程序
  25          void fn_usb_isr()
  26          {
  27   1        uint16 i_st;
  28   1        Prints("IO");
  29   1        bEPPflags.bits.in_isr=1;
  30   1        i_st=D12_ReadInterruptRegister();           //读中断寄存器
  31   1        if(i_st!=0)
  32   1          {
  33   2                Prints("\r\ni_st=");
  34   2                PrintShortIntHex(i_st);    //输出
  35   2                if(i_st&D12_INT_BUSRESET)
  36   2                  {
  37   3                        bEPPflags.bits.bus_reset=1;
  38   3                        Prints("\r\n总线复位");
  39   3                      }
  40   2                if(i_st&D12_INT_EOT)
  41   2                  dma_eot();                            //DMA传输结束
  42   2                if(i_st&D12_INT_SUSPENDCHANGE)
  43   2                  {
  44   3                        bEPPflags.bits.suspend=1;
  45   3                        D12_SetEndpointEnable(1);
  46   3                        Prints("\r\n总线挂起");
  47   3                      }
  48   2                
  49   2                if(i_st&D12_INT_ENDP0IN)
  50   2                  ep0_txdone(); 
  51   2                if(i_st&D12_INT_ENDP0OUT)
  52   2                  ep0_rxdone();                       
  53   2                
  54   2                if(i_st&D12_INT_ENDP1IN)
  55   2                  ep1_txdone();                         
C51 COMPILER V8.02   ISR                                                                   03/04/2008 13:50:51 PAGE 2   

  56   2                if(i_st&D12_INT_ENDP1OUT)
  57   2                  ep1_rxdone();
  58   2                if(i_st&D12_INT_ENDP2IN)
  59   2                  main_txdone();                          
  60   2                if(i_st&D12_INT_ENDP2OUT)
  61   2                  main_rxdone();
  62   2              }
  63   1        bEPPflags.bits.in_isr=0; 
  64   1      }
  65          //端点0OUT中断
  66          void ep0_rxdone(void)
  67          {
  68   1        uint8 ep_last,i;
  69   1        ep_last=D12_ReadLastTransactionStatus(0);
  70   1        Prints("\r\neplast=");
  71   1        PrintShortIntHex(ep_last);
  72   1        if(ep_last&D12_SETUPPACKET)
  73   1         {
  74   2           ControlData.wLength=0;
  75   2               ControlData.wCount=0;
  76   2               Prints("\nEP0OUT");
  77   2               if(D12_ReadEndpoint(0,sizeof(ControlData.DeviceRequest),(uint8 *)(&(ControlData.DeviceRequest)))!=sizeof
             -(DEVICE_REQUEST))
  78   2                 {
  79   3                   Prints("\nEP0OUTRETURN");
  80   3                   D12_SetEndpointStatus(0,1);
  81   3                       D12_SetEndpointStatus(1,1);
  82   3                       bEPPflags.bits.control_state=USB_IDLE;//空闲
  83   3                       return ;
  84   3                 }
  85   2               ControlData.DeviceRequest.wValue=SWAP(ControlData.DeviceRequest.wValue);
  86   2               ControlData.DeviceRequest.wLength=SWAP(ControlData.DeviceRequest.wLength);
  87   2               ControlData.DeviceRequest.wIndex=SWAP(ControlData.DeviceRequest.wIndex);
  88   2               Prints("\r\nbmRequestType=");
  89   2               PrintShortIntHex(ControlData.DeviceRequest.bmRequestType);
  90   2               Prints("bRequest=");
  91   2               PrintShortIntHex(ControlData.DeviceRequest.bRequest);
  92   2               Prints("wValue=");
  93   2               PrintShortIntHex(ControlData.DeviceRequest.wValue);
  94   2               Prints("wIndex=");
  95   2               PrintShortIntHex(ControlData.DeviceRequest.wIndex);
  96   2               Prints("wLength");
  97   2               PrintShortIntHex(ControlData.DeviceRequest.wLength);
  98   2      
  99   2               D12_AcknowledgeEndpoint(0);
 100   2               D12_AcknowledgeEndpoint(1);
 101   2               ControlData.wLength=ControlData.DeviceRequest.wLength;
 102   2               ControlData.wCount=0;
 103   2               if(ControlData.DeviceRequest.bmRequestType&(uint8)USB_ENDPOINT_DIRECTION_MASK)
 104   2                 { //从设备传输数据 IN
 105   3                    bEPPflags.bits.setup_packet=1;
 106   3                        bEPPflags.bits.control_state=USB_TRANSMIT;
 107   3                        Prints("\r\n从设备传输数据进主机");
 108   3                 }
 109   2               else  //从主机到设备的数据OUT
 110   2                 {
 111   3                   if(ControlData.DeviceRequest.wLength==0)              //该请求没有数据阶段则设置为空闲,不需要再接收数据
 112   3                         {
 113   4                           bEPPflags.bits.setup_packet=1;
 114   4                               bEPPflags.bits.control_state=USB_IDLE;
 115   4                               Prints("\r\n从主机传数据到设备");
 116   4                         }
C51 COMPILER V8.02   ISR                                                                   03/04/2008 13:50:51 PAGE 3   

 117   3                       else
 118   3                         {
 119   4                           if(ControlData.DeviceRequest.wLength>MAX_CONTROLDATA_SIZE)    //接收数据的长度出错
 120   4                                 {
 121   5                                   bEPPflags.bits.control_state=USB_IDLE;
 122   5                                       D12_SetEndpointStatus(0,1);
 123   5                                       D12_SetEndpointStatus(1,1);
 124   5                                       Prints("\R\N接收数据的长度出错");
 125   5                                       
 126   5                                 }
 127   4                               else
 128   4                                 {
 129   5                                   bEPPflags.bits.control_state=USB_RECEIVE;                    //带数据的请求,且长度没错,则要接收数据
 130   5                                       Prints("\r\n带数据的请求,且长度没错");
 131   5                                 }
 132   4                         }
 133   3                 }
 134   2         }
 135   1        else if(bEPPflags.bits.control_state==USB_RECEIVE)
 136   1          {
 137   2                i=D12_ReadEndpoint(0,EP0_PACKET_SIZE,ControlData.dataBuffer+ControlData.wCount);// 读取数据
 138   2                ControlData.wCount+=i;
 139   2                if(i!=EP0_PACKET_SIZE||ControlData.wCount>=ControlData.wLength)                               //如果接收完毕
 140   2                  {
 141   3                        bEPPflags.bits.setup_packet=1;
 142   3                        bEPPflags.bits.control_state=USB_IDLE;
 143   3                      }
 144   2              }
 145   1        else 
 146   1          {                                                                                                                                                           //既不是建立包又不是接收状态
 147   2                bEPPflags.bits.control_state=USB_IDLE;
 148   2              }
 149   1      }
 150          //端点0IN
 151          void ep0_txdone(void)
 152          {
 153   1        uint16 i=ControlData.wLength-ControlData.wCount;
 154   1        Prints("\r\nwLength=");
 155   1        PrintShortIntHex(ControlData.wLength);
 156   1        Prints("\r\nwCount=");
 157   1        PrintShortIntHex(ControlData.wCount);
 158   1        Prints("\r\ni=");     
 159   1        PrintShortIntHex(i);
 160   1        D12_ReadLastTransactionStatus(1);
 161   1        if(bEPPflags.bits.control_state!=USB_TRANSMIT)                  //非发送状态返回
 162   1          return ;
 163   1        if(i>=EP0_PACKET_SIZE)
 164   1          {
 165   2                D12_WriteEndpoint(1,EP0_PACKET_SIZE,ControlData.pData+ControlData.wCount);
 166   2                ControlData.wCount+=EP0_PACKET_SIZE;
 167   2                bEPPflags.bits.control_state=USB_TRANSMIT;      
 168   2              }
 169   1        else if(i!=0)
 170   1          {
 171   2                D12_WriteEndpoint(1,i,ControlData.pData+ControlData.wCount);
 172   2                ControlData.wCount+=i;
 173   2                bEPPflags.bits.control_state=USB_IDLE;
 174   2              }
 175   1        else if(i==0)
 176   1          {
 177   2                D12_WriteEndpoint(1,0,0);
 178   2                bEPPflags.bits.control_state=USB_IDLE;////发送完毕
C51 COMPILER V8.02   ISR                                                                   03/04/2008 13:50:51 PAGE 4   

 179   2              }        
 180   1      }
 181          void dma_eot(void)
 182          {
 183   1      }
 184          //端点1IN
 185          void ep1_txdone(void)
 186          {
 187   1        D12_ReadLastTransactionStatus(3);
 188   1      }
 189          //OUT
 190          void ep1_rxtone(void)
 191          {
 192   1        uint8 len;
 193   1        D12_ReadLastTransactionStatus(2);
 194   1        len=D12_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf);                     //读取数据
 195   1        if(len!=0)
 196   1          bEPPflags.bits.ep1_rxdone=1;
 197   1      }
 198          //主端点IN
 199          void main_txdone(void)
 200          {
 201   1        D12_ReadLastTransactionStatus(5);
 202   1      }
 203          //主OUT
 204          /*void main_rxdone(void)
 205          {
 206            uint8 len,epstatus;
 207            D12_ReadLastTransactionStatus(4);
 208            epstatus=D12_ReadEndpointStatus(4);
 209            epstatus&=0x60;
 210            len=D12_ReadEndpoint(4,64,EpBuf);
 211            if(epstatus==0x60)
 212              len==D12_ReadEndpoint(4,64,EpBuf);
 213          
 214            len = D12_ReadEndpoint(4, 64, EpBuf);
 215                  epstatus=D12_ReadEndpointStatus(4);
 216                  epstatus &= 0x60;
 217                  if (epstatus == 0x60)
 218                          len = D12_ReadEndpoint(4, 64, EpBuf);//读取双缓冲区数据
 219          }*/
 220          void main_rxdone(void)
 221          {
 222   1              unsigned char len,epstatus;
 223   1      
 224   1              D12_ReadLastTransactionStatus(4); //清中断标志位
 225   1      
 226   1              //接收数据
 227   1              len = D12_ReadEndpoint(4, 64, EpBuf);
 228   1              epstatus=D12_ReadEndpointStatus(4);
 229   1              epstatus &= 0x60;
 230   1              if (epstatus == 0x60)
 231   1                      len = D12_ReadEndpoint(4, 64, EpBuf);//读取双缓冲区数据
 232   1      }
 233          
 234          
 235          
 236          
 237          
 238          
 239          
 240          
C51 COMPILER V8.02   ISR                                                                   03/04/2008 13:50:51 PAGE 5   

 241          
 242          
 243          
 244          
 245          
 246          
 247          
 248          
 249          
 250          
 251          
 252          
 253          
 254          
 255          
 256          
 257          
 258          
 259          
 260          
 261          
 262          
 263          
 264          
 265          
 266          
 267          
 268          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    841    ----
   CONSTANT SIZE    =    233    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       6
   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 + -