📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\icc\stk500\avrasp\main.c
0000 .dbfunc e main _main fV
0000 ; i -> y+1
0000 ; msg_size -> R22,R23
0000 ; seq_num -> y+0
0000 ; checksum -> R12
0000 ; t -> R20
0000 ; state -> R14,R15
0000 ; rec_data -> R10,R11
.even
0000 _main::
0000 2397 sbiw R28,3
0002 .dbline -1
0002 .dbline 49
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 ; #include "stk500.h"
0002 ;
0002 ; //States used in the receive state machine
0002 ; #define ST_START 0xF000 /*消息开始0x1B */
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 /*消息记号0x0E */
0002 ; #define ST_GET_DATA 0xF005 /*消息数据 */
0002 ; #define ST_GET_CHECK 0xF006 /*消息校验 */
0002 ; #define ST_PROCESS 0xF007 /*消息 */
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 ; void main(void) {
0002 .dbline 51
0002 ;
0002 ; unsigned int i=0;
0002 0024 clr R0
0004 1124 clr R1
0006 1A82 std y+2,R1
0008 0982 std y+1,R0
000A .dbline 53
000A ;
000A ; unsigned char seq_num=0;
000A 0882 std y+0,R0
000C .dbline 54
000C ; unsigned int msg_size=0;
000C 6627 clr R22
000E 7727 clr R23
0010 .dbline 55
0010 ; unsigned char checksum=0;
0010 CC24 clr R12
0012 .dbline 58
0012 ;
0012 ; /// next state
0012 ; unsigned int state=ST_START; /*应该是状态标志*/
0012 80E0 ldi R24,61440
0014 90EF ldi R25,240
0016 7C01 movw R14,R24
0018 .dbline 63
0018 ;
0018 ; unsigned char t;
0018 ; signed int rec_data;
0018 ;
0018 ; chip_init();
0018 37D8 rcall _chip_init
001A .dbline 64
001A ; interface_init();
001A 00D0 rcall _interface_init
001C .dbline 65
001C ; spi_disable();
001C 00D0 rcall _spi_disable
001E .dbline 68
001E ;
001E ; //clock_speed=eeprom_read_byte(&eeprom_sck_period);
001E ; clock_speed=eeprom_sck_period;
001E 20900000 lds R2,_eeprom_sck_period
0022 20920700 sts _clock_speed,R2
0026 .dbline 69
0026 ; if (clock_speed==0xFF) {
0026 822D mov R24,R2
0028 8F3F cpi R24,255
002A 19F4 brne L3
002C .dbline 69
002C .dbline 70
002C ; clock_speed=SPI_SPEED_125KHZ;
002C 85E0 ldi R24,5
002E 80930700 sts _clock_speed,R24
0032 .dbline 71
0032 ; }
0032 L3:
0032 .dbline 72
0032 ; spi_set_speed(clock_speed);
0032 00910700 lds R16,_clock_speed
0036 00D0 rcall _spi_set_speed
0038 .dbline 74
0038 ;
0038 ; SEI();
0038 7894 sei
003A .dbline 76
003A ;
003A ; LED_GN_OFF;
003A 8EEF ldi R24,-2
003C 9FEF ldi R25,-1
003E 25B0 in R2,0x5
0040 2822 and R2,R24
0042 25B8 out 0x5,R2
0044 .dbline 77
0044 ; LED_RT_ON;
0044 299A sbi 0x5,1
0046 .dbline 78
0046 ; wait_ms(2000);
0046 00ED ldi R16,2000
0048 17E0 ldi R17,7
004A 00D0 rcall _wait_ms
004C .dbline 79
004C ; LED_GN_ON;
004C 289A sbi 0x5,0
004E .dbline 80
004E ; LED_RT_OFF;
004E 8DEF ldi R24,-3
0050 9FEF ldi R25,-1
0052 25B0 in R2,0x5
0054 2822 and R2,R24
0056 25B8 out 0x5,R2
0058 7AC0 rjmp L6
005A L5:
005A .dbline 82
005A ;
005A ; while(2) {
005A .dbline 83
005A ; rec_data=interface_getc();
005A 00D0 rcall _interface_getc
005C 5801 movw R10,R16
005E .dbline 85
005E ; //if a byte has been received -> process it
005E ; if(rec_data!=-1) {
005E C501 movw R24,R10
0060 0F3F cpi R16,255
0062 EFEF ldi R30,255
0064 1E07 cpc R17,R30
0066 09F4 brne X1
0068 72C0 rjmp L8
006A X1:
006A .dbline 85
006A .dbline 86
006A ; t=rec_data&0xFF;
006A 482F mov R20,R24
006C 5070 andi R21,0
006E .dbline 88
006E ;
006E ; if(state==ST_START) {
006E C701 movw R24,R14
0070 8030 cpi R24,0
0072 E0EF ldi R30,240
0074 9E07 cpc R25,R30
0076 49F4 brne L10
0078 .dbline 88
0078 .dbline 89
0078 ; if(t==MESSAGE_START) {
0078 4B31 cpi R20,27
007A 09F0 breq X2
007C 68C0 rjmp L11
007E X2:
007E .dbline 89
007E .dbline 90
007E ; state = ST_GET_SEQ_NUM;
007E 81E0 ldi R24,61441
0080 90EF ldi R25,240
0082 7C01 movw R14,R24
0084 .dbline 91
0084 ; checksum = MESSAGE_START^0;
0084 8BE1 ldi R24,27
0086 C82E mov R12,R24
0088 .dbline 92
0088 ; }
0088 .dbline 93
0088 ; }
0088 62C0 rjmp L11
008A L10:
008A .dbline 94
008A ; else {
008A .dbline 95
008A ; if(state==ST_GET_SEQ_NUM) {
008A C701 movw R24,R14
008C 8130 cpi R24,1
008E E0EF ldi R30,240
0090 9E07 cpc R25,R30
0092 31F4 brne L14
0094 .dbline 95
0094 .dbline 96
0094 ; seq_num = t;
0094 4883 std y+0,R20
0096 .dbline 97
0096 ; state = ST_MSG_SIZE_1;
0096 82E0 ldi R24,61442
0098 90EF ldi R25,240
009A 7C01 movw R14,R24
009C .dbline 98
009C ; checksum ^= t;
009C C426 eor R12,R20
009E .dbline 99
009E ; }
009E 57C0 rjmp L15
00A0 L14:
00A0 .dbline 100
00A0 ; else {
00A0 .dbline 101
00A0 ; if(state==ST_MSG_SIZE_1) {
00A0 C701 movw R24,R14
00A2 8230 cpi R24,2
00A4 E0EF ldi R30,240
00A6 9E07 cpc R25,R30
00A8 49F4 brne L16
00AA .dbline 101
00AA .dbline 102
00AA ; msg_size = t<<8;
00AA 642F mov R22,R20
00AC 7727 clr R23
00AE 762F mov R23,R22
00B0 6627 clr R22
00B2 .dbline 103
00B2 ; state = ST_MSG_SIZE_2;
00B2 83E0 ldi R24,61443
00B4 90EF ldi R25,240
00B6 7C01 movw R14,R24
00B8 .dbline 104
00B8 ; checksum ^= t;
00B8 C426 eor R12,R20
00BA .dbline 105
00BA ; }
00BA 49C0 rjmp L17
00BC L16:
00BC .dbline 106
00BC ; else {
00BC .dbline 107
00BC ; if(state==ST_MSG_SIZE_2) {
00BC C701 movw R24,R14
00BE 8330 cpi R24,3
00C0 E0EF ldi R30,240
00C2 9E07 cpc R25,R30
00C4 49F4 brne L18
00C6 .dbline 107
00C6 .dbline 108
00C6 ; msg_size |= t;
00C6 242E mov R2,R20
00C8 3324 clr R3
00CA 6229 or R22,R2
00CC 7329 or R23,R3
00CE .dbline 109
00CE ; state = ST_GET_TOKEN;
00CE 84E0 ldi R24,61444
00D0 90EF ldi R25,240
00D2 7C01 movw R14,R24
00D4 .dbline 110
00D4 ; checksum ^= t;
00D4 C224 eor R12,R2
00D6 .dbline 111
00D6 ; }
00D6 3BC0 rjmp L19
00D8 L18:
00D8 .dbline 112
00D8 ; else {
00D8 .dbline 113
00D8 ; if(state==ST_GET_TOKEN) {
00D8 C701 movw R24,R14
00DA 8430 cpi R24,4
00DC E0EF ldi R30,240
00DE 9E07 cpc R25,R30
00E0 79F4 brne L20
00E2 .dbline 113
00E2 .dbline 114
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -