📄 at45db041d.lis
字号:
0318 L103:
0318 .dbline 346
0318 ; }
0318 L100:
0318 .dbline 343
0318 6F5F subi R22,255 ; offset = 1
031A 7F4F sbci R23,255
031C L102:
031C .dbline 343
031C 6830 cpi R22,8
031E E0E0 ldi R30,0
0320 7E07 cpc R23,R30
0322 90F3 brlo L99
0324 X21:
0324 .dbline 348
0324 ; //禁止扇区保护
0324 ; DF_Disable_Sector_Protection();
0324 35DF xcall _DF_Disable_Sector_Protection
0326 .dbline 350
0326 ;
0326 ; return j;
0326 042F mov R16,R20
0328 .dbline -2
0328 L96:
0328 .dbline 0 ; func end
0328 6096 adiw R28,16
032A 0C940000 xjmp pop_xgsetF000
032E .dbsym l Sector_Protection_Register_for_Write 8 A[8:8]c
032E .dbsym r j 20 c
032E .dbsym l Sector_Protection_Register_for_Read 0 A[8:8]c
032E .dbsym r i 22 i
032E .dbend
.area lit(rom, con, rel)
0024 L106:
0024 0000 .byte 0,0
0026 0000 .byte 0,0
.area text(rom, con, rel)
032E .dbfile E:\item\car\AT45DB041D\AT45DB041D.c
032E .dbfunc e DF_Program_Sector_Lockdown _DF_Program_Sector_Lockdown fV
032E ; Sector_Lockdown_Command -> y+0
032E ; i -> R20
032E ; Sector_Addr -> y+5
.even
032E _DF_Program_Sector_Lockdown::
032E 0E940000 xcall push_arg4
0332 4A93 st -y,R20
0334 2497 sbiw R28,4
0336 .dbline -1
0336 .dbline 359
0336 ; }
0336 ; /************************************************************
0336 ; *设置扇区锁(被锁后不能再次解锁)
0336 ; *被设置的扇区就只能读不能写
0336 ; *非一般情况不要使用(除非数据不用再改)
0336 ; *Sector_Addr :地址在哪个扇区中就会锁上那个扇区
0336 ; ************************************************************/
0336 ; void DF_Program_Sector_Lockdown(unsigned long Sector_Addr)
0336 ; {
0336 .dbline 361
0336 ; //unsigned char Sector_Lockdown_Command=[4]={0x3D,0x2A,0x7F,0x30};//加锁操作码
0336 ; unsigned char Sector_Lockdown_Command[4]={0x00,0x00,0x00,0x00};//防止写到,这里乱写
0336 80E0 ldi R24,<L106
0338 90E0 ldi R25,>L106
033A FE01 movw R30,R28
033C 04E0 ldi R16,4
033E 10E0 ldi R17,0
0340 FA93 st -y,R31
0342 EA93 st -y,R30
0344 9A93 st -y,R25
0346 8A93 st -y,R24
0348 0E940000 xcall asgncblk
034C .dbline 364
034C ; unsigned char i;
034C ;
034C ; DF_Check_Busy_State();
034C C5DE xcall _DF_Check_Busy_State
034E .dbline 365
034E ; Enable_DFLASH();
034E 9FDE xcall _Enable_DFLASH
0350 .dbline 367
0350 ;
0350 ; for(i=0;i<4;i++)//write
0350 4427 clr R20
0352 08C0 xjmp L110
0354 L107:
0354 .dbline 368
0354 ; {
0354 .dbline 369
0354 ; SPI_Write_Byte(Sector_Lockdown_Command[i]);
0354 CE01 movw R24,R28
0356 E42F mov R30,R20
0358 FF27 clr R31
035A E80F add R30,R24
035C F91F adc R31,R25
035E 0081 ldd R16,z+0
0360 79DE xcall _SPI_Write_Byte
0362 .dbline 370
0362 ; }
0362 L108:
0362 .dbline 367
0362 4395 inc R20
0364 L110:
0364 .dbline 367
0364 4430 cpi R20,4
0366 B0F3 brlo L107
0368 X22:
0368 .dbline 373
0368 ;
0368 ; //write address
0368 ; SPI_Write_Byte((unsigned char)(Sector_Addr>>16));
0368 2D80 ldd R2,y+5
036A 3E80 ldd R3,y+6
036C 4F80 ldd R4,y+7
036E 5884 ldd R5,y+8
0370 1201 movw R2,R4
0372 4424 clr R4
0374 5524 clr R5
0376 022D mov R16,R2
0378 6DDE xcall _SPI_Write_Byte
037A .dbline 374
037A ; SPI_Write_Byte((unsigned char)(Sector_Addr>>8));
037A 88E0 ldi R24,8
037C 90E0 ldi R25,0
037E 0D81 ldd R16,y+5
0380 1E81 ldd R17,y+6
0382 2F81 ldd R18,y+7
0384 3885 ldd R19,y+8
0386 8A93 st -y,R24
0388 0E940000 xcall lsr32
038C 63DE xcall _SPI_Write_Byte
038E .dbline 375
038E ; SPI_Write_Byte((unsigned char)Sector_Addr);
038E 0D81 ldd R16,y+5
0390 61DE xcall _SPI_Write_Byte
0392 .dbline 377
0392 ;
0392 ; Disable_DFLASH();
0392 85DE xcall _Disable_DFLASH
0394 .dbline -2
0394 L105:
0394 .dbline 0 ; func end
0394 2496 adiw R28,4
0396 4991 ld R20,y+
0398 2496 adiw R28,4
039A 0895 ret
039C .dbsym l Sector_Lockdown_Command 0 A[4:4]c
039C .dbsym r i 20 c
039C .dbsym l Sector_Addr 5 l
039C .dbend
.area lit(rom, con, rel)
0028 L112:
0028 3500 .byte 53,0
002A 0000 .byte 0,0
.area text(rom, con, rel)
039C .dbfile E:\item\car\AT45DB041D\AT45DB041D.c
039C .dbfunc e DF_Read_Sector_Lockdown_Register _DF_Read_Sector_Lockdown_Register fV
039C ; Read_Sector_Lockdown_Register -> y+0
039C ; i -> R20
039C ; Sector_Lockdown_Register -> R10,R11
.even
039C _DF_Read_Sector_Lockdown_Register::
039C 0E940000 xcall push_xgset300C
03A0 5801 movw R10,R16
03A2 2497 sbiw R28,4
03A4 .dbline -1
03A4 .dbline 385
03A4 ; }
03A4 ; /************************************************************
03A4 ; *读取扇区加锁寄存器(返回8个扇区的加锁寄存器值)
03A4 ; *如果有读到不为0的表示已被加锁
03A4 ; *(0扇区的高四位为0也表示没加锁,其它扇区一定要全为O)
03A4 ; ************************************************************/
03A4 ; void DF_Read_Sector_Lockdown_Register(unsigned char *Sector_Lockdown_Register)
03A4 ; {
03A4 .dbline 386
03A4 ; unsigned char Read_Sector_Lockdown_Register[4]={0x35,0x00,0x00,0x00};
03A4 80E0 ldi R24,<L112
03A6 90E0 ldi R25,>L112
03A8 FE01 movw R30,R28
03AA 04E0 ldi R16,4
03AC 10E0 ldi R17,0
03AE FA93 st -y,R31
03B0 EA93 st -y,R30
03B2 9A93 st -y,R25
03B4 8A93 st -y,R24
03B6 0E940000 xcall asgncblk
03BA .dbline 389
03BA ; unsigned char i;
03BA ;
03BA ; DF_Check_Busy_State();
03BA 8EDE xcall _DF_Check_Busy_State
03BC .dbline 390
03BC ; Enable_DFLASH();
03BC 68DE xcall _Enable_DFLASH
03BE .dbline 392
03BE ;
03BE ; for(i=0;i<4;i++)//write
03BE 4427 clr R20
03C0 08C0 xjmp L116
03C2 L113:
03C2 .dbline 393
03C2 ; {
03C2 .dbline 394
03C2 ; SPI_Write_Byte(Read_Sector_Lockdown_Register[i]);
03C2 CE01 movw R24,R28
03C4 E42F mov R30,R20
03C6 FF27 clr R31
03C8 E80F add R30,R24
03CA F91F adc R31,R25
03CC 0081 ldd R16,z+0
03CE 42DE xcall _SPI_Write_Byte
03D0 .dbline 395
03D0 ; }
03D0 L114:
03D0 .dbline 392
03D0 4395 inc R20
03D2 L116:
03D2 .dbline 392
03D2 4430 cpi R20,4
03D4 B0F3 brlo L113
03D6 X23:
03D6 .dbline 396
03D6 ; for(i=0;i<8;i++)//read
03D6 4427 clr R20
03D8 08C0 xjmp L120
03DA L117:
03DA .dbline 397
03DA ; {
03DA .dbline 398
03DA ; Sector_Lockdown_Register[i] = SPI_Read_Byte(0);
03DA 0027 clr R16
03DC 53DE xcall _SPI_Read_Byte
03DE E42F mov R30,R20
03E0 FF27 clr R31
03E2 EA0D add R30,R10
03E4 FB1D adc R31,R11
03E6 0083 std z+0,R16
03E8 .dbline 399
03E8 ; }
03E8 L118:
03E8 .dbline 396
03E8 4395 inc R20
03EA L120:
03EA .dbline 396
03EA 4830 cpi R20,8
03EC B0F3 brlo L117
03EE X24:
03EE .dbline 400
03EE ; Disable_DFLASH();
03EE 57DE xcall _Disable_DFLASH
03F0 .dbline -2
03F0 L111:
03F0 .dbline 0 ; func end
03F0 2496 adiw R28,4
03F2 0C940000 xjmp pop_xgset300C
03F6 .dbsym l Read_Sector_Lockdown_Register 0 A[4:4]c
03F6 .dbsym r i 20 c
03F6 .dbsym r Sector_Lockdown_Register 10 pc
03F6 .dbend
03F6 .dbfunc e DF_Write_to_Buffer _DF_Write_to_Buffer fV
03F6 ; i -> R20,R21
03F6 ; wDataSize -> y+6
03F6 ; wData -> y+4
03F6 ; BFA -> R10,R11
03F6 ; BufferX -> R20
.even
03F6 _DF_Write_to_Buffer::
03F6 0E940000 xcall push_xgset300C
03FA 5901 movw R10,R18
03FC 402F mov R20,R16
03FE .dbline -1
03FE .dbline 411
03FE ; }
03FE ; /************************************************************
03FE ; *写数据到缓冲器(Buffer1或Buffer2)(缓冲器大小为264 bytes)
03FE ; *BufferX :选择缓冲器(Buffer1或Buffer2)
03FE ; *BFA :Buffer内存地址 0~263
03FE ; *wData :要写入的数据
03FE ; *wDataSize :要写入的数据长度(1~264)
03FE ; ************************************************************/
03FE ; void DF_Write_to_Buffer(unsigned char BufferX,unsigned int BFA,
03FE ; unsigned char *wData,unsigned int wDataSize)
03FE ; {
03FE .dbline 414
03FE ; unsigned int i;
03FE ;
03FE ; DF_Check_Busy_State(); //check busy bit
03FE 6CDE xcall _DF_Check_Busy_State
0400 .dbline 416
0400 ;
0400 ; Enable_DFLASH();
0400 46DE xcall _Enable_DFLASH
0402 .dbline 418
0402 ;
0402 ; if(BufferX == Buffer1) SPI_Write_Byte(Write_Data_to_Buffer1);//0x84
0402 4130 cpi R20,1
0404 19F4 brne L122
0406 X25:
0406 .dbline 418
0406 04E8 ldi R16,132
0408 25DE xcall _SPI_Write_Byte
040A 02C0 xjmp L123
040C L122:
040C .dbline 419
040C ; else SPI_Write_Byte(Write_Data_to_Buffer2);//0x87
040C 07E8 ldi R16,135
040E 22DE xcall _SPI_Write_Byte
0410 L123:
0410 .dbline 423
0410 ;
0410 ; //Page Size (264 Bytes)
0410 ; //15 don't care bits + 9 addrress
0410 ; SPI_Write_Byte(0xFF); //8 can't care bits
0410 0FEF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -