📄 ch375.lst
字号:
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 + -