📄 at45db021.s
字号:
; 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 + -