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

📄 d12ci.lst

📁 D12实现的USB
💻 LST
📖 第 1 页 / 共 2 页
字号:
 191   1                      ENABLE();
 192   1      
 193   1              return c;
 194   1      }
 195          #endif
 196          
 197          /************************************************************
 198          ** 函数名称: D12_ReadLastTransactionStatus()
 199          ** 功能描述: 读取最后处理状态寄存器
 200          ** 输   入: INT8U bEndp:   端点索引号,取值0 ~ 5
 201          ** 输   出: 端点最后处理的状态
 202          ************************************************************/
 203          INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
 204          {
 205   1              outportb(D12_COMMAND, 0x40 + bEndp);    //输出读取最后处理状态寄存器命令
 206   1              return inportb(D12_DATA);                               //读取状态
 207   1      }
 208          
 209          /************************************************************
 210          ** 函数名称: D12_SetEndpointStatus()
 211          ** 功能描述: 设置端点状态
 212          ** 输   入: INT8U bEndp:   端点索引号,取值0 ~ 5
 213                           INT8U bStalled: 状态值
 214          ** 输   出: 端点状态
 215          ************************************************************/
 216          void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled)
 217          {
 218   1              if(bEPPflags.bits.in_isr == 0)
 219   1                      DISABLE();
 220   1      
 221   1              outportb(D12_COMMAND, 0x40 + bEndp);    //发送设置端点状态命令
 222   1              outportb(D12_DATA, bStalled);                   //设置端点状态
 223   1      
 224   1              if(bEPPflags.bits.in_isr == 0)
 225   1                      ENABLE();
 226   1      }
 227          
 228          /************************************************************
 229          ** 函数名称: D12_SendResume()
 230          ** 功能描述: 传输恢复
 231          ** 输   入: 无
 232          ** 输   出: 无
 233          ************************************************************/
 234          #if D12_SendResume_EN
              void D12_SendResume(void)
              {
                      outportb(D12_COMMAND, 0xF6);                    //设置发送恢复
              }
              #endif
 240          
C51 COMPILER V7.50   D12CI                                                                 03/07/2006 08:28:17 PAGE 5   

 241          
 242          /************************************************************
 243          ** 函数名称: D12_ReadCurrentFrameNumber()
 244          ** 功能描述: 读取当前帧号
 245          ** 输   入: 无
 246          ** 输   出: 当前帧号
 247          ************************************************************/
 248          #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);                                   //读取帧数目的低8位
                      j = inportb(D12_DATA);                                  //读取帧数目的高8位
              
                      i += (j<<8);
              
                      if(bEPPflags.bits.in_isr == 0)
                              ENABLE();
              
                      return i;                                                               //返目当前帧数目
              }
              #endif
 268          
 269          
 270          /************************************************************
 271          ** 函数名称: D12_ReadEndpoint()
 272          ** 功能描述: 读取端点数据
 273          ** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
 274                           INT8U len:          要读取的数据长度
 275                           INT8U * buf:    接收数据指针
 276          ** 输   出: 实际读得的字节数
 277          ************************************************************/
 278          INT8U D12_ReadEndpoint(INT8U endp,INT8U len,INT8U * buf)
 279          {
 280   1              INT8U i, j;
 281   1      
 282   1              if(bEPPflags.bits.in_isr == 0)
 283   1                      DISABLE();
 284   1      
 285   1              outportb(D12_COMMAND, endp);                                            //发送选择端点命令
 286   1              if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {          //如果缓冲区为空
 287   2                      if(bEPPflags.bits.in_isr == 0)
 288   2                              ENABLE();                                                       
 289   2                      return 0;                                                                               //则返回读到0字节
 290   2              }  
 291   1      
 292   1              outportb(D12_COMMAND, 0xF0);                                            //发送读缓冲区命令
 293   1              j = inportb(D12_DATA);                                                          //读取保留字节
 294   1              j = inportb(D12_DATA);                                                          //读取数据字节的数目/长度
 295   1      
 296   1              if(j > len)                                                                                     //如果大于要求读的字节数目
 297   1                      j = len;                                                                                //则只读取要求的字节长度
 298   1                      
 299   1              for(i=0; i<j; i++)
 300   1                      *(buf+i) = inportb(D12_DATA);                                   //读取要求的字节数目/长度
 301   1      
 302   1              outportb(D12_COMMAND, 0xF2);                                            //清缓冲区,新的信息包才可以重新被接受
C51 COMPILER V7.50   D12CI                                                                 03/07/2006 08:28:17 PAGE 6   

 303   1      
 304   1              if(bEPPflags.bits.in_isr == 0)
 305   1                      ENABLE();
 306   1      
 307   1              return j;                                                                                       //返回读到的字节数
 308   1      }
 309          
 310          /*************** *********************************************
 311          ** 函数名称: D12_WriteEndpoint()
 312          ** 功能描述: 把数据写入端点
 313          ** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
 314                           INT8U len:          要写入的数据长度
 315                           INT8U * buf:    发送数据指针
 316          ** 输   出: 实际写入的字节数
 317          ************************************************************/
 318          INT8U D12_WriteEndpoint(INT8U endp, INT8U len,INT8U * buf)
 319          {
 320   1              INT8U i;
 321   1      
 322   1              if(bEPPflags.bits.in_isr == 0)
 323   1                      DISABLE();
 324   1      
 325   1              outportb(D12_COMMAND, endp);                    //发送选择端点命令
 326   1              i = inportb(D12_DATA);                                  //可选地读取一个字节
 327   1      
 328   1              outportb(D12_COMMAND, 0xF0);                    //发送写缓冲区命令      
 329   1              outportb(D12_DATA, 0);                                  //写入一个保留字节
 330   1              outportb(D12_DATA, len);                                //写入即将写入的字节数目
 331   1      
 332   1              for(i=0; i<len; i++)
 333   1                      outportb(D12_DATA, *(buf+i));           //写入指定的字节
 334   1      
 335   1              outportb(D12_COMMAND, 0xFA);                    //使缓冲区有效
 336   1      
 337   1              if(bEPPflags.bits.in_isr == 0)
 338   1                      ENABLE();
 339   1      
 340   1              return len;                                                             //返回写入的字节数
 341   1      }
 342          
 343          /************************************************************
 344          ** 函数名称: D12_AcknowledgeEndpoint()
 345          ** 功能描述: 应答Setup
 346          ** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
 347          ** 输   出: 无
 348          ************************************************************/
 349          void D12_AcknowledgeEndpoint(INT8U endp)
 350          {
 351   1              outportb(D12_COMMAND, endp);                    //选择端点
 352   1              outportb(D12_COMMAND, 0xF1);                    //应答Setup指令
 353   1              if(endp == 0)           
 354   1                      outportb(D12_COMMAND, 0xF2);            //清空该端点缓冲区
 355   1      }
 356          
 357          /************************************************************
 358          ** 函数名称: void D12_ClearBuff()
 359          ** 功能描述: 清指定端点的缓冲区(包括双缓冲区)
 360          ** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
 361          ** 输   出: 无
 362          ************************************************************/
 363          #if D12_ClearBuff_EN
              void D12_ClearBuff(INT8U endp)
C51 COMPILER V7.50   D12CI                                                                 03/07/2006 08:28:17 PAGE 7   

              {       
                      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        =    756    ----
   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 + -