📄 flash.lis
字号:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r id 16 i
0036 .dbend
0036 .dbfunc e Erase_Cluster _Erase_Cluster fc
0036 ; v -> R20
0036 ; blockPage -> R20,R21
0036 ; cluster -> R20,R21
.even
0036 _Erase_Cluster::
0036 0E940000 xcall push_gset1
003A A801 movw R20,R16
003C .dbline -1
003C .dbline 46
003C ; }
003C ; BOOL Erase_Cluster(unsigned int cluster)
003C ; {
003C .dbline 48
003C ; unsigned char v;
003C ; unsigned int blockPage=cluster*32;
003C 00E2 ldi R16,32
003E 10E0 ldi R17,0
0040 9A01 movw R18,R20
0042 0E940000 xcall empy16s
0046 A801 movw R20,R16
0048 .dbline 49
0048 ; fWPs;
0048 959A SBI 0x12,5
004A .dbline 49
004A .dbline 50
004A ; FC_CMD=BLOCK_ERASE_1C;
004A 80E6 ldi R24,96
004C 809300A0 sts 40960,R24
0050 .dbline 51
0050 ; FC_ADDR=blockPage%256;
0050 CA01 movw R24,R20
0052 9070 andi R25,0
0054 80930090 sts 36864,R24
0058 .dbline 52
0058 ; FC_ADDR=blockPage/256;
0058 1A01 movw R2,R20
005A 232C mov R2,R3
005C 3324 clr R3
005E 20920090 sts 36864,R2
0062 .dbline 53
0062 ; FC_CMD=BLOCK_ERASE_2C;
0062 80ED ldi R24,208
0064 809300A0 sts 40960,R24
0068 .dbline 54
0068 ; asm("nop \n nop");
0068 0000 nop
006A 0000 nop
006C L7:
006C .dbline 55
006C L8:
006C .dbline 55
006C ; WAITRB;
006C 849B sbis 0x10,4
006E FECF rjmp L7
0070 .dbline 56
0070 ; FC_CMD=READSTATUS;
0070 80E7 ldi R24,112
0072 809300A0 sts 40960,R24
0076 .dbline 57
0076 ; v=FC_DATA;
0076 40910080 lds R20,32768
007A .dbline 58
007A ; FC_INACTIVE
007A 609301FC sts 0xfc01,R22
007E .dbline 59
007E ; fWPc;
007E 9598 CBI 0x12,5
0080 .dbline 59
0080 .dbline 60
0080 ; if(v&0x01)
0080 40FF sbrs R20,0
0082 02C0 rjmp L10
0084 .dbline 61
0084 ; return FALSE;
0084 0027 clr R16
0086 01C0 xjmp L6
0088 L10:
0088 .dbline 62
0088 ; return TRUE;
0088 01E0 ldi R16,1
008A .dbline -2
008A L6:
008A 0E940000 xcall pop_gset1
008E .dbline 0 ; func end
008E 0895 ret
0090 .dbsym r v 20 c
0090 .dbsym r blockPage 20 i
0090 .dbsym r cluster 20 i
0090 .dbend
0090 .dbfunc e ReadPage _ReadPage fV
0090 ; blockPage -> R10,R11
0090 ; i -> R20,R21
0090 ; pPage -> R22,R23
0090 ; page -> R10,R11
0090 ; block -> R12,R13
.even
0090 _ReadPage::
0090 0E940000 xcall push_gset4
0094 5901 movw R10,R18
0096 6801 movw R12,R16
0098 6885 ldd R22,y+8
009A 7985 ldd R23,y+9
009C .dbline -1
009C .dbline 66
009C ; }
009C ;
009C ; void ReadPage(unsigned int block,unsigned int page,unsigned char *pPage)
009C ; {
009C .dbline 67
009C ; unsigned int i=512;
009C 40E0 ldi R20,512
009E 52E0 ldi R21,2
00A0 .dbline 68
00A0 ; unsigned int blockPage=block*32+page;
00A0 00E2 ldi R16,32
00A2 10E0 ldi R17,0
00A4 9601 movw R18,R12
00A6 0E940000 xcall empy16s
00AA 1801 movw R2,R16
00AC 2A0C add R2,R10
00AE 3B1C adc R3,R11
00B0 5101 movw R10,R2
00B2 .dbline 69
00B2 ; FC_CMD=READ0;
00B2 2224 clr R2
00B4 209200A0 sts 40960,R2
00B8 .dbline 70
00B8 ; FC_ADDR=0x00;
00B8 20920090 sts 36864,R2
00BC .dbline 71
00BC ; FC_ADDR=blockPage%256;
00BC C501 movw R24,R10
00BE 9070 andi R25,0
00C0 80930090 sts 36864,R24
00C4 .dbline 72
00C4 ; FC_ADDR=blockPage/256;
00C4 1501 movw R2,R10
00C6 232C mov R2,R3
00C8 3324 clr R3
00CA 20920090 sts 36864,R2
00CE .dbline 73
00CE ; asm("nop \n nop");
00CE 0000 nop
00D0 0000 nop
00D2 L13:
00D2 .dbline 74
00D2 L14:
00D2 .dbline 74
00D2 ; WAITRB;
00D2 849B sbis 0x10,4
00D4 FECF rjmp L13
00D6 05C0 xjmp L17
00D8 L16:
00D8 .dbline 75
00D8 .dbline 75
00D8 20900080 lds R2,32768
00DC FB01 movw R30,R22
00DE 2192 st Z+,R2
00E0 BF01 movw R22,R30
00E2 .dbline 75
00E2 L17:
00E2 .dbline 75
00E2 ; while(i--){*pPage++=FC_DATA;}
00E2 1A01 movw R2,R20
00E4 4150 subi R20,1
00E6 5040 sbci R21,0
00E8 2220 tst R2
00EA B1F7 brne L16
00EC 3320 tst R3
00EE A1F7 brne L16
00F0 X0:
00F0 .dbline 76
00F0 ; asm("nop \n nop");
00F0 0000 nop
00F2 0000 nop
00F4 L19:
00F4 .dbline 77
00F4 L20:
00F4 .dbline 77
00F4 ; WAITRB;
00F4 849B sbis 0x10,4
00F6 FECF rjmp L19
00F8 .dbline 78
00F8 ; FC_INACTIVE
00F8 609301FC sts 0xfc01,R22
00FC .dbline -2
00FC .dbline 79
00FC ; }
00FC L12:
00FC 0E940000 xcall pop_gset4
0100 .dbline 0 ; func end
0100 0895 ret
0102 .dbsym r blockPage 10 i
0102 .dbsym r i 20 i
0102 .dbsym r pPage 22 pc
0102 .dbsym r page 10 i
0102 .dbsym r block 12 i
0102 .dbend
0102 .dbfunc e WritePage _WritePage fc
0102 ; v -> R10
0102 ; blockPage -> R10,R11
0102 ; i -> R20,R21
0102 ; pPage -> R22,R23
0102 ; page -> R10,R11
0102 ; block -> R12,R13
.even
0102 _WritePage::
0102 0E940000 xcall push_gset4
0106 5901 movw R10,R18
0108 6801 movw R12,R16
010A 6885 ldd R22,y+8
010C 7985 ldd R23,y+9
010E .dbline -1
010E .dbline 81
010E ; BOOL WritePage(unsigned int block,unsigned int page,unsigned char *pPage)
010E ; {
010E .dbline 83
010E ; unsigned char v;
010E ; int i=512;
010E 40E0 ldi R20,512
0110 52E0 ldi R21,2
0112 .dbline 84
0112 ; unsigned int blockPage=block*32+page;
0112 00E2 ldi R16,32
0114 10E0 ldi R17,0
0116 9601 movw R18,R12
0118 0E940000 xcall empy16s
011C 1801 movw R2,R16
011E 2A0C add R2,R10
0120 3B1C adc R3,R11
0122 5101 movw R10,R2
0124 .dbline 85
0124 ; fWPs;
0124 959A SBI 0x12,5
0126 .dbline 85
0126 .dbline 86
0126 ; FC_CMD=PAGEPROGRAM_1C;
0126 80E8 ldi R24,128
0128 809300A0 sts 40960,R24
012C .dbline 87
012C ; FC_ADDR=0x00;
012C 2224 clr R2
012E 20920090 sts 36864,R2
0132 .dbline 88
0132 ; FC_ADDR=blockPage%256;
0132 C501 movw R24,R10
0134 9070 andi R25,0
0136 80930090 sts 36864,R24
013A .dbline 89
013A ; FC_ADDR=blockPage/256;
013A 1501 movw R2,R10
013C 232C mov R2,R3
013E 3324 clr R3
0140 20920090 sts 36864,R2
0144 05C0 xjmp L24
0146 L23:
0146 .dbline 90
0146 .dbline 90
0146 FB01 movw R30,R22
0148 2190 ld R2,Z+
014A BF01 movw R22,R30
014C 20920080 sts 32768,R2
0150 .dbline 90
0150 L24:
0150 .dbline 90
0150 ; while(i--){FC_DATA=*pPage++;}
0150 1A01 movw R2,R20
0152 4150 subi R20,1
0154 5040 sbci R21,0
0156 2220 tst R2
0158 B1F7 brne L23
015A 3320 tst R3
015C A1F7 brne L23
015E X1:
015E .dbline 91
015E ; FC_CMD=PAGEPROGRAM_2C;
015E 80E1 ldi R24,16
0160 809300A0 sts 40960,R24
0164 .dbline 92
0164 ; asm("nop \n nop");
0164 0000 nop
0166 0000 nop
0168 L26:
0168 .dbline 93
0168 L27:
0168 .dbline 93
0168 ; WAITRB;
0168 849B sbis 0x10,4
016A FECF rjmp L26
016C .dbline 94
016C ; FC_CMD=READSTATUS;
016C 80E7 ldi R24,112
016E 809300A0 sts 40960,R24
0172 .dbline 95
0172 ; v=FC_DATA;
0172 A0900080 lds R10,32768
0176 .dbline 96
0176 ; FC_INACTIVE
0176 609301FC sts 0xfc01,R22
017A .dbline 97
017A ; fWPc;
017A 9598 CBI 0x12,5
017C .dbline 97
017C .dbline 98
017C ; if(v&0x1)
017C A0FE sbrs R10,0
017E 02C0 rjmp L29
0180 .dbline 99
0180 ; return FALSE;
0180 0027 clr R16
0182 01C0 xjmp L22
0184 L29:
0184 .dbline 100
0184 ; return TRUE;
0184 01E0 ldi R16,1
0186 .dbline -2
0186 L22:
0186 0E940000 xcall pop_gset4
018A .dbline 0 ; func end
018A 0895 ret
018C .dbsym r v 10 c
018C .dbsym r blockPage 10 i
018C .dbsym r i 20 I
018C .dbsym r pPage 22 pc
018C .dbsym r page 10 i
018C .dbsym r block 12 i
018C .dbend
018C .dbfunc e CopyBlack _CopyBlack fc
018C ; v -> R12
018C ; blockPage -> R20,R21
018C ; dpage -> R22,R23
018C ; dblock -> R10,R11
018C ; spage -> R20,R21
018C ; sblock -> R12,R13
.even
018C _CopyBlack::
018C 0E940000 xcall push_gset4
0190 A901 movw R20,R18
0192 6801 movw R12,R16
0194 A884 ldd R10,y+8
0196 B984 ldd R11,y+9
0198 6A85 ldd R22,y+10
019A 7B85 ldd R23,y+11
019C .dbline -1
019C .dbline 105
019C ;
019C ; }
019C ; BOOL CopyBlack(unsigned int sblock,unsigned int spage,
019C ; unsigned int dblock,unsigned int dpage)
019C ; {
019C .dbline 107
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -