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

📄 d12ci.lst

📁 PDIUSBD12结合C51芯片的完整的固件开发程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
                      if(bEPPflags.bits.in_isr == 0)
                              ENABLE();
              
                      return c;
              }
              #endif
 197          
 198          /************************************************************
 199          ** 函数名称: D12_ReadLastTransactionStatus()
 200          ** 功能描述: 读取最后处理状态寄存器
 201          ** 输   入: INT8U bEndp:   端点索引号,取值0 ~ 5
 202          ** 输   出: 端点最后处理的状态
 203          ************************************************************/
 204          INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
 205          {
 206   1              outportb(D12_COMMAND, 0x40 + bEndp);    //输出读取最后处理状态寄存器命令
 207   1              return inportb(D12_DATA);                               //读取状态
 208   1      }
 209          
 210          /************************************************************
 211          ** 函数名称: D12_SetEndpointStatus()
 212          ** 功能描述: 设置端点状态
 213          ** 输   入: INT8U bEndp:   端点索引号,取值0 ~ 5
 214                           INT8U bStalled: 状态值
 215          ** 输   出: 端点状态
 216          ************************************************************/
 217          void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled)
 218          {
 219   1              if(bEPPflags.bits.in_isr == 0)
 220   1                      DISABLE();
 221   1      
 222   1              outportb(D12_COMMAND, 0x40 + bEndp);    //发送设置端点状态命令
 223   1              outportb(D12_DATA, bStalled);                   //设置端点状态
 224   1      
 225   1              if(bEPPflags.bits.in_isr == 0)
 226   1                      ENABLE();
 227   1      }
 228          
 229          /************************************************************
 230          ** 函数名称: D12_SendResume()
 231          ** 功能描述: 传输恢复
 232          ** 输   入: 无
 233          ** 输   出: 无
 234          ************************************************************/
 235          #if D12_SendResume_EN
              void D12_SendResume(void)
              {
                      outportb(D12_COMMAND, 0xF6);                    //设置发送恢复
              }
              #endif
C51 COMPILER V7.06   D12CI                                                                 12/20/2004 10:45:21 PAGE 5   

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

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

              void D12_ClearBuff(INT8U endp)
              {       
                      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        =    715    ----
   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 + -