📄 upsd3400_usb_app.ls1
字号:
0016 E500 F 399 MOV A,gdwCBWTag+03H
0018 F0 400 MOVX @DPTR,A
401 ; USB_FIFO[ 5] = *((uchar *)&gdwCBWTag+2);
402 ; SOURCE LINE # 88
0019 A3 403 INC DPTR
001A E500 F 404 MOV A,gdwCBWTag+02H
001C F0 405 MOVX @DPTR,A
406 ; USB_FIFO[ 6] = *((uchar *)&gdwCBWTag+1);
407 ; SOURCE LINE # 89
001D A3 408 INC DPTR
001E E500 F 409 MOV A,gdwCBWTag+01H
0020 F0 410 MOVX @DPTR,A
411 ; USB_FIFO[ 7] = *((uchar *)&gdwCBWTag+0);
412 ; SOURCE LINE # 90
0021 A3 413 INC DPTR
0022 E500 F 414 MOV A,gdwCBWTag
0024 F0 415 MOVX @DPTR,A
416 ; /*dCSWDataResidue:
417 ; For Data-Out the device shall report in the dCSWDataResidue the difference
418 ; between
419 ; the amount of data expected as stated in the dCBWDataTransferLength,
420 ; and the actual amount of data processed by the device.
421 ; For Data-In the device shall report in the dCSWDataResidue the difference
422 ; between the amount of data expected as stated in the dCBWDataTransferLength
423 ; and the actual amount of relevant data sent by the device.
424 ; The dCSWDataResidue shall not exceed the value sent in the dCBWDataTransferLength.
425 ; We return always zero, it is simple.
426 ; */
427 ; USB_FIFO[ 8] = 0x00; // dCSWDataResidue
428 ; SOURCE LINE # 102
0025 A3 429 INC DPTR
0026 E4 430 CLR A
0027 F0 431 MOVX @DPTR,A
432 ; USB_FIFO[ 9] = 0x00;
433 ; SOURCE LINE # 103
0028 A3 434 INC DPTR
0029 F0 435 MOVX @DPTR,A
436 ; USB_FIFO[10] = 0x00;
437 ; SOURCE LINE # 104
002A A3 438 INC DPTR
002B F0 439 MOVX @DPTR,A
440 ; USB_FIFO[11] = 0x00;
441 ; SOURCE LINE # 105
002C A3 442 INC DPTR
002D F0 443 MOVX @DPTR,A
444 ; /*bCSWStatus:
445 ; bCSWStatus indicates the success or failure of the command.
446 ; The device shall set this byte to zero if the command completed successfully.
447 ; A non-zero value shall indicate a failure during command execution according
448 ; to the following table:
449 ; 00h Command Passed ("good status")
450 ; 01h Command Failed
451 ; 02h Phase Error
452 ; 03h and 04h Reserved (Obsolete)
453 ; 05h to FFh Reserved
A51 MACRO ASSEMBLER UPSD3400_USB_APP 09/13/2005 18:00:20 PAGE 8
454 ; */
455 ; USB_FIFO[12] = gbCSWStatus; // bCSWStatus
456 ; SOURCE LINE # 117
002E A3 457 INC DPTR
002F E500 F 458 MOV A,gbCSWStatus
0031 F0 459 MOVX @DPTR,A
460 ;
461 ; USIZE = 0x0D; // fire !
462 ; SOURCE LINE # 119
0032 75F20D 463 MOV USIZE,#0DH
464 ;
465 ; gbBulkPipeStage = BS_CSW_DONE_PHASE;
466 ; SOURCE LINE # 121
0035 750003 F 467 MOV gbBulkPipeStage,#03H
468 ; }
469 ; SOURCE LINE # 122
0038 22 470 RET
471 ; END OF ReturnCSW
472
473 ;
474 ; void SpecificIncrementSectorAddress(void)
475
---- 476 RSEG ?PR?SpecificIncrementSectorAddress?UPSD3400_USB_APP
0000 477 SpecificIncrementSectorAddress:
478 ; SOURCE LINE # 124
479 ; /******************************************************************************
480 ; Function : void SpecificIncrementSectorAddress(void)
481 ; Parameters : none
482 ; Description: Increments PhysicalDataAddr of 512b (1 sector),
483 ; adjust PAGE and TransferLength.
484 ; Used in Read and Write Commands
485 ; ******************************************************************************/
486 ; {
487 ; SOURCE LINE # 132
488 ; PhysicalDataAddr += 64; // next sector physical address
489 ; SOURCE LINE # 133
0000 7440 490 MOV A,#040H
0002 2500 F 491 ADD A,PhysicalDataAddr+01H
0004 F500 F 492 MOV PhysicalDataAddr+01H,A
0006 E4 493 CLR A
0007 3500 F 494 ADDC A,PhysicalDataAddr
0009 F500 F 495 MOV PhysicalDataAddr,A
496 ; if (PhysicalDataAddr < 0x8000)
497 ; SOURCE LINE # 134
000B C3 498 CLR C
000C 9480 499 SUBB A,#080H
000E 5011 500 JNC ?C0002
501 ; {
502 ; SOURCE LINE # 135
503 ; PhysicalDataAddr += 0x8000; // adjust address to the top half of memory
504 ; SOURCE LINE # 136
0010 E4 505 CLR A
0011 2500 F 506 ADD A,PhysicalDataAddr+01H
0013 F500 F 507 MOV PhysicalDataAddr+01H,A
0015 7480 508 MOV A,#080H
0017 3500 F 509 ADDC A,PhysicalDataAddr
0019 F500 F 510 MOV PhysicalDataAddr,A
511 ; UPSD_xreg.PAGE += 1; // adjust PAGE
512 ; SOURCE LINE # 137
001B 900000 F 513 MOV DPTR,#UPSD_xreg+0E0H
001E E0 514 MOVX A,@DPTR
001F 04 515 INC A
0020 F0 516 MOVX @DPTR,A
517 ; }
518 ; SOURCE LINE # 138
0021 519 ?C0002:
A51 MACRO ASSEMBLER UPSD3400_USB_APP 09/13/2005 18:00:20 PAGE 9
520 ; TransferLength--; // decrement sector counter
521 ; SOURCE LINE # 139
0021 E500 F 522 MOV A,TransferLength+01H
0023 1500 F 523 DEC TransferLength+01H
0025 7002 524 JNZ ?C0116
0027 1500 F 525 DEC TransferLength
0029 526 ?C0116:
527 ; }
528 ; SOURCE LINE # 140
0029 22 529 RET
530 ; END OF SpecificIncrementSectorAddress
531
532 ;
533 ; // Flash parameters
534 ; #define NVM_DATA_POLL 0x80 // flash status "data poll" bit at DQ7
535 ; #define NVM_DATA_TOGGLE 0x40 // flash status "toggle poll" bit at DQ6
536 ; #define NVM_ERROR 0x20 // flash status "error" bit at DQ5
537 ;
538 ;
539 ; BOOL EraseMainFlashSector(void)
540
---- 541 RSEG ?PR?EraseMainFlashSector?UPSD3400_USB_APP
0000 542 EraseMainFlashSector:
543 USING 0
544 ; SOURCE LINE # 148
545 ; /******************************************************************************
546 ; Function : BOOL EraseMainFlashSector()
547 ; Parameters : (unsigned int addr,unsigned char wbyte)
548 ; Description: Erases Main Flash Sector
549 ; ******************************************************************************/
550 ; {
551 ; SOURCE LINE # 154
552 ; data unsigned char err,error,done;
553 ; data unsigned char poll;
554 ;
555 ; done = FALSE;
556 ; SOURCE LINE # 158
557 ;---- Variable 'done?242' assigned to Register 'R7' ----
0000 E4 558 CLR A
0001 FF 559 MOV R7,A
560 ; err = FALSE;
561 ; SOURCE LINE # 159
562 ;---- Variable 'err?240' assigned to Register 'R6' ----
0002 FE 563 MOV R6,A
564 ;
565 ; ((unsigned char volatile xdata *) 0x8000)[0x0555] = 0xAA;
566 ; SOURCE LINE # 161
0003 908555 567 MOV DPTR,#08555H
0006 74AA 568 MOV A,#0AAH
0008 F0 569 MOVX @DPTR,A
570 ; // unlock main flash, write 0xAA to addess 0xX555
571 ; ((unsigned char volatile xdata *) 0x8000)[0x0AAA] = 0x55;
572 ; SOURCE LINE # 163
0009 908AAA 573 MOV DPTR,#08AAAH
000C 7455 574 MOV A,#055H
000E F0 575 MOVX @DPTR,A
576 ; // unlock main flash, write 0x55 to addess 0xXAAA
577 ; ((unsigned char volatile xdata *) 0x8000)[0x0555] = 0x80;
578 ; SOURCE LINE # 165
000F 908555 579 MOV DPTR,#08555H
0012 7480 580 MOV A,#080H
0014 F0 581 MOVX @DPTR,A
582 ; // write 0x80 command to erase sector
583 ; ((unsigned char volatile xdata *) 0x8000)[0x0555] = 0xAA;
584 ; SOURCE LINE # 167
0015 74AA 585 MOV A,#0AAH
A51 MACRO ASSEMBLER UPSD3400_USB_APP 09/13/2005 18:00:20 PAGE 10
0017 F0 586 MOVX @DPTR,A
587 ; // continue unlock sequence
588 ; ((unsigned char volatile xdata *) 0x8000)[0x0AAA] = 0x55;
589 ; SOURCE LINE # 169
0018 908AAA 590 MOV DPTR,#08AAAH
001B 7455 591 MOV A,#055H
001D F0 592 MOVX @DPTR,A
593 ; // continue unlock sequence
594 ; ((unsigned char volatile xdata *) 0x8000)[0x0000] = 0x30;
595 ; SOURCE LINE # 171
001E 908000 596 MOV DPTR,#08000H
0021 7430 597 MOV A,#030H
0023 F0 598 MOVX @DPTR,A
0024 599 ?C0006:
600 ; // write 0x30 to sector address to erase
601 ;
602 ; do // now use dat polling method to verify successful erase
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -