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

📄 d12driver.lst

📁 USB程序源代码,包括PC端和单片机端.USB控制芯片为PIDUSBD12.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 144          
 145          /*******************************************************************
 146          ** 函数名称: ep2_txdone()
 147          ** 功能描述: 端点2 IN(发送)处理处理函数
 148          ** 输    入: 无
 149          ** 输    出: 无
 150          ********************************************************************/
 151          void ep2_txdone(void)
 152          {               
 153   1      
 154   1              D12_ReadLastTransactionStatus(5);               //清中断标志位
 155   1              EP2_tx = 1;
 156   1      }
 157          
 158          /*******************************************************************
 159          ** 函数名称: ep2_rxdone()
 160          ** 功能描述: 端点2 OUT(接收)处理处理函数
 161          ** 输    入: 无
 162          ** 输    出: 无
 163          ********************************************************************/
 164          void ep2_rxdone(void)
 165          {       
 166   1              D12_ReadLastTransactionStatus(4);                                                               //清中断标志位  
 167   1                         
 168   1              if(num_Of_64len != 0)
 169   1              {
 170   2                      if ((0x60&(D12_ReadEndpointStatus(4))) == 0x60)                                 // 如果双缓冲区中收到数据
 171   2                      {                                                                       
 172   3                              D12_ReadEndpoint(4,EP2_PACKET_SIZE,RecBuf + offset);
 173   3                              offset += EP2_PACKET_SIZE;
 174   3                              D12_ReadEndpoint(4,EP2_PACKET_SIZE,RecBuf + offset);            
 175   3                              offset += EP2_PACKET_SIZE;                                      
 176   3                              num_Of_64len -= 0x02;                   
 177   3                              Rcv128Bytes = 1;                
 178   3                      }  
C51 COMPILER V7.50   D12DRIVER                                                             03/07/2006 08:28:19 PAGE 4   

 179   2                      else if(num_Of_64len != 0)                                                                      // 只有一个缓冲区中收到数据
 180   2                      {                                       
 181   3                              D12_ReadEndpoint(4,EP2_PACKET_SIZE,RecBuf + offset);            // 读取缓冲区中的数据           
 182   3                              offset += EP2_PACKET_SIZE;
 183   3                              num_Of_64len --;
 184   3                              Rcv128Bytes = 0;
 185   3                      }
 186   2              }
 187   1      
 188   1              else  if(num_of_less64len != 0) 
 189   1              {
 190   2                      D12_ReadEndpoint(4,num_of_less64len,RecBuf + offset);           // 读取缓冲区中的数据           
 191   2                      offset += num_of_less64len;
 192   2                      num_of_less64len = 0;
 193   2              }
 194   1                          
 195   1              bEPPflags.bits.ep2_rxdone = 1;
 196   1      }
 197          
 198          /***********************************************************************
 199          ** 函数名称: void Usb_Exception(void)
 200          ** 功能描述: D12中断服务程序
 201          *************************************************************************/
 202          void Usb_Exception(void)  interrupt 0
 203          {
 204   1              INT16U i_st;
 205   1              
 206   1              DISABLE();                                                          //进入D12中断服务程序时关中断       
 207   1              bEPPflags.bits.in_isr = 1;
 208   1              i_st = D12_ReadInterruptRegister();                             //读取PDIUSBD12中断寄存器值
 209   1              if(i_st != 0) {
 210   2                      if(i_st & D12_INT_BUSRESET)
 211   2                              bEPPflags.bits.bus_reset = 1;                   //USB总线复位标志
 212   2                      if(i_st & D12_INT_EOT)
 213   2                              dma_eot();                                                              //DMA传输技术处理
 214   2                      if(i_st & D12_INT_SUSPENDCHANGE)
 215   2                              bEPPflags.bits.suspend = 1;                             //挂起改变标志置1
 216   2                      if(i_st & D12_INT_ENDP0IN)
 217   2                              ep0_txdone();                                                   //控制端点发送数据处理
 218   2                      if(i_st & D12_INT_ENDP0OUT)
 219   2                              ep0_rxdone();                                                   //控制端点接收数据处理
 220   2                      if(i_st & D12_INT_ENDP1IN)
 221   2                              ep1_txdone();                                                   //端点 1发送数据处理
 222   2                      if(i_st & D12_INT_ENDP1OUT)
 223   2                              ep1_rxdone();                                                   //端点 1接收数据处理
 224   2                      if(i_st & D12_INT_ENDP2IN)
 225   2                              ep2_txdone();                                                   //端点 2发送数据处理
 226   2                      if(i_st & D12_INT_ENDP2OUT)
 227   2                              ep2_rxdone();                                                   //端点 2接收数据处理
 228   2              }
 229   1              bEPPflags.bits.in_isr = 0;
 230   1              
 231   1                ENABLE();                                                     //退出D12中断服务程序时开中断
 232   1      }
 233          
 234          
 235          /************************************************************
 236          ** 函数名称: disconnect_USB() 
 237          ** 功能描述: 断开USB总线
 238          ************************************************************/
 239          void disconnect_USB(void)
 240          {
C51 COMPILER V7.50   D12DRIVER                                                             03/07/2006 08:28:19 PAGE 5   

 241   1              // Initialize D12 configuration
 242   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 243   1      }       //SoftConnect 断开
 244          
 245          
 246          /************************************************************
 247          ** 函数名称: connect_USB()
 248          ** 功能描述: 连接USB总线
 249          ************************************************************/
 250          void connect_USB(void)
 251          {
 252   1              // Initialize D12 configuration
 253   1              D12_SetDMA(0x00);
 254   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 255   1      }       //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
 256          
 257          
 258          /************************************************************
 259          ** 函数名称: reconnect_USB()
 260          ** 功能描述: 重新连接USB总线
 261          ************************************************************/
 262          void reconnect_USB(void)
 263          {
 264   1              INT16U clk_cnt;
 265   1      
 266   1              disconnect_USB();                                                          //断开芯片与USB总线连接
 267   1          for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++); //延时处理
 268   1          connect_USB();                                                                 //连接到USB总线
 269   1      }
 270          
 271          
 272          /************************************************************
 273          ** 函数名称: Get_D12_FirmwareVer()
 274          ** 功能描述: 重新连接USB总线
 275          ** 输    入: 无
 276          ** 输    出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
 277          ************************************************************/
 278          INT16U Get_D12_FirmwareVer(void)
 279          {
 280   1              return 0x0500;                                  //D12固件软件版本号为5.00
 281   1      }


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