📄 newmain.s
字号:
inc R20
L66:
.dbline 231
cp R20,R22
brlo L63
.dbline -2
L62:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r l 22 c
.dbsym r s 10 pc
.dbend
.dbfunc e sendok _sendok fV
; i -> R20
.even
_sendok::
xcall push_gset1
.dbline -1
.dbline 235
; Send_ByteUART1(*(s+i));
; }
; void sendok(void)
; {
.dbline 236
; unsigned char i=0;
clr R20
.dbline 237
; Senddata[0]='!';
ldi R24,33
sts _Senddata,R24
.dbline 238
; Senddata[5]=1;
ldi R24,1
sts _Senddata+5,R24
.dbline 239
; Senddata[6]=0xd;
ldi R24,13
sts _Senddata+6,R24
.dbline 240
; Senddata[7]=0xa;
ldi R24,10
sts _Senddata+7,R24
.dbline 241
; send232(Senddata,8);
ldi R18,8
ldi R16,<_Senddata
ldi R17,>_Senddata
xcall _send232
.dbline -2
L67:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e senderror _senderror fV
; i -> R20
.even
_senderror::
xcall push_gset1
.dbline -1
.dbline 244
; }
; void senderror(void)
; {
.dbline 245
; unsigned char i=0;
clr R20
.dbline 246
; Senddata[0]='!';
ldi R24,33
sts _Senddata,R24
.dbline 247
; Senddata[5]=0;
clr R2
sts _Senddata+5,R2
.dbline 248
; Senddata[6]=0xd;
ldi R24,13
sts _Senddata+6,R24
.dbline 249
; Senddata[7]=0xa;
ldi R24,10
sts _Senddata+7,R24
.dbline 250
; send232(Senddata,8);
ldi R18,8
ldi R16,<_Senddata
ldi R17,>_Senddata
xcall _send232
.dbline -2
L71:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e uart0_rx _uart0_rx fV
; jym -> R12
; flag -> R20
; jym1 -> R10
; i -> R22,R23
.even
_uart0_rx::
xcall push_gset4
.dbline -1
.dbline 253
; }
; void uart0_rx(void)
; {
.dbline 256
; char flag,jym,jym1;
; int i;
; flag=0;
clr R20
L76:
.dbline 257
; do{
.dbline 259
;
; if(data[0]!='!')data[0]=RecChar();
lds R24,_data
cpi R24,33
breq L79
.dbline 259
xcall _RecChar
sts _data,R16
xjmp L80
L79:
.dbline 261
; else
; {
.dbline 262
; Senddata[1]=RecChar();
xcall _RecChar
sts _Senddata+1,R16
.dbline 263
; Senddata[2]=RecChar();
xcall _RecChar
sts _Senddata+2,R16
.dbline 264
; Senddata[3]=RecChar();
xcall _RecChar
sts _Senddata+3,R16
.dbline 265
; Senddata[4]=RecChar();
xcall _RecChar
sts _Senddata+4,R16
.dbline 267
;
; for(i=0;i<256;i++)
clr R22
clr R23
L85:
.dbline 268
xcall _RecChar
ldi R24,<_data
ldi R25,>_data
movw R30,R22
add R30,R24
adc R31,R25
std z+0,R16
L86:
.dbline 267
subi R22,255 ; offset = 1
sbci R23,255
.dbline 267
cpi R22,0
ldi R30,1
cpc R23,R30
brlt L85
.dbline 269
; data[i]=RecChar();
; jym=RecChar();
xcall _RecChar
mov R12,R16
.dbline 270
; jym1=0;
clr R10
.dbline 271
clr R22
clr R23
L89:
.dbline 271
ldi R24,<_data
ldi R25,>_data
movw R30,R22
add R30,R24
adc R31,R25
ldd R2,z+0
eor R10,R2
L90:
.dbline 271
; for(i=0;i<256;i++)jym1=jym1^data[i];
subi R22,255 ; offset = 1
sbci R23,255
.dbline 271
cpi R22,0
ldi R30,1
cpc R23,R30
brlt L89
.dbline 272
; if(jym!=jym1)
cp R12,R10
breq L93
.dbline 273
; senderror();
xcall _senderror
xjmp L94
L93:
.dbline 274
; else if((lengthbak1==Senddata[3])&&(lengthbak2==Senddata[4]))sendok();
lds R2,_Senddata+3
lds R3,_lengthbak1
cp R3,R2
brne L95
lds R2,_Senddata+4
lds R3,_lengthbak2
cp R3,R2
brne L95
.dbline 274
xcall _sendok
xjmp L96
L95:
.dbline 275
; else if((Senddata[1]==Senddata[3])&&(Senddata[2]==Senddata[4]))
lds R2,_Senddata+3
lds R3,_Senddata+1
cp R3,R2
brne L99
lds R2,_Senddata+4
lds R3,_Senddata+2
cp R3,R2
brne L99
.dbline 276
; {
.dbline 277
; ROK_flag=1;
ldi R24,1
sts _ROK_flag,R24
.dbline 278
; flag=1;
ldi R20,1
.dbline 279
; }
xjmp L100
L99:
.dbline 280
; else {lengthbak1=Senddata[3];lengthbak2=Senddata[4];flag=1;}
.dbline 280
lds R2,_Senddata+3
sts _lengthbak1,R2
.dbline 280
lds R2,_Senddata+4
sts _lengthbak2,R2
.dbline 280
ldi R20,1
.dbline 280
L100:
L96:
L94:
.dbline 281
; }
L80:
.dbline 283
L77:
.dbline 283
; // else senderror();
; }while(flag==0);
tst R20
brne X4
xjmp L76
X4:
.dbline -2
L75:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r jym 12 c
.dbsym r flag 20 c
.dbsym r jym1 10 c
.dbsym r i 22 I
.dbend
.dbfunc e main _main fV
; byte_num -> R10,R11
; page_num -> R12,R13
; BootFlag -> y+2
; i -> R10
.even
_main::
sbiw R28,3
.dbline -1
.dbline 287
; }
; //主程序
; void main(void)
; {
.dbline 290
; unsigned char BootFlag,i;
; int page_num,byte_num;
; Init_mag128();
xcall _Init_mag128
.dbline 291
; uart1_init();
xcall _uart1_init
.dbline 293
; //PORTD&=~(1<<7);//GSM关机
; PORTD|=(1<<7);
sbi 0x12,7
.dbline 294
; Init_SPI();
xcall _Init_SPI
.dbline 295
; df_reset();
xcall _df_reset
.dbline 297
;
; delay_ms(1000);
ldi R16,1000
ldi R17,3
xcall _delay_ms
.dbline 298
; EEPROM_READ(0x7ff,BootFlag);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,2047
ldi R17,7
xcall _EEPROMReadBytes
.dbline 299
; delay_ms(2);
ldi R16,2
ldi R17,0
xcall _delay_ms
.dbline 300
; if(BootFlag==0)quit();
ldd R2,y+2
tst R2
brne L108
.dbline 300
xcall _quit
xjmp L109
L108:
.dbline 301
; else if(BootFlag!=1)
ldd R24,y+2
cpi R24,1
brne X5
xjmp L110
X5:
.dbline 302
; {
.dbline 303
; for(i=0;i<12;i++)
clr R10
xjmp L115
L112:
.dbline 304
xcall _RecChar
ldi R24,<_data
ldi R25,>_data
mov R30,R10
clr R31
add R30,R24
adc R31,R25
std z+0,R16
L113:
.dbline 303
inc R10
L115:
.dbline 303
mov R24,R10
cpi R24,12
brlo L112
.dbline 305
; data[i]=RecChar();
; if((data[0]=='B')&&(data[1]=='o'))
lds R24,_data
cpi R24,66
breq X6
xjmp L116
X6:
lds R24,_data+1
cpi R24,111
breq X7
xjmp L116
X7:
.dbline 306
; {
.dbline 307
; delay_ms(200);
ldi R16,200
ldi R17,0
xcall _delay_ms
.dbline 308
; sendok();
xcall _sendok
L119:
.dbline 309
; do{
.dbline 310
; uart0_rx();
xcall _uart0_rx
.dbline 311
; write_one_page(); //收到256字节写入一页Flash中
xcall _write_one_page
.dbline 312
; address += SPM_PAGESIZE; //Flash页加1
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
lds R4,_address+2
lds R5,_address+2+1
lds R2,_address
lds R3,_address+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _address+1,R3
sts _address,R2
sts _address+2+1,R5
sts _address+2,R4
.dbline 313
; sendok();
xcall _sendok
.dbline 314
; delay_ms(1);
ldi R16,1
ldi R17,0
xcall _delay_ms
.dbline 315
L120:
.dbline 315
; }while(ROK_flag==0);
lds R2,_ROK_flag
tst R2
breq L119
.dbline 316
; delay_ms(20);
ldi R16,20
ldi R17,0
xcall _delay_ms
.dbline 317
; BootFlag=0;
clr R2
std y+2,R2
.dbline 318
; EEPROM_WRITE(0x7ff,BootFlag);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,2047
ldi R17,7
xcall _EEPROMWriteBytes
.dbline 319
; delay_ms(2000);
ldi R16,2000
ldi R17,7
xcall _delay_ms
.dbline 320
; quit();
xcall _quit
.dbline 321
; }
xjmp L111
L116:
.dbline 322
; else quit();
xcall _quit
.dbline 323
; }
xjmp L111
L110:
.dbline 325
; else
; {
.dbline 326
; page_counter_rd=3849;//128k;
ldi R24,3849
ldi R25,15
sts _page_counter_rd+1,R25
sts _page_counter_rd,R24
.dbline 327
; page_offset_rd=0;
clr R2
clr R3
sts _page_offset_rd+1,R3
sts _page_offset_rd,R2
.dbline 328
; delay_ms(2);
ldi R16,2
ldi R17,0
xcall _delay_ms
.dbline 329
; Read_Testfile(data ,4 );
ldi R18,4
ldi R19,0
ldi R16,<_data
ldi R17,>_data
xcall _Read_Testfile
.dbline 330
; delay_ms(2);
ldi R16,2
ldi R17,0
xcall _delay_ms
.dbline 331
; Filelength=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _Filelength+1,R21
sts _Filelength,R20
sts _Filelength+2+1,R23
sts _Filelength+2,R22
.dbline 332
; Filelength=data[2];
lds R2,_data+2
clr R3
clr R4
clr R5
sts _Filelength+1,R3
sts _Filelength,R2
sts _Filelength+2+1,R5
sts _Filelength+2,R4
.dbline 333
; Filelength=Filelength*0x100+data[3];
lds R4,_Filelength+2
lds R5,_Filelength+2+1
lds R2,_Filelength
lds R3,_Filelength+1
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R2,R16
movw R4,R18
lds R6,_data+3
clr R7
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
sts _Filelength+1,R3
sts _Filelength,R2
sts _Filelength+2+1,R5
sts _Filelength+2,R4
.dbline 334
; delay_ms(1000);
ldi R16,1000
ldi R17,3
xcall _delay_ms
.dbline 335
; address=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _address+1,R21
sts _address,R20
sts _address+2+1,R23
sts _address+2,R22
xjmp L125
L124:
.dbline 337
.dbline 338
ldi R16,2
ldi R17,0
xcall _delay_ms
.dbline 339
lds R12,_page_counter_rd
lds R13,_page_counter_rd+1
.dbline 340
lds R10,_page_offset_rd
lds R11,_page_offset_rd+1
.dbline 341
ldi R24,256
ldi R25,1
std y+1,R25
std y+0,R24
ldi R18,255
ldi R19,0
ldi R16,<_data
ldi R17,>_data
xcall _memset
.dbline 342
ldi R18,256
ldi R19,1
ldi R16,<_data
ldi R17,>_data
xcall _Read_Testfile
.dbline 344
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 346
xcall _write_one_page
.dbline 347
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
lds R4,_address+2
lds R5,_address+2+1
lds R2,_address
lds R3,_address+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _address+1,R3
sts _address,R2
sts _address+2+1,R5
sts _address+2,R4
.dbline 348
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
lds R4,_Filelength+2
lds R5,_Filelength+2+1
lds R2,_Filelength
lds R3,_Filelength+1
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
sts _Filelength+1,R3
sts _Filelength,R2
sts _Filelength+2+1,R5
sts _Filelength+2,R4
.dbline 349
L125:
.dbline 336
; while (Filelength>SPM_PAGESIZE)
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
lds R4,_Filelength+2
lds R5,_Filelength+2+1
lds R2,_Filelength
lds R3,_Filelength+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge X8
xjmp L124
X8:
.dbline 350
; {
; delay_ms(2);
; page_num=page_counter_rd;
; byte_num=page_offset_rd;
; memset(data,0xff,SPM_PAGESIZE);
; Read_Testfile(data ,SPM_PAGESIZE );
;
; delay_ms(10);
;
; write_one_page(); //收到256字节写入一页Flash中
; address += SPM_PAGESIZE; //Flash页加1
; Filelength=Filelength-SPM_PAGESIZE;
; }
; if(Filelength>0)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge L127
.dbline 351
; {
.dbline 352
; delay_ms(2);
ldi R16,2
ldi R17,0
xcall _delay_ms
.dbline 353
; memset(data,0xff,SPM_PAGESIZE);
ldi R24,256
ldi R25,1
std y+1,R25
std y+0,R24
ldi R18,255
ldi R19,0
ldi R16,<_data
ldi R17,>_data
xcall _memset
.dbline 354
; Read_Testfile(data ,Filelength );
lds R18,_Filelength
lds R19,_Filelength+1
ldi R16,<_data
ldi R17,>_data
xcall _Read_Testfile
.dbline 355
; write_one_page();
xcall _write_one_page
.dbline 356
; clr_dog();
xcall _clr_dog
.dbline 357
; BootFlag=0;
clr R2
std y+2,R2
.dbline 358
; EEPROM_WRITE(0x7ff,BootFlag);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,2047
ldi R17,7
xcall _EEPROMWriteBytes
.dbline 359
; EEPROM_WRITE(0x600,BootFlag);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,1536
ldi R17,6
xcall _EEPROMWriteBytes
.dbline 360
; quit();
xcall _quit
.dbline 361
; }
xjmp L128
L127:
.dbline 363
; else
; {
.dbline 364
; delay_ms(2);
ldi R16,2
ldi R17,0
xcall _delay_ms
.dbline 365
; BootFlag=0;
clr R2
std y+2,R2
.dbline 366
; EEPROM_WRITE(0x7ff,BootFlag);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,2047
ldi R17,7
xcall _EEPROMWriteBytes
.dbline 367
; EEPROM_WRITE(0x600,BootFlag);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,1536
ldi R17,6
xcall _EEPROMWriteBytes
.dbline 368
; quit();
xcall _quit
.dbline 369
; }
L128:
.dbline 370
; }
L111:
L109:
.dbline -2
L107:
adiw R28,3
.dbline 0 ; func end
ret
.dbsym r byte_num 10 I
.dbsym r page_num 12 I
.dbsym l BootFlag 2 c
.dbsym r i 10 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\cqt\cqt_boot\newmain.c
_Num::
.blkb 1
.dbsym e Num _Num c
_ROK_flag::
.blkb 1
.dbsym e ROK_flag _ROK_flag c
_length1::
.blkb 2
.dbsym e length1 _length1 I
_length::
.blkb 2
.dbsym e length _length I
_timenum::
.blkb 2
.dbsym e timenum _timenum I
_lengthbak2::
.blkb 1
.dbsym e lengthbak2 _lengthbak2 c
_lengthbak1::
.blkb 1
.dbsym e lengthbak1 _lengthbak1 c
_page_offset_rd::
.blkb 2
.dbsym e page_offset_rd _page_offset_rd i
_page_counter_rd::
.blkb 2
.dbsym e page_counter_rd _page_counter_rd i
_Filelength::
.blkb 4
.dbsym e Filelength _Filelength L
_Senddata::
.blkb 30
.dbsym e Senddata _Senddata A[30:30]c
_data::
.blkb 256
.dbsym e data _data A[256:256]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -