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

📄 main.lis

📁 本源码为C语言环境的ATMAGE8的BootLoader开发程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 017A 02C0              rjmp L45
 017C           L42:
 017C                   .dbline 207
 017C           L43:
 017C                   .dbline 207
 017C 0F5F              subi R16,255  ; offset = 1
 017E 1F4F              sbci R17,255
 0180           L45:
 0180                   .dbline 207
 0180 8AEF              ldi R24,250
 0182 9FEF              ldi R25,255
 0184 A0E0              ldi R26,0
 0186 B0E0              ldi R27,0
 0188 1801              movw R2,R16
 018A 4424              clr R4
 018C 5524              clr R5
 018E 2816              cp R2,R24
 0190 3906              cpc R3,R25
 0192 4A06              cpc R4,R26
 0194 5B06              cpc R5,R27
 0196 94F3              brlt L42
 0198           X12:
 0198                   .dbline -2
 0198           L41:
 0198                   .dbline 0 ; func end
 0198 0895              ret
 019A                   .dbsym r i 16 i
 019A                   .dbend
 019A                   .dbfunc e ExecCode _ExecCode fV
                        .even
 019A           _ExecCode::
 019A                   .dbline -1
 019A                   .dbline 212
 019A           ;   }
 019A           ; 
 019A           ; /*****************************************************************************/
 019A           ; void ExecCode(void)
 019A           ;   {
 019A                   .dbline 213
 019A           ;     GICR=0X01;           //中断向量表移位允许
 019A 81E0              ldi R24,1
 019C 8BBF              out 0x3b,R24
 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 main _main fV
 01A8           ;           iTry -> R20
 01A8           ;        TempInt -> R22,R23
 01A8           ;       BootFlag -> R22
                        .even
 01A8           _main::
 01A8                   .dbline -1
 01A8                   .dbline 218
 01A8           ;   }   
 01A8           ; void main(void)
 01A8           ;   {
 01A8                   .dbline 222
 01A8           ;     unsigned char BootFlag;
 01A8           ;     unsigned int TempInt;
 01A8           ;       char iTry;
 01A8           ;       CLI();
 01A8 F894              cli
 01AA                   .dbline 229
 01AA           ;     #ifdef InteClk                //如果使用内部时钟,读取时钟校准值
 01AA           ;        OSCCAL=read_flash(OscAddress);
 01AA           ;     #endif
 01AA           ; 
 01AA           ; #ifdef W0     
 01AA           ;  //pei 拷贝W0的PortInit
 01AA           ;       PORTB = 0x0F;//rfslp,fs123=1
 01AA 8FE0              ldi R24,15
 01AC 88BB              out 0x18,R24
 01AE                   .dbline 230
 01AE           ;       DDRB  = 0xFF;//bit1=output
 01AE 8FEF              ldi R24,255
 01B0 87BB              out 0x17,R24
 01B2                   .dbline 231
 01B2           ;       PORTC = 0x21;//0x20;//rfrst=1,not reset! 
 01B2 81E2              ldi R24,33
 01B4 85BB              out 0x15,R24
 01B6                   .dbline 232
 01B6           ;       DDRC  = 0x7F;
 01B6 8FE7              ldi R24,127
 01B8 84BB              out 0x14,R24
 01BA                   .dbline 233
 01BA           ;       PORTD = 0x0C;
 01BA 8CE0              ldi R24,12
 01BC 82BB              out 0x12,R24
 01BE                   .dbline 234
 01BE           ;       DDRD  = 0xF0;
 01BE 80EF              ldi R24,240
 01C0 81BB              out 0x11,R24
 01C2                   .dbline 238
 01C2           ; #else
 01C2           ; #endif
 01C2           ;     
 01C2           ;     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
 01C2 86E8              ldi R24,134
 01C4 80BD              out 0x20,R24
 01C6                   .dbline 239
 01C6           ;     UCSRB = (1<<RXEN)|(1<<TXEN);       //允许串口发送和接收
 01C6 88E1              ldi R24,24
 01C8 8AB9              out 0xa,R24
 01CA                   .dbline 240
 01CA           ;     UBRR = BAU;
 01CA 83E3              ldi R24,51
 01CC 89B9              out 0x9,R24
 01CE                   .dbline 242
 01CE           ; 
 01CE           ;       iTry=20;
 01CE 44E1              ldi R20,20
 01D0           L48:
 01D0                   .dbline 245
 01D0           ; STARTBOOT://pei未下载程序时重复等待
 01D0           ; #ifdef W0     
 01D0           ;     PORTC=PORTC^0x03;//指示灯闪烁
 01D0 83E0              ldi R24,3
 01D2 25B2              in R2,0x15
 01D4 2826              eor R2,R24
 01D6 25BA              out 0x15,R2
 01D8                   .dbline 247
 01D8           ; #endif
 01D8           ;        delay();                    //延时等待PC机响应
 01D8 CEDF              rcall _delay
 01DA                   .dbline 248
 01DA           ;      SendChar('>');              //通知PC机,BOOT下载准备就绪
 01DA 0EE3              ldi R16,62
 01DC C8DF              rcall _SendChar
 01DE                   .dbline 249
 01DE           ;      delay();                    //延时等待PC机响应
 01DE CBDF              rcall _delay
 01E0                   .dbline 250
 01E0           ;      BootFlag=UDR;
 01E0 6CB1              in R22,0xc
 01E2                   .dbline 252
 01E2           ; 
 01E2           ;     if (BootFlag == '<') 
 01E2 6C33              cpi R22,60
 01E4 E9F4              brne L49
 01E6           X13:
 01E6                   .dbline 253
 01E6           ;       {
 01E6                   .dbline 254
 01E6           ;            SendChar(ChipType);   //芯片版本信息
 01E6 00E3              ldi R16,48
 01E8 C2DF              rcall _SendChar
 01EA                   .dbline 255
 01EA           ;          SendChar(BootSize);
 01EA 03E6              ldi R16,99
 01EC C0DF              rcall _SendChar
 01EE                   .dbline 256
 01EE           ;          SendChar(BootVer);
 01EE 07E6              ldi R16,103
 01F0 BEDF              rcall _SendChar
 01F2 15C0              rjmp L52
 01F4           L51:
 01F4                   .dbline 258
 01F4           ;          while (1)
 01F4           ;          {
 01F4                   .dbline 259
 01F4           ;            switch (RecChar())
 01F4 B8DF              rcall _RecChar
 01F6 602F              mov R22,R16
 01F8 7727              clr R23
 01FA 6534              cpi R22,69
 01FC E0E0              ldi R30,0
 01FE 7E07              cpc R23,R30
 0200 59F0              breq L58
 0202           X14:
 0202 6534              cpi R22,69
 0204 E0E0              ldi R30,0
 0206 7E07              cpc R23,R30
 0208 54F0              brlt L55
 020A           X15:
 020A           L59:
 020A 6735              cpi R22,87
 020C E0E0              ldi R30,0
 020E 7E07              cpc R23,R30
 0210 09F0              breq L57
 0212           X16:
 0212 05C0              rjmp L55
 0214           L57:
 0214                   .dbline 261
 0214           ;              {
 0214           ;                case 'W': FlashLoad();
 0214 F5DE              rcall _FlashLoad
 0216                   .dbline 262
 0216           ;                                  break;
 0216 03C0              rjmp L55
 0218           L58:
 0218                   .dbline 263
 0218           ;                case 'E': { 
 0218                   .dbline 264
 0218           ;                            SendChar('E');  //通知PC机,进入运用程序区
 0218 05E4              ldi R16,69
 021A A9DF              rcall _SendChar
 021C                   .dbline 265
 021C           ;                            ExecCode();  
 021C BEDF              rcall _ExecCode
 021E                   .dbline 266
 021E           ;                          } break;
 021E                   .dbline 266
 021E                   .dbline 267
 021E           ;                default : break;
 021E           L55:
 021E                   .dbline 269
 021E           ;              }
 021E           ;          }
 021E           L52:
 021E                   .dbline 257
 021E EACF              rjmp L51
 0220           L49:
 0220                   .dbline 271
 0220           ;       }
 0220           ;     SendChar('E');  
 0220 05E4              ldi R16,69
 0222 A5DF              rcall _SendChar
 0224                   .dbline 273
 0224           ;       
 0224           ;       TempInt = read_program_memory(0,0);//pei
 0224 2227              clr R18
 0226 0027              clr R16
 0228 1127              clr R17
 022A 00D0              rcall _read_program_memory
 022C B801              movw R22,R16
 022E                   .dbline 274
 022E           ;       if (TempInt==0xFFFF) goto STARTBOOT;
 022E 0F3F              cpi R16,255
 0230 EFEF              ldi R30,255
 0232 1E07              cpc R17,R30
 0234 09F4              brne L60
 0236           X17:
 0236                   .dbline 274
 0236 CCCF              rjmp L48
 0238           L60:
 0238                   .dbline 275
 0238           ;         else{ iTry--;
 0238                   .dbline 275
 0238 4A95              dec R20
 023A                   .dbline 276
 023A           ;               if (iTry>0) goto STARTBOOT;}
 023A 80E0              ldi R24,0
 023C 8417              cp R24,R20
 023E 08F4              brsh L62
 0240           X18:
 0240                   .dbline 276
 0240 C7CF              rjmp L48
 0242           L62:
 0242                   .dbline 276
 0242                   .dbline 277
 0242           ;       SEI();
 0242 7894              sei
 0244                   .dbline 278
 0244           ;     ExecCode();//执行用户区程序
 0244 AADF              rcall _ExecCode
 0246                   .dbline -2
 0246           L47:
 0246                   .dbline 0 ; func end
 0246 0895              ret
 0248                   .dbsym r iTry 20 c
 0248                   .dbsym r TempInt 22 i
 0248                   .dbsym r BootFlag 22 c
 0248                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\AVR常用函数\BootLooderMage8\BootLoad_8M\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 + -