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

📄 d12driver.lst

📁 使用PIDUSBD12芯片实现的usb接口程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 148          ** 功能描述: 端点2 IN(发送)处理处理函数
 149          ** 输    入: 无
 150          ** 输    出: 无
 151          ********************************************************************/
 152          void ep2_txdone(void)
 153          {
 154   1              D12_ReadLastTransactionStatus(5);               //清中断标志位
 155   1              //可添加用户代码(进行检测端点号5IN令牌的操作)
 156   1              if(byte_cnt.word>0)
 157   1              {
 158   2                      if(byte_cnt.word<64)
 159   2                      {
 160   3                              D12_WriteEndpoint(5, byte_cnt.byte.low, EpBuf);
 161   3                              byte_cnt.word=0;
 162   3                      }
 163   2                      else
 164   2                      {
 165   3                              byte_cnt.word=byte_cnt.word-64;
 166   3                              D12_WriteEndpoint(5, 64, EpBuf);
 167   3                      }
 168   2              }
 169   1              
 170   1              if ((D12_ReadEndpointStatus(5) & 0x60) != 0x60)
 171   1              {
 172   2                      if(byte_cnt.word>0)
 173   2                      {
 174   3                              if(byte_cnt.word<64)
 175   3                              {
 176   4                                      D12_WriteEndpoint(5, byte_cnt.byte.low, EpBuf);
 177   4                                      byte_cnt.word=0;
 178   4                              }
C51 COMPILER V7.02b   D12DRIVER                                                            09/24/2007 20:01:36 PAGE 4   

 179   3                              else
 180   3                              {
 181   4                                      byte_cnt.word=byte_cnt.word-64;
 182   4                                      D12_WriteEndpoint(5, 64, EpBuf);
 183   4                              }
 184   3                      }
 185   2              }
 186   1      }
 187          
 188          /*******************************************************************
 189          ** 函数名称: ep2_rxdone()
 190          ** 功能描述: 端点2 OUT(接收)处理处理函数
 191          ** 输    入: 无
 192          ** 输    出: 无
 193          ********************************************************************/
 194          void ep2_rxdone(void)
 195          {
 196   1              INT8U len;
 197   1      
 198   1              D12_ReadLastTransactionStatus(4);                       //复位中断寄存器
 199   1              len = D12_ReadEndpoint(4, 64, EpBuf);           //读取端点2接收数据
 200   1              if (bEPPflags.bits.ep2buf_full)
 201   1                      len += D12_ReadEndpoint(4, 64, EpBuf);  //读取端点2接收数据
 202   1              if (len != 0)
 203   1                      bEPPflags.bits.ep2_rxdone = 1;                  //标志端点2接收到数据
 204   1      }
 205          
 206          /***********************************************************************
 207          ** 函数名称: void Usb_Exception(void)
 208          ** 功能描述: D12中断服务程序
 209          *************************************************************************/
 210          void Usb_Exception(void)  interrupt 0
 211          {
 212   1              DISABLE();                                              //进入D12中断服务程序时关中断
 213   1              fn_usb_isr();   
 214   1              ENABLE();                                                       //退出D12中断服务程序时开中断
 215   1      }
 216          
 217          
 218          /************************************************************
 219          ** 函数名称: disconnect_USB() 
 220          ** 功能描述: 断开USB总线
 221          ************************************************************/
 222          void disconnect_USB(void)
 223          {
 224   1              // Initialize D12 configuration
 225   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 226   1      }       //SoftConnect 断开
 227          
 228          
 229          /************************************************************
 230          ** 函数名称: connect_USB()
 231          ** 功能描述: 连接USB总线
 232          ************************************************************/
 233          void connect_USB(void)
 234          {
 235   1              // Initialize D12 configuration
 236   1              D12_SetDMA(0x00);
 237   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 238   1      }       //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
 239          
 240          
C51 COMPILER V7.02b   D12DRIVER                                                            09/24/2007 20:01:36 PAGE 5   

 241          /************************************************************
 242          ** 函数名称: reconnect_USB()
 243          ** 功能描述: 重新连接USB总线
 244          ************************************************************/
 245          void reconnect_USB(void)
 246          {
 247   1              INT16U clk_cnt;
 248   1      
 249   1              disconnect_USB();                                                          //断开芯片与USB总线连接
 250   1          for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++); //延时处理
 251   1          connect_USB();                                                                 //连接到USB总线
 252   1      }
 253          
 254          
 255          /************************************************************
 256          ** 函数名称: Get_D12_FirmwareVer()
 257          ** 功能描述: 重新连接USB总线
 258          ** 输    入: 无
 259          ** 输    出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
 260          ************************************************************/
 261          INT16U Get_D12_FirmwareVer(void)
 262          {
 263   1              return 0x0500;                                  //D12固件软件版本号为5.00
 264   1      }
 265          
 266          /************************************************************
 267          ** 函数名称: D12_ReadChipID()
 268          ** 功能描述: 读取芯片ID
 269          ** 输   入: 无
 270          ** 输   出: 芯片的ID号
 271          ************************************************************/
 272          INT16U D12_ReadChipID(void)
 273          {
 274   1              INT16U i,j;
 275   1      
 276   1              if(bEPPflags.bits.in_isr == 0)
 277   1                      DISABLE();
 278   1      
 279   1              outportb(D12_COMMAND, 0xFD);            //发送读PDIUSBD12芯片ID号命令   
 280   1              i=inportb(D12_DATA);                            //读取ID号低字节
 281   1              j=inportb(D12_DATA);                            //读取ID号高位字节
 282   1              i += (j<<8);                                            //组成16位的PDIUSBD12芯片ID号
 283   1      
 284   1              if(bEPPflags.bits.in_isr == 0)
 285   1                      ENABLE();
 286   1      
 287   1              return i;
 288   1      }


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