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