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

📄 main.lis

📁 AVR16源代码 ICC编译器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module main.c
                        .area data(ram, con, rel)
 0000           _bPiont::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile E:\程序\AVR程序\BOOTLoadICC\main.c
 0002                   .dbsym e bPiont _bPiont i
 0002           _address::
 0002                   .blkb 4
                        .area idata
 0002 00000000          .word 0,0
                        .area data(ram, con, rel)
 0006                   .dbfile E:\程序\AVR程序\BOOTLoadICC\main.c
 0006                   .dbsym e address _address l
                        .area text(rom, con, rel)
 0000                   .dbfile E:\程序\AVR程序\BOOTLoadICC\main.c
 0000                   .dbfunc e boot_page_ew _boot_page_ew fV
 0000           ;           code -> y+4
 0000           ;      p_address -> y+0
                        .even
 0000           _boot_page_ew::
 0000 0E940000          xcall push_arg4
 0004                   .dbline -1
 0004                   .dbline 43
 0004           ; #include      <iom128v.h>
 0004           ; #include      "Eeprom128.h"
 0004           ; #include      "Rtc8025.h"
 0004           ; #include      "Uart.h"
 0004           ; #include      "Crc.h"
 0004           ; 
 0004           ; #define               BOOT_TEST       0
 0004           ; 
 0004           ; //============================================================
 0004           ; //无线错误下载设置错误代码定义
 0004           ; #define               ERR_CONNECT     0x10//表示握手信号接收不对;
 0004           ; #define               ERR_COMMANDCRC  0x11//表示接收命令校验错误;
 0004           ; #define               ERR_DATACRC     0x12//表示接收数据不正确,要求丛发数据;
 0004           ; #define               ERR_OVERTIME    0x13//表示接收数据超时;
 0004           ; #define               ERR_NOCOMMAND   0x14//没有该指令;
 0004           ; #define               ERR_SETTING     0x15//设置参数失败;
 0004           ; #define               ERR_READTIME    0x16//读取系统时钟失败;
 0004           ; 
 0004           ; //============================================================
 0004           ; //定义写Flash一页的长度,同时声明数据Buffer
 0004           ; #define       SPM_PAGESIZE    256
 0004           ; unsigned char SendData[100];       
 0004           ; unsigned char         SendBuf[100];
 0004           ; unsigned char         ReceiveBuf[150];
 0004           ; unsigned char         data[SPM_PAGESIZE];
 0004           ; 
 0004           ; //============================================================ 
 0004           ; //定义接收数据的起点和写FLASH的起始地址
 0004           ; unsigned int  bPiont = 0;
 0004           ; unsigned long         address= 0x0000;
 0004           ; 
 0004           ; //============================================================
 0004           ; //函  数:void boot_page_ew(long p_address,char code) 
 0004           ; //功  能:读写FLASH数据
 0004           ; //入口参数:地址,命令字03擦除,05写入
 0004           ; //返 回 值:无
 0004           ; //设 计 者:覃道堂
 0004           ; //创作时间:2006-03-16
 0004           ; //修改时间:
 0004           ; //修改目的:
 0004           ; //============================================================ 
 0004           ; void boot_page_ew(long p_address,char code) 
 0004           ; { 
 0004                   .dbline 44
 0004           ;       asm("mov r30,r16\n" 
 0004 E02F              mov r30,r16
 0006 F12F              mov r31,r17
 0008 2BBF              out 0x3b,r18
 000A                   
 000A                   .dbline 47
 000A           ;         "mov r31,r17\n" 
 000A           ;         "out 0x3b,r18\n");                    //将页地址放入Z寄存器和RAMPZ的Bit0中 
 000A           ;       SPMCSR = code;                  //寄存器SPMCSR中为操作码 
 000A 0C80              ldd R0,y+4
 000C 00926800          sts 104,R0
 0010                   .dbline 48
 0010           ;       asm("spm\n");                   //对指定Flash页进行操作 
 0010 E895              spm
 0012                   
 0012                   .dbline -2
 0012           L1:
 0012 2496              adiw R28,4
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbsym l code 4 c
 0016                   .dbsym l p_address 0 L
 0016                   .dbend
 0016                   .dbfunc e boot_page_fill _boot_page_fill fV
 0016           ;           data -> R18,R19
 0016           ;        address -> R16,R17
                        .even
 0016           _boot_page_fill::
 0016                   .dbline -1
 0016                   .dbline 61
 0016           ; } 
 0016           ; //============================================================
 0016           ; //函  数:void boot_page_fill(unsigned int address,int data) 
 0016           ; //功  能:填充Flash缓冲页中的一个字 
 0016           ; //入口参数:地址和数据
 0016           ; //返 回 值:无
 0016           ; //设 计 者:覃道堂 
 0016           ; //创作时间:2006-03-16
 0016           ; //修改时间:
 0016           ; //修改目的:
 0016           ; //============================================================        
 0016           ; void boot_page_fill(unsigned int address,int data) 
 0016           ; { 
 0016                   .dbline 62
 0016           ;       asm("mov r30,r16\n" 
 0016 E02F              mov r30,r16
 0018 F12F              mov r31,r17
 001A 022E              mov r0,r18
 001C 132E              mov r1,r19
 001E                   
 001E                   .dbline 66
 001E           ;         "mov r31,r17\n"             //Z寄存器中为填冲页内地址 
 001E           ;         "mov r0,r18\n" 
 001E           ;         "mov r1,r19\n");            //R0R1中为一个指令字 
 001E           ;       SPMCSR = 0x01; 
 001E 81E0              ldi R24,1
 0020 80936800          sts 104,R24
 0024                   .dbline 67
 0024           ;       asm("spm\n"); 
 0024 E895              spm
 0026                   
 0026                   .dbline -2
 0026           L2:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r data 18 I
 0028                   .dbsym r address 16 i
 0028                   .dbend
 0028                   .dbfunc e wait_page_rw_ok _wait_page_rw_ok fV
                        .even
 0028           _wait_page_rw_ok::
 0028                   .dbline -1
 0028                   .dbline 80
 0028           ; } 
 0028           ; //============================================================
 0028           ; //函  数:void wait_page_rw_ok(void)
 0028           ; //功  能:等待一个Flash页的写完成
 0028           ; //入口参数:无
 0028           ; //返 回 值:无
 0028           ; //设 计 者:覃道堂 
 0028           ; //创作时间:2006-03-16
 0028           ; //修改时间:
 0028           ; //修改目的:
 0028           ; //============================================================
 0028           ; void wait_page_rw_ok(void) 
 0028           ; { 
 0028 08C0              xjmp L5
 002A           X0:
 002A                   .dbline 82
 002A           ;               while(SPMCSR & 0x40) 
 002A           ;       { 
 002A           L7:
 002A                   .dbline 83
 002A           L8:
 002A                   .dbline 83
 002A 20906800          lds R2,104
 002E 20FC              sbrc R2,0
 0030 FCCF              rjmp L7
 0032                   .dbline 84
 0032 81E1              ldi R24,17
 0034 80936800          sts 104,R24
 0038                   .dbline 85
 0038 E895              spm
 003A                   
 003A                   .dbline 86
 003A           L5:
 003A                   .dbline 81
 003A 20906800          lds R2,104
 003E 26FC              sbrc R2,6
 0040 F4CF              rjmp L8
 0042                   .dbline -2
 0042           L3:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbend
 0044                   .dbfunc e write_one_page _write_one_page fV
 0044           ;              i -> R20,R21
                        .even
 0044           _write_one_page::
 0044 0E940000          xcall push_gset1
 0048 2197              sbiw R28,1
 004A                   .dbline -1
 004A                   .dbline 99
 004A           ;               while(SPMCSR & 0x01); 
 004A           ;               SPMCSR = 0x11; 
 004A           ;               asm("spm\n"); 
 004A           ;       } 
 004A           ; } 
 004A           ; //============================================================
 004A           ; //函  数:void write_one_page(void)
 004A           ; //功  能:一页处理完成
 004A           ; //入口参数:无
 004A           ; //返 回 值:无
 004A           ; //设 计 者:覃道堂 
 004A           ; //创作时间:2006-03-16
 004A           ; //修改时间:
 004A           ; //修改目的:
 004A           ; //============================================================
 004A           ; void write_one_page(void) 
 004A           ; { 
 004A                   .dbline 101
 004A           ;       int     i; 
 004A           ;       boot_page_ew(address,0x03);                 //擦除一个Flash页 
 004A 83E0              ldi R24,3
 004C 8883              std y+0,R24
 004E 20910400          lds R18,_address+2
 0052 30910500          lds R19,_address+2+1
 0056 00910200          lds R16,_address
 005A 10910300          lds R17,_address+1
 005E D0DF              xcall _boot_page_ew
 0060                   .dbline 102
 0060           ;       wait_page_rw_ok();                          //等待擦除完成 
 0060 E3DF              xcall _wait_page_rw_ok
 0062                   .dbline 103
 0062           ;       for(i = 0;i < SPM_PAGESIZE;i += 2)                //将数据填入Flash缓冲页中 
 0062 4427              clr R20
 0064 5527              clr R21
 0066           L11:
 0066                   .dbline 104
 0066                   .dbline 105
 0066 80E0              ldi R24,<_data+1
 0068 90E0              ldi R25,>_data+1
 006A FA01              movw R30,R20
 006C E80F              add R30,R24
 006E F91F              adc R31,R25
 0070 2080              ldd R2,z+0
 0072 3324              clr R3
 0074 322C              mov R3,R2
 0076 2224              clr R2
 0078 80E0              ldi R24,<_data
 007A 90E0              ldi R25,>_data
 007C FA01              movw R30,R20
 007E E80F              add R30,R24
 0080 F91F              adc R31,R25
 0082 2081              ldd R18,z+0
 0084 3327              clr R19
 0086 220D              add R18,R2
 0088 331D              adc R19,R3
 008A 8A01              movw R16,R20
 008C C4DF              xcall _boot_page_fill
 008E                   .dbline 106
 008E           L12:
 008E                   .dbline 103
 008E 4E5F              subi R20,254  ; offset = 2
 0090 5F4F              sbci R21,255
 0092                   .dbline 103
 0092 4030              cpi R20,0
 0094 E1E0              ldi R30,1
 0096 5E07              cpc R21,R30
 0098 34F3              brlt L11
 009A                   .dbline 107
 009A           ;       { 
 009A           ;               boot_page_fill(i, data[i]+(data[i+1]<<8)); 
 009A           ;       } 
 009A           ;       boot_page_ew(address,0x05);                  //将缓冲页数据写入一个Flash页 
 009A 85E0              ldi R24,5
 009C 8883              std y+0,R24
 009E 20910400          lds R18,_address+2
 00A2 30910500          lds R19,_address+2+1
 00A6 00910200          lds R16,_address
 00AA 10910300          lds R17,_address+1
 00AE A8DF              xcall _boot_page_ew
 00B0                   .dbline 108
 00B0           ;       wait_page_rw_ok();                           //等待写入完成 
 00B0 BBDF              xcall _wait_page_rw_ok
 00B2                   .dbline -2
 00B2           L10:
 00B2 2196              adiw R28,1
 00B4 0E940000          xcall pop_gset1
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbsym r i 20 I
 00BA                   .dbend
 00BA                   .dbfunc e quit _quit fV
                        .even
 00BA           _quit::
 00BA                   .dbline -1
 00BA                   .dbline 122
 00BA           ; }  
 00BA           ; 
 00BA           ; //============================================================
 00BA           ; //函  数:void quit(void)
 00BA           ; //功  能:跳转程序运行
 00BA           ; //入口参数:无
 00BA           ; //返 回 值:无
 00BA           ; //设 计 者:覃道堂 
 00BA           ; //创作时间:2006-03-16
 00BA           ; //修改时间:
 00BA           ; //修改目的:
 00BA           ; //============================================================
 00BA           ; void quit(void)
 00BA           ; {
 00BA                   .dbline 123
 00BA           ;       MCUCR = 0x01;
 00BA 81E0              ldi R24,1
 00BC 85BF              out 0x35,R24
 00BE                   .dbline 124
 00BE           ;       MCUCR = 0x00;

⌨️ 快捷键说明

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