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

📄 main.lis

📁 AVR的BOOT原代码 AVR的BOOT原代码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01D4                   .dbline 0 ; func end
 01D4 0895              ret
 01D6                   .dbend
 01D6                   .dbfunc e SendChar _SendChar fV
 01D6           ;              c -> R16
                        .even
 01D6           _SendChar::
 01D6                   .dbline -1
 01D6                   .dbline 256
 01D6           ; #endif 
 01D6           ;   }           
 01D6           ; /*****************************************************************************/
 01D6           ; void SendChar(unsigned char c)
 01D6           ;   {
 01D6           L54:
 01D6                   .dbline 262
 01D6           L55:
 01D6                   .dbline 262
 01D6           ; #if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)      
 01D6           ;     while (!(UCSRA&(1<<UDRE)));
 01D6           ;     UDR=c;
 01D6           ; #endif
 01D6           ; #if (ChipType == Atmega64)||(ChipType == Atmega128)
 01D6           ;     while (!(UCSR1A&(1<<UDRE1)));
 01D6 20909B00          lds R2,155
 01DA 25FE              sbrs R2,5
 01DC FCCF              rjmp L54
 01DE                   .dbline 263
 01DE           ;     UDR1=c;
 01DE 00939C00          sts 156,R16
 01E2                   .dbline -2
 01E2                   .dbline 265
 01E2           ; #endif        
 01E2           ;   }
 01E2           L53:
 01E2                   .dbline 0 ; func end
 01E2 0895              ret
 01E4                   .dbsym r c 16 c
 01E4                   .dbend
 01E4                   .dbfunc e delay _delay fV
 01E4           ;              i -> R16,R17
                        .even
 01E4           _delay::
 01E4                   .dbline -1
 01E4                   .dbline 267
 01E4           ; void delay(void)  
 01E4           ;   {
 01E4                   .dbline 269
 01E4 0027              clr R16
 01E6 1127              clr R17
 01E8 02C0              xjmp L61
 01EA           L58:
 01EA                   .dbline 269
 01EA           L59:
 01EA                   .dbline 269
 01EA 0F5F              subi R16,255  ; offset = 1
 01EC 1F4F              sbci R17,255
 01EE           L61:
 01EE                   .dbline 269
 01EE           ;     unsigned int i;
 01EE           ;     for (i=0;i<65530;i++);
 01EE 0A3F              cpi R16,250
 01F0 EFEF              ldi R30,255
 01F2 1E07              cpc R17,R30
 01F4 D0F3              brlo L58
 01F6                   .dbline -2
 01F6                   .dbline 270
 01F6           ;   }
 01F6           L57:
 01F6                   .dbline 0 ; func end
 01F6 0895              ret
 01F8                   .dbsym r i 16 i
 01F8                   .dbend
 01F8                   .dbfunc e ExecCode _ExecCode fV
                        .even
 01F8           _ExecCode::
 01F8                   .dbline -1
 01F8                   .dbline 274
 01F8           ; 
 01F8           ; /*****************************************************************************/
 01F8           ; void ExecCode(void)
 01F8           ;   {
 01F8                   .dbline 276
 01F8           ; #ifdef RAMPZ_FLAG 
 01F8           ;     RAMPZ = 0;
 01F8 2224              clr R2
 01FA 2BBE              out 0x3b,R2
 01FC                   .dbline 278
 01FC           ; #endif
 01FC           ;     INTVECREG=0x01;           //中断向量表移位允许
 01FC 81E0              ldi R24,1
 01FE 85BF              out 0x35,R24
 0200                   .dbline 279
 0200           ;     INTVECREG=0x00;           //中断向量指向应用程序区
 0200 25BE              out 0x35,R2
 0202                   .dbline 280
 0202           ;     asm("jmp 0x0000");              
 0202 0C940000          jmp 0x0000
 0206                   .dbline -2
 0206                   .dbline 281
 0206           ;   }
 0206           L62:
 0206                   .dbline 0 ; func end
 0206 0895              ret
 0208                   .dbend
 0208                   .dbfunc e main _main fV
 0208           ;       BootFlag -> R20
                        .even
 0208           _main::
 0208                   .dbline -1
 0208                   .dbline 284
 0208           ;               
 0208           ; void main(void)
 0208           ;   {
 0208                   .dbline 288
 0208           ;     unsigned char BootFlag;
 0208           ;     
 0208           ; #ifdef InteClk                //如果使用内部时钟,读取时钟校准值
 0208           ;        OSCCAL=read_flash(OscAddress);
 0208 0FEF              ldi R16,8191
 020A 1FE1              ldi R17,31
 020C 0E940000          xcall _read_flash
 0210 00936F00          sts 111,R16
 0214                   .dbline 300
 0214           ; #endif
 0214           ; 
 0214           ; #if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)    
 0214           ;     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
 0214           ;     UCSRB = (1<<RXEN)|(1<<TXEN);       //允许串口发送和接收
 0214           ;     UBRR = BAU;
 0214           ; #endif        
 0214           ; 
 0214           ; #if (ChipType == Atmega64)||(ChipType == Atmega128)
 0214           ; //------------------使用串口1为Boot口-----------------    
 0214           ;     //UCSR1C=(1<<URSEL1)|(1<<UCSZ11)|(1<<UCSZ10); //8位数据+1位停止
 0214           ;       UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);//|(1<<USBS1);
 0214 86E0              ldi R24,6
 0216 80939D00          sts 157,R24
 021A                   .dbline 301
 021A           ;     UCSR1B = (1<<RXEN1)|(1<<TXEN1);       //允许串口发送和接收
 021A 88E1              ldi R24,24
 021C 80939A00          sts 154,R24
 0220                   .dbline 302
 0220           ;       UBRR1L=((fosc/16/baud1)-1)%256;
 0220 8CE0              ldi R24,12
 0222 80939900          sts 153,R24
 0226                   .dbline 303
 0226           ;     UBRR1H=((fosc/16/baud1)-1)/256;
 0226 2224              clr R2
 0228 20929800          sts 152,R2
 022C                   .dbline 305
 022C           ; #endif   
 022C           ;     SendChar('>');              //通知PC机,BOOT下载准备就绪
 022C 0EE3              ldi R16,62
 022E D3DF              xcall _SendChar
 0230                   .dbline 306
 0230           ;     delay();                    //延时等待PC机响应
 0230 D9DF              xcall _delay
 0232                   .dbline 307
 0232           ;       delay();
 0232 D8DF              xcall _delay
 0234                   .dbline 308
 0234           ;       delay();
 0234 D7DF              xcall _delay
 0236                   .dbline 309
 0236           ;       delay();
 0236 D6DF              xcall _delay
 0238                   .dbline 310
 0238           ;       delay();
 0238 D5DF              xcall _delay
 023A                   .dbline 311
 023A           ;       delay();
 023A D4DF              xcall _delay
 023C                   .dbline 312
 023C           ;       delay();
 023C D3DF              xcall _delay
 023E                   .dbline 313
 023E           ;       delay();
 023E D2DF              xcall _delay
 0240                   .dbline 314
 0240           ;     BootFlag=UDR1;
 0240 40919C00          lds R20,156
 0244                   .dbline 315
 0244           ;     if (BootFlag == '<') 
 0244 4C33              cpi R20,60
 0246 31F5              brne L64
 0248                   .dbline 316
 0248           ;       {
 0248                   .dbline 317
 0248           ;          SendChar(ChipType);
 0248 04E3              ldi R16,52
 024A C5DF              xcall _SendChar
 024C           L66:
 024C                   .dbline 318
 024C           L67:
 024C                   .dbline 318
 024C           ;          while (RecChar()!='N');
 024C BDDF              xcall _RecChar
 024E 0E34              cpi R16,78
 0250 E9F7              brne L66
 0252                   .dbline 319
 0252           ;          SendChar(BootSize);
 0252 04E6              ldi R16,100
 0254 C0DF              xcall _SendChar
 0256           L69:
 0256                   .dbline 320
 0256           L70:
 0256                   .dbline 320
 0256           ;          while (RecChar()!='N');       
 0256 B8DF              xcall _RecChar
 0258 0E34              cpi R16,78
 025A E9F7              brne L69
 025C                   .dbline 321
 025C           ;          SendChar(BootVer);
 025C 06E6              ldi R16,102
 025E BBDF              xcall _SendChar
 0260 18C0              xjmp L73
 0262           L72:
 0262                   .dbline 323
 0262           ;        while (1)
 0262           ;          {
 0262                   .dbline 324
 0262           ;            switch (RecChar())
 0262 B2DF              xcall _RecChar
 0264 402F              mov R20,R16
 0266 5527              clr R21
 0268 4534              cpi R20,69
 026A E0E0              ldi R30,0
 026C 5E07              cpc R21,R30
 026E 59F0              breq L79
 0270 4534              cpi R20,69
 0272 E0E0              ldi R30,0
 0274 5E07              cpc R21,R30
 0276 6CF0              brlt L76
 0278           L83:
 0278 4735              cpi R20,87
 027A E0E0              ldi R30,0
 027C 5E07              cpc R21,R30
 027E 09F0              breq L78
 0280 08C0              xjmp L76
 0282           X3:
 0282                   .dbline 325
 0282           ;              {
 0282           L78:
 0282                   .dbline 326
 0282           ;                case 'W': FlashLoad(); break;
 0282 BEDE              xcall _FlashLoad
 0284                   .dbline 326
 0284 06C0              xjmp L76
 0286           L79:
 0286                   .dbline 327
 0286           ;                case 'E': { 
 0286                   .dbline 328
 0286           ;                            SendChar('E');  //通知PC机,进入运用程序区
 0286 05E4              ldi R16,69
 0288 A6DF              xcall _SendChar
 028A           L80:
 028A                   .dbline 329
 028A           L81:
 028A                   .dbline 329
 028A           ;                                        while (RecChar()!='N');
 028A 9EDF              xcall _RecChar
 028C 0E34              cpi R16,78
 028E E9F7              brne L80
 0290                   .dbline 330
 0290           ;                            ExecCode();  
 0290 B3DF              xcall _ExecCode
 0292                   .dbline 331
 0292           ;                          } break;
 0292                   .dbline 331
 0292                   .dbline 332
 0292           ;                default : break;
 0292           L76:
 0292                   .dbline 334
 0292           L73:
 0292                   .dbline 322
 0292 E7CF              xjmp L72
 0294           X4:
 0294                   .dbline 335
 0294           ;              }
 0294           ;          }
 0294           ;       }
 0294           L64:
 0294                   .dbline 336
 0294           ;     SendChar('E');  //通知PC机,进入运用程序区
 0294 05E4              ldi R16,69
 0296 9FDF              xcall _SendChar
 0298                   .dbline 338
 0298           ;       //while (RecChar()!='N');
 0298           ;     delay();
 0298 A5DF              xcall _delay
 029A                   .dbline 339
 029A           ;       delay();
 029A A4DF              xcall _delay
 029C                   .dbline 340
 029C           ;       delay();
 029C A3DF              xcall _delay
 029E                   .dbline 341
 029E           ;       delay();
 029E A2DF              xcall _delay
 02A0                   .dbline 342
 02A0           ;     ExecCode();
 02A0                   .dbline -2
 02A0                   .dbline 343
 02A0           ;   }
 02A0           L63:
 02A0                   .dbline 0 ; func end
 02A0 ABCF              xjmp _ExecCode
 02A2                   .dbsym r BootFlag 20 c
 02A2                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\icc\peterf\BootLoad\main.c
 0000           _PageAddress::
 0000                   .blkb 2
 0002                   .dbsym e PageAddress _PageAddress i
 0002           _RealPageAddress::
 0002                   .blkb 2
 0004                   .dbsym e RealPageAddress _RealPageAddress i
 0004           _PageBuffer::
 0004                   .blkb 256
 0104                   .dbsym e PageBuffer _PageBuffer A[256:256]c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -