📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRISP~1\icc\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 CDD7 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 73
001E ;
001E ;
001E ; //clock_speed=eeprom_read_byte(&eeprom_sck_period);
001E ; //clock_speed=eeprom_sck_period;
001E ; //if (clock_speed==0xFF) {
001E ; // clock_speed=SPI_SPEED_125KHZ;
001E ; // }
001E ; clock_speed = SPI_SPEED_230KHz;
001E 81E0 ldi R24,1
0020 80930700 sts _clock_speed,R24
0024 .dbline 74
0024 ; spi_set_speed(clock_speed);
0024 082F mov R16,R24
0026 00D0 rcall _spi_set_speed
0028 .dbline 76
0028 ;
0028 ; SEI();
0028 7894 sei
002A .dbline 78
002A ;
002A ; LED_GN_OFF;
002A 9598 cbi 0x12,5
002C .dbline 79
002C ; LED_RT_ON;
002C 969A sbi 0x12,6
002E .dbline 80
002E ; wait_ms(2000);
002E 00ED ldi R16,2000
0030 17E0 ldi R17,7
0032 00D0 rcall _wait_ms
0034 .dbline 81
0034 ; LED_GN_ON;
0034 959A sbi 0x12,5
0036 .dbline 82
0036 ; LED_RT_OFF;
0036 9698 cbi 0x12,6
0038 7AC0 rjmp L4
003A L3:
003A .dbline 84
003A ;
003A ; while(2) {
003A .dbline 85
003A ; rec_data=interface_getc();
003A 00D0 rcall _interface_getc
003C 5801 movw R10,R16
003E .dbline 87
003E ; //if a byte has been received -> process it
003E ; if(rec_data!=-1) {
003E C501 movw R24,R10
0040 0F3F cpi R16,255
0042 EFEF ldi R30,255
0044 1E07 cpc R17,R30
0046 09F4 brne X1
0048 72C0 rjmp L6
004A X1:
004A .dbline 87
004A .dbline 88
004A ; t=rec_data&0xFF;
004A 482F mov R20,R24
004C 5070 andi R21,0
004E .dbline 90
004E ;
004E ; if(state==ST_START) {
004E C701 movw R24,R14
0050 8030 cpi R24,0
0052 E0EF ldi R30,240
0054 9E07 cpc R25,R30
0056 49F4 brne L8
0058 .dbline 90
0058 .dbline 91
0058 ; if(t==MESSAGE_START) {
0058 4B31 cpi R20,27
005A 09F0 breq X2
005C 68C0 rjmp L9
005E X2:
005E .dbline 91
005E .dbline 92
005E ; state = ST_GET_SEQ_NUM;
005E 81E0 ldi R24,61441
0060 90EF ldi R25,240
0062 7C01 movw R14,R24
0064 .dbline 93
0064 ; checksum = MESSAGE_START^0;
0064 8BE1 ldi R24,27
0066 C82E mov R12,R24
0068 .dbline 94
0068 ; }
0068 .dbline 95
0068 ; }
0068 62C0 rjmp L9
006A L8:
006A .dbline 96
006A ; else {
006A .dbline 97
006A ; if(state==ST_GET_SEQ_NUM) {
006A C701 movw R24,R14
006C 8130 cpi R24,1
006E E0EF ldi R30,240
0070 9E07 cpc R25,R30
0072 31F4 brne L12
0074 .dbline 97
0074 .dbline 98
0074 ; seq_num = t;
0074 4883 std y+0,R20
0076 .dbline 99
0076 ; state = ST_MSG_SIZE_1;
0076 82E0 ldi R24,61442
0078 90EF ldi R25,240
007A 7C01 movw R14,R24
007C .dbline 100
007C ; checksum ^= t;
007C C426 eor R12,R20
007E .dbline 101
007E ; }
007E 57C0 rjmp L13
0080 L12:
0080 .dbline 102
0080 ; else {
0080 .dbline 103
0080 ; if(state==ST_MSG_SIZE_1) {
0080 C701 movw R24,R14
0082 8230 cpi R24,2
0084 E0EF ldi R30,240
0086 9E07 cpc R25,R30
0088 49F4 brne L14
008A .dbline 103
008A .dbline 104
008A ; msg_size = t<<8;
008A 642F mov R22,R20
008C 7727 clr R23
008E 762F mov R23,R22
0090 6627 clr R22
0092 .dbline 105
0092 ; state = ST_MSG_SIZE_2;
0092 83E0 ldi R24,61443
0094 90EF ldi R25,240
0096 7C01 movw R14,R24
0098 .dbline 106
0098 ; checksum ^= t;
0098 C426 eor R12,R20
009A .dbline 107
009A ; }
009A 49C0 rjmp L15
009C L14:
009C .dbline 108
009C ; else {
009C .dbline 109
009C ; if(state==ST_MSG_SIZE_2) {
009C C701 movw R24,R14
009E 8330 cpi R24,3
00A0 E0EF ldi R30,240
00A2 9E07 cpc R25,R30
00A4 49F4 brne L16
00A6 .dbline 109
00A6 .dbline 110
00A6 ; msg_size |= t;
00A6 242E mov R2,R20
00A8 3324 clr R3
00AA 6229 or R22,R2
00AC 7329 or R23,R3
00AE .dbline 111
00AE ; state = ST_GET_TOKEN;
00AE 84E0 ldi R24,61444
00B0 90EF ldi R25,240
00B2 7C01 movw R14,R24
00B4 .dbline 112
00B4 ; checksum ^= t;
00B4 C224 eor R12,R2
00B6 .dbline 113
00B6 ; }
00B6 3BC0 rjmp L17
00B8 L16:
00B8 .dbline 114
00B8 ; else {
00B8 .dbline 115
00B8 ; if(state==ST_GET_TOKEN) {
00B8 C701 movw R24,R14
00BA 8430 cpi R24,4
00BC E0EF ldi R30,240
00BE 9E07 cpc R25,R30
00C0 79F4 brne L18
00C2 .dbline 115
00C2 .dbline 116
00C2 ; if(t==TOKEN) {
00C2 4E30 cpi R20,14
00C4 49F4 brne L20
00C6 .dbline 116
00C6 .dbline 117
00C6 ; state = ST_GET_DATA;
00C6 85E0 ldi R24,61445
00C8 90EF ldi R25,240
00CA 7C01 movw R14,R24
00CC .dbline 118
00CC ; checksum ^= t;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -