📄 flash.s
字号:
.module Flash.c
.area lit(rom, con, rel)
_Fat16_Bpb::
.byte 235,3
.byte 144,'M
.byte 'S,'W
.byte 'I,'N
.byte 52,46
.byte 49,0
.byte 2,1
.byte 1,0
.byte 2,0
.byte 2,0
.byte 252,248
.byte 250,0
.byte 63,0
.byte 255,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 41,49
.byte 50,51
.byte 52,'Y
.byte 'U,'X
.byte 'K,45
.byte 'M,'A
.byte 'S,'S
.byte 45,49
.byte 'F,'A
.byte 'T,49
.byte 54,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 'U,170
.dbfile D:\AvrUSB\Flash.c
.dbsym e Fat16_Bpb _Fat16_Bpb A[512:512]kc
.area text(rom, con, rel)
.dbfile D:\AvrUSB\Flash.c
.dbfunc e Flash_Reset _Flash_Reset fV
.even
_Flash_Reset::
.dbline -1
.dbline 30
; #include <iom161v.h>
; #include <macros.h>
; #include "Flash.h"
; extern unsigned char PageBuf[512];
;
; const unsigned char Fat16_Bpb[512]={
; 0xEB,0x03,0x90,'M','S','W','I','N','4','.','1',0,2,1,1,
; 0,2,0,2,0,0xfc,0xf8,0xfa,0,0x3f,0,0xff,0,0,0,0,0,0,0,0,0,//35
; 0,0,0x29,'1','2','3','4',
; 'Y','U','X','K','-','M','A','S','S','-','1',
; 'F','A','T','1','6',0,0,0,//61
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
; 0x55,0xAA//unsigned char ExecutableMarker[2]
; };
; void Flash_Reset(void)
; {
.dbline 31
; FC_CMD=RESET;
ldi R24,255
sts 40960,R24
.dbline 32
; asm("nop \n nop");
nop
nop
L2:
.dbline 33
L3:
.dbline 33
; WAITRB;
sbis 0x10,4
rjmp L2
.dbline -2
.dbline 34
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Check_Flash_Id _Check_Flash_Id fi
; id -> R16,R17
.even
_Check_Flash_Id::
.dbline -1
.dbline 36
; unsigned int Check_Flash_Id(void)
; {
.dbline 38
; unsigned int id;
; FC_CMD=READID;
ldi R24,144
sts 40960,R24
.dbline 39
; FC_ADDR=READ0;
clr R2
sts 36864,R2
.dbline 40
; id=FC_DATA<<8;
lds R16,32768
clr R17
mov R17,R16
clr R16
.dbline 41
; id+=FC_DATA;
lds R2,32768
clr R3
add R16,R2
adc R17,R3
.dbline 42
; FC_INACTIVE
sts 0xfc01,R22
.dbline 43
; return id;
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbsym r id 16 i
.dbend
.dbfunc e Erase_Cluster _Erase_Cluster fc
; v -> R20
; blockPage -> R20,R21
; cluster -> R20,R21
.even
_Erase_Cluster::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 46
; }
; BOOL Erase_Cluster(unsigned int cluster)
; {
.dbline 48
; unsigned char v;
; unsigned int blockPage=cluster*32;
ldi R16,32
ldi R17,0
movw R18,R20
xcall empy16s
movw R20,R16
.dbline 49
; fWPs;
SBI 0x12,5
.dbline 49
.dbline 50
; FC_CMD=BLOCK_ERASE_1C;
ldi R24,96
sts 40960,R24
.dbline 51
; FC_ADDR=blockPage%256;
movw R24,R20
andi R25,0
sts 36864,R24
.dbline 52
; FC_ADDR=blockPage/256;
movw R2,R20
mov R2,R3
clr R3
sts 36864,R2
.dbline 53
; FC_CMD=BLOCK_ERASE_2C;
ldi R24,208
sts 40960,R24
.dbline 54
; asm("nop \n nop");
nop
nop
L7:
.dbline 55
L8:
.dbline 55
; WAITRB;
sbis 0x10,4
rjmp L7
.dbline 56
; FC_CMD=READSTATUS;
ldi R24,112
sts 40960,R24
.dbline 57
; v=FC_DATA;
lds R20,32768
.dbline 58
; FC_INACTIVE
sts 0xfc01,R22
.dbline 59
; fWPc;
CBI 0x12,5
.dbline 59
.dbline 60
; if(v&0x01)
sbrs R20,0
rjmp L10
.dbline 61
; return FALSE;
clr R16
xjmp L6
L10:
.dbline 62
; return TRUE;
ldi R16,1
.dbline -2
L6:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r v 20 c
.dbsym r blockPage 20 i
.dbsym r cluster 20 i
.dbend
.dbfunc e ReadPage _ReadPage fV
; blockPage -> R10,R11
; i -> R20,R21
; pPage -> R22,R23
; page -> R10,R11
; block -> R12,R13
.even
_ReadPage::
xcall push_gset4
movw R10,R18
movw R12,R16
ldd R22,y+8
ldd R23,y+9
.dbline -1
.dbline 66
; }
;
; void ReadPage(unsigned int block,unsigned int page,unsigned char *pPage)
; {
.dbline 67
; unsigned int i=512;
ldi R20,512
ldi R21,2
.dbline 68
; unsigned int blockPage=block*32+page;
ldi R16,32
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
add R2,R10
adc R3,R11
movw R10,R2
.dbline 69
; FC_CMD=READ0;
clr R2
sts 40960,R2
.dbline 70
; FC_ADDR=0x00;
sts 36864,R2
.dbline 71
; FC_ADDR=blockPage%256;
movw R24,R10
andi R25,0
sts 36864,R24
.dbline 72
; FC_ADDR=blockPage/256;
movw R2,R10
mov R2,R3
clr R3
sts 36864,R2
.dbline 73
; asm("nop \n nop");
nop
nop
L13:
.dbline 74
L14:
.dbline 74
; WAITRB;
sbis 0x10,4
rjmp L13
xjmp L17
L16:
.dbline 75
.dbline 75
lds R2,32768
movw R30,R22
st Z+,R2
movw R22,R30
.dbline 75
L17:
.dbline 75
; while(i--){*pPage++=FC_DATA;}
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L16
tst R3
brne L16
X0:
.dbline 76
; asm("nop \n nop");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -