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

📄 upsd3400_usb_app.ls1

📁 uPSD34xx Disk driver
💻 LS1
📖 第 1 页 / 共 5 页
字号:
                     807                             ; SOURCE LINE # 249
0031 8F82            808             MOV     DPL,R7
0033 8E83            809             MOV     DPH,R6
0035 E0              810             MOVX    A,@DPTR
0036 FB              811             MOV     R3,A
                     812     ;---- Variable 'poll?349' assigned to Register 'R3' ----
                     813     ;                                      // Read the location that was just programmed
                     814     ;       error = poll & NVM_ERROR;              // save timeout error bit at DQ5
                     815                             ; SOURCE LINE # 251
0037 5420            816             ANL     A,#020H
0039 FA              817             MOV     R2,A
                     818     ;---- Variable 'error?347' assigned to Register 'R2' ----
                     819     ;       poll = poll & NVM_DATA_POLL;         // get DQ7 of poll byte read from flash
                     820                             ; SOURCE LINE # 252
003A CB              821             XCH     A,R3
003B 5480            822             ANL     A,#080H
003D CB              823             XCH     A,R3
                     824     ; 
                     825     ;       if (dat == poll)                       // compare DQ7
                     826                             ; SOURCE LINE # 254
003E ED              827             MOV     A,R5
003F 6B              828             XRL     A,R3
0040 7004            829             JNZ     ?C0019
                     830     ;        {
                     831                             ; SOURCE LINE # 255
                     832     ;         done = TRUE;                         // dat byte programmed into flash OK,
                     833                             ; SOURCE LINE # 256
0042 7901            834             MOV     R1,#01H
                     835     ;                                              // indicate successful exit criteria
                     836     ;        }
                     837                             ; SOURCE LINE # 258
0044 8005            838             SJMP    ?C0016
0046                 839     ?C0019:
                     840     ;       else if (error ==  NVM_ERROR )         // check for timeout error
                     841                             ; SOURCE LINE # 259
0046 BA2002          842             CJNE    R2,#020H,?C0016
                     843     ;        {
                     844                             ; SOURCE LINE # 260
                     845     ;         err = TRUE;                          // indicate timeout error occurred
                     846                             ; SOURCE LINE # 261
0049 7C01            847             MOV     R4,#01H
                     848     ;        }
                     849                             ; SOURCE LINE # 262
A51 MACRO ASSEMBLER  UPSD3400_USB_APP                                                     09/13/2005 18:00:20 PAGE    14

                     850     ; 
                     851     ;      }
                     852                             ; SOURCE LINE # 264
004B                 853     ?C0016:
                     854     ;     while((done == FALSE) && (err == FALSE));
                     855                             ; SOURCE LINE # 265
004B E9              856             MOV     A,R1
004C 7003            857             JNZ     ?C0017
004E EC              858             MOV     A,R4
004F 60E0            859             JZ      ?C0018
0051                 860     ?C0017:
                     861     ; 
                     862     ;     if (err == TRUE)                // make sure timeout error and dat poll didn't
                     863                             ; SOURCE LINE # 267
0051 BC0117          864             CJNE    R4,#01H,?C0015
                     865     ;                                              // occur simultaneously
                     866     ;      {
                     867                             ; SOURCE LINE # 269
                     868     ;       poll = ((unsigned char volatile xdata *) 0)[addr];
                     869                             ; SOURCE LINE # 270
0054 8F82            870             MOV     DPL,R7
0056 8E83            871             MOV     DPH,R6
0058 E0              872             MOVX    A,@DPTR
0059 FB              873             MOV     R3,A
                     874     ;                                              // Read location in flash again
                     875     ;       poll = poll & NVM_DATA_POLL;         // get DQ7 of poll byte read from flash
                     876                             ; SOURCE LINE # 272
005A CB              877             XCH     A,R3
005B 5480            878             ANL     A,#080H
005D CB              879             XCH     A,R3
                     880     ;       if (dat == poll)                       // compare DQ7
                     881                             ; SOURCE LINE # 273
005E ED              882             MOV     A,R5
005F 6B              883             XRL     A,R3
0060 7003            884             JNZ     ?C0024
                     885     ;        {
                     886                             ; SOURCE LINE # 274
                     887     ;         done = TRUE;             // data byte programmed into flash OK at the same
                     888                             ; SOURCE LINE # 275
                     889     ;                    // time timout error occured, indicate successful exit criteria
                     890     ;         err  = FALSE;
                     891                             ; SOURCE LINE # 277
0062 FC              892             MOV     R4,A
                     893     ;        }
                     894                             ; SOURCE LINE # 278
0063 8006            895             SJMP    ?C0015
0065                 896     ?C0024:
                     897     ;       else
                     898     ;        {
                     899                             ; SOURCE LINE # 280
                     900     ;         ((unsigned char volatile xdata *) 0)[0x8555] = 0xF0;
                     901                             ; SOURCE LINE # 281
0065 908555          902             MOV     DPTR,#08555H
0068 74F0            903             MOV     A,#0F0H
006A F0              904             MOVX    @DPTR,A
                     905     ;                                 // reset the flash array (short reset instruction)
                     906     ;        }
                     907                             ; SOURCE LINE # 283
                     908     ;      }
                     909                             ; SOURCE LINE # 284
                     910     ;    }
                     911                             ; SOURCE LINE # 285
006B                 912     ?C0015:
                     913     ;   return err;
                     914                             ; SOURCE LINE # 286
006B CF              915             XCH     A,R7
A51 MACRO ASSEMBLER  UPSD3400_USB_APP                                                     09/13/2005 18:00:20 PAGE    15

006C EC              916             MOV     A,R4
006D CF              917             XCH     A,R7
                     918     ;  }
                     919                             ; SOURCE LINE # 287
006E                 920     ?C0026:
006E 22              921             RET     
                     922     ; END OF _WriteToMainFlash
                     923     
                     924     ; 
                     925     ; 
                     926     ; 
                     927     ; 
                     928     ; 
                     929     ; 
                     930     ; 
                     931     ; void WriteBufferToFlash(void)
                     932     
----                 933             RSEG  ?PR?WriteBufferToFlash?UPSD3400_USB_APP
0000                 934     WriteBufferToFlash:
                     935             USING   0
                     936                             ; SOURCE LINE # 295
                     937     ; /******************************************************************************
                     938     ;  Function   : void WriteBufferToFlash()
                     939     ;  Parameters : (none)
                     940     ;  Description: Receives (writes) TransferLength sectors with length of 512 Bytes
                     941     ; 
                     942     ;  How it works:
                     943     ;  This SW burns data into internal uPSD NOR FLASH. To save FLASH RW cycles,
                     944     ;  it is looking for empty sector part you are burning in.
                     945     ;  If the area is filled by 0xFF only, the sector part is assumed
                     946     ;  to be erased before, so only data are written directly to the selected flash
                     947     ;  sector.
                     948     ;  If not, the sector is copied to the last flash sector #8,
                     949     ;  erased afterwards and written back (with the updated data block).
                     950     ;  ******************************************************************************/
                     951     ;  {
                     952                             ; SOURCE LINE # 310
                     953     ;   data unsigned char j,page;
                     954     ;   data unsigned int i,SectorEndPhysicalDataAddr;
                     955     ; 
                     956     ; 
                     957     ;   UPSD_xreg.DATAOUT_D = 0;                   // WRITE, RED LED ON !
                     958                             ; SOURCE LINE # 315
0000 E4              959             CLR     A
0001 900000   F      960             MOV     DPTR,#UPSD_xreg+013H
0004 F0              961             MOVX    @DPTR,A
                     962     ; 
                     963     ;   if (TransferLength != 0)
                     964                             ; SOURCE LINE # 317
0005 E500     F      965             MOV     A,TransferLength+01H
0007 4500     F      966             ORL     A,TransferLength
0009 7003            967             JNZ     $ + 5H
000B 020000   F      968             LJMP    ?C0027
                     969     ;    {
                     970                             ; SOURCE LINE # 318
                     971     ;                                              // Test the block (following 64B).
                     972     ;     USEL  = OUTDIR | UMSC_OUT_ENDPOINT;      // Select EP3 OUT
                     973                             ; SOURCE LINE # 320
000E 75EF81          974             MOV     USEL,#081H
                     975     ; 
                     976     ;     i = PhysicalDataAddr;
                     977                             ; SOURCE LINE # 322
0011 850000   F      978             MOV     i?453,PhysicalDataAddr
0014 850000   F      979             MOV     i?453+01H,PhysicalDataAddr+01H
                     980     ;     j = 0;
                     981                             ; SOURCE LINE # 323
A51 MACRO ASSEMBLER  UPSD3400_USB_APP                                                     09/13/2005 18:00:20 PAGE    16

0017 E4              982             CLR     A
0018 F500     F      983             MOV     j?451,A
001A                 984     ?C0028:
                     985     ; // now check whether is necessary to erase the block or not; it saves Flash RW cycles
                     986     ;     while (j<64)
                     987                             ; SOURCE LINE # 325
001A E500     F      988             MOV     A,j?451
001C C3              989             CLR     C
001D 9440            990             SUBB    A,#040H
001F 5028            991             JNC     ?C0029
                     992     ;      {
                     993                             ; SOURCE LINE # 326
                     994     ;       if (( ( ((unsigned char volatile xdata *) 0)[i]) | USB_FIFO[j]) != 0xFF)
                     995                             ; SOURCE LINE # 327
0021 E4              996             CLR     A
0022 2500     F      997             ADD     A,j?451
0024 F582            998             MOV     DPL,A
0026 E4              999             CLR     A
0027 3470           1000             ADDC    A,#070H
0029 F583           1001             MOV     DPH,A
002B E0             1002             MOVX    A,@DPTR
002C FF             1003             MOV     R7,A
002D 850082   F     1004             MOV     DPL,i?453+01H
0030 850083   F     1005             MOV     DPH,i?453
0033 E0            

⌨️ 快捷键说明

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