⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at45db041d.lis

📁 用ATMEGA16的硬件SPI驱动AT45DB041D
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -