📄 cqt_boot.lst
字号:
F984 E086 LDI R24,6
F985 9380009D STS 0x9D,R24
(0184) UBRR1L = 0x0B; //set baud rate lo
F987 E08B LDI R24,0xB
F988 93800099 STS 0x99,R24
(0185) UBRR1H = 0x00; //set baud rate hi
F98A 92200098 STS 0x98,R2
(0186) UCSR1B = 0x18;
F98C E188 LDI R24,0x18
F98D 9380009A STS 0x9A,R24
F98F 9508 RET
(0187) }
(0188) /*//UART1 initialize
(0189) // desired baud rate:19200
(0190) // actual baud rate:19200 (0.0%)
(0191) // char size: 8 bit
(0192) // parity: Disabled
(0193) void uart1_init(void)
(0194) {
(0195) UCSR1B = 0x00; //disable while setting baud rate
(0196) UCSR1A = 0x00;
(0197) UCSR1C = 0x06;
(0198) UBRR1L = 0x23; //set baud rate lo
(0199) UBRR1H = 0x00; //set baud rate hi
(0200) UCSR1B = 0x18;
(0201) }*/
(0202) unsigned char RecChar(void)
(0203) {
(0204) timenum=0;
_RecChar:
F990 2422 CLR R2
F991 2433 CLR R3
F992 9230010B STS timenum+1,R3
F994 9220010A STS timenum,R2
(0205) do{
(0206) timenum++;
F996 9180010A LDS R24,timenum
F998 9190010B LDS R25,timenum+1
F99A 9601 ADIW R24,1
F99B 9390010B STS timenum+1,R25
F99D 9380010A STS timenum,R24
(0207) if(timenum>50000){timenum=0;clr_dog();}
F99F E580 LDI R24,0x50
F9A0 EC93 LDI R25,0xC3
F9A1 9020010A LDS R2,timenum
F9A3 9030010B LDS R3,timenum+1
F9A5 1582 CP R24,R2
F9A6 0593 CPC R25,R3
F9A7 F438 BCC 0xF9AF
F9A8 2422 CLR R2
F9A9 2433 CLR R3
F9AA 9230010B STS timenum+1,R3
F9AC 9220010A STS timenum,R2
F9AE DF5F RCALL _clr_dog
(0208) }while(!(UCSR1A & 0x80));
F9AF 9020009B LDS R2,0x9B
F9B1 FE27 SBRS R2,7
F9B2 CFE3 RJMP 0xF996
(0209) return UDR1;
F9B3 9100009C LDS R16,0x9C
F9B5 9508 RET
(0210) }
(0211) /*unsigned char RecChar(void)
(0212) {
(0213) timenum=0;
(0214) do{
(0215) timenum++;
(0216) clr_dog();
(0217) }while((!(UCSR0A & 0x80))&&(timenum<10000000));
(0218) return UDR0;
(0219) } */
(0220)
(0221) /* 字符输出函数 */
(0222) void Send_ByteUART1(char ch)
(0223) {
(0224) UDR1=ch;
_Send_ByteUART1:
ch --> R16
F9B6 9300009C STS 0x9C,R16
(0225) while (!(UCSR1A&(1<<UDRE1))); //UCSRA USART 控制状态寄存器A UDRE=TI
F9B8 9020009B LDS R2,0x9B
F9BA FE25 SBRS R2,5
F9BB CFFC RJMP 0xF9B8
F9BC 9508 RET
_send232:
i --> R20
l --> R22
s --> R10
F9BD 940EFC3E CALL push_gset3
F9BF 2F62 MOV R22,R18
F9C0 0158 MOVW R10,R16
(0226) }
(0227)
(0228) void send232(unsigned char *s,unsigned char l)
(0229) {
(0230) unsigned char i;
(0231) for(i=0;i<l;i++)
F9C1 2744 CLR R20
F9C2 C007 RJMP 0xF9CA
(0232) Send_ByteUART1(*(s+i));
F9C3 2FE4 MOV R30,R20
F9C4 27FF CLR R31
F9C5 0DEA ADD R30,R10
F9C6 1DFB ADC R31,R11
F9C7 8100 LDD R16,Z+0
F9C8 DFED RCALL _Send_ByteUART1
F9C9 9543 INC R20
F9CA 1746 CP R20,R22
F9CB F3B8 BCS 0xF9C3
F9CC 940EFC36 CALL pop_gset3
F9CE 9508 RET
_sendok:
i --> R20
F9CF 940EFC42 CALL push_gset1
(0233) }
(0234) void sendok(void)
(0235) {
(0236) unsigned char i=0;
F9D1 2744 CLR R20
(0237) Senddata[0]='!';
F9D2 E281 LDI R24,0x21
F9D3 93800116 STS Senddata,R24
(0238) Senddata[5]=1;
F9D5 E081 LDI R24,1
F9D6 9380011B STS 0x11B,R24
(0239) Senddata[6]=0xd;
F9D8 E08D LDI R24,0xD
F9D9 9380011C STS 0x11C,R24
(0240) Senddata[7]=0xa;
F9DB E08A LDI R24,0xA
F9DC 9380011D STS 0x11D,R24
(0241) send232(Senddata,8);
F9DE E028 LDI R18,0x8
F9DF E106 LDI R16,0x16
F9E0 E011 LDI R17,1
F9E1 DFDB RCALL _send232
F9E2 940EFC45 CALL pop_gset1
F9E4 9508 RET
_senderror:
i --> R20
F9E5 940EFC42 CALL push_gset1
(0242) }
(0243) void senderror(void)
(0244) {
(0245) unsigned char i=0;
F9E7 2744 CLR R20
(0246) Senddata[0]='!';
F9E8 E281 LDI R24,0x21
F9E9 93800116 STS Senddata,R24
(0247) Senddata[5]=0;
F9EB 2422 CLR R2
F9EC 9220011B STS 0x11B,R2
(0248) Senddata[6]=0xd;
F9EE E08D LDI R24,0xD
F9EF 9380011C STS 0x11C,R24
(0249) Senddata[7]=0xa;
F9F1 E08A LDI R24,0xA
F9F2 9380011D STS 0x11D,R24
(0250) send232(Senddata,8);
F9F4 E028 LDI R18,0x8
F9F5 E106 LDI R16,0x16
F9F6 E011 LDI R17,1
F9F7 DFC5 RCALL _send232
F9F8 940EFC45 CALL pop_gset1
F9FA 9508 RET
_uart0_rx:
jym --> R12
flag --> R20
jym1 --> R10
i --> R22
F9FB 940EFC3C CALL push_gset4
(0251) }
(0252) void uart0_rx(void)
(0253) {
(0254) char flag,jym,jym1;
(0255) int i;
(0256) flag=0;
F9FD 2744 CLR R20
(0257) do{
(0258)
(0259) if(data[0]!='!')data[0]=RecChar();
F9FE 91800134 LDS R24,data
FA00 3281 CPI R24,0x21
FA01 F021 BEQ 0xFA06
FA02 DF8D RCALL _RecChar
FA03 93000134 STS data,R16
FA05 C059 RJMP 0xFA5F
(0260) else
(0261) {
(0262) Senddata[1]=RecChar();
FA06 DF89 RCALL _RecChar
FA07 93000117 STS Senddata+1,R16
(0263) Senddata[2]=RecChar();
FA09 DF86 RCALL _RecChar
FA0A 93000118 STS Senddata+2,R16
(0264) Senddata[3]=RecChar();
FA0C DF83 RCALL _RecChar
FA0D 93000119 STS Senddata+3,R16
(0265) Senddata[4]=RecChar();
FA0F DF80 RCALL _RecChar
FA10 9300011A STS 0x11A,R16
(0266)
(0267) for(i=0;i<256;i++)
FA12 2766 CLR R22
FA13 2777 CLR R23
(0268) data[i]=RecChar();
FA14 DF7B RCALL _RecChar
FA15 E384 LDI R24,0x34
FA16 E091 LDI R25,1
FA17 01FB MOVW R30,R22
FA18 0FE8 ADD R30,R24
FA19 1FF9 ADC R31,R25
FA1A 8300 STD Z+0,R16
FA1B 5F6F SUBI R22,0xFF
FA1C 4F7F SBCI R23,0xFF
FA1D 3060 CPI R22,0
FA1E E0E1 LDI R30,1
FA1F 077E CPC R23,R30
FA20 F39C BLT 0xFA14
(0269) jym=RecChar();
FA21 DF6E RCALL _RecChar
FA22 2EC0 MOV R12,R16
(0270) jym1=0;
FA23 24AA CLR R10
(0271) for(i=0;i<256;i++)jym1=jym1^data[i];
FA24 2766 CLR R22
FA25 2777 CLR R23
FA26 E384 LDI R24,0x34
FA27 E091 LDI R25,1
FA28 01FB MOVW R30,R22
FA29 0FE8 ADD R30,R24
FA2A 1FF9 ADC R31,R25
FA2B 8020 LDD R2,Z+0
FA2C 24A2 EOR R10,R2
FA2D 5F6F SUBI R22,0xFF
FA2E 4F7F SBCI R23,0xFF
FA2F 3060 CPI R22,0
FA30 E0E1 LDI R30,1
FA31 077E CPC R23,R30
FA32 F39C BLT 0xFA26
(0272) if(jym!=jym1)
FA33 14CA CP R12,R10
FA34 F011 BEQ 0xFA37
(0273) senderror();
FA35 DFAF RCALL _senderror
FA36 C028 RJMP 0xFA5F
(0274) else if((lengthbak1==Senddata[3])&&(lengthbak2==Senddata[4]))sendok();
FA37 90200119 LDS R2,Senddata+3
FA39 9030010D LDS R3,lengthbak1
FA3B 1432 CP R3,R2
FA3C F441 BNE 0xFA45
FA3D 9020011A LDS R2,0x11A
FA3F 9030010C LDS R3,lengthbak2
FA41 1432 CP R3,R2
FA42 F411 BNE 0xFA45
FA43 DF8B RCALL _sendok
FA44 C01A RJMP 0xFA5F
(0275) else if((Senddata[1]==Senddata[3])&&(Senddata[2]==Senddata[4]))
FA45 90200119 LDS R2,Senddata+3
FA47 90300117 LDS R3,Senddata+1
FA49 1432 CP R3,R2
FA4A F459 BNE 0xFA56
FA4B 9020011A LDS R2,0x11A
FA4D 90300118 LDS R3,Senddata+2
FA4F 1432 CP R3,R2
FA50 F429 BNE 0xFA56
(0276) {
(0277) ROK_flag=1;
FA51 E081 LDI R24,1
FA52 93800105 STS ROK_flag,R24
(0278) flag=1;
FA54 E041 LDI R20,1
(0279) }
FA55 C009 RJMP 0xFA5F
(0280) else {lengthbak1=Senddata[3];lengthbak2=Senddata[4];flag=1;}
FA56 90200119 LDS R2,Senddata+3
FA58 9220010D STS lengthbak1,R2
FA5A 9020011A LDS R2,0x11A
FA5C 9220010C STS lengthbak2,R2
FA5E E041 LDI R20,1
(0281) }
(0282) // else senderror();
(0283) }while(flag==0);
FA5F 2344 TST R20
FA60 F409 BNE 0xFA62
FA61 CF9C RJMP 0xF9FE
FA62 940EFC38 CALL pop_gset4
FA64 9508 RET
_main:
byte_num --> R10
page_num --> R12
BootFlag --> Y+2
i --> R10
FA65 9723 SBIW R28,3
(0284) }
(0285) //主程序
(0286) void main(void)
(0287) {
(0288) unsigned char BootFlag,i;
(0289) int page_num,byte_num;
(0290) Init_mag128();
FA66 DE73 RCALL _Init_mag128
(0291) uart1_init();
FA67 DF17 RCALL _uart1_init
(0292) //PORTD&=~(1<<7);//GSM关机
(0293) PORTD|=(1<<7);
FA68 9A97 SBI 0x12,7
(0294) Init_SPI();
FA69 DE89 RCALL _Init_SPI
(0295) df_reset();
FA6A DEAB RCALL _df_reset
(0296)
(0297) delay_ms(1000);
FA6B EE08 LDI R16,0xE8
FA6C E013 LDI R17,3
FA6D DE8A RCALL _delay_ms
(0298) EEPROM_READ(0x7ff,BootFlag);
FA6E E081 LDI R24,1
FA6F E090 LDI R25,0
FA70 8399 STD Y+1,R25
FA71 8388 STD Y+0,R24
FA72 019E MOVW R18,R28
FA73 5F2E SUBI R18,0xFE
FA74 4F3F SBCI R19,0xFF
FA75 EF0F LDI R16,0xFF
FA76 E017 LDI R17,7
FA77 940EFC99 CALL _EEPROMReadBytes
(0299) delay_ms(2);
FA79 E002 LDI R16,2
FA7A E010 LDI R17,0
FA7B DE7C RCALL _delay_ms
(0300) if(BootFlag==0)quit();
FA7C 802A LDD R2,Y+2
FA7D 2022 TST R2
FA7E F411 BNE 0xFA81
FA7F DE52 RCALL _quit
FA80 C175 RJMP 0xFBF6
(0301) else if(BootFlag!=1)
FA81 818A LDD R24,Y+2
FA82 3081 CPI R24,1
FA83 F409 BNE 0xFA85
FA84 C055 RJMP 0xFADA
(0302) {
(0303) for(i=0;i<12;i++)
FA85 24AA CLR R10
FA86 C009 RJMP 0xFA90
(0304) data[i]=RecChar();
FA87 DF08 RCALL _RecChar
FA88 E384 LDI R24,0x34
FA89 E091 LDI R25,1
FA8A 2DEA MOV R30,R10
FA8B 27FF CLR R31
FA8C 0FE8 ADD R30,R24
FA8D 1FF9 ADC R31,R25
FA8E 8300 STD Z+0,R16
FA8F 94A3 INC R10
FA90 2D8A MOV R24,R10
FA91 308C CPI R24,0xC
FA92 F3A0 BCS 0xFA87
(0305) if((data[0]=='B')&&(data[1]=='o'))
FA93 91800134 LDS R24,data
FA95 3482 CPI R24,0x42
FA96 F009 BEQ 0xFA98
FA97 C040 RJMP 0xFAD8
FA98 91800135 LDS R24,data+1
FA9A 368F CPI R24,0x6F
FA9B F009 BEQ 0xFA9D
FA9C C03B RJMP 0xFAD8
(0306) {
(0307) delay_ms(200);
FA9D EC08 LDI R16,0xC8
FA9E E010 LDI R17,0
FA9F DE58 RCALL _delay_ms
(0308) sendok();
FAA0 DF2E RCALL _sendok
(0309) do{
(0310) uart0_rx();
FAA1 DF59 RCALL _uart0_rx
(0311) write_one_page(); //收到256字节写入一页Flash中
FAA2 DDF4 RCALL _write_one_page
(0312) address += SPM_PAGESIZE; //Flash页加1
FAA3 E040 LDI R20,0
FAA4 E051 LDI R21,1
FAA5 E060 LDI R22,0
FAA6 E070 LDI R23,0
FAA7 90400102 LDS R4,address+2
FAA9 90500103 LDS R5,address+3
FAAB 90200100 LDS R2,address
FAAD 90300101 LDS R3,address+1
FAAF 0E24 ADD R2,R20
FAB0 1E35 ADC R3,R21
FAB1 1E46 ADC R4,R22
FAB2 1E57 ADC R5,R23
FAB3 92300101 STS address+1,R3
FAB5 92200100 STS address,R2
FAB7 92500103 STS address+3,R5
FAB9 92400102 STS address+2,R4
(0313) sendok();
FABB DF13 RCALL _sendok
(0314) delay_ms(1);
FABC E001 LDI R16,1
FABD E010 LDI R17,0
FABE DE39 RCALL _delay_ms
(0315) }while(ROK_flag==0);
FABF 90200105 LDS R2,ROK_flag
FAC1 2022 TST R2
FAC2 F2F1 BEQ 0xFAA1
(0316) delay_ms(20);
FAC3 E104 LDI R16,0x14
FAC4 E010 LDI R17,0
FAC5 DE32 RCALL _delay_ms
(0317) BootFlag=0;
FAC6 2422 CLR R2
FAC7 822A STD Y+2,R2
(0318) EEPROM_WRITE(0x7ff,BootFlag);
FAC8 E081 LDI R24,1
FAC9 E090 LDI R25,0
FACA 8399 STD Y+1,R25
FACB 8388 STD Y+0,R24
FACC 019E MOVW R18,R28
FACD 5F2E SUBI R18,0xFE
FACE 4F3F SBCI R19,0xFF
FACF EF0F LDI R16,0xFF
FAD0 E017 LDI R17,7
FAD1 940EFCBA CALL _EEPROMWriteBytes
(0319) delay_ms(2000);
FAD3 ED00 LDI R16,0xD0
FAD4 E017 LDI R17,7
FAD5 DE22 RCALL _delay_ms
(0320) quit();
FAD6 DDFB RCALL _quit
(0321) }
FAD7 C11E RJMP 0xFBF6
(0322) else quit();
FAD8 DDF9 RCALL _quit
(0323) }
FAD9 C11C RJMP 0xFBF6
(0324) else
(0325) {
(0326) page_counter_rd=3849;//128k;
FADA E089 LDI R24,0x9
FADB E09F LDI R25,0xF
FADC 93900111 STS page_counter_rd+1,R25
FADE 93800110 STS page_counter_rd,R24
(0327) page_offset_rd=0;
FAE0 2422 CLR R2
FAE1 2433 CLR R3
FAE2 9230010F STS page_offset_rd+1,R3
FAE4 9220010E STS page_offset_rd,R2
(0328) delay_ms(2);
FAE6 E002 LDI R16,2
FAE7 E010 LDI R17,0
FAE8 DE0F RCALL _delay_ms
(0329) Read_Testfile(data ,4 );
FAE9 E024 LDI R18,4
FAEA E030 LDI R19,0
FAEB E304 LDI R16,0x34
FAEC E011 LDI R17,1
FAED DE33 RCALL _Read_Testfile
(0330) delay_ms(2);
FAEE E002 LDI R16,2
FAEF E010 LDI R17,0
FAF0 DE07 RCALL _delay_ms
(0331) Filelength=0;
FAF1 E040 LDI R20,0
FAF2 E050 LDI R21,0
FAF3 E060 LDI R22,0
FAF4 E070 LDI R23,0
FAF5 93500113 STS Filelength+1,R21
FAF7 93400112 STS Filelength,R20
FAF9 93700115 STS Filelength+3,R23
FAFB 93600114 STS Filelength+2,R22
(0332) Filelength=data[2];
FAFD 90200136 LDS R2,data+2
FAFF 2433 CLR R3
FB00 2444 CLR R4
FB01 2455 CLR R5
FB02 92300113 STS Filelength+1,R3
FB04 92200112 STS Filelength,R2
FB06 92500115 STS Filelength+3,R5
FB08 92400114 STS Filelength+2,R4
(0333) Filelength=Filelength*0x100+data[3];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -