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

📄 d12driver.lst

📁 PDIUSBD12的固件程序可能对开发USB1.1的兄弟有用
💻 LST
字号:
C51 COMPILER V7.06   D12DRIVER                                                             09/15/2008 18:19:57 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE D12DRIVER
OBJECT MODULE PLACED IN D12Driver.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE D12Driver.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //应用层
   2          
   3          #include <reg52.h>
   4          #include "D12Config.h"
   5          #include "D12CI.h"
   6          #include "D12HAL.h"
   7          #include "Chap_9.h"
   8          #include "Descriptor.h"
   9          #include "D12Driver.h"
  10          
  11          INT8U idata GenEpBuf[EP1_PACKET_SIZE];
  12          INT8U idata EpBuf[EP2_PACKET_SIZE];
  13          
  14          
  15          INT8U Init_D12(void)
  16          {
  17   1              bEPPflags.value = 0;                                                    //初始化USB事件标志变量
  18   1      
  19   1              Init_D12Port();                                                                 //初始化PDIUSBD12与51单片机连接的端口
  20   1              Rst_D12();
  21   1              reconnect_USB(); 
  22   1      
  23   1              /*if (D12_ReadChipID()!=0x1012)                                 //读取芯片ID号,如果不为1012H
  24   1                      return 1;                                                       //则复位失败*/
  25   1              return 0;                                                                               //初始化成功
  26   1      }
  27          
  28          //USB事件处理函数
  29          void usbserve(void)
  30          {
  31   1              if (bEPPflags.bits.setup_packet)
  32   1              {
  33   2                      DISABLE();
  34   2                      bEPPflags.bits.setup_packet = 0;
  35   2                      control_handler();                                                      //调用请求处理子程序
  36   2                      ENABLE();
  37   2              }
  38   1      
  39   1              if (bEPPflags.bits.bus_reset) 
  40   1              {
  41   2                      DISABLE();
  42   2                      bEPPflags.bits.bus_reset = 0;
  43   2                      ENABLE();
  44   2                      d12_busreset();
  45   2              } 
  46   1      
  47   1              if (bEPPflags.bits.suspend) 
  48   1              {
  49   2                      DISABLE();
  50   2                      bEPPflags.bits.suspend= 0;
  51   2                      ENABLE();
  52   2                      d12_suspend();
  53   2              }
  54   1      
  55   1              if  (bEPPflags.bits.timer) 
C51 COMPILER V7.06   D12DRIVER                                                             09/15/2008 18:19:57 PAGE 2   

  56   1              {
  57   2               DISABLE();
  58   2               bEPPflags.bits.timer= 0;
  59   2               ENABLE();
  60   2               if(bEPPflags.bits.configuration)
  61   2                   check_key_LED();                                           //设备已配置,调用按键和LED处理程序
  62   2          }
  63   1      }
  64          
  65          
  66          void d12_busreset(void)
  67          {
  68   1              //此次未用到
  69   1      }
  70          
  71          
  72          void dma_eot(void)
  73          {
  74   1              //此次未用到
  75   1      }
  76          
  77          void d12_suspend(void)
  78          {
  79   1          //为测试方便禁止挂起
  80   1      }
  81          
  82          void ep1_txdone(void)
  83          {
  84   1              D12_ReadLastTransactionStatus(3);                               //清中断标志位
  85   1      }
  86          
  87          void ep1_rxdone(void)
  88          {
  89   1              INT8U len;
  90   1      
  91   1              D12_ReadLastTransactionStatus(2);
  92   1              len = D12_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf);//读取缓冲区中的数据
  93   1              if(len != 0)
  94   1                      bEPPflags.bits.ep1_rxdone = 1;                          //标志接收到数据
  95   1      }
  96          
  97          void ep2_txdone(void)
  98          {
  99   1              D12_ReadLastTransactionStatus(5);
 100   1      }
 101          
 102          void ep2_rxdone(void)
 103          {
 104   1              INT8U len;
 105   1              
 106   1              D12_ReadLastTransactionStatus(4);
 107   1              len = D12_ReadEndpoint(4,EP2_PACKET_SIZE,EpBuf);
 108   1              if (len != 0)
 109   1                      bEPPflags.bits.ep2_rxdone = 1;
 110   1      }
 111          //D12中断服务程序
 112          void Usb_Exception(void)  interrupt 0
 113          {
 114   1              INT16U i_st;
 115   1              
 116   1              DISABLE();                                                                      //进入D12中断服务程序时关中断
 117   1      
C51 COMPILER V7.06   D12DRIVER                                                             09/15/2008 18:19:57 PAGE 3   

 118   1              bEPPflags.bits.in_isr = 1;
 119   1              i_st = D12_ReadInterruptRegister();                     //读取PDIUSBD12中断寄存器值
 120   1              if(i_st != 0)
 121   1              {
 122   2                      if(i_st & D12_INT_BUSRESET)
 123   2                              bEPPflags.bits.bus_reset = 1;
 124   2                      if(i_st & D12_INT_EOT)
 125   2                              dma_eot();
 126   2                      if(i_st & D12_INT_SUSPENDCHANGE)
 127   2                              bEPPflags.bits.suspend = 1;
 128   2                      if(i_st & D12_INT_ENDP0IN)
 129   2                              ep0_txdone();
 130   2                      if(i_st & D12_INT_ENDP0OUT)
 131   2                              ep0_rxdone();
 132   2                      if(i_st & D12_INT_ENDP1IN)
 133   2                              ep1_txdone();
 134   2                      if(i_st & D12_INT_ENDP1OUT)
 135   2                              ep1_rxdone();
 136   2                      if(i_st & D12_INT_ENDP2IN)
 137   2                              ep2_txdone();
 138   2                      if(i_st & D12_INT_ENDP2OUT)
 139   2                              ep2_rxdone();
 140   2              }
 141   1              bEPPflags.bits.in_isr = 0;
 142   1              
 143   1              ENABLE();                                                                       //退出D12中断服务程序时开中断
 144   1      }
 145          
 146          
 147          
 148          
 149          void disconnect_USB(void)
 150          {
 151   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 152   1      }       //SoftConnect 断开
 153          
 154          
 155          void connect_USB(void)
 156          {
 157   1              D12_SetDMA(0x00);
 158   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 159   1      }                                                                                               //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
 160          
 161          
 162          void reconnect_USB(void)
 163          {
 164   1              INT16U clk_cnt;
 165   1          MCU_LED0=0;
 166   1              MCU_LED1=0;
 167   1          MCU_D12SUSPD=0;
 168   1              D12_SetAddressEnable(0,1);
 169   1              D12_SetEndpointEnable(1);
 170   1              disconnect_USB();
 171   1          for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++);
 172   1          connect_USB();
 173   1          MCU_LED0=1;
 174   1              MCU_LED1=1;
 175   1      
 176   1      }
 177          
 178          
 179          void check_key_LED(void)
C51 COMPILER V7.06   D12DRIVER                                                             09/15/2008 18:19:57 PAGE 4   

 180          {
 181   1              static INT8 c,last_key= 0xf;
 182   1          c=MCU_SWM0& MCU_SWM1;
 183   1          c&= 0x0f;
 184   1          if(c!=last_key)
 185   1              D12_WriteEndpoint(3,1,&c);
 186   1              last_key= c;
 187   1              if(bEPPflags.bits.ep1_rxdone)
 188   1              {
 189   2                      DISABLE();
 190   2                      bEPPflags.bits.ep1_rxdone=0;
 191   2                      ENABLE();
 192   2                      MCU_LED0= !(GenEpBuf[3]&0x1);
 193   2                      MCU_LED1= !(GenEpBuf[3]&0x2);
 194   2              }
 195   1      }
 196          
 197          
 198          INT16U Get_D12_FirmwareVer(void)
 199          {
 200   1              return 0x0500;
 201   1      }


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