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

📄 at45db021.s

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 S
📖 第 1 页 / 共 2 页
字号:
; switch( BufferSelect  ) 
	ldd R20,y+6
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L60
X3:
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L61
	rjmp L56
X4:
	.dbline 193
L60:
	.dbline 193
; 	{case BUFFER_1: SPI_Send8BitData(BUFFER_1_READ );break;
	ldi R16,84
	rcall _SPI_Send8BitData
	.dbline 193
	rjmp L58
L61:
	.dbline 194
; 	  case BUFFER_2: SPI_Send8BitData(BUFFER_2_READ );break;
	ldi R16,86
	rcall _SPI_Send8BitData
	.dbline 194
	.dbline 195
; 	 default: return;
L58:
	.dbline 197
; 	}
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 198
; SPI_Send8BitData((char)(Buff_add>>8));//send block address MSB BA8
	ldd R16,y+8
	ldd R17,y+9
	mov R16,R17
	clr R17
	rcall _SPI_Send8BitData
	.dbline 199
; SPI_Send8BitData((char)(Buff_add));//send block address LSB BA7 ... BA0
	ldd R16,y+8
	ldd R17,y+9
	rcall _SPI_Send8BitData
	.dbline 200
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 201
; for(i=0;i<datalength;i++)
	clr R20
	clr R21
	rjmp L65
L62:
	.dbline 202
	rcall _SPI_Receive8BitData
	movw R30,R20
	add R30,R22
	adc R31,R23
	std z+0,R16
L63:
	.dbline 201
	subi R20,255  ; offset = 1
	sbci R21,255
L65:
	.dbline 201
	cp R20,R10
	cpc R21,R11
	brlo L62
	.dbline 204
; Read_data[i]=SPI_Receive8BitData();
; 
; SPI_End();//disable spi
	rcall _SPI_End
	.dbline 205
; Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _Delay
	.dbline -2
L56:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym l Buff_add 8 i
	.dbsym l BufferSelect 6 c
	.dbsym r datalength 10 i
	.dbsym r Read_data 22 pc
	.dbend
	.dbfunc e MemoryToBuffer _MemoryToBuffer fV
;              i -> <dead>
;   BufferSelect -> R22
;       Page_add -> R20,R21
	.even
_MemoryToBuffer::
	rcall push_gset2
	mov R22,R18
	movw R20,R16
	.dbline -1
	.dbline 209
; }
; 
; void MemoryToBuffer(unsigned int Page_add,unsigned char BufferSelect )
; {
	.dbline 211
; unsigned int i;
; SPI_Start();//enable spi
	rcall _SPI_Start
	.dbline 212
; switch( BufferSelect  ) 
	clr R23
	cpi R22,0
	cpc R22,R23
	breq L70
X5:
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L71
	rjmp L66
X6:
	.dbline 213
L70:
	.dbline 213
; 	{case BUFFER_1: SPI_Send8BitData(MM_PAGE_TO_B1_XFER );break;
	ldi R16,83
	rcall _SPI_Send8BitData
	.dbline 213
	rjmp L68
L71:
	.dbline 214
; 	  case BUFFER_2: SPI_Send8BitData(MM_PAGE_TO_B2_XFER );break;
	ldi R16,85
	rcall _SPI_Send8BitData
	.dbline 214
	.dbline 215
; 	 default: return;
L68:
	.dbline 217
; 	}
; SPI_Send8BitData((char)(Page_add >> 7));
	ldi R18,7
	ldi R19,0
	movw R16,R20
	rcall lsr16
	rcall _SPI_Send8BitData
	.dbline 218
; SPI_Send8BitData((char)(Page_add << 1));
	mov R16,R20
	lsl R16
	rol R17
	rcall _SPI_Send8BitData
	.dbline 219
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 220
; SPI_End();//disable spi
	rcall _SPI_End
	.dbline 221
; Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _Delay
	.dbline -2
L66:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l i 1 i
	.dbsym r BufferSelect 22 c
	.dbsym r Page_add 20 i
	.dbend
	.dbfunc e MemoryPageRead _MemoryPageRead fV
;       tempdata -> R20,R21
;              i -> R20,R21
;    in_page_add -> y+8
;       Page_add -> y+6
;     datalength -> R10,R11
;      Read_data -> R22,R23
	.even
_MemoryPageRead::
	rcall push_gset3
	movw R10,R18
	movw R22,R16
	.dbline -1
	.dbline 226
; 
; }
; 
; void  MemoryPageRead(unsigned char * Read_data,unsigned int datalength,unsigned int Page_add,unsigned int in_page_add)
; {
	.dbline 228
; unsigned int i, tempdata;
; SPI_Start();//enable spi
	rcall _SPI_Start
	.dbline 229
; SPI_Send8BitData(MAIN_MEMORY_PAGE_READ );
	ldi R16,82
	rcall _SPI_Send8BitData
	.dbline 230
; SPI_Send8BitData((char)(Page_add >> 7));
	ldi R18,7
	ldi R19,0
	ldd R16,y+6
	ldd R17,y+7
	rcall lsr16
	rcall _SPI_Send8BitData
	.dbline 231
; tempdata=(in_page_add>>8);
	ldd R20,y+8
	ldd R21,y+9
	mov R20,R21
	clr R21
	.dbline 232
; tempdata&=0x01;
	andi R20,1
	andi R21,0
	.dbline 233
; tempdata|=(Page_add << 1);
	ldd R2,y+6
	ldd R3,y+7
	lsl R2
	rol R3
	or R20,R2
	or R21,R3
	.dbline 234
; SPI_Send8BitData((char)tempdata);
	mov R16,R20
	rcall _SPI_Send8BitData
	.dbline 235
; SPI_Send8BitData((char)(in_page_add));//send block address LSB BA7 ... BA0
	ldd R16,y+8
	ldd R17,y+9
	rcall _SPI_Send8BitData
	.dbline 236
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 237
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 238
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 239
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 240
; Delay(1000);
	ldi R16,1000
	ldi R17,3
	rcall _Delay
	.dbline 241
; for(i=0;i<datalength;i++)
	clr R20
	clr R21
	rjmp L76
L73:
	.dbline 242
	rcall _SPI_Receive8BitData
	movw R30,R20
	add R30,R22
	adc R31,R23
	std z+0,R16
L74:
	.dbline 241
	subi R20,255  ; offset = 1
	sbci R21,255
L76:
	.dbline 241
	cp R20,R10
	cpc R21,R11
	brlo L73
	.dbline 243
; Read_data[i]=SPI_Receive8BitData();
; SPI_End();//disable spi
	rcall _SPI_End
	.dbline 244
; Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _Delay
	.dbline -2
L72:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r tempdata 20 i
	.dbsym r i 20 i
	.dbsym l in_page_add 8 i
	.dbsym l Page_add 6 i
	.dbsym r datalength 10 i
	.dbsym r Read_data 22 pc
	.dbend
	.dbfunc e ContinuousArraryRead _ContinuousArraryRead fV
;       tempdata -> R20,R21
;              i -> R20,R21
;    in_page_add -> y+8
;       Page_add -> y+6
;     datalength -> R10,R11
;      Read_data -> R22,R23
	.even
_ContinuousArraryRead::
	rcall push_gset3
	movw R10,R18
	movw R22,R16
	.dbline -1
	.dbline 249
; 
; }
; 
; void  ContinuousArraryRead(unsigned char * Read_data,unsigned int datalength,unsigned int Page_add,unsigned int in_page_add)
; {
	.dbline 251
; unsigned int i, tempdata;
; SPI_Start();//enable spi
	rcall _SPI_Start
	.dbline 252
; SPI_Send8BitData(Continuous_Array_Read );
	ldi R16,104
	rcall _SPI_Send8BitData
	.dbline 253
; SPI_Send8BitData((char)(Page_add >> 7));
	ldi R18,7
	ldi R19,0
	ldd R16,y+6
	ldd R17,y+7
	rcall lsr16
	rcall _SPI_Send8BitData
	.dbline 254
; tempdata=(in_page_add>>8);
	ldd R20,y+8
	ldd R21,y+9
	mov R20,R21
	clr R21
	.dbline 255
; tempdata&=0x01;
	andi R20,1
	andi R21,0
	.dbline 256
; tempdata|=(Page_add << 1);
	ldd R2,y+6
	ldd R3,y+7
	lsl R2
	rol R3
	or R20,R2
	or R21,R3
	.dbline 257
; SPI_Send8BitData((char)tempdata);
	mov R16,R20
	rcall _SPI_Send8BitData
	.dbline 258
; SPI_Send8BitData((char)(in_page_add));//send block address LSB BA7 ... BA0
	ldd R16,y+8
	ldd R17,y+9
	rcall _SPI_Send8BitData
	.dbline 259
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 260
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 261
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 262
; SPI_Send8BitData(0x00); //do not  care
	clr R16
	rcall _SPI_Send8BitData
	.dbline 263
; for(i=0;i<datalength;i++)
	clr R20
	clr R21
	rjmp L81
L78:
	.dbline 264
	rcall _SPI_Receive8BitData
	movw R30,R20
	add R30,R22
	adc R31,R23
	std z+0,R16
L79:
	.dbline 263
	subi R20,255  ; offset = 1
	sbci R21,255
L81:
	.dbline 263
	cp R20,R10
	cpc R21,R11
	brlo L78
	.dbline 265
; Read_data[i]=SPI_Receive8BitData();
; SPI_End();//disable spi
	rcall _SPI_End
	.dbline 266
; Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _Delay
	.dbline -2
L77:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r tempdata 20 i
	.dbsym r i 20 i
	.dbsym l in_page_add 8 i
	.dbsym l Page_add 6 i
	.dbsym r datalength 10 i
	.dbsym r Read_data 22 pc
	.dbend
	.dbfunc e WriteBlock _WriteBlock fV
;     write_data -> y+4
;              i -> R20
;     Block_Data -> R22
;      Block_Add -> R10
	.even
_WriteBlock::
	rcall push_gset3
	mov R22,R18
	mov R10,R16
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,16  ; offset = 268
	.dbline -1
	.dbline 270
; 
; }
; void WriteBlock(unsigned char Block_Add,unsigned char Block_Data)
; {
	.dbline 273
; unsigned char write_data[Buffer_Size];
; unsigned char i;
; for(i=0;i<Buffer_Size;i++)
	clr R20
	rjmp L86
L83:
	.dbline 274
	movw R24,R28
	adiw R24,4
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R22
L84:
	.dbline 273
	inc R20
L86:
	.dbline 273
	cpi R20,8
	brlt L83
	.dbline 278
; write_data[i]=Block_Data;
; //PutStr("write Data");
; //PutInt(write_data[0]);
; //EasingBlock(Block_Add);
; WriteToBuffer( write_data,Buffer_Size, BUFFER_1, 0);
	clr R2
	clr R3
	std y+3,R3
	std y+2,R2
	std y+0,R2
	ldi R18,264
	ldi R19,1
	movw R16,R28
	subi R16,252  ; offset = 4
	sbci R17,255
	rcall _WriteToBuffer
	.dbline 279
; Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _Delay
	.dbline 285
; //ReadBuffer(write_data,Buffer_Size, BUFFER_1,0);
; //Delay(100);
; //Block_Data=write_data[0];
; //PutStr("Read Data");
; //PutInt(Block_Data);
; for(i=0;i<8;i++)
	clr R20
	rjmp L90
L87:
	.dbline 286
	.dbline 287
	ldi R18,131
	ldi R24,8
	mul R24,R10
	movw R16,R0
	mov R2,R20
	clr R3
	add R16,R2
	adc R17,R3
	rcall _WriteToMemory
	.dbline 288
	ldi R16,10000
	ldi R17,39
	rcall _Delay
	.dbline 289
L88:
	.dbline 285
	inc R20
L90:
	.dbline 285
	cpi R20,8
	brlo L87
	.dbline -2
L82:
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,16  ; offset = 268
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l write_data 4 A[264:264]c
	.dbsym r i 20 c
	.dbsym r Block_Data 22 c
	.dbsym r Block_Add 10 c
	.dbend
	.dbfunc e ReadBlock _ReadBlock fc
;       tempdata -> R20,R21
;      Read_data -> y+4
;              i -> R22,R23
;              n -> R10,R11
;      Block_Add -> R12
	.even
_ReadBlock::
	rcall push_gset4
	mov R12,R16
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,16  ; offset = 268
	.dbline -1
	.dbline 294
; {
; WriteToMemory(Block_Add*8+i, B1_TO_MM_PAGE_PROG_WITH_ERASE);
; Delay(10000);
; }
; 
; }
; 
; unsigned char  ReadBlock(unsigned char Block_Add)
; {
	.dbline 301
; unsigned char  Read_data[Buffer_Size];
; unsigned int i,n,tempdata;
; //MemoryToBuffer(Block_Add*8,  BUFFER_1);
; //Delay(100);
; //ReadBuffer(Read_data,Buffer_Size, BUFFER_1,0);
; //Delay(100);
; MemoryPageRead(Read_data, Buffer_Size, Block_Add*8, 0);
	clr R2
	clr R3
	std y+3,R3
	std y+2,R2
	ldi R24,8
	mul R24,R12
	std y+1,R1
	std y+0,R0
	ldi R18,264
	ldi R19,1
	movw R16,R28
	subi R16,252  ; offset = 4
	sbci R17,255
	rcall _MemoryPageRead
	.dbline 302
; tempdata=Read_data[0];
	ldd R20,y+4
	clr R21
	.dbline 306
; //PutStr("Read Block Addr");
; //PutInt(Block_Add);
; //PutInt(tempdata);
; for(n=0;n<Buffer_Size;n++)
	clr R10
	clr R11
	rjmp L95
L92:
	.dbline 307
; {
	.dbline 308
; if(Read_data[i]!=tempdata)
	movw R24,R28
	adiw R24,4
	movw R30,R22
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	cp R2,R20
	cpc R3,R21
	breq L96
	.dbline 309
; {
	.dbline 310
; PutStr("Error Address");
	ldi R16,<L98
	ldi R17,>L98
	rcall _PutStr
	.dbline 311
; PutInt(i);
	movw R16,R22
	rcall _PutInt
	.dbline 312
; PutStr("Error Data");
	ldi R16,<L99
	ldi R17,>L99
	rcall _PutStr
	.dbline 313
; PutInt(Read_data[i]);
	movw R24,R28
	adiw R24,4
	movw R30,R22
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	clr R17
	rcall _PutInt
	.dbline 314
; Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _Delay
	.dbline 315
; return 0x55;
	ldi R16,85
	rjmp L91
L96:
	.dbline 317
L93:
	.dbline 306
	movw R24,R10
	adiw R24,1
	movw R10,R24
L95:
	.dbline 306
	movw R24,R10
	cpi R24,8
	ldi R30,1
	cpc R25,R30
	brlo L92
	.dbline 320
; }
; }//if(Read_data[i]!=tempdata)
; //return 0x55;
; 
; for(i=1;i<8;i++)
	ldi R22,1
	ldi R23,0
	rjmp L103
L100:
	.dbline 321
; {
	.dbline 322
; MemoryPageRead(Read_data, Buffer_Size, Block_Add*8+i, 0);
	clr R2
	clr R3
	std y+3,R3
	std y+2,R2
	ldi R24,8
	mul R24,R12
	movw R2,R0
	add R2,R22
	adc R3,R23
	std y+1,R3
	std y+0,R2
	ldi R18,264
	ldi R19,1
	movw R16,R28
	subi R16,252  ; offset = 4
	sbci R17,255
	rcall _MemoryPageRead
	.dbline 325
; //Delay(10000);
; 
; for(n=0;n<Buffer_Size;n++)
	clr R10
	clr R11
	rjmp L107
L104:
	.dbline 326
; if(Read_data[i]!=tempdata)
	movw R24,R28
	adiw R24,4
	movw R30,R22
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	cp R2,R20
	cpc R3,R21
	breq L108
	.dbline 327
; {
	.dbline 328
; PutStr("Error Page");
	ldi R16,<L110
	ldi R17,>L110
	rcall _PutStr
	.dbline 329
; PutInt(Block_Add*8+i);
	ldi R24,8
	mul R24,R12
	movw R16,R0
	add R16,R22
	adc R17,R23
	rcall _PutInt
	.dbline 330
; PutStr("Error Address");
	ldi R16,<L98
	ldi R17,>L98
	rcall _PutStr
	.dbline 331
; PutInt(n);
	movw R16,R10
	rcall _PutInt
	.dbline 332
; PutStr("Error Data");
	ldi R16,<L99
	ldi R17,>L99
	rcall _PutStr
	.dbline 333
; PutInt(Read_data[i]);
	movw R24,R28
	adiw R24,4
	movw R30,R22
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	clr R17
	rcall _PutInt
	.dbline 334
; Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _Delay
	.dbline 335
; return 0x55;
	ldi R16,85
	rjmp L91
L108:
L105:
	.dbline 325
	movw R24,R10
	adiw R24,1
	movw R10,R24
L107:
	.dbline 325
	movw R24,R10
	cpi R24,8
	ldi R30,1
	cpc R25,R30
	brsh X7
	rjmp L104
X7:
	.dbline 339
L101:
	.dbline 320
	subi R22,255  ; offset = 1
	sbci R23,255
L103:
	.dbline 320
	cpi R22,8
	ldi R30,0
	cpc R23,R30
	brsh X8
	rjmp L100
X8:
	.dbline 340
; 
; }
; 
; }
; Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _Delay
	.dbline 341
; return tempdata;
	mov R16,R20
	.dbline -2
L91:
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,16  ; offset = 268
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r tempdata 20 i
	.dbsym l Read_data 4 A[264:264]c
	.dbsym r i 22 i
	.dbsym r n 10 i
	.dbsym r Block_Add 12 c
	.dbend
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\AT45DB021.c
L110:
	.blkb 11
	.area idata
	.byte 'E,'r,'r,'o,'r,32,'P,'a,'g,'e,0
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\AT45DB021.c
L99:
	.blkb 11
	.area idata
	.byte 'E,'r,'r,'o,'r,32,'D,'a,'t,'a,0
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\AT45DB021.c
L98:
	.blkb 14
	.area idata
	.byte 'E,'r,'r,'o,'r,32,'A,'d,'d,'r,'e,'s,'s,0
	.area data(ram, con, rel)
	.dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\AT45DB021.c

⌨️ 快捷键说明

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