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

📄 spi.lst

📁 spi的i/o茉莉程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    0069 E5CF      LDI	R28,0x5F
    006A E0D4      LDI	R29,4
    006B BFCD      OUT	0x3D,R28
    006C BFDE      OUT	0x3E,R29
    006D 51C0      SUBI	R28,0x10
    006E 40D0      SBCI	R29,0
    006F EA0A      LDI	R16,0xAA
    0070 8308      STD	Y+0,R16
    0071 2400      CLR	R0
    0072 E0EC      LDI	R30,0xC
    0073 E0F1      LDI	R31,1
    0074 E011      LDI	R17,1
    0075 30EC      CPI	R30,0xC
    0076 07F1      CPC	R31,R17
    0077 F011      BEQ	0x007A
    0078 9201      ST	R0,Z+
    0079 CFFB      RJMP	0x0075
    007A 8300      STD	Z+0,R16
    007B E2E6      LDI	R30,0x26
    007C E0F0      LDI	R31,0
    007D E6A0      LDI	R26,0x60
    007E E0B0      LDI	R27,0
    007F E010      LDI	R17,0
    0080 3DE2      CPI	R30,0xD2
    0081 07F1      CPC	R31,R17
    0082 F021      BEQ	0x0087
    0083 95C8      LPM
    0084 9631      ADIW	R30,1
    0085 920D      ST	R0,X+
    0086 CFF9      RJMP	0x0080
    0087 D268      RCALL	_main
_exit:
    0088 CFFF      RJMP	_exit
FILE: E:\ICC\SPI\SPI.c
(0001) #include <iom8v.h>
(0002) #include "uart.h"
(0003) #include "mytype.h"
(0004) #include "spi.h"
(0005) 
(0006) 
(0007) extern uint8 table[];
(0008) 
(0009) void Spi_init(void)
(0010) {
(0011) DDR1=((1<<WP)|(1<<SO)|(1<<SCLK)|(1<<CS));
_Spi_init:
    0089 E28E      LDI	R24,0x2E
    008A BB87      OUT	0x17,R24
(0012) SPCR=((1<<SPE)|(1<<MSTR)|(1<<SPR0));
    008B E581      LDI	R24,0x51
    008C B98D      OUT	0x0D,R24
(0013) WP_1;
    008D 9AC1      SBI	0x18,1
    008E 9508      RET
(0014) }
(0015) 
(0016) void Spi_MT(uint8 data)
(0017) {
(0018) SPDR=data;
_Spi_MT:
  data                 --> R16
    008F B90F      OUT	0x0F,R16
(0019) while(!(SPSR&(1<<SPIF)));
    0090 9B77      SBIS	0x0E,7
    0091 CFFE      RJMP	0x0090
    0092 9508      RET
(0020) }
(0021) 
(0022) uint8 Spi_MR()
(0023) {
(0024) uint8 data;
(0025) data=SPDR;
_Spi_MR:
  data                 --> R16
    0093 B10F      IN	R16,0x0F
(0026) SPDR=data;
    0094 B90F      OUT	0x0F,R16
(0027) while(!(SPSR&(1<<SPIF)));
    0095 9B77      SBIS	0x0E,7
    0096 CFFE      RJMP	0x0095
(0028) //Prints("Get data Readdata...",1);
(0029) //Send_abyte(table[SPDR/16]);
(0030) //Send_abyte(table[SPDR/16]);
(0031) return SPDR;
    0097 B10F      IN	R16,0x0F
    0098 9508      RET
_Uart_init:
    0099 E188      LDI	R24,0x18
    009A B98A      OUT	0x0A,R24
    009B E189      LDI	R24,0x19
    009C B989      OUT	0x09,R24
    009D 2422      CLR	R2
    009E BC20      OUT	0x20,R2
    009F E886      LDI	R24,0x86
    00A0 BD80      OUT	0x20,R24
    00A1 9508      RET
_Send_abyte:
  abyte                --> R16
    00A2 9B5D      SBIS	0x0B,5
    00A3 CFFE      RJMP	_Send_abyte
    00A4 B90C      OUT	0x0C,R16
    00A5 9508      RET
_Receive_abyte:
    00A6 9B5F      SBIS	0x0B,7
    00A7 CFFE      RJMP	_Receive_abyte
    00A8 B10C      IN	R16,0x0C
    00A9 9508      RET
_Prints:
  i                    --> R20
  enter                --> R22
  string               --> R10
    00AA D2BE      RCALL	push_gset3
    00AB 2F62      MOV	R22,R18
    00AC 0158      MOVW	R10,R16
    00AD 2744      CLR	R20
    00AE C009      RJMP	0x00B8
    00AF 9B5D      SBIS	0x0B,5
    00B0 CFFE      RJMP	0x00AF
    00B1 2FE4      MOV	R30,R20
    00B2 27FF      CLR	R31
    00B3 0DEA      ADD	R30,R10
    00B4 1DFB      ADC	R31,R11
    00B5 8020      LDD	R2,Z+0
    00B6 B82C      OUT	0x0C,R2
    00B7 9543      INC	R20
    00B8 2FE4      MOV	R30,R20
    00B9 27FF      CLR	R31
    00BA 0DEA      ADD	R30,R10
    00BB 1DFB      ADC	R31,R11
    00BC 8020      LDD	R2,Z+0
    00BD 2022      TST	R2
    00BE F781      BNE	0x00AF
    00BF 2366      TST	R22
    00C0 F021      BEQ	0x00C5
    00C1 E00A      LDI	R16,0xA
    00C2 DFDF      RCALL	_Send_abyte
    00C3 E00D      LDI	R16,0xD
    00C4 DFDD      RCALL	_Send_abyte
    00C5 D299      RCALL	pop_gset3
    00C6 9508      RET
_Read_abyte:
  address0             --> R20
  address1             --> R22
  address2             --> R10
  data                 --> R12
  address              --> Y+8
    00C7 D257      RCALL	push_arg4
    00C8 D29E      RCALL	push_gset4
FILE: E:\ICC\SPI\flash.c
(0001) #include <iom8v.h>
(0002) #include "mytype.h"
(0003) #include "uart.h"
(0004) #include "spi.h"
(0005) 
(0006) extern uint8 table[];
(0007) uint8 read_string[19]={0};//
(0008) 
(0009) /***************************************************************************************
(0010) 读取一个字节   
(0011) *****************************************************************************************/
(0012) uint8 Read_abyte(uint32 address)
(0013) {
(0014) uint8 data;
(0015) uint8 address2,address1,address0;
(0016) address2=(uint8)(address>>16);
    00C9 01FE      MOVW	R30,R28
    00CA 8420      LDD	R2,Z+8
    00CB 8431      LDD	R3,Z+9
    00CC 8442      LDD	R4,Z+10
    00CD 8453      LDD	R5,Z+11
    00CE 0112      MOVW	R2,R4
    00CF 2444      CLR	R4
    00D0 2455      CLR	R5
    00D1 2CA2      MOV	R10,R2
(0017) address1=(uint8)(address>>8);
    00D2 E088      LDI	R24,0x8
    00D3 E090      LDI	R25,0
    00D4 01FE      MOVW	R30,R28
    00D5 8420      LDD	R2,Z+8
    00D6 8431      LDD	R3,Z+9
    00D7 8442      LDD	R4,Z+10
    00D8 8453      LDD	R5,Z+11
    00D9 938A      ST	R24,-Y
    00DA 0181      MOVW	R16,R2
    00DB 0192      MOVW	R18,R4
    00DC D2A7      RCALL	lsr32
    00DD 2F60      MOV	R22,R16
(0018) address0=(uint8)address;
    00DE 01FE      MOVW	R30,R28
    00DF 8420      LDD	R2,Z+8
    00E0 8431      LDD	R3,Z+9
    00E1 8442      LDD	R4,Z+10
    00E2 8453      LDD	R5,Z+11
    00E3 2D42      MOV	R20,R2
(0019) while((Read_RDSR())&0x01);
    00E4 D113      RCALL	_Read_RDSR
    00E5 FD00      SBRC	R16,0
    00E6 CFFD      RJMP	0x00E4
(0020) CS_0;
    00E7 98C2      CBI	0x18,2
(0021) Spi_MT(0x03);
    00E8 E003      LDI	R16,3
    00E9 DFA5      RCALL	_Spi_MT
(0022) Spi_MT(address2);
    00EA 2D0A      MOV	R16,R10
    00EB DFA3      RCALL	_Spi_MT
(0023) Spi_MT(address1);
    00EC 2F06      MOV	R16,R22
    00ED DFA1      RCALL	_Spi_MT
(0024) Spi_MT(address0);
    00EE 2F04      MOV	R16,R20
    00EF DF9F      RCALL	_Spi_MT
(0025) data=Spi_MR();
    00F0 DFA2      RCALL	_Spi_MR
    00F1 2EC0      MOV	R12,R16
(0026) CS_1;
    00F2 9AC2      SBI	0x18,2
(0027) return data;
    00F3 D26D      RCALL	pop_gset4
    00F4 9624      ADIW	R28,4
    00F5 9508      RET
_Write_abyte:
  address0             --> R20
  address1             --> R22
  address2             --> R10
  write_data           --> R12
  address              --> Y+8
    00F6 D228      RCALL	push_arg4
    00F7 D26F      RCALL	push_gset4
    00F8 84CC      LDD	R12,Y+12
(0028) }
(0029) 
(0030) /***************************************************************************************
(0031) 写入一个字节   
(0032) *****************************************************************************************/
(0033) void Write_abyte(uint32 address,uint8 write_data)
(0034) {
(0035) uint8 address2,address1,address0;
(0036) address2=(uint8)(address>>16);
    00F9 01FE      MOVW	R30,R28
    00FA 8420      LDD	R2,Z+8
    00FB 8431      LDD	R3,Z+9
    00FC 8442      LDD	R4,Z+10
    00FD 8453      LDD	R5,Z+11
    00FE 0112      MOVW	R2,R4
    00FF 2444      CLR	R4
    0100 2455      CLR	R5
    0101 2CA2      MOV	R10,R2
(0037) address1=(uint8)(address>>8);
    0102 E088      LDI	R24,0x8
    0103 E090      LDI	R25,0
    0104 01FE      MOVW	R30,R28
    0105 8420      LDD	R2,Z+8
    0106 8431      LDD	R3,Z+9
    0107 8442      LDD	R4,Z+10
    0108 8453      LDD	R5,Z+11
    0109 938A      ST	R24,-Y
    010A 0181      MOVW	R16,R2
    010B 0192      MOVW	R18,R4
    010C D277      RCALL	lsr32
    010D 2F60      MOV	R22,R16
(0038) address0=(uint8)address;
    010E 01FE      MOVW	R30,R28
    010F 8420      LDD	R2,Z+8
    0110 8431      LDD	R3,Z+9
    0111 8442      LDD	R4,Z+10
    0112 8453      LDD	R5,Z+11
    0113 2D42      MOV	R20,R2
(0039) while((Read_RDSR())&0x01);
    0114 D0E3      RCALL	_Read_RDSR
    0115 FD00      SBRC	R16,0
    0116 CFFD      RJMP	0x0114
(0040) WriteEN();
    0117 D00F      RCALL	_WriteEN
(0041) CS_0;
    0118 98C2      CBI	0x18,2
(0042) Spi_MT(0x02);
    0119 E002      LDI	R16,2
    011A DF74      RCALL	_Spi_MT
(0043) Spi_MT(address2);
    011B 2D0A      MOV	R16,R10
    011C DF72      RCALL	_Spi_MT
(0044) Spi_MT(address1);
    011D 2F06      MOV	R16,R22
    011E DF70      RCALL	_Spi_MT
(0045) Spi_MT(address0);
    011F 2F04      MOV	R16,R20
    0120 DF6E      RCALL	_Spi_MT
(0046) Spi_MT(write_data);
    0121 2D0C      MOV	R16,R12
    0122 DF6C      RCALL	_Spi_MT
(0047) CS_1;
    0123 9AC2      SBI	0x18,2
    0124 D23C      RCALL	pop_gset4
    0125 9624      ADIW	R28,4
    0126 9508      RET
(0048) }
(0049) /***************************************************************************************
(0050) 写入写使能命令 
(0051) *****************************************************************************************/
(0052) void WriteEN(void)
(0053) {
(0054) CS_0;
_WriteEN:
    0127 98C2      CBI	0x18,2
(0055) Spi_MT(0x06);
    0128 E006      LDI	R16,6
    0129 DF65      RCALL	_Spi_MT
(0056) CS_1;
    012A 9AC2      SBI	0x18,2
    012B 9508      RET
(0057) }
(0058) /***************************************************************************************
(0059) 写入写禁止命令 
(0060) *****************************************************************************************/
(0061) void WriteDisable(void)
(0062) {
(0063) CS_0;
_WriteDisable:
    012C 98C2      CBI	0x18,2
(0064) Spi_MT(0x04);
    012D E004      LDI	R16,4
    012E DF60      RCALL	_Spi_MT
(0065) CS_1;
    012F 9AC2      SBI	0x18,2
    0130 9508      RET
_Sector_Erase:
  address0             --> R20
  address1             --> R22
  address2             --> R10
  address              --> Y+6
    0131 D1ED      RCALL	push_arg4
    0132 D236      RCALL	push_gset3
(0066) }
(0067) /***************************************************************************************
(0068) 写入段擦除使能命令 
(0069) *****************************************************************************************/
(0070) void Sector_Erase(uint32 address)
(0071) {
(0072) uint8 address2,address1,address0;
(0073) address2=(uint8)(address>>16);
    0133 01FE      MOVW	R30,R28
    0134 8026      LDD	R2,Z+6
    0135 8037      LDD	R3,Z+7
    0136 8440      LDD	R4,Z+8
    0137 8451      LDD	R5,Z+9
    0138 0112      MOVW	R2,R4
    0139 2444      CLR	R4
    013A 2455      CLR	R5
    013B 2CA2      MOV	R10,R2
(0074) address1=(uint8)(address>>8);
    013C E088      LDI	R24,0x8
    013D E090      LDI	R25,0
    013E 01FE      MOVW	R30,R28
    013F 8026      LDD	R2,Z+6
    0140 8037      LDD	R3,Z+7
    0141 8440      LDD	R4,Z+8
    0142 8451      LDD	R5,Z+9
    0143 938A      ST	R24,-Y
    0144 0181      MOVW	R16,R2
    0145 0192      MOVW	R18,R4
    0146 D23D      RCALL	lsr32
    0147 2F60      MOV	R22,R16
(0075) address0=(uint8)address;
    0148 01FE      MOVW	R30,R28
    0149 8026      LDD	R2,Z+6
    014A 8037      LDD	R3,Z+7
    014B 8440      LDD	R4,Z+8
    014C 8451      LDD	R5,Z+9
    014D 2D42      MOV	R20,R2
(0076) while((Read_RDSR())&0x01);
    014E D0A9      RCALL	_Read_RDSR
    014F FD00      SBRC	R16,0
    0150 CFFD      RJMP	0x014E
(0077) WriteEN();
    0151 DFD5      RCALL	_WriteEN
(0078) CS_0;
    0152 98C2      CBI	0x18,2
(0079) Spi_MT(0xd8);
    0153 ED08      LDI	R16,0xD8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -