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

📄 ch375.lst

📁 檔案系統FAT讀寫USB pen driver sample code
💻 LST
📖 第 1 页 / 共 5 页
字号:
 250   1              CH375_CMD_PORT_d_out( CMD_ISSUE_TOKEN );
 251   1              CH375_DAT_PORT_d_out( mBulkOut );  /* 高4位目的端点号, 低4位令牌PID */
 252   1      //      if ( CH375LibConfig & 0x80 ) while ( CH375IntStatus == 0 );  /* 中断方式,等待数据传输操作 */
 253   1      //      else xQueryInterrupt( );  /* 查询方式,查询中断状态 */
 254   1              CH375IntStatus=mWaitInterrupt( );
 255   1              if ( CH375IntStatus == USB_INT_SUCCESS ) {  /* 操作成功 */
 256   2                      mCH375Write( VAR_UDISK_TOGGLE, mCH375Read( VAR_UDISK_TOGGLE ) ^ 0x40 );//printf("mUsbBulksend success\n 
             -");
 257   2                      return 1;
 258   2              }
 259   1              else return 0;  /* 操作失败 */
 260   1      }
 261          
 262          INT8    epBulkRcv( INT8 *mBuffer, INT8 mLength )
 263          {
 264   1              INT8    mBulkIn, mCount,CH375IntStatus;
 265   1              mCH375Write( SFR_USB_H_ENDP, mCH375Read( VAR_UDISK_TOGGLE ) );
 266   1              mBulkIn = mCH375Read( VAR_UDISK_BULK_IN );
 267   1              CH375IntStatus = 0;  /* 清操作完成的中断状态 */
 268   1              CH375_CMD_PORT_d_out( CMD_ISSUE_TOKEN );
 269   1              CH375_DAT_PORT_d_out( mBulkIn );  /* 高4位目的端点号, 低4位令牌PID */
 270   1      //      if ( CH375LibConfig & 0x80 ) while ( CH375IntStatus == 0 );  /* 中断方式,等待数据传输操作 */
 271   1      //      else xQueryInterrupt( );  /* 查询方式,查询中断状态 */
 272   1              CH375IntStatus=mWaitInterrupt( );
 273   1              if ( CH375IntStatus == USB_INT_SUCCESS ) {  /* 操作成功 */
 274   2                      mCH375Write( VAR_UDISK_TOGGLE, mCH375Read( VAR_UDISK_TOGGLE ) ^ 0x80 );
 275   2                      CH375_CMD_PORT_d_out( CMD_RD_USB_DATA );  /* 从CH375的端点缓冲区读取接收到的数据 */
 276   2                      mCount = CH375_DAT_PORT_in( );  /* 后续数据长度 */
 277   2                      mLength = mCount;
 278   2                      while( mCount ) {
 279   3                              *mBuffer = CH375_DAT_PORT_in( );
 280   3                              mBuffer ++;
 281   3                              mCount --;
 282   3                      }//printf("mUsbBulkRecv success\n ");
 283   2                      return 1;
 284   2              }
 285   1              else return  0;  /* 操作失败 */
 286   1      }
 287          
 288          TPBLK_STRUC idata TPBulk_Block;
 289          #define     TPBulk_CBW          TPBulk_Block.TPBulk_CommandBlock
 290          #define     CBW_wXferLen        TPBulk_CBW.dCBW_DataXferLen
 291          #define     RBC_CDB                     TPBulk_CBW.cdbRBC
 292          #define     RBC_LUN                     TPBulk_CBW.bCBW_LUN
 293          #define     TPBulk_CSW          TPBulk_Block.TPBulk_CommandStatus
 294          
 295          /*unsigned char TPBulk_GetMaxLUN(void)
 296          {
 297                  usbstack.setup.bmRequest=0xa1;
 298                  usbstack.setup.bRequest=0xfe;
 299                  usbstack.setup.wValue=0;
 300                  usbstack.setup.wIndex=0;
C51 COMPILER V7.06   CH375                                                                 11/22/2004 22:08:30 PAGE 6   

 301                  usbstack.setup.wLength=1;
 302                  usbstack.buffer=DBUF;
 303                  return ep0Xfer();
 304          
 305          }*/
 306          
 307          /*
 308          unsigned char SPC_READLONG(void)
 309          {
 310          #define cdbReadLong RBC_CDB.SpcCdb_ReadLong     
 311                  //nsigned char retStatus=FALSE;
 312                  TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 313                  TPBulk_CBW.dCBW_Tag=0x60a624de;
 314                  TPBulk_CBW.dCBW_DataXferLen=0xfc000000;
 315                  TPBulk_CBW.bCBW_Flag=0x80;
 316                  TPBulk_CBW.bCBW_LUN=0;
 317                  TPBulk_CBW.bCBW_CDBLen=sizeof(READ_LONG_CMD);
 318                  
 319                  /////////////////////////////////////
 320                  cdbReadLong.OperationCode=SPC_CMD_READLONG;
 321                  cdbReadLong.LogicalUnitNum=0;
 322                  cdbReadLong.AllocationLen=0xfc;
 323                  //////////////////////////////////////
 324                  if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 325                          return FALSE;
 326                  
 327                  if(!epBulkRcv(DBUF,0xfc))
 328                          return FALSE;
 329                  
 330                  if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 331                          return FALSE;
 332            ////////////////////////////
 333            return TRUE;
 334          #undef cdbReadLong
 335          }
 336          */
 337          
 338          /*
 339          unsigned char SPC_RequestSense(void)
 340          {
 341          #define cdbRequestSenseSPC RBC_CDB.SpcCdb_RequestSense  
 342                  //unsigned char retStatus=FALSE;
 343                  TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 344                  TPBulk_CBW.dCBW_Tag=0x60a624de;
 345                  TPBulk_CBW.dCBW_DataXferLen=0x0e000000;
 346                  TPBulk_CBW.bCBW_Flag=0x80;
 347                  TPBulk_CBW.bCBW_LUN=0;
 348                  TPBulk_CBW.bCBW_CDBLen=sizeof(REQUEST_SENSE_SPC);
 349                          
 350                  /////////////////////////////////////
 351                  cdbRequestSenseSPC.OperationCode=SPC_CMD_REQUESTSENSE;
 352                  cdbRequestSenseSPC.AllocationLen=0x0e;
 353                  //////////////////////////////////////
 354                  if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 355                          return FALSE;
 356                  
 357                  if(!epBulkRcv(DBUF,18))
 358                          return FALSE;
 359                  
 360                  if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 361                          return FALSE;
 362          /////////////////////////////
C51 COMPILER V7.06   CH375                                                                 11/22/2004 22:08:30 PAGE 7   

 363                  return TRUE;
 364                  
 365          #undef cdbRequestSenseSPC
 366          }
 367          */
 368          
 369          unsigned char SPC_TestUnit(void)
 370          {
 371   1      #define cdbTestUnit RBC_CDB.SpcCdb_TestUnit     
 372   1              //unsigned char retStatus=FALSE;
 373   1              TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 374   1              TPBulk_CBW.dCBW_Tag=0x60a624de;
 375   1              TPBulk_CBW.dCBW_DataXferLen=0x00000000;
 376   1              TPBulk_CBW.bCBW_Flag=0x00;
 377   1              TPBulk_CBW.bCBW_LUN=0;
 378   1              TPBulk_CBW.bCBW_CDBLen=sizeof(TEST_UNIT_SPC);
 379   1              /////////////////////////////////////
 380   1              cdbTestUnit.OperationCode=SPC_CMD_TESTUNITREADY;
 381   1              //////////////////////////////////////
 382   1              if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 383   1                      return FALSE;
 384   1              
 385   1              if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 386   1                      return FALSE;
 387   1      #undef cdbTestUnit
 388   1      ////////////////////////////
 389   1              return TRUE;
 390   1      }
 391          
 392          unsigned char SPC_LockMedia(void)
 393          {
 394   1      #define cdbLockSPC RBC_CDB.SpcCdb_Remove        
 395   1              //unsigned char retStatus=FALSE;
 396   1              TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 397   1              TPBulk_CBW.dCBW_Tag=0x60a624de;
 398   1              TPBulk_CBW.dCBW_DataXferLen=0x00000000;
 399   1              TPBulk_CBW.bCBW_Flag=0x00;
 400   1              TPBulk_CBW.bCBW_LUN=0;
 401   1              TPBulk_CBW.bCBW_CDBLen=sizeof(MEDIA_REMOVAL_SPC);
 402   1              ///////////////////////////////////////////
 403   1              cdbLockSPC.OperationCode=SPC_CMD_PRVENTALLOWMEDIUMREMOVAL;
 404   1              cdbLockSPC.Prevent=1;
 405   1              ///////////////////////////////////////////
 406   1              if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 407   1                      return FALSE;
 408   1                      
 409   1              if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 410   1                      return FALSE;
 411   1      #undef cdbLockSPC
 412   1      /////////////////////////////
 413   1              return TRUE;
 414   1      }
 415          
C51 COMPILER V7.06   CH375                                                                 11/22/2004 22:08:30 PAGE 8   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION mDelay2uS (BEGIN)
                                           ; SOURCE LINE # 34
                                           ; SOURCE LINE # 35
                                           ; SOURCE LINE # 37
;---- Variable 'i' assigned to Register 'R7' ----
0000 7F02              MOV     R7,#02H
0002         ?C0001:
0002 DFFE              DJNZ    R7,?C0001
                                           ; SOURCE LINE # 38
0004         ?C0004:
0004 22                RET     
             ; FUNCTION mDelay2uS (END)

             ; FUNCTION _CH375_CMD_PORT_d_out (BEGIN)
                                           ; SOURCE LINE # 41
;---- Variable 'd_out' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 42
                                           ; SOURCE LINE # 44
0000 90BDF1            MOV     DPTR,#CH375_CMD_PORT
0003 EF                MOV     A,R7
0004 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 45
0005 020000      R     LJMP    mDelay2uS
             ; FUNCTION _CH375_CMD_PORT_d_out (END)

             ; FUNCTION L?0080 (BEGIN)
0000 AF00        R     MOV     R7,iLbaStart+03H
0002 AE00        R     MOV     R6,iLbaStart+02H
0004 AD00        R     MOV     R5,iLbaStart+01H
0006 AC00        R     MOV     R4,iLbaStart
0008 120000      E     LCALL   ?C?ULSHR
             ; FUNCTION _CH375_DAT_PORT_d_out (BEGIN)
                                           ; SOURCE LINE # 49
