📄 flash.lis
字号:
.module flash.c
.area data(ram, con, rel)
0000 _read_string::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .blkb 18
.area idata
0001 00000000000000000000 .word 0,0,0,0,0
000B 0000000000000000 .byte 0,0,0,0,0,0,0,0
.area data(ram, con, rel)
0013 .dbfile E:\ICC\SPI\flash.c
0013 .dbsym e read_string _read_string A[19:19]c
.area text(rom, con, rel)
0000 .dbfile E:\ICC\SPI\flash.c
0000 .dbfunc e Read_abyte _Read_abyte fc
0000 ; address0 -> R20
0000 ; address1 -> R22
0000 ; address2 -> R10
0000 ; data -> R12
0000 ; address -> y+8
.even
0000 _Read_abyte::
0000 00D0 rcall push_arg4
0002 00D0 rcall push_gset4
0004 .dbline -1
0004 .dbline 13
0004 ; #include <iom8v.h>
0004 ; #include "mytype.h"
0004 ; #include "uart.h"
0004 ; #include "spi.h"
0004 ;
0004 ; extern uint8 table[];
0004 ; uint8 read_string[19]={0};//
0004 ;
0004 ; /***************************************************************************************
0004 ; 读取一个字节
0004 ; *****************************************************************************************/
0004 ; uint8 Read_abyte(uint32 address)
0004 ; {
0004 .dbline 16
0004 ; uint8 data;
0004 ; uint8 address2,address1,address0;
0004 ; address2=(uint8)(address>>16);
0004 FE01 movw R30,R28
0006 2084 ldd R2,z+8
0008 3184 ldd R3,z+9
000A 4284 ldd R4,z+10
000C 5384 ldd R5,z+11
000E 1201 movw R2,R4
0010 4424 clr R4
0012 5524 clr R5
0014 A22C mov R10,R2
0016 .dbline 17
0016 ; address1=(uint8)(address>>8);
0016 88E0 ldi R24,8
0018 90E0 ldi R25,0
001A FE01 movw R30,R28
001C 2084 ldd R2,z+8
001E 3184 ldd R3,z+9
0020 4284 ldd R4,z+10
0022 5384 ldd R5,z+11
0024 8A93 st -y,R24
0026 8101 movw R16,R2
0028 9201 movw R18,R4
002A 00D0 rcall lsr32
002C 602F mov R22,R16
002E .dbline 18
002E ; address0=(uint8)address;
002E FE01 movw R30,R28
0030 2084 ldd R2,z+8
0032 3184 ldd R3,z+9
0034 4284 ldd R4,z+10
0036 5384 ldd R5,z+11
0038 422D mov R20,R2
003A L2:
003A .dbline 19
003A L3:
003A .dbline 19
003A ; while((Read_RDSR())&0x01);
003A 13D1 rcall _Read_RDSR
003C 00FD sbrc R16,0
003E FDCF rjmp L2
0040 .dbline 20
0040 ; CS_0;
0040 C298 cbi 0x18,2
0042 .dbline 21
0042 ; Spi_MT(0x03);
0042 03E0 ldi R16,3
0044 00D0 rcall _Spi_MT
0046 .dbline 22
0046 ; Spi_MT(address2);
0046 0A2D mov R16,R10
0048 00D0 rcall _Spi_MT
004A .dbline 23
004A ; Spi_MT(address1);
004A 062F mov R16,R22
004C 00D0 rcall _Spi_MT
004E .dbline 24
004E ; Spi_MT(address0);
004E 042F mov R16,R20
0050 00D0 rcall _Spi_MT
0052 .dbline 25
0052 ; data=Spi_MR();
0052 00D0 rcall _Spi_MR
0054 C02E mov R12,R16
0056 .dbline 26
0056 ; CS_1;
0056 C29A sbi 0x18,2
0058 .dbline 27
0058 ; return data;
0058 .dbline -2
0058 L1:
0058 00D0 rcall pop_gset4
005A 2496 adiw R28,4
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r address0 20 c
005E .dbsym r address1 22 c
005E .dbsym r address2 10 c
005E .dbsym r data 12 c
005E .dbsym l address 8 l
005E .dbend
005E .dbfunc e Write_abyte _Write_abyte fV
005E ; address0 -> R20
005E ; address1 -> R22
005E ; address2 -> R10
005E ; write_data -> R12
005E ; address -> y+8
.even
005E _Write_abyte::
005E 00D0 rcall push_arg4
0060 00D0 rcall push_gset4
0062 CC84 ldd R12,y+12
0064 .dbline -1
0064 .dbline 34
0064 ; }
0064 ;
0064 ; /***************************************************************************************
0064 ; 写入一个字节
0064 ; *****************************************************************************************/
0064 ; void Write_abyte(uint32 address,uint8 write_data)
0064 ; {
0064 .dbline 36
0064 ; uint8 address2,address1,address0;
0064 ; address2=(uint8)(address>>16);
0064 FE01 movw R30,R28
0066 2084 ldd R2,z+8
0068 3184 ldd R3,z+9
006A 4284 ldd R4,z+10
006C 5384 ldd R5,z+11
006E 1201 movw R2,R4
0070 4424 clr R4
0072 5524 clr R5
0074 A22C mov R10,R2
0076 .dbline 37
0076 ; address1=(uint8)(address>>8);
0076 88E0 ldi R24,8
0078 90E0 ldi R25,0
007A FE01 movw R30,R28
007C 2084 ldd R2,z+8
007E 3184 ldd R3,z+9
0080 4284 ldd R4,z+10
0082 5384 ldd R5,z+11
0084 8A93 st -y,R24
0086 8101 movw R16,R2
0088 9201 movw R18,R4
008A 00D0 rcall lsr32
008C 602F mov R22,R16
008E .dbline 38
008E ; address0=(uint8)address;
008E FE01 movw R30,R28
0090 2084 ldd R2,z+8
0092 3184 ldd R3,z+9
0094 4284 ldd R4,z+10
0096 5384 ldd R5,z+11
0098 422D mov R20,R2
009A L6:
009A .dbline 39
009A L7:
009A .dbline 39
009A ; while((Read_RDSR())&0x01);
009A E3D0 rcall _Read_RDSR
009C 00FD sbrc R16,0
009E FDCF rjmp L6
00A0 .dbline 40
00A0 ; WriteEN();
00A0 0FD0 rcall _WriteEN
00A2 .dbline 41
00A2 ; CS_0;
00A2 C298 cbi 0x18,2
00A4 .dbline 42
00A4 ; Spi_MT(0x02);
00A4 02E0 ldi R16,2
00A6 00D0 rcall _Spi_MT
00A8 .dbline 43
00A8 ; Spi_MT(address2);
00A8 0A2D mov R16,R10
00AA 00D0 rcall _Spi_MT
00AC .dbline 44
00AC ; Spi_MT(address1);
00AC 062F mov R16,R22
00AE 00D0 rcall _Spi_MT
00B0 .dbline 45
00B0 ; Spi_MT(address0);
00B0 042F mov R16,R20
00B2 00D0 rcall _Spi_MT
00B4 .dbline 46
00B4 ; Spi_MT(write_data);
00B4 0C2D mov R16,R12
00B6 00D0 rcall _Spi_MT
00B8 .dbline 47
00B8 ; CS_1;
00B8 C29A sbi 0x18,2
00BA .dbline -2
00BA L5:
00BA 00D0 rcall pop_gset4
00BC 2496 adiw R28,4
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbsym r address0 20 c
00C0 .dbsym r address1 22 c
00C0 .dbsym r address2 10 c
00C0 .dbsym r write_data 12 c
00C0 .dbsym l address 8 l
00C0 .dbend
00C0 .dbfunc e WriteEN _WriteEN fV
.even
00C0 _WriteEN::
00C0 .dbline -1
00C0 .dbline 53
00C0 ; }
00C0 ; /***************************************************************************************
00C0 ; 写入写使能命令
00C0 ; *****************************************************************************************/
00C0 ; void WriteEN(void)
00C0 ; {
00C0 .dbline 54
00C0 ; CS_0;
00C0 C298 cbi 0x18,2
00C2 .dbline 55
00C2 ; Spi_MT(0x06);
00C2 06E0 ldi R16,6
00C4 00D0 rcall _Spi_MT
00C6 .dbline 56
00C6 ; CS_1;
00C6 C29A sbi 0x18,2
00C8 .dbline -2
00C8 L9:
00C8 .dbline 0 ; func end
00C8 0895 ret
00CA .dbend
00CA .dbfunc e WriteDisable _WriteDisable fV
.even
00CA _WriteDisable::
00CA .dbline -1
00CA .dbline 62
00CA ; }
00CA ; /***************************************************************************************
00CA ; 写入写禁止命令
00CA ; *****************************************************************************************/
00CA ; void WriteDisable(void)
00CA ; {
00CA .dbline 63
00CA ; CS_0;
00CA C298 cbi 0x18,2
00CC .dbline 64
00CC ; Spi_MT(0x04);
00CC 04E0 ldi R16,4
00CE 00D0 rcall _Spi_MT
00D0 .dbline 65
00D0 ; CS_1;
00D0 C29A sbi 0x18,2
00D2 .dbline -2
00D2 L10:
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbend
00D4 .dbfunc e Sector_Erase _Sector_Erase fV
00D4 ; address0 -> R20
00D4 ; address1 -> R22
00D4 ; address2 -> R10
00D4 ; address -> y+6
.even
00D4 _Sector_Erase::
00D4 00D0 rcall push_arg4
00D6 00D0 rcall push_gset3
00D8 .dbline -1
00D8 .dbline 71
00D8 ; }
00D8 ; /***************************************************************************************
00D8 ; 写入段擦除使能命令
00D8 ; *****************************************************************************************/
00D8 ; void Sector_Erase(uint32 address)
00D8 ; {
00D8 .dbline 73
00D8 ; uint8 address2,address1,address0;
00D8 ; address2=(uint8)(address>>16);
00D8 FE01 movw R30,R28
00DA 2680 ldd R2,z+6
00DC 3780 ldd R3,z+7
00DE 4084 ldd R4,z+8
00E0 5184 ldd R5,z+9
00E2 1201 movw R2,R4
00E4 4424 clr R4
00E6 5524 clr R5
00E8 A22C mov R10,R2
00EA .dbline 74
00EA ; address1=(uint8)(address>>8);
00EA 88E0 ldi R24,8
00EC 90E0 ldi R25,0
00EE FE01 movw R30,R28
00F0 2680 ldd R2,z+6
00F2 3780 ldd R3,z+7
00F4 4084 ldd R4,z+8
00F6 5184 ldd R5,z+9
00F8 8A93 st -y,R24
00FA 8101 movw R16,R2
00FC 9201 movw R18,R4
00FE 00D0 rcall lsr32
0100 602F mov R22,R16
0102 .dbline 75
0102 ; address0=(uint8)address;
0102 FE01 movw R30,R28
0104 2680 ldd R2,z+6
0106 3780 ldd R3,z+7
0108 4084 ldd R4,z+8
010A 5184 ldd R5,z+9
010C 422D mov R20,R2
010E L12:
010E .dbline 76
010E L13:
010E .dbline 76
010E ; while((Read_RDSR())&0x01);
010E A9D0 rcall _Read_RDSR
0110 00FD sbrc R16,0
0112 FDCF rjmp L12
0114 .dbline 77
0114 ; WriteEN();
0114 D5DF rcall _WriteEN
0116 .dbline 78
0116 ; CS_0;
0116 C298 cbi 0x18,2
0118 .dbline 79
0118 ; Spi_MT(0xd8);
0118 08ED ldi R16,216
011A 00D0 rcall _Spi_MT
011C .dbline 80
011C ; Spi_MT(address2);
011C 0A2D mov R16,R10
011E 00D0 rcall _Spi_MT
0120 .dbline 81
0120 ; Spi_MT(address1);
0120 062F mov R16,R22
0122 00D0 rcall _Spi_MT
0124 .dbline 82
0124 ; Spi_MT(address0);
0124 042F mov R16,R20
0126 00D0 rcall _Spi_MT
0128 .dbline 83
0128 ; CS_1;
0128 C29A sbi 0x18,2
012A .dbline 84
012A ; Prints("Erase sector ",0);
012A 2227 clr R18
012C 3327 clr R19
012E 00E0 ldi R16,<L15
0130 10E0 ldi R17,>L15
0132 00D0 rcall _Prints
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -