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

📄 d12driver.lst

📁 D12 USB 驱动程序,加51源理图,加上位机测试程序,与驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 155   1      }
 156          
 157          /***********************************************************************
 158          ** 函数名称: void Usb_Exception(void)
 159          ** 功能描述: D12中断服务程序
 160          *************************************************************************/
 161          void Usb_Exception(void)  interrupt 2
 162          {
 163   1              INT16U i_st;
 164   1              
 165   1              DISABLE();                                              //进入D12中断服务程序时关中断
 166   1      
 167   1              bEPPflags.bits.in_isr = 1;
 168   1              i_st = D12_ReadInterruptRegister();                             //读取PDIUSBD12中断寄存器值
 169   1              if(i_st != 0) {
 170   2                      if(i_st & D12_INT_BUSRESET)
 171   2                              bEPPflags.bits.bus_reset = 1;                   //USB总线复位标志
 172   2                      if(i_st & D12_INT_EOT)
 173   2                              dma_eot();                                                              //DMA传输技术处理
 174   2                      if(i_st & D12_INT_SUSPENDCHANGE)
 175   2                              bEPPflags.bits.suspend = 1;                             //挂起改变标志置1
 176   2                      if(i_st & D12_INT_ENDP0IN)
 177   2                              ep0_txdone();                                                   //控制端点发送数据处理
 178   2                      if(i_st & D12_INT_ENDP0OUT)
C51 COMPILER V7.50   D12DRIVER                                                             02/29/2008 14:36:29 PAGE 4   

 179   2                              ep0_rxdone();                                                   //控制端点接收数据处理
 180   2                      if(i_st & D12_INT_ENDP1IN)
 181   2                              ep1_txdone();                                                   //端点 1发送数据处理
 182   2                      if(i_st & D12_INT_ENDP1OUT)
 183   2                              ep1_rxdone();                                                   //端点 1接收数据处理
 184   2                      if(i_st & D12_INT_ENDP2IN)
 185   2                              ep2_txdone();                                                   //端点 2发送数据处理
 186   2                      if(i_st & D12_INT_ENDP2OUT)
 187   2                              ep2_rxdone();                                                   //端点 2接收数据处理
 188   2              }
 189   1              bEPPflags.bits.in_isr = 0;
 190   1              
 191   1              ENABLE();                                                       //退出D12中断服务程序时开中断
 192   1      }
 193          
 194          
 195          /************************************************************
 196          ** 函数名称: disconnect_USB() 
 197          ** 功能描述: 断开USB总线
 198          ************************************************************/
 199          void disconnect_USB(void)
 200          {
 201   1              // Initialize D12 configuration
 202   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 203   1      }       //SoftConnect 断开
 204          
 205          
 206          /************************************************************
 207          ** 函数名称: connect_USB()
 208          ** 功能描述: 连接USB总线
 209          ************************************************************/
 210          void connect_USB(void)
 211          {
 212   1              // Initialize D12 configuration
 213   1              D12_SetDMA(0x00);
 214   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 215   1      }       //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
 216          
 217          
 218          /************************************************************
 219          ** 函数名称: reconnect_USB()
 220          ** 功能描述: 重新连接USB总线
 221          ************************************************************/
 222          void reconnect_USB(void)
 223          {
 224   1              INT16U clk_cnt;
 225   1      
 226   1              disconnect_USB();                                                          //断开芯片与USB总线连接
 227   1          for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++); //延时处理
 228   1          connect_USB();                                                                 //连接到USB总线
 229   1      }
 230          
 231          
 232          /************************************************************
 233          ** 函数名称: Get_D12_FirmwareVer()
 234          ** 功能描述: 重新连接USB总线
 235          ** 输    入: 无
 236          ** 输    出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
 237          ************************************************************/
 238          /*INT16U Get_D12_FirmwareVer(void)
 239          {
 240                  return 0x0500;                                  //D12固件软件版本号为5.00
C51 COMPILER V7.50   D12DRIVER                                                             02/29/2008 14:36:29 PAGE 5   

 241          }           */
 242          
 243          /************************************************************
 244          ** 函数名称: ReadUsbBuff()
 245          ** 功能描述: 查询USB数据
 246          ** 输    入: 无
 247          ** 输    出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
 248          ************************************************************/
 249          unsigned char ReadUsbBuff(unsigned char ep)  
 250          {
 251   1              if(ep==2)
 252   1              {
 253   2                      if(bEPPflags.bits.ep2_rxdone==0)return 0;
 254   2                      DISABLE();
 255   2                      bEPPflags.bits.ep2_rxdone = 0;
 256   2                      ENABLE();
 257   2                      return ep2_len;
 258   2              }
 259   1              if(ep==1)
 260   1              {
 261   2                      if(bEPPflags.bits.ep1_rxdone==0)return 0;
 262   2                      DISABLE();
 263   2                      bEPPflags.bits.ep1_rxdone = 0;
 264   2                      ENABLE();
 265   2                      return ep1_len;
 266   2              }
 267   1      }
 268          /*********************************************************************
 269          ** 函数名称: Init_D12()
 270          ** 功能描述: 设置D12与硬件的连接, 初始化D12, 复位D12
 271          ** 输   入: 无
 272          ** 输   出: 0: 初始化成功    1: 初始化失败  
 273          **********************************************************************/
 274          INT8U Init_D12(void)
 275          {
 276   1              unsigned char a=1;
 277   1              bEPPflags.value = 0;                                    //初始化USB事件标志变量
 278   1      
 279   1              Init_D12Port();                                                 //初始化PDIUSBD12与51单片机连接的端口
 280   1              Rst_D12();                                                              //复位PDIUSBD12
 281   1              reconnect_USB();                                        //重新连接USB
 282   1      
 283   1              if (D12_ReadChipID() != 0x1012)                 //读取芯片ID号,如果不为1012H
 284   1                      return 1;                                                       //则复位失败
 285   1              EA = 1;                                                         //开80C51总中断
 286   1              EX1 = 1;                                                        //开外部中断0
 287   1              PX1 = 0;                                                        //设置外部中断0中断优先级
 288   1              if(a)
 289   1              while(1)
 290   1              {
 291   2                      usbserve();
 292   2                      if(bEPPflags.bits.configuration)return 0;
 293   2              }
 294   1              else
 295   1              {
 296   2                      ReadUsbBuff(1);
 297   2                      D12_WriteEndpoint(3,a,GenEpBuf);
 298   2              }
 299   1              return 1;                                                               //初始化成功
 300   1      }
 301          

C51 COMPILER V7.50   D12DRIVER                                                             02/29/2008 14:36:29 PAGE 6   


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