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

📄 upsd3400_usb_app.ls1

📁 uPSD34xx Disk driver
💻 LS1
📖 第 1 页 / 共 5 页
字号:
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 + -