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

📄 nflash32.s

📁 usb开发(基于D12)。。湖南大学计算机与通信学院同学毕业设计及源代码!!好的很啊
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module NFlash32.c
	.area data(ram, con, rel)
_WriteResidueVal::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s WriteResidueVal _WriteResidueVal i
_Flash_Write_Sec::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s Flash_Write_Sec _Flash_Write_Sec c
_Flash_Write_Col::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s Flash_Write_Col _Flash_Write_Col c
_Flash_Write_addl::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s Flash_Write_addl _Flash_Write_addl c
_Flash_Write_addh::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s Flash_Write_addh _Flash_Write_addh c
_ReadResidueVal::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s ReadResidueVal _ReadResidueVal l
_Flash_Read_Sec::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s Flash_Read_Sec _Flash_Read_Sec c
_Flash_Read_Col::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s Flash_Read_Col _Flash_Read_Col c
_Flash_Read_addl::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s Flash_Read_addl _Flash_Read_addl c
_Flash_Read_addh::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbsym s Flash_Read_addh _Flash_Read_addh c
	.area text(rom, con, rel)
	.dbfile G:\source\NFlash32.c
	.dbfunc s flashErase _flashErase fI
;              i -> R20
;           addl -> R22
;           addh -> R10
	.even
_flashErase::
	rcall push_gset3
	mov R22,R18
	mov R10,R16
	sbiw R28,4
	.dbline -1
	.dbline 61
; /*++
; 
; Module Name:
; 
;          NFlash32.c
; 
; Abstract:
; 
;          Header file related to D12 module
; 
; Environment:
; 
;         ICCAVR 6.29
; 
; Revision History:
; 
;         04/23/2004      chenchi   created
; 
; --*/
; /******************************************************************/
; #include "io8515v.h"
; #include "d12.h"
; #include "scsi.h"
; #include "nflash32.h"
; 
; unsigned int WriteResidueVal = 0;
; unsigned char Flash_Write_Sec = 0x00;
; unsigned char Flash_Write_Col = 0x00;
; unsigned char Flash_Write_addl = 0x00;
; unsigned char Flash_Write_addh = 0x00;
; unsigned long ReadResidueVal = 0;
; unsigned char Flash_Read_Sec = 0x00;
; unsigned char Flash_Read_Col = 0x00;
; unsigned char Flash_Read_addl = 0x00;
; unsigned char Flash_Read_addh = 0x00;
; 
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:块擦除函数
; **函数输入参数及说明:
;   addh:高地址
;   addl:低地址
; 
; **函数返回值:无
; **在本函数以外定义的变量:fCOMMAND,fADD,fWPs,fWPc,fRB
; **调用的函数说明:无
; 
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void flashErase(unsigned char addh,unsigned char addl)
; {
	.dbline 62
; 	unsigned char i=0;
	clr R20
	.dbline 63
; 	fWPs;//打开写保护
	SBI 0x12,5
	.dbline 63
	.dbline 64
; 	fCOMMAND = 0x60;//块擦除命令
	ldi R24,96
	sts 40960,R24
	.dbline 65
; 	fADD = addl;//低地址
	sts 36864,R22
	.dbline 66
; 	fADD = addh;//高地址
	sts 36864,R10
	.dbline 67
; 	fCOMMAND = 0xd0;//处理命令
	ldi R24,208
	sts 40960,R24
	.dbline 68
; 	asm("nop \n nop");
	nop 
	 nop
L5:
	.dbline 69
L6:
	.dbline 69
; 	while(!fRB);
	sbis 0x10,4
	rjmp L5
	.dbline 70
; 	fCOMMAND = 0x70;//读状态命令
	ldi R24,112
	sts 40960,R24
	.dbline 71
; 	i = fDATA;//读状态值
	lds R20,32768
	.dbline 72
; 	csram;
	sts 0xfc01,R22
	.dbline 72
	.dbline 73
; 	fWPc;//写保护
	CBI 0x12,5
	.dbline 73
	.dbline 74
; 	printf("%x,%x erase is %x",addh,addl,i);//串口打印
	mov R2,R20
	clr R3
	std y+2,R2
	std y+3,R3
	mov R2,R22
	clr R3
	std y+0,R2
	std y+1,R3
	mov R18,R10
	clr R19
	ldi R16,<L8
	ldi R17,>L8
	rcall _printf
	.dbline -2
	.dbline 75
; }
L4:
	adiw R28,4
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r addl 22 c
	.dbsym r addh 10 c
	.dbfunc s flashWritecmd _flashWritecmd fI
;      Start_add -> y+9
;        End_add -> y+7
;   WritePageNum -> y+5
;    Erase_Count -> y+3
;     Erase_addh -> R14
;  Dest_two_addh -> R22
;  Sour_two_addh -> R10
;      Dest_addh -> y+19
;      Sour_addh -> y+18
; CopyBack_two_count -> y+16
; CopyBack_Count -> y+14
;     Erase_addl -> y+13
;  Dest_two_addl -> R12
;  Sour_two_addl -> R20
;      Dest_addl -> y+12
;      Sour_addl -> y+11
;              i -> R6,R7
	.even
_flashWritecmd::
	rcall push_gset5
	sbiw R28,20
	.dbline -1
	.dbline 98
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:写FLASH预处理函数
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:
; **调用的函数说明:无
; 
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void flashWritecmd(void)
; {
	.dbline 102
; 	unsigned char Erase_addh,Erase_addl;
; 	unsigned char Sour_addh,Sour_addl,Dest_addh,Dest_addl;
; 	unsigned char Sour_two_addh,Sour_two_addl,Dest_two_addh,Dest_two_addl;
; 	unsigned int Erase_Count = 0,i = 0;
	clr R2
	clr R3
	std y+3,R2
	std y+4,R3
	.dbline 102
	clr R6
	clr R7
	.dbline 103
; 	unsigned int CopyBack_Count = 0;
	clr R0
	clr R1
	std y+14,R0
	std y+15,R1
	.dbline 104
; 	unsigned int CopyBack_two_count = 0;
	std y+16,R0
	std y+17,R1
	.dbline 105
; 	unsigned int WritePageNum = 0;
	clr R2
	std y+5,R2
	std y+6,R3
	.dbline 124
; 	union{
; 		unsigned char c[2];
; 		unsigned int add;
; 	}Start_add;
; 	union{
; 		unsigned char c[2];
; 		unsigned int add;
; 	}End_add;
; 	/************说明*****************
; 	  对于FLASH的写操作原理是,写之前
; 	  必须擦除,FLASH写是按页写,但是擦
; 	  除是按块擦除,1块 = 32页,所以在
; 	  一块内只有部分页被写入时就需要先
; 	  将块内其他页保存,代整块擦除后一起
; 	  写入,这里用0XFA,0X00作为头块缓冲,
; 	  0XFB,0X00作为最后块缓冲,中间块采
; 	  用直接擦除处理
; 	**********************************/
; 	flashErase(0xfa, 0x00);
	clr R18
	ldi R16,250
	push R6
	push R7
	rcall _flashErase
	pop R7
	pop R6
	.dbline 125
; 	Sour_addh = XmtBuff.b[19];
	lds R2,_XmtBuff+19
	std y+18,R2
	.dbline 126
; 	Sour_addl = (XmtBuff.b[20]/0x20) * 0x20;
	ldi R17,32
	lds R16,_XmtBuff+20
	rcall div8u
	mov R2,R16
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	std y+11,R2
	.dbline 127
; 	Dest_addh = 0xfa;
	ldi R24,250
	std y+19,R24
	.dbline 128
; 	Dest_addl = (XmtBuff.b[20]/0x20) * 0x20;
	ldi R17,32
	lds R16,_XmtBuff+20
	rcall div8u
	mov R2,R16
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	std y+12,R2
	.dbline 129
; 	CopyBack_Count = XmtBuff.b[20]%0x20;
	ldi R18,32
	ldi R19,0
	lds R16,_XmtBuff+20
	clr R17
	rcall mod16s
	std y+14,R16
	std y+15,R17
	.dbline 130
	clr R6
	clr R7
	rjmp L19
L16:
	.dbline 130
	.dbline 131
	ldd R0,y+12
	std y+2,R0
	ldd R0,y+19
	std y+0,R0
	ldd R18,y+11
	ldd R16,y+18
	push R6
	push R7
	rcall _flashCopyBLack
	pop R7
	pop R6
	.dbline 132
	ldd R0,y+11
	inc R0
	std y+11,R0
	.dbline 133
	ldd R0,y+12
	inc R0
	std y+12,R0
	.dbline 134
L17:
	.dbline 130
	mov R24,R6
	mov R25,R7
	adiw R24,1
	mov R6,R24
	mov R7,R25
L19:
	.dbline 130
; 	for(i=0;i<CopyBack_Count;i++){
	ldd R0,y+14
	ldd R1,y+15
	cp R6,R0
	cpc R7,R1
	brlo L16
	.dbline 135
; 		flashCopyBLack(Sour_addh,Sour_addl,Dest_addh,Dest_addl);
; 		Sour_addl ++;
; 		Dest_addl ++;
; 	}
; 	Erase_addl = (XmtBuff.b[20]/0x20) * 0x20;
	ldi R17,32
	lds R16,_XmtBuff+20
	rcall div8u
	mov R2,R16
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	std y+13,R2
	.dbline 136
; 	Erase_addh = XmtBuff.b[19];
	lds R14,_XmtBuff+19
	.dbline 137
; 	WritePageNum = (XmtBuff.b[22]<<8)+XmtBuff.b[23];
	lds R2,_XmtBuff+23
	clr R3
	lds R4,_XmtBuff+22
	clr R5
	mov R5,R4
	clr R4
	add R4,R2
	adc R5,R3
	std y+5,R4
	std y+6,R5
	.dbline 138
; 	Erase_Count = WritePageNum / 0x20;
	ldi R18,5
	ldi R19,0
	ldd R16,y+5
	ldd R17,y+6
	rcall lsr16
	std y+3,R16
	std y+4,R17
	.dbline 139
; 	if(WritePageNum % 0x20){
	ldd R24,y+5
	ldd R25,y+6
	andi R24,31
	andi R25,0
	cpi R24,0
	cpc R24,R25
	breq L24
	.dbline 139
	.dbline 140
; 		Erase_Count ++;
	ldd R24,y+3
	ldd R25,y+4
	adiw R24,1
	std y+3,R24
	std y+4,R25
	.dbline 141
; 		if((WritePageNum % 0x20) > (0x20 - (XmtBuff.b[20] % 0x20)))
	ldi R18,32
	ldi R19,0
	lds R16,_XmtBuff+20
	clr R17
	rcall mod16s
	ldi R24,32
	ldi R25,0
	sub R24,R16
	sbc R25,R17
	ldd R30,y+5
	ldd R31,y+6
	andi R30,31
	andi R31,0
	cp R24,R30
	cpc R25,R31
	brsh L25
	.dbline 142
; 			Erase_Count ++;
	ldd R24,y+3
	ldd R25,y+4
	adiw R24,1
	std y+3,R24
	std y+4,R25
	.dbline 143
	rjmp L25
L24:
	.dbline 143
; 	}else if(XmtBuff.b[20] % 0x20){
	ldi R17,32
	lds R16,_XmtBuff+20
	rcall mod8u
	tst R16
	breq L29
	.dbline 143
	.dbline 144
; 		Erase_Count ++;
	ldd R24,y+3
	ldd R25,y+4
	adiw R24,1
	std y+3,R24
	std y+4,R25
	.dbline 145
; 	}
L29:
L25:
	.dbline 146
; 	Start_add.add = (XmtBuff.b[19]<<8)+XmtBuff.b[20];
	lds R2,_XmtBuff+20
	clr R3
	lds R4,_XmtBuff+19
	clr R5
	mov R5,R4
	clr R4
	add R4,R2
	adc R5,R3
	std y+9,R4
	std y+10,R5
	.dbline 147
; 	End_add.add = Start_add.add + WritePageNum;
	ldd R2,y+5
	ldd R3,y+6
	add R4,R2
	adc R5,R3
	std y+7,R4
	std y+8,R5
	.dbline 148
; 	flashErase(0xfb, 0x00);
	clr R18
	ldi R16,251
	push R6
	push R7
	rcall _flashErase
	pop R7
	pop R6
	.dbline 149
; 	Sour_two_addh = End_add.c[1];
	ldd R10,y+8
	.dbline 150
; 	Sour_two_addl = End_add.c[0];
	ldd R20,y+7
	.dbline 151
; 	Dest_two_addh = 0xfb;
	ldi R22,251
	.dbline 152
; 	Dest_two_addl = End_add.c[0];
	ldd R12,y+7
	.dbline 153
; 	CopyBack_two_count = (Erase_Count * 0x20) - CopyBack_Count -WritePageNum;
	ldi R18,5
	ldi R19,0
	ldd R16,y+3
	ldd R17,y+4
	rcall lsl16
	mov R2,R16
	mov R3,R17
	ldd R0,y+14
	ldd R1,y+15
	sub R2,R0
	sbc R3,R1
	ldd R4,y+5
	ldd R5,y+6
	sub R2,R4
	sbc R3,R5
	std y+16,R2
	std y+17,R3
	.dbline 154
	clr R6
	clr R7
	rjmp L38
L35:
	.dbline 154
	.dbline 155
	std y+2,R12
	std y+0,R22
	mov R18,R20
	mov R16,R10
	push R6
	push R7
	rcall _flashCopyBLack
	pop R7
	pop R6
	.dbline 156
	inc R20
	.dbline 157
	inc R12
	.dbline 158
L36:
	.dbline 154
	mov R24,R6
	mov R25,R7
	adiw R24,1
	mov R6,R24
	mov R7,R25
L38:
	.dbline 154
; 	for(i=0;i<CopyBack_two_count;i++){
	ldd R0,y+16
	ldd R1,y+17
	cp R6,R0
	cpc R7,R1
	brlo L35
	.dbline 159
	clr R6
	clr R7
	rjmp L42
L39:
	.dbline 159
; 		flashCopyBLack(Sour_two_addh,Sour_two_addl,Dest_two_addh,Dest_two_addl);
; 		Sour_two_addl ++;
; 		Dest_two_addl ++;
; 	}
; 	for(i=0;i<Erase_Count;i++){
	.dbline 160
; 		flashErase(Erase_addh, Erase_addl);
	ldd R18,y+13
	mov R16,R14
	push R6
	push R7
	rcall _flashErase
	pop R7
	pop R6
	.dbline 161
; 		if(Erase_addl == 224){
	ldd R24,y+13
	cpi R24,224
	brne L43
	.dbline 161
	.dbline 162
; 			Erase_addl = 0x00;
	clr R0
	std y+13,R0
	.dbline 163
; 			Erase_addh ++;
	inc R14
	.dbline 164
; 		}else
	rjmp L44
L43:
	.dbline 165
; 			Erase_addl += 0x20;
	ldd R24,y+13
	subi R24,224	; addi 32
	std y+13,R24
L44:
	.dbline 166
L40:
	.dbline 159
	mov R24,R6
	mov R25,R7
	adiw R24,1
	mov R6,R24
	mov R7,R25
L42:
	.dbline 159
	ldd R2,y+3
	ldd R3,y+4
	cp R6,R2
	cpc R7,R3
	brlo L39
	.dbline 167
	clr R6
	clr R7
	rjmp L48
L45:
	.dbline 167
	.dbline 168
	ldd R0,y+11
	dec R0
	std y+11,R0
	.dbline 169
	ldd R0,y+12
	dec R0
	std y+12,R0
	.dbline 170
	ldd R0,y+11
	std y+2,R0
	ldd R0,y+18
	std y+0,R0
	ldd R18,y+12
	ldd R16,y+19
	push R6
	push R7
	rcall _flashCopyBLack
	pop R7
	pop R6
	.dbline 171
L46:
	.dbline 167
	mov R24,R6
	mov R25,R7
	adiw R24,1
	mov R6,R24
	mov R7,R25
L48:
	.dbline 167
; 	}
; 	for(i=0;i<CopyBack_Count;i++){
	ldd R0,y+14
	ldd R1,y+15
	cp R6,R0
	cpc R7,R1
	brlo L45
	.dbline 172
	clr R6
	clr R7
	rjmp L52
L49:
	.dbline 172
	.dbline 173
	dec R20
	.dbline 174
	dec R12
	.dbline 175
	std y+2,R20
	std y+0,R10
	mov R18,R12
	mov R16,R22
	push R6
	push R7
	rcall _flashCopyBLack
	pop R7
	pop R6
	.dbline 176
L50:
	.dbline 172
	mov R24,R6
	mov R25,R7
	adiw R24,1
	mov R6,R24
	mov R7,R25
L52:
	.dbline 172
; 		Sour_addl --;
; 		Dest_addl --;
; 		flashCopyBLack(Dest_addh,Dest_addl,Sour_addh,Sour_addl);
; 	}
; 	for(i=0;i<CopyBack_two_count;i++){
	ldd R0,y+16
	ldd R1,y+17
	cp R6,R0
	cpc R7,R1
	brlo L49
	.dbline 177
; 		Sour_two_addl --;
; 		Dest_two_addl --;
; 		flashCopyBLack(Dest_two_addh,Dest_two_addl,Sour_two_addh,Sour_two_addl);
; 	}
; 	Flash_Write_Sec= 0x00;
	clr R2
	sts _Flash_Write_Sec,R2
	.dbline 178
; 	Flash_Write_Col= 0x00;
	sts _Flash_Write_Col,R2
	.dbline 179
; 	Flash_Write_addl= XmtBuff.b[20];
	lds R2,_XmtBuff+20

⌨️ 快捷键说明

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