;---- Variable 'd_out' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 50
                                           ; SOURCE LINE # 51
000B 90BCF0            MOV     DPTR,#CH375_DAT_PORT
000E EF                MOV     A,R7
000F F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 53
0010 22                RET     
             ; FUNCTION _CH375_DAT_PORT_d_out (END)

             ; FUNCTION L?0082 (BEGIN)
0000         L?0083:
0000 7F28              MOV     R7,#028H
0002 120000      R     LCALL   _CH375_CMD_PORT_d_out
             ; FUNCTION CH375_DAT_PORT_in (BEGIN)
                                           ; SOURCE LINE # 56
                                           ; SOURCE LINE # 57
                                           ; SOURCE LINE # 59
0005 90BCF0            MOV     DPTR,#CH375_DAT_PORT
0008 E0                MOVX    A,@DPTR
0009 FF                MOV     R7,A
                                           ; SOURCE LINE # 60
000A         ?C0007:
000A 22                RET     
             ; FUNCTION CH375_DAT_PORT_in (END)

C51 COMPILER V7.06   CH375                                                                 11/22/2004 22:08:30 PAGE 9   

             ; FUNCTION _DelayMs (BEGIN)
                                           ; SOURCE LINE # 63
;---- Variable 'nFactor' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 64
                                           ; SOURCE LINE # 67
;---- Variable 'i' assigned to Register 'R6' ----
0000 E4                CLR     A
0001 FE                MOV     R6,A
0002         ?C0008:
0002 EE                MOV     A,R6
0003 C3                CLR     C
0004 9F                SUBB    A,R7
0005 5014              JNC     ?C0014
;---- Variable 'j' assigned to Register 'R4/R5' ----
0007 E4                CLR     A
0008 FD                MOV     R5,A
0009 FC                MOV     R4,A
000A         ?C0011:
000A 0D                INC     R5
000B BD0001            CJNE    R5,#00H,?C0077
000E 0C                INC     R4
000F         ?C0077:
000F C3                CLR     C
0010 ED                MOV     A,R5
0011 94E8              SUBB    A,#0E8H
0013 EC                MOV     A,R4
0014 9403              SUBB    A,#03H
0016 40F2              JC      ?C0011
0018         ?C0010:
0018 0E                INC     R6
0019 80E7              SJMP    ?C0008

⌨️ 快捷键说明

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