📄 upsd3400_usb_app.ls1
字号:
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 + -