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

📄 d12ci.lst

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


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

stmt level    source

   1          //接口控制驱动层
   2          
   3          #include <reg52.h>
   4          #include "D12Config.h"
   5          #include "D12HAL.h"
   6          #include "D12CI.h"
   7          #include "Chap_9.h"
   8          
   9          INT16U D12_ReadChipID(void)
  10          {
  11   1              INT16U i,j;
  12   1      
  13   1              if(bEPPflags.bits.in_isr == 0)
  14   1                      DISABLE();
  15   1      
  16   1              outportb(D12_COMMAND, 0xFD);                                            //发送读PDIUSBD12芯片ID号命令   
  17   1              i=inportb(D12_DATA);                                                            //读取ID号低字节
  18   1              j=inportb(D12_DATA);                                                            //读取ID号高位字节
  19   1              i += (j<<8);                                                                            //组成16位的PDIUSBD12芯片ID号
  20   1      
  21   1              if(bEPPflags.bits.in_isr == 0)
  22   1                      ENABLE();
  23   1      
  24   1              return i;
  25   1      }
  26          
  27          
  28          void D12_SetAddressEnable(INT8U bAddress, INT8U bEnable)
  29          {
  30   1              if(bEPPflags.bits.in_isr == 0)
  31   1                      DISABLE();
  32   1      
  33   1              outportb(D12_COMMAND, 0xD0);                                            //输出设置地址/使能指令
  34   1              if(bEnable)
  35   1                      bAddress |= 0x80;                                                               //bit7置1,使能
  36   1              outportb(D12_DATA, bAddress);                                           //输出设置值
  37   1      
  38   1              if(bEPPflags.bits.in_isr == 0)
  39   1                      ENABLE();
  40   1      }
  41          
  42          
  43          void D12_SetEndpointEnable(INT8U bEnable)
  44          {
  45   1              if(bEPPflags.bits.in_isr == 0)
  46   1                      DISABLE();
  47   1      
  48   1              outportb(D12_COMMAND, 0xD8);                                            //输出设置端点使能指令
  49   1              if(bEnable)
  50   1                      outportb(D12_DATA, 1);                                                  //设置端点允许
  51   1              else
  52   1                      outportb(D12_DATA, 0);                                                  //设置端点禁止
  53   1      
  54   1              if(bEPPflags.bits.in_isr == 0)
  55   1                      ENABLE();
C51 COMPILER V7.06   D12CI                                                                 09/15/2008 18:19:56 PAGE 2   

  56   1      }
  57          
  58          
  59          void D12_SetMode(INT8U bConfig,INT8U bClkDiv)
  60          {
  61   1              if(bEPPflags.bits.in_isr == 0)
  62   1                      DISABLE();
  63   1      
  64   1              outportb(D12_COMMAND, 0xF3);                                            //输出设置模式指令
  65   1              outportb(D12_DATA, bConfig);                                            //输出配置字节信息
  66   1              outportb(D12_DATA, bClkDiv);                                            //输出时钟分频因数字节
  67   1      
  68   1              if(bEPPflags.bits.in_isr == 0)
  69   1                      ENABLE();       
  70   1      }
  71          
  72          
  73          void D12_SetDMA(INT8U bMode)
  74          {
  75   1              if(bEPPflags.bits.in_isr == 0)
  76   1                      DISABLE();
  77   1      
  78   1              outportb(D12_COMMAND, 0xFB);                                            //设置DMA工作方命令
  79   1              outportb(D12_DATA, bMode);                                                      //输出设置值
  80   1      
  81   1              if(bEPPflags.bits.in_isr == 0)
  82   1                      ENABLE();                       
  83   1      }
  84          
  85          
  86          INT16U D12_ReadInterruptRegister(void)
  87          {
  88   1              INT8U b1;
  89   1              INT16U j;
  90   1      
  91   1              outportb(D12_COMMAND, 0xF4);
  92   1              b1 = inportb(D12_DATA);
  93   1              j = inportb(D12_DATA);
  94   1              j <<= 8;
  95   1              j += b1;
  96   1      
  97   1              return j;
  98   1      }
  99          
 100          
 101          INT8U D12_SelectEndpoint(INT8U bEndp)
 102          {
 103   1              INT8U c;
 104   1      
 105   1              if(bEPPflags.bits.in_isr == 0)
 106   1                      DISABLE();
 107   1      
 108   1                      outportb(D12_COMMAND, bEndp);                                   //端点选择
 109   1              c = inportb(D12_DATA);                                                          //读出一个字节
 110   1      
 111   1              if(bEPPflags.bits.in_isr == 0)
 112   1                      ENABLE();
 113   1      
 114   1              return c;
 115   1      }
 116          
 117          
C51 COMPILER V7.06   D12CI                                                                 09/15/2008 18:19:56 PAGE 3   

 118          #if D12_ReadEndpointStatus_EN
              INT8U D12_ReadEndpointStatus(INT8U bEndp)
              {
                      INT8U c;
              
                      if(bEPPflags.bits.in_isr == 0)
                              DISABLE();
              
                      outportb(D12_COMMAND,0x80+bEndp);                                       //读取端点状态命令
                      c = inportb(D12_DATA);                                                          //读取端点状态
              
                      if(bEPPflags.bits.in_isr == 0)
                              ENABLE();
              
                      return c;
              }
              #endif
 135          
 136          
 137          INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
 138          {
 139   1              outportb(D12_COMMAND, 0x40 + bEndp);                            //输出读取最后处理状态寄存器命令
 140   1              return inportb(D12_DATA);
 141   1      }
 142          
 143          
 144          void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled)
 145          {
 146   1              if(bEPPflags.bits.in_isr == 0)
 147   1                      DISABLE();
 148   1      
 149   1              outportb(D12_COMMAND, 0x40 + bEndp);                            //发送设置端点状态命令
 150   1              outportb(D12_DATA,bStalled);                                            //设置端点状态
 151   1      
 152   1              if(bEPPflags.bits.in_isr == 0)
 153   1                      ENABLE();
 154   1      }
 155          
 156          
 157          #if D12_SendResume_EN
              void D12_SendResume(void)
              {
                      outportb(D12_COMMAND,0xF6);                                                     //设置发送恢复
              }
              #endif
 163          
 164          
 165          
 166          #if D12_ReadCurrentFrameNumber_EN
              INT16U D12_ReadCurrentFrameNumber(void)
              {
                      INT16U i,j;
              
                      if(bEPPflags.bits.in_isr == 0)
                              DISABLE();
              
                      outportb(D12_COMMAND,0xF5);                                                     //发送读取当前帧数目命令
                      i= inportb(D12_DATA);
                      j = inportb(D12_DATA);
              
                      i += (j<<8);
              
C51 COMPILER V7.06   D12CI                                                                 09/15/2008 18:19:56 PAGE 4   

                      if(bEPPflags.bits.in_isr == 0)
                              ENABLE();
              
                      return i;                                                                                       //返目当前帧数目
              }
              #endif
 186          
 187          
 188          
 189          INT8U D12_ReadEndpoint(INT8U endp,INT8U len,INT8U * buf)
 190          {
 191   1              INT8U i, j;
 192   1      
 193   1              if(bEPPflags.bits.in_isr == 0)
 194   1                      DISABLE();
 195   1      
 196   1              outportb(D12_COMMAND,endp);                                                     //发送选择端点命令
 197   1              if((inportb(D12_DATA)&D12_FULLEMPTY) == 0)
 198   1          {                                                                                                   //如果缓冲区为空
 199   2                      if(bEPPflags.bits.in_isr == 0)
 200   2                              ENABLE();
 201   2                      return 0;                                                                               //则返回读到0字节
 202   2              }
 203   1      
 204   1              outportb(D12_COMMAND,0xF0);                                                     //发送读缓冲区命令
 205   1              j = inportb(D12_DATA);                                                          //读取保留字节
 206   1              j = inportb(D12_DATA);                                                          //读取数据字节的数目/长度
 207   1      
 208   1              if(j > len)     
 209   1                      j = len;
 210   1                      
 211   1              for(i=0; i<j; i++)
 212   1              {
 213   2                      *(buf+i) = inportb(D12_DATA);                                   //读取要求的字节数目/长度
 214   2              }
 215   1      
 216   1              outportb(D12_COMMAND,0xF2);                                                     //清缓冲区,新的信息包才可以重新被接受
 217   1      
 218   1              if(bEPPflags.bits.in_isr == 0)
 219   1                      ENABLE();
 220   1      
 221   1              return j;                                                                                       //返回读到的字节数
 222   1      }
 223          
 224          
 225          INT8U D12_WriteEndpoint(INT8U endp, INT8U len,INT8U * buf)
 226          {
 227   1              INT8U i;
 228   1      
 229   1              if(bEPPflags.bits.in_isr == 0)
 230   1                      DISABLE();
 231   1      
 232   1              outportb(D12_COMMAND, endp);                                            //发送选择端点命令
 233   1              i = inportb(D12_DATA);
 234   1      
 235   1              outportb(D12_COMMAND, 0xF0);                                            //发送写缓冲区命令      
 236   1              outportb(D12_DATA, 0);                                                          //写入一个保留字节
 237   1              outportb(D12_DATA, len);                                                        //写入即将写入的字节数目
 238   1      
 239   1              for(i=0; i<len; i++)
 240   1                      outportb(D12_DATA, *(buf+i));
 241   1      
C51 COMPILER V7.06   D12CI                                                                 09/15/2008 18:19:56 PAGE 5   

 242   1              outportb(D12_COMMAND, 0xFA);                                            //使缓冲区有效
 243   1      
 244   1              if(bEPPflags.bits.in_isr == 0)
 245   1                      ENABLE();
 246   1      
 247   1              return len;                                                                                     //返回写入的字节数
 248   1      }
 249          
 250          
 251          void D12_AcknowledgeEndpoint(INT8U endp)
 252          {
 253   1              outportb(D12_COMMAND, endp);                                            //选择端点
 254   1              outportb(D12_COMMAND, 0xF1);                                            //应答Setup指令
 255   1              if(endp == 0)           
 256   1                      outportb(D12_COMMAND, 0xF2);                                    //清空该端点缓冲区
 257   1      }
 258          
 259          
 260          #if D12_ClearBuff_EN
              void D12_ClearBuff(INT8U endp)
              {       
                      outportb(D12_COMMAND, endp);                                            //选择端点
                      outportb(D12_COMMAND, 0xF2);                                            //清空第1个缓冲区       
                      
                      if (endp >= 4)
                      {
                              outportb(D12_COMMAND, endp);                                    //选择端点
                              outportb(D12_COMMAND, 0xF2);                                    //清空第2个缓冲区       
                      }
              }
              #endif


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