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

📄 flash.s

📁 开发环境 iccavr6.0 单片机时钟由pdiusbd12的clkout给出8M 为了回报的每一个无私的开发者
💻 S
📖 第 1 页 / 共 2 页
字号:
	nop 
	 nop
L19:
	.dbline 77
L20:
	.dbline 77
;   WAITRB;  
	sbis 0x10,4
	rjmp L19
	.dbline 78
;   FC_INACTIVE
	sts 0xfc01,R22
	.dbline -2
	.dbline 79
; }
L12:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r blockPage 10 i
	.dbsym r i 20 i
	.dbsym r pPage 22 pc
	.dbsym r page 10 i
	.dbsym r block 12 i
	.dbend
	.dbfunc e WritePage _WritePage fc
;              v -> R10
;      blockPage -> R10,R11
;              i -> R20,R21
;          pPage -> R22,R23
;           page -> R10,R11
;          block -> R12,R13
	.even
_WritePage::
	xcall push_gset4
	movw R10,R18
	movw R12,R16
	ldd R22,y+8
	ldd R23,y+9
	.dbline -1
	.dbline 81
; BOOL WritePage(unsigned int block,unsigned int page,unsigned char *pPage)
; {
	.dbline 83
;   unsigned char v;
;   int i=512;
	ldi R20,512
	ldi R21,2
	.dbline 84
;   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 85
;   fWPs;
	SBI 0x12,5
	.dbline 85
	.dbline 86
;   FC_CMD=PAGEPROGRAM_1C;
	ldi R24,128
	sts 40960,R24
	.dbline 87
;   FC_ADDR=0x00;
	clr R2
	sts 36864,R2
	.dbline 88
;   FC_ADDR=blockPage%256;
	movw R24,R10
	andi R25,0
	sts 36864,R24
	.dbline 89
;   FC_ADDR=blockPage/256;
	movw R2,R10
	mov R2,R3
	clr R3
	sts 36864,R2
	xjmp L24
L23:
	.dbline 90
	.dbline 90
	movw R30,R22
	ld R2,Z+
	movw R22,R30
	sts 32768,R2
	.dbline 90
L24:
	.dbline 90
;   while(i--){FC_DATA=*pPage++;}
	movw R2,R20
	subi R20,1
	sbci R21,0
	tst R2
	brne L23
	tst R3
	brne L23
X1:
	.dbline 91
;   FC_CMD=PAGEPROGRAM_2C;
	ldi R24,16
	sts 40960,R24
	.dbline 92
;   asm("nop \n nop");
	nop 
	 nop
L26:
	.dbline 93
L27:
	.dbline 93
;   WAITRB;
	sbis 0x10,4
	rjmp L26
	.dbline 94
;   FC_CMD=READSTATUS;   
	ldi R24,112
	sts 40960,R24
	.dbline 95
;   v=FC_DATA;
	lds R10,32768
	.dbline 96
;   FC_INACTIVE
	sts 0xfc01,R22
	.dbline 97
;   fWPc;  
	CBI 0x12,5
	.dbline 97
	.dbline 98
;   if(v&0x1)
	sbrs R10,0
	rjmp L29
	.dbline 99
;     return FALSE;
	clr R16
	xjmp L22
L29:
	.dbline 100
;   return TRUE;
	ldi R16,1
	.dbline -2
L22:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r v 10 c
	.dbsym r blockPage 10 i
	.dbsym r i 20 I
	.dbsym r pPage 22 pc
	.dbsym r page 10 i
	.dbsym r block 12 i
	.dbend
	.dbfunc e CopyBlack _CopyBlack fc
;              v -> R12
;      blockPage -> R20,R21
;          dpage -> R22,R23
;         dblock -> R10,R11
;          spage -> R20,R21
;         sblock -> R12,R13
	.even
_CopyBlack::
	xcall push_gset4
	movw R20,R18
	movw R12,R16
	ldd R10,y+8
	ldd R11,y+9
	ldd R22,y+10
	ldd R23,y+11
	.dbline -1
	.dbline 105
;      
; }
; BOOL CopyBlack(unsigned int sblock,unsigned int spage,
;                unsigned int dblock,unsigned int dpage)
; {
	.dbline 107
;   unsigned char v;
;   unsigned int blockPage=sblock*32+spage;
	ldi R16,32
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	add R2,R20
	adc R3,R21
	movw R20,R2
	.dbline 108
;   fWPs;
	SBI 0x12,5
	.dbline 108
	.dbline 109
;   FC_CMD=COPY_BACK_1C;
	clr R2
	sts 40960,R2
	.dbline 110
;   FC_ADDR=0x00;
	sts 36864,R2
	.dbline 111
;   FC_ADDR=blockPage&0xff;
	movw R24,R20
	andi R25,0
	sts 36864,R24
	.dbline 112
;   FC_ADDR=(blockPage>>8)&0xff;
	movw R24,R20
	mov R24,R25
	clr R25
	andi R25,0
	sts 36864,R24
	.dbline 113
;   asm("nop \n nop");
	nop 
	 nop
L32:
	.dbline 114
L33:
	.dbline 114
;   WAITRB;
	sbis 0x10,4
	rjmp L32
	.dbline 115
;   blockPage=(dblock<<5)+dpage;
	ldi R18,5
	ldi R19,0
	movw R16,R10
	xcall lsl16
	movw R20,R16
	add R20,R22
	adc R21,R23
	.dbline 116
;   FC_CMD=COPY_BACK_2C;
	ldi R24,138
	sts 40960,R24
	.dbline 117
;   FC_ADDR=0x00;
	clr R2
	sts 36864,R2
	.dbline 118
;   FC_ADDR=blockPage&0xff;
	movw R24,R20
	andi R25,0
	sts 36864,R24
	.dbline 119
;   FC_ADDR=(blockPage>>8)&0xff;
	movw R24,R20
	mov R24,R25
	clr R25
	andi R25,0
	sts 36864,R24
	.dbline 120
;   asm("nop \n nop");
	nop 
	 nop
L35:
	.dbline 121
L36:
	.dbline 121
;   WAITRB;
	sbis 0x10,4
	rjmp L35
	.dbline 122
;   FC_CMD=READSTATUS;   
	ldi R24,112
	sts 40960,R24
	.dbline 123
;   v=FC_DATA;
	lds R12,32768
	.dbline 124
;   FC_INACTIVE
	sts 0xfc01,R22
	.dbline 125
;   fWPc;
	CBI 0x12,5
	.dbline 125
	.dbline 126
;   if(v&0x1)
	sbrs R12,0
	rjmp L38
	.dbline 127
; 	 return FALSE;
	clr R16
	xjmp L31
L38:
	.dbline 128
;   return TRUE;
	ldi R16,1
	.dbline -2
L31:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r v 12 c
	.dbsym r blockPage 20 i
	.dbsym r dpage 22 i
	.dbsym r dblock 10 i
	.dbsym r spage 20 i
	.dbsym r sblock 12 i
	.dbend
	.dbfunc e Format_Fat16Media _Format_Fat16Media fV
;              j -> <dead>
;              i -> R20,R21
	.even
_Format_Fat16Media::
	xcall push_gset1
	sbiw R28,2
	.dbline -1
	.dbline 131
; }
; void Format_Fat16Media()
; {
	.dbline 133
	clr R20
	clr R21
	xjmp L44
L41:
	.dbline 133
	ldi R24,<_Fat16_Bpb
	ldi R25,>_Fat16_Bpb
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R30,Z
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	movw R26,R20
	add R26,R24
	adc R27,R25
	st x,R30
L42:
	.dbline 133
	subi R20,255  ; offset = 1
	sbci R21,255
L44:
	.dbline 133
;  unsigned int i,j;
;  for(i=0;i<512;i++)PageBuf[i]=Fat16_Bpb[i];
	cpi R20,0
	ldi R30,2
	cpc R21,R30
	brlo L41
	.dbline 134
;  Erase_Cluster(0);
	clr R16
	clr R17
	xcall _Erase_Cluster
	.dbline 135
;  Erase_Cluster(1);
	ldi R16,1
	ldi R17,0
	xcall _Erase_Cluster
	.dbline 136
;  WritePage(0,0,PageBuf);
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	clr R16
	clr R17
	xcall _WritePage
	.dbline 137
	clr R20
	clr R21
	xjmp L48
L45:
	.dbline 137
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	movw R30,R20
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
L46:
	.dbline 137
	subi R20,255  ; offset = 1
	sbci R21,255
L48:
	.dbline 137
;  for(i=0;i<512;i++)PageBuf[i]=0;
	cpi R20,0
	ldi R30,2
	cpc R21,R30
	brlo L45
	.dbline 138
;  PageBuf[0]=0xF8;
	ldi R24,248
	sts _PageBuf,R24
	.dbline 139
;  PageBuf[1]=0xFF;
	ldi R24,255
	sts _PageBuf+1,R24
	.dbline 140
;  PageBuf[2]=0xFF;
	sts _PageBuf+2,R24
	.dbline 141
;  PageBuf[3]=0xFF;
	sts _PageBuf+3,R24
	.dbline 142
;  WritePage(0,1,PageBuf);
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R19,0
	clr R16
	clr R17
	xcall _WritePage
	.dbline 143
;  WritePage(0,5,PageBuf);
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	ldi R18,5
	ldi R19,0
	clr R16
	clr R17
	xcall _WritePage
	.dbline 144
;  PageBuf[0]=0x0;
	clr R2
	sts _PageBuf,R2
	.dbline 145
;  PageBuf[1]=0x0;
	sts _PageBuf+1,R2
	.dbline 146
;  PageBuf[2]=0x0;
	sts _PageBuf+2,R2
	.dbline 147
;  PageBuf[3]=0x0;
	sts _PageBuf+3,R2
	.dbline 148
;  WritePage(0,2,PageBuf);
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	ldi R18,2
	ldi R19,0
	clr R16
	clr R17
	xcall _WritePage
	.dbline 149
;  WritePage(0,3,PageBuf);
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	ldi R18,3
	ldi R19,0
	clr R16
	clr R17
	xcall _WritePage
	.dbline 150
;  WritePage(0,4,PageBuf);
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	ldi R18,4
	ldi R19,0
	clr R16
	clr R17
	xcall _WritePage
	.dbline 151
;  for(i=6;i<32;i++)
	ldi R20,6
	ldi R21,0
	xjmp L58
L55:
	.dbline 152
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	movw R18,R20
	clr R16
	clr R17
	xcall _WritePage
L56:
	.dbline 151
	subi R20,255  ; offset = 1
	sbci R21,255
L58:
	.dbline 151
	cpi R20,32
	ldi R30,0
	cpc R21,R30
	brlo L55
	.dbline 153
;     WritePage(0,i,PageBuf);
;   for(i=0;i<32;i++)
	clr R20
	clr R21
	xjmp L62
L59:
	.dbline 154
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	movw R18,R20
	ldi R16,1
	ldi R17,0
	xcall _WritePage
L60:
	.dbline 153
	subi R20,255  ; offset = 1
	sbci R21,255
L62:
	.dbline 153
	cpi R20,32
	ldi R30,0
	cpc R21,R30
	brlo L59
	.dbline -2
	.dbline 155
;     WritePage(1,i,PageBuf);
; }
L40:
	adiw R28,2
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l j 3 i
	.dbsym r i 20 i
	.dbend

⌨️ 快捷键说明

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