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

📄 ch375host.lst

📁 USB 1.1 U Device for CH375 & USB 2.0 for CH375A 读写usb超精简的程序
💻 LST
字号:
C51 COMPILER V7.20   CH375HOST                                                             03/07/2006 16:55:19 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE CH375HOST
OBJECT MODULE PLACED IN CH375Host.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil Uvision V7.20\C51\BIN\C51.EXE CH375Host.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //=================================================================================================
   2          //*************************************************************************************************
   3          // Module Name  : CH375Host.C
   4          // Device object: 
   5          // Create date  : 2005-11-07 
   6          // Modify date  : 2005-11-16 
   7          // Description  : USB 1.1 Host for CH375 
   8          //                USB 2.0 Host for CH375 
   9          // Author       : Li yuanzheng 
  10          // Version      : V1.0 
  11          //*************************************************************************************************
  12          //=================================================================================================
  13          // 
  14          // 如果设备端不是CH37X,那么分析描述符 
  15          // CH375中断为查询方式 
  16          // 
  17          //-------------------------------------------------------------------------------------------------
  18          // Includes 
  19          //-------------------------------------------------------------------------------------------------
  20          
  21          #include <regx52.h>                       // SFR declarations 
  22          //#include <string.h>
  23          //#include <stdio.h>
  24          //#include <intrins.h>
  25          
  26          #include "CH375Host.H"
  27          
  28          
  29          //*************************************************************************************************
  30          //*************************************************************************************************
  31          // Global VARIABLES 
  32          //*************************************************************************************************
  33          //*************************************************************************************************
  34          // 
  35          unsigned char RECV_LEN;                   // 刚接收到的数据的长度 
  36          unsigned char idata RECV_BUFFER[ CH375_MAX_DATA_LEN ];  // 数据缓冲区,用于保存接收到的下传数据,长度为0到64
             -字节 
  37          unsigned char idata *CommandBuffer;
  38          unsigned char idata *ReceiveBuffer;
  39          
  40          #define p_dev_descr ( (PUSB_DEV_DESCR)RECV_BUFFER )
  41          #define p_cfg_descr ( (PUSB_CFG_DESCR_LONG)RECV_BUFFER )
  42          
  43          unsigned char EndpOutAddr;                // USB数据接收端点的端点地址 
  44          unsigned char EndpOutSize;                // USB数据接收端点的端点尺寸 
  45          unsigned char EndpInAddr;                 // USB状态发送端点的端点地址,为0则只支持单向接口 
  46          unsigned char Endp6Mode, Endp7Mode;       // 
  47          
  48          //=================================================================================================
  49          //=================================================================================================
  50          // LED Flash 
  51          
  52          //=================================================================================================
  53          //=================================================================================================
  54          // 
C51 COMPILER V7.20   CH375HOST                                                             03/07/2006 16:55:19 PAGE 2   

  55          //=================================================================================================
  56          //=================================================================================================
  57          // 
  58          // CH375的INT#引脚连接方式为"查询方式" 
  59          //-------------------------------------------------------------------------------------------------
  60          // 查询 CH375 中断并更新中断状态 
  61          UINT8 xQueryInterrupt( void )                   
  62          {
*** ERROR C231 IN LINE 62 OF CH375HOST.C: 'xQueryInterrupt': redefinition
  63   1              CH375_INT_WIRE = 1;
  64   1              while( CH375_INT_WIRE )               // 如果CH375的中断引脚输出高电平则等待 
  65   1              {
  66   2                  if( RI==1 )                       // 串口接收到数据 
  67   2                          xWriteCH375Cmd( CMD_ABORT_NAK );     // 放弃当前操作 
  68   2                      return( 0xEF );
  69   2              }
  70   1      
  71   1              xWriteCH375Cmd( CMD_GET_STATUS );     // 获取当前中断状态 
  72   1              CH375IntStatus &= 0x80; if ( CH375IntStatus ) CH375IntStatus = 0;  // 操作无意义,用于至少延时2uS 
  73   1              CH375IntStatus = xReadCH375Data( );   // 获取中断状态 
  74   1              if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT; // 检测到USB设备断开事件 
  75   1              else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT;  // 检测到USB设备连接事件 
  76   1      
  77   1              return( CH375IntStatus );
  78   1      }
*** ERROR C231 IN LINE 78 OF CH375HOST.C: 'xQueryInterrupt': redefinition
  79          
  80          //-------------------------------------------------------------------------------------------------
  81          // 设置CH37X的工作模式 
  82          void CH375_SetUSBMode( unsigned char mode )
  83          {
  84   1              unsigned char i;
  85   1              
  86   1              xWriteCH375Cmd( CMD_SET_USB_MODE );   // 设置USB工作模式 
  87   1              xWriteCH375Data( mode );
  88   1              Endp6Mode = Endp7Mode = 0x80;         // 主机端复位USB数据同步标志 
  89   1      
  90   1              for( i=100; i!=0; i-- )               // 等待设置模式操作完成,不超过30uS 
  91   1              {
  92   2                  if( xReadCH375Data( ) == CMD_RET_SUCCESS ) return; // 成功 
  93   2              }
  94   1              mStopIfError( 0xFF );                 // CH375出错 
  95   1      }
  96          
  97          //-------------------------------------------------------------------------------------------------
  98          //   数据同步 
  99          //   USB的数据同步通过切换DATA0和DATA1实现: 在设备端, USB设备可以自动切换;
 100          //   在主机端, 必须由SET_ENDP6和SET_ENDP7命令控制CH375切换DATA0与DATA1.
 101          //   主机端的程序处理方法是为设备端的各个端点分别提供一个全局变量,
 102          //   初始值均为DATA0, 每执行一次成功事务后取反, 每执行一次失败事务后将其复位为DATA1
 103          //   (初始值均为80H, 每执行一次成功事务后将位6取反, 每执行一次失败事务后将其复位为80H.)
 104          //-------------------------------------------------------------------------------------------------
 105          // 主机接收成功后,切换DATA0和DATA1实现数据同步 
 106          void CH375_ToggleReceive( void )
 107          {
 108   1              xWriteCH375Cmd( CMD_SET_ENDP6 );
 109   1              xWriteCH375Data( Endp6Mode );
 110   1              Endp6Mode ^= 0x40;                    // 位7为1则位6为同步触发位, 否则同步触发位不变 
 111   1              mDelayuS( 2 );
 112   1      }
 113          
 114          //-------------------------------------------------------------------------------------------------
C51 COMPILER V7.20   CH375HOST                                                             03/07/2006 16:55:19 PAGE 3   

 115          // 主机发送成功后,切换DATA0和DATA1实现数据同步 
 116          void CH375_ToggleSend( void )   
 117          {
 118   1              xWriteCH375Cmd( CMD_SET_ENDP7 );
 119   1              xWriteCH375Data( Endp7Mode );
 120   1              Endp7Mode ^= 0x40;                    // 位7为1则位6为同步触发位, 否则同步触发位不变 
 121   1              mDelayuS( 2 );
 122   1      }
 123          
 124          //-------------------------------------------------------------------------------------------------
 125          //-------------------------------------------------------------------------------------------------
 126          // 主机接收失败后,复位设备端的数据同步到DATA0 
 127          unsigned char CH375_ClrStall6( void )   
 128          {
 129   1              xWriteCH375Cmd( CMD_CLR_STALL );
 130   1              xWriteCH375Data( 2 | 0x80 );          // 对于IN端点,有效地址是81H~8FH 
 131   1      //      xWriteCH375Data( EndpOutAddr | 0x80 );// 如果设备端不是CH37X芯片,那么需要修改端点号 
 132   1              Endp6Mode = 0x80;
 133   1              
 134   1              return( xQueryInterrupt( ) );
 135   1      }
 136          
 137          //-------------------------------------------------------------------------------------------------
 138          // 主机发送失败后,复位设备端的数据同步到DATA0 
 139          unsigned char CH375_ClrStall7( void )   
 140          {
 141   1              xWriteCH375Cmd( CMD_CLR_STALL );
 142   1              xWriteCH375Data( 2 );                 // 对于OUT端点,有效地址是01H~0FH 
 143   1      //      xWriteCH375Data( EndpOutAddr );       // 如果设备端不是CH37X芯片,那么需要修改端点号 
 144   1              Endp7Mode = 0x80;
 145   1              
 146   1              return( xQueryInterrupt( ) );
 147   1      }
 148          
 149          //-------------------------------------------------------------------------------------------------
 150          // 数据读写, 单片机读写CH372或者CH375芯片中的数据缓冲区 
 151          //-------------------------------------------------------------------------------------------------
 152          // 从CH37X读出数据块 
 153          unsigned char CH375_ReadUSBData( unsigned char *buffer )   
 154          {
 155   1              unsigned char i, length;
 156   1      
 157   1              xWriteCH375Cmd( CMD_RD_USB_DATA );    // 从CH375的端点缓冲区读取接收到的数据 
 158   1              i = xReadCH375Data( );                // 后续数据长度( 0--64B ) 
 159   1              length = i;
 160   1              
 161   1              while( i-- )
 162   1              {
 163   2                  *buffer++ = xReadCH375Data( );
 164   2              }
 165   1              
 166   1              return( length );
 167   1      }
 168          
 169          //-------------------------------------------------------------------------------------------------
 170          // 向CH37X写入数据块 
 171          void CH375_WriteUSBData( unsigned char length, unsigned char *buffer )
 172          {
 173   1              xWriteCH375Cmd( CMD_WR_USB_DATA7 );   // 向CH375的端点缓冲区写入准备发送的数据 
 174   1              xWriteCH375Data( length );            // 后续数据长度, length不能大于64 
 175   1              
 176   1              while( length-- )
C51 COMPILER V7.20   CH375HOST                                                             03/07/2006 16:55:19 PAGE 4   

 177   1              {
 178   2                  xWriteCH375Data( *buffer++ );
 179   2              }
 180   1      }
 181          
 182          //-------------------------------------------------------------------------------------------------
 183          // 主机操作 
 184          //-------------------------------------------------------------------------------------------------
 185          // 执行USB事务 
 186          unsigned char CH375_IssueToken( unsigned char EndpAndPID )
 187          {
 188   1              unsigned char status;
 189   1              
 190   1              // 执行完成后, 将产生中断通知单片机, 如果是USB_INT_SUCCESS就说明操作成功 
 191   1              xWriteCH375Cmd( CMD_ISSUE_TOKEN );
 192   1              xWriteCH375Data( EndpAndPID );        // 高4位目的端点号, 低4位令牌PID 
 193   1              status = xQueryInterrupt( );          // 等待CH375操作完成 
 194   1              
 195   1              return( status );
 196   1      }
 197          
 198          //-----------------------------------------------
 199          // 执行USB事务,适用于CH375A  
 200          unsigned char CH375_IssueToken_X( unsigned char EndpAndPID, unsigned char toggle )
 201          {
 202   1              unsigned char status;
 203   1              
 204   1              // 执行完成后, 将产生中断通知单片机, 如果是USB_INT_SUCCESS就说明操作成功 
 205   1              xWriteCH375Cmd( CMD_ISSUE_TOKEN_X );
*** ERROR C202 IN LINE 205 OF CH375HOST.C: 'CMD_ISSUE_TOKEN_X': undefined identifier
 206   1              xWriteCH375Data( toggle );            // 同步标志的位7为主机端点IN的同步触发位, 位6为主机端点OUT的同步触

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -