📄 at45db161d.lis
字号:
0238 FB1D adc R31,R11
023A 0081 ldd R16,z+0
023C 1181 ldd R17,z+1
023E 4CDF xcall _spi_write
0240 L24:
0240 .dbline 158
0240 4F5F subi R20,255 ; offset = 1
0242 5F4F sbci R21,255
0244 L26:
0244 .dbline 158
0244 4617 cp R20,R22
0246 5707 cpc R21,R23
0248 80F3 brlo L23
024A .dbline 161
024A ; spi_write(data[i]); //写数据
024A ;
024A ; UNSELECT_CHIP;
024A C49A sbi 0x18,4
024C .dbline 161
024C .dbline -2
024C L22:
024C 0E940000 xcall pop_gset3
0250 .dbline 0 ; func end
0250 0895 ret
0252 .dbsym r i 20 i
0252 .dbsym r size 22 i
0252 .dbsym r data 10 pi
0252 .dbsym r addr 20 i
0252 .dbend
0252 .dbfunc e write_page_from_buffer _write_page_from_buffer fV
0252 ; buffer -> R22,R23
0252 ; page -> R20,R21
.even
0252 _write_page_from_buffer::
0252 0E940000 xcall push_gset2
0256 B901 movw R22,R18
0258 A801 movw R20,R16
025A .dbline -1
025A .dbline 166
025A ; }
025A ; //========================================================================
025A ; //将写缓冲区内容写入到主存储器中指定页
025A ; void write_page_from_buffer(uint page,uint buffer)
025A ; {
025A .dbline 167
025A ; SELECT_CHIP;
025A 88B3 in R24,0x18
025C 8F7E andi R24,239
025E 88BB out 0x18,R24
0260 .dbline 167
0260 .dbline 169
0260 ;
0260 ; if(buffer == DF_WRITE_BUFFER)
0260 6130 cpi R22,1
0262 E0E0 ldi R30,0
0264 7E07 cpc R23,R30
0266 21F4 brne L28
0268 .dbline 170
0268 ; spi_write(B2_TO_MM_PAGE_PROG_WITH_ERASE); //0x86
0268 06E8 ldi R16,134
026A 10E0 ldi R17,0
026C 35DF xcall _spi_write
026E 03C0 xjmp L29
0270 L28:
0270 .dbline 172
0270 ; else
0270 ; spi_write(B1_TO_MM_PAGE_PROG_WITH_ERASE); //0x83
0270 03E8 ldi R16,131
0272 10E0 ldi R17,0
0274 31DF xcall _spi_write
0276 L29:
0276 .dbline 173
0276 ; spi_write((uint)(page>>6)); //2个无关位,12位页地址 PA11~PA0 与10个无关位
0276 26E0 ldi R18,6
0278 30E0 ldi R19,0
027A 8A01 movw R16,R20
027C 0E940000 xcall lsr16
0280 2BDF xcall _spi_write
0282 .dbline 174
0282 ; spi_write((uint)(page<<2));
0282 8A01 movw R16,R20
0284 000F lsl R16
0286 111F rol R17
0288 000F lsl R16
028A 111F rol R17
028C 25DF xcall _spi_write
028E .dbline 175
028E ; spi_write(0x00); // don't cares
028E 0027 clr R16
0290 1127 clr R17
0292 22DF xcall _spi_write
0294 .dbline 177
0294 ;
0294 ; UNSELECT_CHIP;
0294 C49A sbi 0x18,4
0296 .dbline 177
0296 .dbline 179
0296 ;
0296 ; df_wait_busy();
0296 26DF xcall _df_wait_busy
0298 .dbline -2
0298 L27:
0298 0E940000 xcall pop_gset2
029C .dbline 0 ; func end
029C 0895 ret
029E .dbsym r buffer 22 i
029E .dbsym r page 20 i
029E .dbend
029E .dbfunc e df_write_close _df_write_close fV
.even
029E _df_write_close::
029E .dbline -1
029E .dbline 183
029E ; }
029E ; //========================================================================
029E ; void df_write_close(void)
029E ; {
029E .dbline 184
029E ; write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER); //缓冲区内容写入到主存储器
029E 21E0 ldi R18,1
02A0 30E0 ldi R19,0
02A2 00910200 lds R16,_g_CurWritePage
02A6 10910300 lds R17,_g_CurWritePage+1
02AA D3DF xcall _write_page_from_buffer
02AC .dbline -2
02AC L30:
02AC .dbline 0 ; func end
02AC 0895 ret
02AE .dbend
02AE .dbfunc e df_read_close _df_read_close fV
.even
02AE _df_read_close::
02AE .dbline -1
02AE .dbline 188
02AE ; }
02AE ; //========================================================================
02AE ; void df_read_close(void)
02AE ; {
02AE .dbline 189
02AE ; ;//此处不做任何处理
02AE .dbline -2
02AE L31:
02AE .dbline 0 ; func end
02AE 0895 ret
02B0 .dbend
02B0 .dbfunc e df_read _df_read fV
02B0 ; temp -> R10,R11
02B0 ; size -> R20,R21
02B0 ; buf -> R22,R23
.even
02B0 _df_read::
02B0 0E940000 xcall push_gset3
02B4 A901 movw R20,R18
02B6 B801 movw R22,R16
02B8 2297 sbiw R28,2
02BA .dbline -1
02BA .dbline 193
02BA ; }
02BA ; //========================================================================
02BA ; void df_read(uint *buf,uint size)
02BA ; {
02BA .dbline 196
02BA ; uint temp;
02BA ;
02BA ; if((g_CurReadByte + size) > DF_PAGE_SIZE) //如果当前页未读取数据不够size字节
02BA 20900400 lds R2,_g_CurReadByte
02BE 30900500 lds R3,_g_CurReadByte+1
02C2 240E add R2,R20
02C4 351E adc R3,R21
02C6 80E1 ldi R24,528
02C8 92E0 ldi R25,2
02CA 8215 cp R24,R2
02CC 9305 cpc R25,R3
02CE 70F5 brsh L33
02D0 .dbline 197
02D0 ; {
02D0 .dbline 199
02D0 ; //读当前页剩余数据
02D0 ; temp=DF_PAGE_SIZE - g_CurReadByte;
02D0 20900400 lds R2,_g_CurReadByte
02D4 30900500 lds R3,_g_CurReadByte+1
02D8 5C01 movw R10,R24
02DA A218 sub R10,R2
02DC B308 sbc R11,R3
02DE .dbline 200
02DE ; read_buffer(g_CurReadByte,buf,temp);
02DE B982 std y+1,R11
02E0 A882 std y+0,R10
02E2 9B01 movw R18,R22
02E4 8101 movw R16,R2
02E6 50D0 xcall _read_buffer
02E8 .dbline 203
02E8 ;
02E8 ; //装入下一页
02E8 ; load_page_to_buffer(++g_CurReadPage,DF_READ_BUFFER);
02E8 2227 clr R18
02EA 3327 clr R19
02EC 80910600 lds R24,_g_CurReadPage
02F0 90910700 lds R25,_g_CurReadPage+1
02F4 0196 adiw R24,1
02F6 90930700 sts _g_CurReadPage+1,R25
02FA 80930600 sts _g_CurReadPage,R24
02FE 8C01 movw R16,R24
0300 C6DE xcall _load_page_to_buffer
0302 .dbline 206
0302 ;
0302 ; //从下一页读剩余数据
0302 ; g_CurReadByte=size-temp;
0302 1A01 movw R2,R20
0304 2A18 sub R2,R10
0306 3B08 sbc R3,R11
0308 30920500 sts _g_CurReadByte+1,R3
030C 20920400 sts _g_CurReadByte,R2
0310 .dbline 207
0310 ; read_buffer(0,buf+temp,g_CurReadByte);
0310 3982 std y+1,R3
0312 2882 std y+0,R2
0314 02E0 ldi R16,2
0316 10E0 ldi R17,0
0318 9501 movw R18,R10
031A 0E940000 xcall empy16s
031E 9801 movw R18,R16
0320 260F add R18,R22
0322 371F adc R19,R23
0324 0027 clr R16
0326 1127 clr R17
0328 2FD0 xcall _read_buffer
032A .dbline 208
032A ; }
032A 2AC0 xjmp L34
032C L33:
032C .dbline 210
032C ; else //如果当前页数据有size字节
032C ; {
032C .dbline 211
032C ; read_buffer(g_CurReadByte,buf,size);
032C 5983 std y+1,R21
032E 4883 std y+0,R20
0330 9B01 movw R18,R22
0332 00910400 lds R16,_g_CurReadByte
0336 10910500 lds R17,_g_CurReadByte+1
033A 26D0 xcall _read_buffer
033C .dbline 212
033C ; g_CurReadByte+=size;
033C 20900400 lds R2,_g_CurReadByte
0340 30900500 lds R3,_g_CurReadByte+1
0344 240E add R2,R20
0346 351E adc R3,R21
0348 30920500 sts _g_CurReadByte+1,R3
034C 20920400 sts _g_CurReadByte,R2
0350 .dbline 215
0350 ;
0350 ; //如果当前页数据已全部读完
0350 ; if(g_CurReadByte==DF_PAGE_SIZE)
0350 C101 movw R24,R2
0352 8031 cpi R24,16
0354 E2E0 ldi R30,2
0356 9E07 cpc R25,R30
0358 99F4 brne L35
035A .dbline 216
035A ; {
035A .dbline 217
035A ; load_page_to_buffer(++g_CurReadPage,DF_READ_BUFFER);
035A 2227 clr R18
035C 3327 clr R19
035E 80910600 lds R24,_g_CurReadPage
0362 90910700 lds R25,_g_CurReadPage+1
0366 0196 adiw R24,1
0368 90930700 sts _g_CurReadPage+1,R25
036C 80930600 sts _g_CurReadPage,R24
0370 8C01 movw R16,R24
0372 8DDE xcall _load_page_to_buffer
0374 .dbline 218
0374 ; g_CurReadByte=0;
0374 2224 clr R2
0376 3324 clr R3
0378 30920500 sts _g_CurReadByte+1,R3
037C 20920400 sts _g_CurReadByte,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -