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

📄 flash.lis

📁 spi的i/o茉莉程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -