📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\单片机\源程序\Snail_mkII\STK500_V2\ICC\main.c
0000 .dbfunc e main _main fI
0000 ; rec_data1 -> R10,R11
0000 ; t0 -> R10
0000 ; state0 -> R20,R21
0000 ; checksum0 -> R22
0000 ; msg_size0 -> R12,R13
0000 ; seq_num0 -> y+2
0000 ; i0 -> y+0
.even
0000 _main::
0000 2497 sbiw R28,4
0002 .dbline -1
0002 .dbline 65
0002 ; /** \file
0002 ; <b>USBisp main</b><br>
0002 ; Autor: Matthias Wei遝r<br>
0002 ; Copyright 2005: Matthias Wei遝r<br>
0002 ; License: QPL (see license.txt)
0002 ; <hr>
0002 ; */
0002 ; /*! \mainpage USBisp STK500 v2
0002 ;
0002 ; (c)2005 by Matthias Weisser
0002 ;
0002 ; This software is distributed under the QPL
0002 ; see license.txt for more information
0002 ;
0002 ; \section Compiler
0002 ; latest WINAVR
0002 ;
0002 ; \section version history version history
0002 ; <b>v1.0</b>
0002 ; <ul>
0002 ; <li>First release</li>
0002 ; </ul>
0002 ; */
0002 ;
0002 ; #include <stdlib.h>
0002 ; #include <string.h>
0002 ; #include <iccioavr.h>
0002 ; #include <eeprom.h>
0002 ; #include <macros.h>
0002 ; #include "interface.h"
0002 ; #include "spi.h"
0002 ; #include "tools.h"
0002 ; #include "extern_vars.h"
0002 ;
0002 ; //Atmel Includes
0002 ; #include "command.h"
0002 ;
0002 ; #include "config.h"
0002 ;
0002 ; //States used in the receive state machine
0002 ; #define ST_START 0xF000
0002 ; #define ST_GET_SEQ_NUM 0xF001
0002 ; #define ST_MSG_SIZE_1 0xF002
0002 ; #define ST_MSG_SIZE_2 0xF003
0002 ; #define ST_GET_TOKEN 0xF004
0002 ; #define ST_GET_DATA 0xF005
0002 ; #define ST_GET_CHECK 0xF006
0002 ; #define ST_PROCESS 0xF007
0002 ;
0002 ;
0002 ; void chip_init(void);
0002 ; unsigned char adc_get(char n);
0002 ; void process_command(unsigned char seq_num);
0002 ;
0002 ; //Some global variables
0002 ; unsigned char msg_buffer[300];
0002 ; unsigned char clock_speed;
0002 ; unsigned char reset_polarity;
0002 ; unsigned char param_controller_init;
0002 ; unsigned char prgmode;
0002 ;
0002 ; unsigned long address;
0002 ;
0002 ; int main(void)
0002 ; {
0002 .dbline 66
0002 ; unsigned int i=0;
0002 0024 clr R0
0004 1124 clr R1
0006 1982 std y+1,R1
0008 0882 std y+0,R0
000A .dbline 68
000A ;
000A ; unsigned char seq_num=0;
000A 0A82 std y+2,R0
000C .dbline 69
000C ; unsigned int msg_size=0;
000C CC24 clr R12
000E DD24 clr R13
0010 .dbline 70
0010 ; unsigned char checksum=0;
0010 6627 clr R22
0012 .dbline 73
0012 ;
0012 ; /// next state
0012 ; unsigned int state=ST_START;
0012 40E0 ldi R20,61440
0014 50EF ldi R21,240
0016 .dbline 78
0016 ;
0016 ; unsigned char t;
0016 ; signed int rec_data;
0016 ;
0016 ; chip_init();
0016 0E940309 xcall _chip_init
001A .dbline 79
001A ; interface_init();
001A 0E940000 xcall _interface_init
001E .dbline 80
001E ; spi_disable();
001E 0E940000 xcall _spi_disable
0022 .dbline 82
0022 ;
0022 ; clock_speed=EEPROMread((int)&eeprom_sck_period);
0022 00E0 ldi R16,<_eeprom_sck_period
0024 10E0 ldi R17,>_eeprom_sck_period
0026 0E940000 xcall _EEPROMread
002A 00930700 sts _clock_speed,R16
002E .dbline 83
002E ; if (clock_speed==0xFF) clock_speed=SPI_SPEED_125KHZ;
002E 0F3F cpi R16,255
0030 19F4 brne L3
0032 X0:
0032 .dbline 83
0032 85E0 ldi R24,5
0034 80930700 sts _clock_speed,R24
0038 L3:
0038 .dbline 84
0038 ; spi_set_speed(clock_speed);
0038 00910700 lds R16,_clock_speed
003C 0E940000 xcall _spi_set_speed
0040 .dbline 86
0040 ;
0040 ; SEI();
0040 7894 sei
0042 .dbline 88
0042 ;
0042 ; LED_GN_ON;
0042 929A sbi 0x12,2
0044 .dbline 89
0044 ; LED_RT_OFF;
0044 87EF ldi R24,-9
0046 9FEF ldi R25,-1
0048 22B2 in R2,0x12
004A 2822 and R2,R24
004C 22BA out 0x12,R2
004E 6CC0 xjmp L6
0050 L5:
0050 .dbline 106
0050 ;
0050 ; /*
0050 ; while(2)
0050 ; {
0050 ; rec_data=interface_getc();
0050 ; //if a byte has been received -> process it
0050 ; if(rec_data!=-1)
0050 ; {
0050 ; interface_putc(rec_data);
0050 ; LED_GN_TOG;
0050 ; LED_RT_TOG;
0050 ; }
0050 ; }
0050 ; */
0050 ;
0050 ; while (2)
0050 ; {
0050 .dbline 108
0050 ;
0050 ; rec_data=interface_getc();
0050 0E940000 xcall _interface_getc
0054 5801 movw R10,R16
0056 .dbline 112
0056 ;
0056 ;
0056 ; //if a aviliable byte has been received -> process it.
0056 ; if (rec_data!=-1)
0056 C501 movw R24,R10
0058 0F3F cpi R16,255
005A EFEF ldi R30,255
005C 1E07 cpc R17,R30
005E 09F4 brne X14
0060 63C0 xjmp L8
0062 X14:
0062 X1:
0062 .dbline 113
0062 ; {
0062 .dbline 114
0062 ; t=rec_data&0xFF;
0062 9070 andi R25,0
0064 A82E mov R10,R24
0066 .dbline 116
0066 ;
0066 ; if (state==ST_START)
0066 4030 cpi R20,0
0068 E0EF ldi R30,240
006A 5E07 cpc R21,R30
006C 39F4 brne L10
006E X2:
006E .dbline 117
006E ; {
006E .dbline 118
006E ; if (t==MESSAGE_START)
006E 8B31 cpi R24,27
0070 09F0 breq X15
0072 5AC0 xjmp L11
0074 X15:
0074 X3:
0074 .dbline 119
0074 ; {
0074 .dbline 120
0074 ; state = ST_GET_SEQ_NUM;
0074 41E0 ldi R20,61441
0076 50EF ldi R21,240
0078 .dbline 121
0078 ; checksum = MESSAGE_START^0;
0078 6BE1 ldi R22,27
007A .dbline 122
007A ; }
007A .dbline 123
007A ; }
007A 56C0 xjmp L11
007C L10:
007C .dbline 124
007C ; else if (state==ST_GET_SEQ_NUM)
007C 4130 cpi R20,1
007E E0EF ldi R30,240
0080 5E07 cpc R21,R30
0082 29F4 brne L14
0084 X4:
0084 .dbline 125
0084 ; {
0084 .dbline 126
0084 ; seq_num = t;
0084 AA82 std y+2,R10
0086 .dbline 127
0086 ; state = ST_MSG_SIZE_1;
0086 42E0 ldi R20,61442
0088 50EF ldi R21,240
008A .dbline 128
008A ; checksum ^= t;
008A 6A25 eor R22,R10
008C .dbline 129
008C ; }
008C 4DC0 xjmp L15
008E L14:
008E .dbline 130
008E ; else if (state==ST_MSG_SIZE_1)
008E 4230 cpi R20,2
0090 E0EF ldi R30,240
0092 5E07 cpc R21,R30
0094 41F4 brne L16
0096 X5:
0096 .dbline 131
0096 ; {
0096 .dbline 132
0096 ; msg_size = t<<8;
0096 CA2C mov R12,R10
0098 DD24 clr R13
009A DC2C mov R13,R12
009C CC24 clr R12
009E .dbline 133
009E ; state = ST_MSG_SIZE_2;
009E 43E0 ldi R20,61443
00A0 50EF ldi R21,240
00A2 .dbline 134
00A2 ; checksum ^= t;
00A2 6A25 eor R22,R10
00A4 .dbline 135
00A4 ; }
00A4 41C0 xjmp L17
00A6 L16:
00A6 .dbline 136
00A6 ; else if (state==ST_MSG_SIZE_2)
00A6 4330 cpi R20,3
00A8 E0EF ldi R30,240
00AA 5E07 cpc R21,R30
00AC 41F4 brne L18
00AE X6:
00AE .dbline 137
00AE ; {
00AE .dbline 138
00AE ; msg_size |= t;
00AE 2A2C mov R2,R10
00B0 3324 clr R3
00B2 C228 or R12,R2
00B4 D328 or R13,R3
00B6 .dbline 139
00B6 ; state = ST_GET_TOKEN;
00B6 44E0 ldi R20,61444
00B8 50EF ldi R21,240
00BA .dbline 140
00BA ; checksum ^= t;
00BA 6225 eor R22,R2
00BC .dbline 141
00BC ; }
00BC 35C0 xjmp L19
00BE L18:
00BE .dbline 142
00BE ; else if (state==ST_GET_TOKEN)
00BE 4430 cpi R20,4
00C0 E0EF ldi R30,240
00C2 5E07 cpc R21,R30
00C4 71F4 brne L20
00C6 X7:
00C6 .dbline 143
00C6 ; {
00C6 .dbline 144
00C6 ; if (t==TOKEN)
00C6 8A2D mov R24,R10
00C8 8E30 cpi R24,14
00CA 41F4 brne L22
00CC X8:
00CC .dbline 145
00CC ; {
00CC .dbline 146
00CC ; state = ST_GET_DATA;
00CC 45E0 ldi R20,61445
00CE 50EF ldi R21,240
00D0 .dbline 147
00D0 ; checksum ^= t;
00D0 6827 eor R22,R24
00D2 .dbline 148
00D2 ; i=0;
00D2 0024 clr R0
00D4 1124 clr R1
00D6 1982 std y+1,R1
00D8 0882 std y+0,R0
00DA .dbline 149
00DA ; }
00DA 26C0 xjmp L21
00DC L22:
00DC .dbline 150
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -