📄 at45db161d.lis
字号:
.even
00E4 _df_wait_busy::
00E4 .dbline -1
00E4 .dbline 104
00E4 ; }
00E4 ; //=======================================================================
00E4 ; //检测并等待器件忙状态,8引脚封闭器件没有 RDY/BUSY引脚 为些通过读状态寄存器来检测忙状态
00E4 ; void df_wait_busy(void)
00E4 ; {
00E4 .dbline 105
00E4 ; SELECT_CHIP;
00E4 88B3 in R24,0x18
00E6 8F7E andi R24,239
00E8 88BB out 0x18,R24
00EA .dbline 105
00EA .dbline 106
00EA ; spi_write(STATUS_REGISTER);
00EA 07ED ldi R16,215
00EC 10E0 ldi R17,0
00EE F4DF xcall _spi_write
00F0 06C0 xjmp L13
00F2 L12:
00F2 .dbline 108
00F2 ; while(1)
00F2 ; {
00F2 .dbline 109
00F2 ; if(spi_write(0) & 0x80) //读取的最高位0时器件忙
00F2 0027 clr R16
00F4 1127 clr R17
00F6 F0DF xcall _spi_write
00F8 07FF sbrs R16,7
00FA 01C0 rjmp L15
00FC .dbline 110
00FC ; break;
00FC 01C0 xjmp L14
00FE L15:
00FE .dbline 111
00FE L13:
00FE .dbline 107
00FE F9CF xjmp L12
0100 L14:
0100 .dbline 112
0100 ; }
0100 ; UNSELECT_CHIP;
0100 C49A sbi 0x18,4
0102 .dbline 112
0102 .dbline -2
0102 L11:
0102 .dbline 0 ; func end
0102 0895 ret
0104 .dbend
0104 .dbfunc e df_write _df_write fV
0104 ; temp -> R10,R11
0104 ; size -> R20,R21
0104 ; buf -> R22,R23
.even
0104 _df_write::
0104 0E940000 xcall push_gset3
0108 A901 movw R20,R18
010A B801 movw R22,R16
010C 2297 sbiw R28,2
010E .dbline -1
010E .dbline 116
010E ; }
010E ; //=======================================================================
010E ; void df_write(uint *buf,uint size) //buf 源数据 size 写多少个字节
010E ; {
010E .dbline 119
010E ; uint temp;
010E ;
010E ; if((g_CurWriteByte + size) > DF_PAGE_SIZE) //如果当前页未写空间不够size字节
010E 20900000 lds R2,_g_CurWriteByte
0112 30900100 lds R3,_g_CurWriteByte+1
0116 240E add R2,R20
0118 351E adc R3,R21
011A 80E1 ldi R24,528
011C 92E0 ldi R25,2
011E 8215 cp R24,R2
0120 9305 cpc R25,R3
0122 08F0 brlo X1
0124 35C0 xjmp L18
0126 X1:
0126 .dbline 120
0126 ; {
0126 .dbline 122
0126 ; //写当前页剩余空间的数据
0126 ; temp=DF_PAGE_SIZE - g_CurWriteByte;
0126 20900000 lds R2,_g_CurWriteByte
012A 30900100 lds R3,_g_CurWriteByte+1
012E 5C01 movw R10,R24
0130 A218 sub R10,R2
0132 B308 sbc R11,R3
0134 .dbline 123
0134 ; write_buffer(g_CurWriteByte,buf,temp); //将数据写入写缓冲区
0134 B982 std y+1,R11
0136 A882 std y+0,R10
0138 9B01 movw R18,R22
013A 8101 movw R16,R2
013C 5ED0 xcall _write_buffer
013E .dbline 125
013E ; //保存当前页
013E ; write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER);
013E 21E0 ldi R18,1
0140 30E0 ldi R19,0
0142 00910200 lds R16,_g_CurWritePage
0146 10910300 lds R17,_g_CurWritePage+1
014A 83D0 xcall _write_page_from_buffer
014C .dbline 126
014C ; g_CurWritePage++;
014C 80910200 lds R24,_g_CurWritePage
0150 90910300 lds R25,_g_CurWritePage+1
0154 0196 adiw R24,1
0156 90930300 sts _g_CurWritePage+1,R25
015A 80930200 sts _g_CurWritePage,R24
015E .dbline 127
015E ; load_page_to_buffer(g_CurWritePage,DF_WRITE_BUFFER);
015E 21E0 ldi R18,1
0160 30E0 ldi R19,0
0162 8C01 movw R16,R24
0164 94DF xcall _load_page_to_buffer
0166 .dbline 130
0166 ;
0166 ; //写入到下一页对应缓冲区
0166 ; g_CurWriteByte=size-temp;
0166 1A01 movw R2,R20
0168 2A18 sub R2,R10
016A 3B08 sbc R3,R11
016C 30920100 sts _g_CurWriteByte+1,R3
0170 20920000 sts _g_CurWriteByte,R2
0174 .dbline 131
0174 ; write_buffer(0,buf+temp,g_CurWriteByte);
0174 3982 std y+1,R3
0176 2882 std y+0,R2
0178 02E0 ldi R16,2
017A 10E0 ldi R17,0
017C 9501 movw R18,R10
017E 0E940000 xcall empy16s
0182 9801 movw R18,R16
0184 260F add R18,R22
0186 371F adc R19,R23
0188 0027 clr R16
018A 1127 clr R17
018C 36D0 xcall _write_buffer
018E .dbline 132
018E ; }
018E 31C0 xjmp L19
0190 L18:
0190 .dbline 134
0190 ; else
0190 ; {
0190 .dbline 135
0190 ; write_buffer(g_CurWriteByte,buf,size);
0190 5983 std y+1,R21
0192 4883 std y+0,R20
0194 9B01 movw R18,R22
0196 00910000 lds R16,_g_CurWriteByte
019A 10910100 lds R17,_g_CurWriteByte+1
019E 2DD0 xcall _write_buffer
01A0 .dbline 136
01A0 ; g_CurWriteByte+=size;
01A0 20900000 lds R2,_g_CurWriteByte
01A4 30900100 lds R3,_g_CurWriteByte+1
01A8 240E add R2,R20
01AA 351E adc R3,R21
01AC 30920100 sts _g_CurWriteByte+1,R3
01B0 20920000 sts _g_CurWriteByte,R2
01B4 .dbline 139
01B4 ;
01B4 ; //缓冲已满,写入到主存储区
01B4 ; if(g_CurWriteByte==DF_PAGE_SIZE)
01B4 C101 movw R24,R2
01B6 8031 cpi R24,16
01B8 E2E0 ldi R30,2
01BA 9E07 cpc R25,R30
01BC D1F4 brne L20
01BE .dbline 140
01BE ; {
01BE .dbline 141
01BE ; g_CurWriteByte=0;
01BE 2224 clr R2
01C0 3324 clr R3
01C2 30920100 sts _g_CurWriteByte+1,R3
01C6 20920000 sts _g_CurWriteByte,R2
01CA .dbline 142
01CA ; write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER);
01CA 21E0 ldi R18,1
01CC 30E0 ldi R19,0
01CE 00910200 lds R16,_g_CurWritePage
01D2 10910300 lds R17,_g_CurWritePage+1
01D6 3DD0 xcall _write_page_from_buffer
01D8 .dbline 143
01D8 ; g_CurWritePage++;
01D8 80910200 lds R24,_g_CurWritePage
01DC 90910300 lds R25,_g_CurWritePage+1
01E0 0196 adiw R24,1
01E2 90930300 sts _g_CurWritePage+1,R25
01E6 80930200 sts _g_CurWritePage,R24
01EA .dbline 144
01EA ; load_page_to_buffer(g_CurWritePage,DF_WRITE_BUFFER);
01EA 21E0 ldi R18,1
01EC 30E0 ldi R19,0
01EE 8C01 movw R16,R24
01F0 4EDF xcall _load_page_to_buffer
01F2 .dbline 145
01F2 ; }
01F2 L20:
01F2 .dbline 146
01F2 L19:
01F2 .dbline -2
01F2 L17:
01F2 2296 adiw R28,2
01F4 0E940000 xcall pop_gset3
01F8 .dbline 0 ; func end
01F8 0895 ret
01FA .dbsym r temp 10 i
01FA .dbsym r size 20 i
01FA .dbsym r buf 22 pi
01FA .dbend
01FA .dbfunc e write_buffer _write_buffer fV
01FA ; i -> R20,R21
01FA ; size -> R22,R23
01FA ; data -> R10,R11
01FA ; addr -> R20,R21
.even
01FA _write_buffer::
01FA 0E940000 xcall push_gset3
01FE 5901 movw R10,R18
0200 A801 movw R20,R16
0202 6E81 ldd R22,y+6
0204 7F81 ldd R23,y+7
0206 .dbline -1
0206 .dbline 151
0206 ; }
0206 ; }
0206 ; //========================================================================
0206 ; //将数据写入写缓冲区2 命令 0x87
0206 ; void write_buffer(uint addr,uint *data,uint size)
0206 ; {
0206 .dbline 153
0206 ; uint i;
0206 ; SELECT_CHIP;
0206 88B3 in R24,0x18
0208 8F7E andi R24,239
020A 88BB out 0x18,R24
020C .dbline 153
020C .dbline 154
020C ; spi_write(BUFFER_2_WRITE);
020C 07E8 ldi R16,135
020E 10E0 ldi R17,0
0210 63DF xcall _spi_write
0212 .dbline 155
0212 ; spi_write(0x00); //写入缓冲区地址15位无关位
0212 0027 clr R16
0214 1127 clr R17
0216 60DF xcall _spi_write
0218 .dbline 156
0218 ; spi_write((uint)(addr>>8)); //写入缓冲区地址
0218 8A01 movw R16,R20
021A 012F mov R16,R17
021C 1127 clr R17
021E 5CDF xcall _spi_write
0220 .dbline 157
0220 ; spi_write((uint)addr); //写入缓冲区地址 总共写了三个字节地址 24位 15位无关位
0220 8A01 movw R16,R20
0222 5ADF xcall _spi_write
0224 .dbline 158
0224 ; for(i=0;i<size;i++)
0224 4427 clr R20
0226 5527 clr R21
0228 0DC0 xjmp L26
022A L23:
022A .dbline 159
022A 02E0 ldi R16,2
022C 10E0 ldi R17,0
022E 9A01 movw R18,R20
0230 0E940000 xcall empy16s
0234 F801 movw R30,R16
0236 EA0D add R30,R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -