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

📄 d12ci.lst

📁 USB_D12开发评估板实现USB键盘的全部源代码
💻 LST
字号:
C51 COMPILER V7.50   D12CI                                                                 04/16/2007 15:22:44 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE D12CI
OBJECT MODULE PLACED IN .\Obj\D12ci.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\Driver\Usb\D12ci.c LARGE OPTIMIZE(2,SPEED) BROWSE MODP2 PRINT(.\Obj\D
                    -12ci.lst) OBJECT(.\Obj\D12ci.obj)

line level    source

   1          #include "..\inc\includes.h"
   2          #include "epphal.h"
   3          #include "D12ci.h"
   4          #include "mainloop.h"
   5          
   6          /*
   7          sbit USBA0              = P2^0;
   8          sbit USBReset   = P2^1;
   9          sbit SimWR              = P2^2;
  10          sbit SimRD              = P2^3;
  11          */
  12          
  13          EPPFLAGS  bEPPflags;
  14          
  15          //extern EPPFLAGS bEPPflags;
  16          
  17          //设置地址使能,将入口的地址值写入D12并使能。
  18          void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
  19          {
  20   1              if(bEPPflags.bits.in_isr == 0)
  21   1                      DISABLE;
  22   1      
  23   1              
  24   1              //outportb( 0xD0);//输出指令
  25   1              D12_WriteCommand(0xD0);
  26   1              if(bEnable)
  27   1                      bAddress |= 0x80;
  28   1              //D12_WriteData( bAddress);//设置地址
  29   1              D12_WriteData(bAddress);
  30   1      
  31   1              if(bEPPflags.bits.in_isr == 0)
  32   1                      ENABLE;
  33   1      }
  34          
  35          //设置端点使能
  36          void D12_SetEndpointEnable(unsigned char bEnable)
  37          {
  38   1              if(bEPPflags.bits.in_isr == 0)
  39   1                      DISABLE;
  40   1      
  41   1              D12_WriteCommand( 0xD8);//输出指令
  42   1              if(bEnable)
  43   1                      D12_WriteData( 1);//设置端点允许
  44   1              else
  45   1                      D12_WriteData( 0);//设置端点禁止
  46   1      
  47   1              if(bEPPflags.bits.in_isr == 0)
  48   1                      ENABLE;
  49   1      }
  50          
  51          //模式设置
  52          void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
  53          {
  54   1              if(bEPPflags.bits.in_isr == 0)
C51 COMPILER V7.50   D12CI                                                                 04/16/2007 15:22:44 PAGE 2   

  55   1                      DISABLE;
  56   1      
  57   1              D12_WriteCommand( 0xF3);//设置模式
  58   1              D12_WriteData( bConfig);
  59   1              D12_WriteData( bClkDiv);
  60   1      
  61   1              if(bEPPflags.bits.in_isr == 0)
  62   1                      ENABLE;
  63   1      }
  64          
  65          //DMA工作方式设置
  66          void D12_SetDMA(unsigned char bMode)
  67          {
  68   1              if(bEPPflags.bits.in_isr == 0)
  69   1                      DISABLE;
  70   1      
  71   1              D12_WriteCommand( 0xFB);//设置DMA工作方式
  72   1              D12_WriteData( bMode);
  73   1      
  74   1              if(bEPPflags.bits.in_isr == 0)
  75   1                      ENABLE;
  76   1      }
  77          //----------数据流命令----------------------------
  78          //读取中断寄存器
  79          unsigned short D12_ReadInterruptRegister(void)
  80          {
  81   1              unsigned char b1;
  82   1              unsigned int j;
  83   1      
  84   1              D12_WriteCommand( 0xF4);//读取中断寄存器
  85   1              b1 = D12_ReadData();
  86   1              j = D12_ReadData();
  87   1      
  88   1              j <<= 8;
  89   1              j += b1;
  90   1      
  91   1              return j;
  92   1      }
  93          
  94          //端点选择
  95          //返回所选端点是否满或空
  96          unsigned char D12_SelectEndpoint(unsigned char bEndp)
  97          {
  98   1              unsigned char c;
  99   1      
 100   1              if(bEPPflags.bits.in_isr == 0)
 101   1                      DISABLE;
 102   1      
 103   1              D12_WriteCommand( bEndp);//端点选择
 104   1              c = D12_ReadData();
 105   1      
 106   1              if(bEPPflags.bits.in_isr == 0)
 107   1                      ENABLE;
 108   1      
 109   1              return c;
 110   1      }
 111          
 112          //读取最后传输状态,并复位中断寄存器。
 113          unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
 114          {
 115   1              D12_WriteCommand( 0x40 + bEndp);//返回最后传输状态
 116   1              return D12_ReadData();
C51 COMPILER V7.50   D12CI                                                                 04/16/2007 15:22:44 PAGE 3   

 117   1      }
 118          
 119          //读取端点状态
 120          unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
 121          {
 122   1              unsigned char c;
 123   1      
 124   1              if(bEPPflags.bits.in_isr == 0)
 125   1                      DISABLE;
 126   1      
 127   1              D12_WriteCommand( 0x80 + bEndp);//读取端点状态
 128   1              c = D12_ReadData();
 129   1      
 130   1              if(bEPPflags.bits.in_isr == 0)
 131   1                      ENABLE;
 132   1      
 133   1              return c;
 134   1      }
 135          
 136          //设置端点状态
 137          void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
 138          {
 139   1              if(bEPPflags.bits.in_isr == 0)
 140   1                      DISABLE;
 141   1      
 142   1              D12_WriteCommand( 0x40 + bEndp);//设置端点状态
 143   1              D12_WriteData( bStalled);
 144   1      
 145   1              if(bEPPflags.bits.in_isr == 0)
 146   1                      ENABLE;
 147   1      }
 148          /*
 149          //传输恢复
 150          void D12_SendResume(void)
 151          {
 152                  outportb( 0xF6);//设置发送恢复
 153          }
 154          */
 155          
 156          /*
 157          //读取当前帧号
 158          unsigned short D12_ReadCurrentFrameNumber(void)
 159          {
 160                  unsigned short i,j;
 161          
 162                  if(bEPPflags.bits.in_isr == 0)
 163                          DISABLE;
 164          
 165                  outportb( 0xF5);//读取当前帧数目
 166                  i= D12_ReadData();
 167                  j = D12_ReadData();
 168          
 169                  i += (j<<8);
 170          
 171                  if(bEPPflags.bits.in_isr == 0)
 172                          ENABLE;
 173          
 174                  return i;
 175          }
 176          */
 177          
 178          unsigned short D12_ReadChipID(void)
C51 COMPILER V7.50   D12CI                                                                 04/16/2007 15:22:44 PAGE 4   

 179          {
 180   1              unsigned short i,j;
 181   1      
 182   1              if(bEPPflags.bits.in_isr == 0)
 183   1                      DISABLE;
 184   1      
 185   1              D12_WriteCommand( 0xFD);
 186   1              i=D12_ReadData();
 187   1              j=D12_ReadData();
 188   1              i += (j<<8);
 189   1      
 190   1              if(bEPPflags.bits.in_isr == 0)
 191   1                      ENABLE;
 192   1      
 193   1              return i;
 194   1      }
 195          
 196          //功能介绍:读取端点数据
 197          //入口参数:1。端点号2。数据长度,3读取数据存放的缓冲区指针。
 198          //出口参数:读取到的字节数据数
 199          //备注:
 200          unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
 201          {
 202   1              unsigned char i, j;
 203   1      
 204   1              if(bEPPflags.bits.in_isr == 0)
 205   1                      DISABLE;
 206   1      
 207   1              D12_WriteCommand( endp);   //选择端点
 208   1              if((D12_ReadData() & D12_FULLEMPTY) == 0)
 209   1              {
 210   2                      if(bEPPflags.bits.in_isr == 0)
 211   2                              ENABLE;
 212   2                      return 0;       //端点为空则返回
 213   2              }
 214   1      
 215   1              D12_WriteCommand( 0xF0);        //读缓冲区,读多个字节
 216   1              j = D12_ReadData();                     //无用
 217   1              j = D12_ReadData();                     //数据长度
 218   1      
 219   1              if(j > len)
 220   1                      j = len;
 221   1      
 222   1              for(i=0; i<j; i++)
 223   1              {
 224   2                      *(buf+i) = D12_ReadData();
 225   2              }
 226   1      /*
 227   1              USBA0 = 0;
 228   1      
 229   1              for(i=0; i<j; i++)
 230   1              {
 231   1                      SimRD = 0;
 232   1                      *(buf+i) = P0;
 233   1                      SimRD = 1;
 234   1              }
 235   1      */
 236   1              D12_WriteCommand( 0xF2);        //清缓冲区
 237   1      
 238   1              if(bEPPflags.bits.in_isr == 0)          //恢复现场后返回接收到的数据长度
 239   1                      ENABLE;
 240   1      
C51 COMPILER V7.50   D12CI                                                                 04/16/2007 15:22:44 PAGE 5   

 241   1              return j;
 242   1      }
 243          
 244          //功能介绍:写数据到端点
 245          //入口参数:1。端点号 2,待写数据长度,3,数据缓冲区
 246          //出口参数:写入数据的长度
 247          //备注:
 248          unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
 249          {
 250   1              unsigned char i;
 251   1      
 252   1              if(bEPPflags.bits.in_isr == 0)
 253   1                      DISABLE;
 254   1      
 255   1              D12_WriteCommand( endp);        //选择端点
 256   1              i = D12_ReadData();
 257   1      
 258   1              D12_WriteCommand( 0xF0);    //写数据到端点
 259   1              D12_WriteData( 0);                      //无用字节
 260   1              D12_WriteData( len);            //数据长度
 261   1      
 262   1      
 263   1              for(i=0; i<len; i++)
 264   1              {
 265   2                      D12_WriteData( *(buf+i));
 266   2              }
 267   1      /*
 268   1              USBA0 = 0;
 269   1              for(i=0; i<len; i++)
 270   1              {
 271   1                      P0 = *(buf+i);
 272   1                      
 273   1                      SimWR = 0;
 274   1              //      _nop_();
 275   1                      SimWR = 1;
 276   1              }
 277   1      */
 278   1              D12_WriteCommand( 0xFA);        //使缓冲区有效
 279   1      
 280   1              if(bEPPflags.bits.in_isr == 0)  //恢复现场
 281   1                      ENABLE;
 282   1      
 283   1              return len;
 284   1      }
 285          
 286          //设置端点应答
 287          void D12_AcknowledgeEndpoint(unsigned char endp)
 288          {
 289   1              D12_WriteCommand( endp);
 290   1              D12_WriteCommand( 0xF1);
 291   1              if(endp == 0)
 292   1                      D12_WriteCommand( 0xF2);
 293   1      }
 294          
 295          
 296          //断开USB总线
 297          void D12_DisConnect(void)
 298          {
 299   1              // Initialize D12 configuration
 300   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 301   1      }
 302          
C51 COMPILER V7.50   D12CI                                                                 04/16/2007 15:22:44 PAGE 6   

 303          //连接USB总线
 304          void D12_Connect(void)
 305          {
 306   1              DISABLE;
 307   1              bEPPflags.value = 0;//清除所有状态
 308   1              ENABLE;
 309   1      
 310   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 311   1              // Initialize D12 configuration
 312   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 313   1      }
 314          
 315          


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