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

📄 main.lis

📁 本源码为C语言环境的ATMAGE8的BootLoader开发程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -