📄 spi.lst
字号:
0154 DF3A RCALL _Spi_MT
(0080) Spi_MT(address2);
0155 2D0A MOV R16,R10
0156 DF38 RCALL _Spi_MT
(0081) Spi_MT(address1);
0157 2F06 MOV R16,R22
0158 DF36 RCALL _Spi_MT
(0082) Spi_MT(address0);
0159 2F04 MOV R16,R20
015A DF34 RCALL _Spi_MT
(0083) CS_1;
015B 9AC2 SBI 0x18,2
(0084) Prints("Erase sector ",0);
015C 2722 CLR R18
015D 2733 CLR R19
015E EC08 LDI R16,0xC8
015F E010 LDI R17,0
0160 DF49 RCALL _Prints
(0085) Send_abyte(table[address2/10]);
0161 E02A LDI R18,0xA
0162 E030 LDI R19,0
0163 2D0A MOV R16,R10
0164 2711 CLR R17
0165 D1C2 RCALL div16s
0166 01F8 MOVW R30,R16
0167 ED86 LDI R24,0xD6
0168 E090 LDI R25,0
0169 0FE8 ADD R30,R24
016A 1FF9 ADC R31,R25
016B 8100 LDD R16,Z+0
016C 2711 CLR R17
016D DF34 RCALL _Send_abyte
(0086) Send_abyte(table[address2%10]);
016E E02A LDI R18,0xA
016F E030 LDI R19,0
0170 2D0A MOV R16,R10
0171 2711 CLR R17
0172 D1B1 RCALL mod16s
0173 01F8 MOVW R30,R16
0174 ED86 LDI R24,0xD6
0175 E090 LDI R25,0
0176 0FE8 ADD R30,R24
0177 1FF9 ADC R31,R25
0178 8100 LDD R16,Z+0
0179 2711 CLR R17
017A DF27 RCALL _Send_abyte
(0087) Prints(" completed...",1);
017B E021 LDI R18,1
017C E030 LDI R19,0
017D EB0A LDI R16,0xBA
017E E010 LDI R17,0
017F DF2A RCALL _Prints
0180 D1DE RCALL pop_gset3
0181 9624 ADIW R28,4
0182 9508 RET
(0088) }
(0089)
(0090) /***************************************************************************************
(0091) 写入片擦除使能命令
(0092) *****************************************************************************************/
(0093) void Bulk_Erase(void)
(0094) {
(0095) WriteEN();
_Bulk_Erase:
0183 DFA3 RCALL _WriteEN
(0096) while((Read_RDSR())&0x01);
0184 D073 RCALL _Read_RDSR
0185 FD00 SBRC R16,0
0186 CFFD RJMP 0x0184
(0097) CS_0;
0187 98C2 CBI 0x18,2
(0098) Spi_MT(0xc7);
0188 EC07 LDI R16,0xC7
0189 DF05 RCALL _Spi_MT
(0099) CS_1;
018A 9AC2 SBI 0x18,2
(0100) Prints("Bulk Erawe completed...",1);
018B E021 LDI R18,1
018C E030 LDI R19,0
018D EA02 LDI R16,0xA2
018E E010 LDI R17,0
018F DF1A RCALL _Prints
0190 9508 RET
_DelayX100ms:
i --> Y+0
x --> Y+12
0191 D18D RCALL push_arg4
0192 D1D8 RCALL push_gset2
0193 9728 SBIW R28,0x8
(0101) }
(0102)
(0103) /***************************************************************************************
(0104) 延时X/100ms
(0105) *****************************************************************************************/
(0106) void DelayX100ms(uint32 x)
(0107) {
0194 C034 RJMP 0x01C9
(0108) uint32 i;
(0109) while(x--)
(0110) {
(0111) i=1295;
0195 E04F LDI R20,0xF
0196 E055 LDI R21,5
0197 E060 LDI R22,0
0198 E070 LDI R23,0
0199 01FE MOVW R30,R28
019A 8340 STD Z+0,R20
019B 8351 STD Z+1,R21
019C 8362 STD Z+2,R22
019D 8373 STD Z+3,R23
(0112) while(i--);
019E 01FE MOVW R30,R28
019F 8020 LDD R2,Z+0
01A0 8031 LDD R3,Z+1
01A1 8042 LDD R4,Z+2
01A2 8053 LDD R5,Z+3
01A3 01FE MOVW R30,R28
01A4 8224 STD Z+4,R2
01A5 8235 STD Z+5,R3
01A6 8246 STD Z+6,R4
01A7 8257 STD Z+7,R5
01A8 E041 LDI R20,1
01A9 E050 LDI R21,0
01AA E060 LDI R22,0
01AB E070 LDI R23,0
01AC 01FE MOVW R30,R28
01AD 8024 LDD R2,Z+4
01AE 8035 LDD R3,Z+5
01AF 8046 LDD R4,Z+6
01B0 8057 LDD R5,Z+7
01B1 1A24 SUB R2,R20
01B2 0A35 SBC R3,R21
01B3 0A46 SBC R4,R22
01B4 0A57 SBC R5,R23
01B5 01FE MOVW R30,R28
01B6 8220 STD Z+0,R2
01B7 8231 STD Z+1,R3
01B8 8242 STD Z+2,R4
01B9 8253 STD Z+3,R5
01BA E040 LDI R20,0
01BB E050 LDI R21,0
01BC E060 LDI R22,0
01BD E070 LDI R23,0
01BE 01FE MOVW R30,R28
01BF 8024 LDD R2,Z+4
01C0 8035 LDD R3,Z+5
01C1 8046 LDD R4,Z+6
01C2 8057 LDD R5,Z+7
01C3 1624 CP R2,R20
01C4 0635 CPC R3,R21
01C5 0646 CPC R4,R22
01C6 0657 CPC R5,R23
01C7 F009 BEQ 0x01C9
01C8 CFD5 RJMP 0x019E
01C9 01FE MOVW R30,R28
01CA 8424 LDD R2,Z+12
01CB 8435 LDD R3,Z+13
01CC 8446 LDD R4,Z+14
01CD 8457 LDD R5,Z+15
01CE 01FE MOVW R30,R28
01CF 8224 STD Z+4,R2
01D0 8235 STD Z+5,R3
01D1 8246 STD Z+6,R4
01D2 8257 STD Z+7,R5
01D3 E041 LDI R20,1
01D4 E050 LDI R21,0
01D5 E060 LDI R22,0
01D6 E070 LDI R23,0
01D7 01FE MOVW R30,R28
01D8 8024 LDD R2,Z+4
01D9 8035 LDD R3,Z+5
01DA 8046 LDD R4,Z+6
01DB 8057 LDD R5,Z+7
01DC 1A24 SUB R2,R20
01DD 0A35 SBC R3,R21
01DE 0A46 SBC R4,R22
01DF 0A57 SBC R5,R23
01E0 01FE MOVW R30,R28
01E1 8624 STD Z+12,R2
01E2 8635 STD Z+13,R3
01E3 8646 STD Z+14,R4
01E4 8657 STD Z+15,R5
01E5 E040 LDI R20,0
01E6 E050 LDI R21,0
01E7 E060 LDI R22,0
01E8 E070 LDI R23,0
01E9 01FE MOVW R30,R28
01EA 8024 LDD R2,Z+4
01EB 8035 LDD R3,Z+5
01EC 8046 LDD R4,Z+6
01ED 8057 LDD R5,Z+7
01EE 1624 CP R2,R20
01EF 0635 CPC R3,R21
01F0 0646 CPC R4,R22
01F1 0657 CPC R5,R23
01F2 F009 BEQ 0x01F4
01F3 CFA1 RJMP 0x0195
01F4 9628 ADIW R28,0x8
01F5 D167 RCALL pop_gset2
01F6 9624 ADIW R28,4
01F7 9508 RET
_Read_RDSR:
read_data --> R20
01F8 D174 RCALL push_gset1
(0113) }
(0114) }
(0115)
(0116) /***************************************************************************************
(0117) 读取状态寄存器。
(0118) *****************************************************************************************/
(0119) uint8 Read_RDSR(void)
(0120) {
(0121) uint8 read_data;
(0122) //Prints("Run Read_RDSR()...",1);
(0123) CS_0;
01F9 98C2 CBI 0x18,2
(0124) Spi_MT(0x05);
01FA E005 LDI R16,5
01FB DE93 RCALL _Spi_MT
(0125) //Prints("Run Spi_MT()...",1);
(0126) read_data=Spi_MR();
01FC DE96 RCALL _Spi_MR
01FD 2F40 MOV R20,R16
(0127) //Prints("Run Spi_MR()...",1);
(0128) CS_1;
01FE 9AC2 SBI 0x18,2
(0129) return(read_data);
01FF D170 RCALL pop_gset1
0200 9508 RET
_Write_string:
address2 --> R20
address0 --> R22
address1 --> R10
i --> R12
n --> R14
address --> Y+12
string --> Y+10
0201 D11D RCALL push_arg4
0202 D162 RCALL push_gset5
0203 88E8 LDD R14,Y+16
0204 88F9 LDD R15,Y+17
(0130) }
(0131) /**************************************************************
(0132) 写入一串字节。
(0133) ****************************************************************/
(0134) void Write_string(uint8 *string,uint32 address,uint16 n)
(0135) {
(0136) uint16 i;
(0137) uint8 address2,address1,address0;
(0138) address2=(uint8)(address>>16);
0205 01FE MOVW R30,R28
0206 8424 LDD R2,Z+12
0207 8435 LDD R3,Z+13
0208 8446 LDD R4,Z+14
0209 8457 LDD R5,Z+15
020A 0112 MOVW R2,R4
020B 2444 CLR R4
020C 2455 CLR R5
020D 2D42 MOV R20,R2
(0139) address1=(uint8)(address>>8);
020E E088 LDI R24,0x8
020F E090 LDI R25,0
0210 01FE MOVW R30,R28
0211 8424 LDD R2,Z+12
0212 8435 LDD R3,Z+13
0213 8446 LDD R4,Z+14
0214 8457 LDD R5,Z+15
0215 938A ST R24,-Y
0216 0181 MOVW R16,R2
0217 0192 MOVW R18,R4
0218 D16B RCALL lsr32
0219 2EA0 MOV R10,R16
(0140) address0=(uint8)address;
021A 01FE MOVW R30,R28
021B 8424 LDD R2,Z+12
021C 8435 LDD R3,Z+13
021D 8446 LDD R4,Z+14
021E 8457 LDD R5,Z+15
021F 2D62 MOV R22,R2
(0141) while((Read_RDSR())&0x01);
0220 DFD7 RCALL _Read_RDSR
0221 FD00 SBRC R16,0
0222 CFFD RJMP 0x0220
(0142) WriteEN();
0223 DF03 RCALL _WriteEN
(0143) CS_0;
0224 98C2 CBI 0x18,2
(0144) Spi_MT(0x02);
0225 E002 LDI R16,2
0226 DE68 RCALL _Spi_MT
(0145) Spi_MT(address2);
0227 2F04 MOV R16,R20
0228 DE66 RCALL _Spi_MT
(0146) Spi_MT(address1);
0229 2D0A MOV R16,R10
022A DE64 RCALL _Spi_MT
(0147) Spi_MT(address0);
022B 2F06 MOV R16,R22
022C DE62 RCALL _Spi_MT
(0148) for(i=0;i<n;i++)
022D 24CC CLR R12
022E 24DD CLR R13
022F C00C RJMP 0x023C
(0149) {
(0150) Spi_MT(*string);
0230 85EA LDD R30,Y+10
0231 85FB LDD R31,Y+11
0232 8100 LDD R16,Z+0
0233 DE5B RCALL _Spi_MT
(0151) string++;
0234 858A LDD R24,Y+10
0235 859B LDD R25,Y+11
0236 9601 ADIW R24,1
0237 879B STD Y+11,R25
0238 878A STD Y+10,R24
0239 01C6 MOVW R24,R12
023A 9601 ADIW R24,1
023B 016C MOVW R12,R24
023C 14CE CP R12,R14
023D 04DF CPC R13,R15
023E F388 BCS 0x0230
(0152) }
(0153) CS_1;
023F 9AC2 SBI 0x18,2
(0154) Prints("Write string start addr ",0);
0240 2722 CLR R18
0241 2733 CLR R19
0242 E809 LDI R16,0x89
0243 E010 LDI R17,0
0244 DE65 RCALL _Prints
(0155) Send_abyte('0');
0245 E300 LDI R16,0x30
0246 E010 LDI R17,0
0247 DE5A RCALL _Send_abyte
(0156) Send_abyte('x');
0248 E708 LDI R16,0x78
0249 E010 LDI R17,0
024A DE57 RCALL _Send_abyte
(0157) Send_abyte('0');
024B E300 LDI R16,0x30
024C E010 LDI R17,0
024D DE54 RCALL _Send_abyte
(0158) Send_abyte(table[address2%16]);
024E E120 LDI R18,0x10
024F E030 LDI R19,0
0250 2F04 MOV R16,R20
0251 2711 CLR R17
0252 D0D1 RCALL mod16s
0253 01F8 MOVW R30,R16
0254 ED86 LDI R24,0xD6
0255 E090 LDI R25,0
0256 0FE8 ADD R30,R24
0257 1FF9 ADC R31,R25
0258 8100 LDD R16,Z+0
0259 2711 CLR R17
025A DE47 RCALL _Send_abyte
(0159) Send_abyte(table[address1/6]);
025B E026 LDI R18,6
025C E030 LDI R19,0
025D 2D0A MOV R16,R10
025E 2711 CLR R17
025F D0C8 RCALL div16s
0260 01F8 MOVW R30,R16
0261 ED86 LDI R24,0xD6
0262 E090 LDI R25,0
0263 0FE8 ADD R30,R24
0264 1FF9 ADC R31,R25
0265 8100 LDD R16,Z+0
0266 2711 CLR R17
0267 DE3A RCALL _Send_abyte
(0160) Send_abyte(table[address1%16]);
0268 E120 LDI R18,0x10
0269 E030 LDI R19,0
026A 2D0A MOV R16,R10
026B 2711 CLR R17
026C D0B7 RCALL mod16s
026D 01F8 MOVW R30,R16
026E ED86 LDI R24,0xD6
026F E090 LDI R25,0
0270 0FE8 ADD R30,R24
0271 1FF9 ADC R31,R25
0272 8100 LDD R16,Z+0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -