📄 main.lis
字号:
019E .dbline 214
019E ; GICR=0X00; //中断向量指向应用程序区
019E 2224 clr R2
01A0 2BBE out 0x3b,R2
01A2 .dbline 215
01A2 ; asm("jmp 0x0000");
01A2 0C940000 jmp 0x0000
01A6 .dbline -2
01A6 L46:
01A6 .dbline 0 ; func end
01A6 0895 ret
01A8 .dbend
01A8 .dbfunc e uart0_init _uart0_init fV
.even
01A8 _uart0_init::
01A8 .dbline -1
01A8 .dbline 221
01A8 ; }
01A8 ; //UART0 initialize
01A8 ; // desired baud rate: 9600
01A8 ; // actual: baud rate:9615 (0.2%)
01A8 ; void uart0_init(void)
01A8 ; {
01A8 .dbline 222
01A8 ; UCSRB = 0x00; //disable while setting baud rate
01A8 2224 clr R2
01AA 2AB8 out 0xa,R2
01AC .dbline 223
01AC ; UCSRA = 0x02;
01AC 82E0 ldi R24,2
01AE 8BB9 out 0xb,R24
01B0 .dbline 224
01B0 ; UCSRC = BIT(URSEL) | 0x06;
01B0 86E8 ldi R24,134
01B2 80BD out 0x20,R24
01B4 .dbline 225
01B4 ; UBRRL = 0x0C; //set baud rate lo
01B4 8CE0 ldi R24,12
01B6 89B9 out 0x9,R24
01B8 .dbline 226
01B8 ; UBRRH = 0x00; //set baud rate hi
01B8 20BC out 0x20,R2
01BA .dbline 227
01BA ; UCSRB = 0x18;
01BA 88E1 ldi R24,24
01BC 8AB9 out 0xa,R24
01BE .dbline -2
01BE L47:
01BE .dbline 0 ; func end
01BE 0895 ret
01C0 .dbend
01C0 .dbfunc e main _main fV
01C0 ; iTry -> R20
01C0 ; TempInt -> R22,R23
01C0 ; BootFlag -> R22
.even
01C0 _main::
01C0 .dbline -1
01C0 .dbline 230
01C0 ; }
01C0 ; void main(void)
01C0 ; {
01C0 .dbline 234
01C0 ; unsigned char BootFlag;
01C0 ; unsigned int TempInt;
01C0 ; char iTry;
01C0 ; CLI();
01C0 F894 cli
01C2 .dbline 241
01C2 ; #ifdef InteClk //如果使用内部时钟,读取时钟校准值
01C2 ; OSCCAL=read_flash(OscAddress);
01C2 ; #endif
01C2 ;
01C2 ; #ifdef W0
01C2 ; //pei 拷贝W0的PortInit
01C2 ; PORTB = 0x0F;//rfslp,fs123=1
01C2 8FE0 ldi R24,15
01C4 88BB out 0x18,R24
01C6 .dbline 242
01C6 ; DDRB = 0xFF;//bit1=output
01C6 8FEF ldi R24,255
01C8 87BB out 0x17,R24
01CA .dbline 243
01CA ; PORTC = 0x21;//0x20;//rfrst=1,not reset!
01CA 81E2 ldi R24,33
01CC 85BB out 0x15,R24
01CE .dbline 244
01CE ; DDRC = 0x7F;
01CE 8FE7 ldi R24,127
01D0 84BB out 0x14,R24
01D2 .dbline 245
01D2 ; PORTD = 0x0C;
01D2 8CE0 ldi R24,12
01D4 82BB out 0x12,R24
01D6 .dbline 246
01D6 ; DDRD = 0xF0;
01D6 80EF ldi R24,240
01D8 81BB out 0x11,R24
01DA .dbline 253
01DA ; #else
01DA ; #endif
01DA ;
01DA ; //UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
01DA ; //UCSRB = (1<<RXEN)|(1<<TXEN); //允许串口发送和接收
01DA ; //UBRR = BAU;
01DA ; UCSRB = 0x00; //disable while setting baud rate
01DA 2224 clr R2
01DC 2AB8 out 0xa,R2
01DE .dbline 254
01DE ; UCSRA = 0x02;
01DE 82E0 ldi R24,2
01E0 8BB9 out 0xb,R24
01E2 .dbline 255
01E2 ; UCSRC = BIT(URSEL) | 0x06;
01E2 86E8 ldi R24,134
01E4 80BD out 0x20,R24
01E6 .dbline 256
01E6 ; UBRRL = 0x0C; //set baud rate lo
01E6 8CE0 ldi R24,12
01E8 89B9 out 0x9,R24
01EA .dbline 257
01EA ; UBRRH = 0x00; //set baud rate hi
01EA 20BC out 0x20,R2
01EC .dbline 258
01EC ; UCSRB = 0x18;
01EC 88E1 ldi R24,24
01EE 8AB9 out 0xa,R24
01F0 .dbline 259
01F0 ; iTry=20;
01F0 44E1 ldi R20,20
01F2 L49:
01F2 .dbline 262
01F2 ; STARTBOOT://pei未下载程序时重复等待
01F2 ; #ifdef W0
01F2 ; PORTC=PORTC^0x03;//指示灯闪烁
01F2 83E0 ldi R24,3
01F4 25B2 in R2,0x15
01F6 2826 eor R2,R24
01F8 25BA out 0x15,R2
01FA .dbline 264
01FA ; #endif
01FA ; delay(); //延时等待PC机响应
01FA BDDF rcall _delay
01FC .dbline 265
01FC ; delay(); //延时等待PC机响应
01FC BCDF rcall _delay
01FE .dbline 266
01FE ; delay(); //延时等待PC机响应
01FE BBDF rcall _delay
0200 .dbline 267
0200 ; SendChar('>'); //通知PC机,BOOT下载准备就绪
0200 0EE3 ldi R16,62
0202 B5DF rcall _SendChar
0204 .dbline 268
0204 ; delay(); //延时等待PC机响应
0204 B8DF rcall _delay
0206 .dbline 269
0206 ; delay(); //延时等待PC机响应
0206 B7DF rcall _delay
0208 .dbline 270
0208 ; delay(); //延时等待PC机响应
0208 B6DF rcall _delay
020A .dbline 271
020A ; BootFlag=UDR;
020A 6CB1 in R22,0xc
020C .dbline 273
020C ;
020C ; if (BootFlag == '<')
020C 6C33 cpi R22,60
020E E9F4 brne L50
0210 X13:
0210 .dbline 274
0210 ; {
0210 .dbline 275
0210 ; SendChar(ChipType); //芯片版本信息
0210 00E3 ldi R16,48
0212 ADDF rcall _SendChar
0214 .dbline 276
0214 ; SendChar(BootSize);
0214 03E6 ldi R16,99
0216 ABDF rcall _SendChar
0218 .dbline 277
0218 ; SendChar(BootVer);
0218 07E6 ldi R16,103
021A A9DF rcall _SendChar
021C 15C0 rjmp L53
021E L52:
021E .dbline 279
021E ; while (1)
021E ; {
021E .dbline 280
021E ; switch (RecChar())
021E A3DF rcall _RecChar
0220 602F mov R22,R16
0222 7727 clr R23
0224 6534 cpi R22,69
0226 E0E0 ldi R30,0
0228 7E07 cpc R23,R30
022A 59F0 breq L59
022C X14:
022C 6534 cpi R22,69
022E E0E0 ldi R30,0
0230 7E07 cpc R23,R30
0232 54F0 brlt L56
0234 X15:
0234 L60:
0234 6735 cpi R22,87
0236 E0E0 ldi R30,0
0238 7E07 cpc R23,R30
023A 09F0 breq L58
023C X16:
023C 05C0 rjmp L56
023E L58:
023E .dbline 282
023E ; {
023E ; case 'W': FlashLoad();
023E E0DE rcall _FlashLoad
0240 .dbline 283
0240 ; break;
0240 03C0 rjmp L56
0242 L59:
0242 .dbline 284
0242 ; case 'E': {
0242 .dbline 285
0242 ; SendChar('E'); //通知PC机,进入运用程序区
0242 05E4 ldi R16,69
0244 94DF rcall _SendChar
0246 .dbline 286
0246 ; ExecCode();
0246 A9DF rcall _ExecCode
0248 .dbline 287
0248 ; } break;
0248 .dbline 287
0248 .dbline 288
0248 ; default : break;
0248 L56:
0248 .dbline 290
0248 ; }
0248 ; }
0248 L53:
0248 .dbline 278
0248 EACF rjmp L52
024A L50:
024A .dbline 292
024A ; }
024A ; SendChar('E');
024A 05E4 ldi R16,69
024C 90DF rcall _SendChar
024E .dbline 294
024E ;
024E ; TempInt = read_program_memory(0,0);//pei
024E 2227 clr R18
0250 0027 clr R16
0252 1127 clr R17
0254 00D0 rcall _read_program_memory
0256 B801 movw R22,R16
0258 .dbline 295
0258 ; if (TempInt==0xFFFF) goto STARTBOOT;
0258 0F3F cpi R16,255
025A EFEF ldi R30,255
025C 1E07 cpc R17,R30
025E 09F4 brne L61
0260 X17:
0260 .dbline 295
0260 C8CF rjmp L49
0262 L61:
0262 .dbline 296
0262 ; else{ iTry--;
0262 .dbline 296
0262 4A95 dec R20
0264 .dbline 297
0264 ; if (iTry>0) goto STARTBOOT;}
0264 80E0 ldi R24,0
0266 8417 cp R24,R20
0268 08F4 brsh L63
026A X18:
026A .dbline 297
026A C3CF rjmp L49
026C L63:
026C .dbline 297
026C .dbline 298
026C ; SEI();
026C 7894 sei
026E .dbline 299
026E ; ExecCode();//执行用户区程序
026E 95DF rcall _ExecCode
0270 .dbline -2
0270 L48:
0270 .dbline 0 ; func end
0270 0895 ret
0272 .dbsym r iTry 20 c
0272 .dbsym r TempInt 22 i
0272 .dbsym r BootFlag 22 c
0272 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\AVR常用函数\BootLooderMage8\BootLoad_1M\main.c
0000 _PageAddress::
0000 .blkb 2
0002 .dbsym e PageAddress _PageAddress i
0002 _PageBuffer::
0002 .blkb 64
0042 .dbsym e PageBuffer _PageBuffer A[64:64]c
0042 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -