📄 at45db161d.s
字号:
adc R31,R11
ldd R16,z+0
ldd R17,z+1
xcall _spi_write
L24:
.dbline 158
subi R20,255 ; offset = 1
sbci R21,255
L26:
.dbline 158
cp R20,R22
cpc R21,R23
brlo L23
.dbline 161
; spi_write(data[i]); //写数据
;
; UNSELECT_CHIP;
sbi 0x18,4
.dbline 161
.dbline -2
L22:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r size 22 i
.dbsym r data 10 pi
.dbsym r addr 20 i
.dbend
.dbfunc e write_page_from_buffer _write_page_from_buffer fV
; buffer -> R22,R23
; page -> R20,R21
.even
_write_page_from_buffer::
xcall push_gset2
movw R22,R18
movw R20,R16
.dbline -1
.dbline 166
; }
; //========================================================================
; //将写缓冲区内容写入到主存储器中指定页
; void write_page_from_buffer(uint page,uint buffer)
; {
.dbline 167
; SELECT_CHIP;
in R24,0x18
andi R24,239
out 0x18,R24
.dbline 167
.dbline 169
;
; if(buffer == DF_WRITE_BUFFER)
cpi R22,1
ldi R30,0
cpc R23,R30
brne L28
.dbline 170
; spi_write(B2_TO_MM_PAGE_PROG_WITH_ERASE); //0x86
ldi R16,134
ldi R17,0
xcall _spi_write
xjmp L29
L28:
.dbline 172
; else
; spi_write(B1_TO_MM_PAGE_PROG_WITH_ERASE); //0x83
ldi R16,131
ldi R17,0
xcall _spi_write
L29:
.dbline 173
; spi_write((uint)(page>>6)); //2个无关位,12位页地址 PA11~PA0 与10个无关位
ldi R18,6
ldi R19,0
movw R16,R20
xcall lsr16
xcall _spi_write
.dbline 174
; spi_write((uint)(page<<2));
movw R16,R20
lsl R16
rol R17
lsl R16
rol R17
xcall _spi_write
.dbline 175
; spi_write(0x00); // don't cares
clr R16
clr R17
xcall _spi_write
.dbline 177
;
; UNSELECT_CHIP;
sbi 0x18,4
.dbline 177
.dbline 179
;
; df_wait_busy();
xcall _df_wait_busy
.dbline -2
L27:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r buffer 22 i
.dbsym r page 20 i
.dbend
.dbfunc e df_write_close _df_write_close fV
.even
_df_write_close::
.dbline -1
.dbline 183
; }
; //========================================================================
; void df_write_close(void)
; {
.dbline 184
; write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER); //缓冲区内容写入到主存储器
ldi R18,1
ldi R19,0
lds R16,_g_CurWritePage
lds R17,_g_CurWritePage+1
xcall _write_page_from_buffer
.dbline -2
L30:
.dbline 0 ; func end
ret
.dbend
.dbfunc e df_read_close _df_read_close fV
.even
_df_read_close::
.dbline -1
.dbline 188
; }
; //========================================================================
; void df_read_close(void)
; {
.dbline 189
; ;//此处不做任何处理
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbend
.dbfunc e df_read _df_read fV
; temp -> R10,R11
; size -> R20,R21
; buf -> R22,R23
.even
_df_read::
xcall push_gset3
movw R20,R18
movw R22,R16
sbiw R28,2
.dbline -1
.dbline 193
; }
; //========================================================================
; void df_read(uint *buf,uint size)
; {
.dbline 196
; uint temp;
;
; if((g_CurReadByte + size) > DF_PAGE_SIZE) //如果当前页未读取数据不够size字节
lds R2,_g_CurReadByte
lds R3,_g_CurReadByte+1
add R2,R20
adc R3,R21
ldi R24,528
ldi R25,2
cp R24,R2
cpc R25,R3
brsh L33
.dbline 197
; {
.dbline 199
; //读当前页剩余数据
; temp=DF_PAGE_SIZE - g_CurReadByte;
lds R2,_g_CurReadByte
lds R3,_g_CurReadByte+1
movw R10,R24
sub R10,R2
sbc R11,R3
.dbline 200
; read_buffer(g_CurReadByte,buf,temp);
std y+1,R11
std y+0,R10
movw R18,R22
movw R16,R2
xcall _read_buffer
.dbline 203
;
; //装入下一页
; load_page_to_buffer(++g_CurReadPage,DF_READ_BUFFER);
clr R18
clr R19
lds R24,_g_CurReadPage
lds R25,_g_CurReadPage+1
adiw R24,1
sts _g_CurReadPage+1,R25
sts _g_CurReadPage,R24
movw R16,R24
xcall _load_page_to_buffer
.dbline 206
;
; //从下一页读剩余数据
; g_CurReadByte=size-temp;
movw R2,R20
sub R2,R10
sbc R3,R11
sts _g_CurReadByte+1,R3
sts _g_CurReadByte,R2
.dbline 207
; read_buffer(0,buf+temp,g_CurReadByte);
std y+1,R3
std y+0,R2
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R18,R16
add R18,R22
adc R19,R23
clr R16
clr R17
xcall _read_buffer
.dbline 208
; }
xjmp L34
L33:
.dbline 210
; else //如果当前页数据有size字节
; {
.dbline 211
; read_buffer(g_CurReadByte,buf,size);
std y+1,R21
std y+0,R20
movw R18,R22
lds R16,_g_CurReadByte
lds R17,_g_CurReadByte+1
xcall _read_buffer
.dbline 212
; g_CurReadByte+=size;
lds R2,_g_CurReadByte
lds R3,_g_CurReadByte+1
add R2,R20
adc R3,R21
sts _g_CurReadByte+1,R3
sts _g_CurReadByte,R2
.dbline 215
;
; //如果当前页数据已全部读完
; if(g_CurReadByte==DF_PAGE_SIZE)
movw R24,R2
cpi R24,16
ldi R30,2
cpc R25,R30
brne L35
.dbline 216
; {
.dbline 217
; load_page_to_buffer(++g_CurReadPage,DF_READ_BUFFER);
clr R18
clr R19
lds R24,_g_CurReadPage
lds R25,_g_CurReadPage+1
adiw R24,1
sts _g_CurReadPage+1,R25
sts _g_CurReadPage,R24
movw R16,R24
xcall _load_page_to_buffer
.dbline 218
; g_CurReadByte=0;
clr R2
clr R3
sts _g_CurReadByte+1,R3
sts _g_CurReadByte,R2
.dbline 219
; }
L35:
.dbline 220
L34:
.dbline -2
L32:
adiw R28,2
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp 10 i
.dbsym r size 20 i
.dbsym r buf 22 pi
.dbend
.dbfunc e read_buffer _read_buffer fV
; i -> R20,R21
; size -> R22,R23
; data -> R10,R11
; addr -> R20,R21
.even
_read_buffer::
xcall push_gset3
movw R10,R18
movw R20,R16
ldd R22,y+6
ldd R23,y+7
.dbline -1
.dbline 225
; }
; }
; //========================================================================
; //从读缓冲区读数据
; void read_buffer(uint addr,uint *data,uint size)
; {
.dbline 228
; uint i;
;
; SELECT_CHIP;
in R24,0x18
andi R24,239
out 0x18,R24
.dbline 228
.dbline 230
;
; spi_write(BUFFER_1_READ);
ldi R16,209
ldi R17,0
xcall _spi_write
.dbline 231
; spi_write(0x00);
clr R16
clr R17
xcall _spi_write
.dbline 232
; spi_write((uint)(addr>>8));
movw R16,R20
mov R16,R17
clr R17
xcall _spi_write
.dbline 233
; spi_write((uint)addr);
movw R16,R20
xcall _spi_write
.dbline 234
; for(i=0;i<size;i++)
clr R20
clr R21
xjmp L41
L38:
.dbline 235
clr R16
clr R17
xcall _spi_write
movw R2,R16
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
add R30,R10
adc R31,R11
std z+1,R3
std z+0,R2
L39:
.dbline 234
subi R20,255 ; offset = 1
sbci R21,255
L41:
.dbline 234
cp R20,R22
cpc R21,R23
brlo L38
.dbline 237
; data[i]=spi_write(0);
;
; UNSELECT_CHIP;
sbi 0x18,4
.dbline 237
.dbline -2
L37:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r size 22 i
.dbsym r data 10 pi
.dbsym r addr 20 i
.dbend
.dbfunc e Read_Page _Read_Page fV
; size -> y+8
; buf -> y+6
; page_address -> R20,R21
; page -> R22,R23
.even
_Read_Page::
xcall push_gset2
movw R20,R18
movw R22,R16
sbiw R28,2
.dbline -1
.dbline 241
; }
; //========================================================================
; void Read_Page(uint page,uint page_address, uint *buf,uint size) //page 页地址, page_address 页内地址, buf 数据 , size 多少个字节
; {
.dbline 242
; load_page_to_buffer(page,DF_READ_BUFFER); // 将主存储器指定的页内容读到缓冲区
clr R18
clr R19
movw R16,R22
xcall _load_page_to_buffer
.dbline 243
; read_buffer(page_address,buf,size); //从读缓冲区读数据
ldd R0,y+8
ldd R1,y+9
std y+1,R1
std y+0,R0
ldd R18,y+6
ldd R19,y+7
movw R16,R20
xcall _read_buffer
.dbline -2
L42:
adiw R28,2
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l size 8 i
.dbsym l buf 6 pi
.dbsym r page_address 20 i
.dbsym r page 22 i
.dbend
.dbfunc e Write_page _Write_page fV
; size -> y+8
; buf -> y+6
; page_address -> R22,R23
; page -> R20,R21
.even
_Write_page::
xcall push_gset2
movw R22,R18
movw R20,R16
sbiw R28,2
.dbline -1
.dbline 247
; }
; //========================================================================
; void Write_page(uint page, uint page_address, uint *buf,uint size) //page 页地址, page_address 页内地址, buf 数据 , size 多少个字节
; {
.dbline 248
; load_page_to_buffer(page,DF_WRITE_BUFFER); // 将主存储器指定的页内容读到缓冲区
ldi R18,1
ldi R19,0
movw R16,R20
xcall _load_page_to_buffer
.dbline 249
; write_buffer(page_address,buf,size); //将数据写入写缓冲区
ldd R0,y+8
ldd R1,y+9
std y+1,R1
std y+0,R0
ldd R18,y+6
ldd R19,y+7
movw R16,R22
xcall _write_buffer
.dbline 250
; write_page_from_buffer(page,DF_WRITE_BUFFER); //将缓冲区内容写入到主存储器中指定页中
ldi R18,1
ldi R19,0
movw R16,R20
xcall _write_page_from_buffer
.dbline -2
L43:
adiw R28,2
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l size 8 i
.dbsym l buf 6 pi
.dbsym r page_address 22 i
.dbsym r page 20 i
.dbend
.dbfunc e Page_Scrape _Page_Scrape fV
; page -> R20,R21
.even
_Page_Scrape::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 254
; }
; //========================================================================
; void Page_Scrape(uint page) //page 要擦除的页
; {
.dbline 255
; SELECT_CHIP;
in R24,0x18
andi R24,239
out 0x18,R24
.dbline 255
.dbline 256
; spi_write(0x81); //页擦除
ldi R16,129
ldi R17,0
xcall _spi_write
.dbline 257
; spi_write((uint)(page>>6)); //2个无关位,12位页地址 PA11~PA0 与10个无关位
ldi R18,6
ldi R19,0
movw R16,R20
xcall lsr16
xcall _spi_write
.dbline 258
; spi_write((uint)(page<<2));
movw R16,R20
lsl R16
rol R17
lsl R16
rol R17
xcall _spi_write
.dbline 259
; spi_write(0x00); // don't cares
clr R16
clr R17
xcall _spi_write
.dbline 261
;
; UNSELECT_CHIP;
sbi 0x18,4
.dbline 261
.dbline 263
;
; df_wait_busy();
xcall _df_wait_busy
.dbline -2
L44:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r page 20 i
.dbend
.area bss(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\flashTest\at45db161d.c
_g_CurWriteByte::
.blkb 2
.dbsym e g_CurWriteByte _g_CurWriteByte i
_g_CurWritePage::
.blkb 2
.dbsym e g_CurWritePage _g_CurWritePage i
_g_CurReadByte::
.blkb 2
.dbsym e g_CurReadByte _g_CurReadByte i
_g_CurReadPage::
.blkb 2
.dbsym e g_CurReadPage _g_CurReadPage i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -