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

📄 stk500_isp.lst

📁 很好的制作AVR32 ICE的资料
💻 LST
📖 第 1 页 / 共 5 页
字号:
     1A2 DF82      RCALL	_spi_transfer_8
(0298)   spi_transfer_8((d>>8)&0xFF);
     1A3 E088      LDI	R24,0x8
     1A4 E090      LDI	R25,0
     1A5 8108      LDD	R16,Y+0
     1A6 8119      LDD	R17,Y+1
     1A7 812A      LDD	R18,Y+2
     1A8 813B      LDD	R19,Y+3
     1A9 938A      ST	R24,-Y
     1AA 940E 0B46 CALL	lsr32
     1AC 0118      MOVW	R2,R16
     1AD 0129      MOVW	R4,R18
     1AE EF8F      LDI	R24,0xFF
     1AF E090      LDI	R25,0
     1B0 E0A0      LDI	R26,0
     1B1 E0B0      LDI	R27,0
     1B2 2228      AND	R2,R24
     1B3 2239      AND	R3,R25
     1B4 224A      AND	R4,R26
     1B5 225B      AND	R5,R27
     1B6 2D02      MOV	R16,R2
     1B7 DF6D      RCALL	_spi_transfer_8
(0299)   return spi_transfer_8(d&0xFF);
     1B8 EF8F      LDI	R24,0xFF
     1B9 E090      LDI	R25,0
     1BA E0A0      LDI	R26,0
     1BB E0B0      LDI	R27,0
     1BC 8028      LDD	R2,Y+0
     1BD 8039      LDD	R3,Y+1
     1BE 804A      LDD	R4,Y+2
     1BF 805B      LDD	R5,Y+3
     1C0 2228      AND	R2,R24
     1C1 2239      AND	R3,R25
     1C2 224A      AND	R4,R26
     1C3 225B      AND	R5,R27
     1C4 2D02      MOV	R16,R2
     1C5 DF5F      RCALL	_spi_transfer_8
     1C6 9624      ADIW	R28,4
     1C7 9508      RET
_Timer1_COMPA_ISR:
     1C8 938A      ST	R24,-Y
     1C9 939A      ST	R25,-Y
     1CA B78F      IN	R24,0x3F
     1CB 938A      ST	R24,-Y
FILE: E:\单片机\源程序\Snail_mkII\STK500_V2\ICC\tools.c
(0001) /**	\file
(0002) 	<b>some tools</b><br>
(0003) 	Autor: Matthias Wei遝r<br>
(0004) 	Copyright 2005: Matthias Wei遝r<br>
(0005) 	License: QPL (see license.txt)
(0006) 	<hr>
(0007) */
(0008) #include <iccioavr.h>
(0009) #include <eeprom.h>
(0010) 
(0011) #include "tools.h"
(0012) 
(0013) volatile unsigned char t1_tick;
(0014) unsigned char t1_cnt;
(0015) 
(0016) //Konstanten im EEPROM
(0017) //#define EEPROM  __attribute__ ((section (".eeprom")))
(0018) 
(0019) //Variablen im EEPROM
(0020) #pragma data:eeprom
(0021) unsigned char eeprom_sck_period = 10;
(0022) #pragma data:data
(0023) 
(0024) #pragma interrupt_handler Timer1_COMPA_ISR:iv_TIMER1_COMPA
(0025) void Timer1_COMPA_ISR(void)
(0026) {
(0027)   t1_tick=1;
     1CC E081      LDI	R24,1
     1CD 9380 006C STS	t1_tick,R24
(0028)   t1_cnt++;
     1CF 9180 006B LDS	R24,t1_cnt
     1D1 5F8F      SUBI	R24,0xFF
     1D2 9380 006B STS	t1_cnt,R24
     1D4 9189      LD	R24,Y+
     1D5 BF8F      OUT	0x3F,R24
     1D6 9199      LD	R25,Y+
     1D7 9189      LD	R24,Y+
     1D8 9518      RETI
(0029) }
(0030) 
(0031) unsigned char get_t1_tick(void)
(0032) {
(0033)   if (t1_tick)
_get_t1_tick:
     1D9 9020 006C LDS	R2,t1_tick
     1DB 2022      TST	R2
     1DC F029      BEQ	0x01E2
(0034)     {
(0035)       t1_tick=0;
     1DD 2422      CLR	R2
     1DE 9220 006C STS	t1_tick,R2
(0036)       return 1;
     1E0 E001      LDI	R16,1
     1E1 C001      RJMP	0x01E3
(0037)     }
(0038)   return 0;
     1E2 2700      CLR	R16
     1E3 9508      RET
_wait_ms:
  n                    --> R20
     1E4 934A      ST	R20,-Y
     1E5 935A      ST	R21,-Y
     1E6 01A8      MOVW	R20,R16
(0039) }
(0040) 
(0041) /**
(0042) 	Wartet n*1ms - 1ms max.
(0043) */
(0044) void wait_ms(unsigned int n)
(0045) {
     1E7 C005      RJMP	0x01ED
(0046)   while (n)
(0047)     {
(0048)       if (get_t1_tick()) n--;
     1E8 DFF0      RCALL	_get_t1_tick
     1E9 2300      TST	R16
     1EA F011      BEQ	0x01ED
     1EB 5041      SUBI	R20,1
     1EC 4050      SBCI	R21,0
     1ED 3040      CPI	R20,0
     1EE 0745      CPC	R20,R21
     1EF F7C1      BNE	0x01E8
     1F0 9159      LD	R21,Y+
     1F1 9149      LD	R20,Y+
     1F2 9508      RET
_main:
  rec_data1            --> R10
  t0                   --> R10
  state0               --> R20
  checksum0            --> R22
  msg_size0            --> R12
  seq_num0             --> Y,+2
  i0                   --> Y,+0
     1F3 9724      SBIW	R28,4
FILE: E:\单片机\源程序\Snail_mkII\STK500_V2\ICC\main.c
(0001) /**	\file
(0002) 	<b>USBisp main</b><br>
(0003) 	Autor: Matthias Wei遝r<br>
(0004) 	Copyright 2005: Matthias Wei遝r<br>
(0005) 	License: QPL (see license.txt)
(0006) 	<hr>
(0007) */
(0008) /*! \mainpage USBisp STK500 v2
(0009) 
(0010) 	(c)2005 by Matthias Weisser
(0011) 
(0012) 	This software is distributed under the QPL
(0013) 	see license.txt for more information
(0014) 
(0015)  	\section Compiler
(0016)  	latest WINAVR
(0017) 
(0018) 	\section version history version history
(0019) 	<b>v1.0</b>
(0020) 	<ul>
(0021) 		<li>First release</li>
(0022) 	</ul>
(0023) */
(0024) 
(0025) #include <stdlib.h>
(0026) #include <string.h>
(0027) #include <iccioavr.h>
(0028) #include <eeprom.h>
(0029) #include <macros.h>
(0030) #include "interface.h"
(0031) #include "spi.h"
(0032) #include "tools.h"
(0033) #include "extern_vars.h"
(0034) 
(0035) //Atmel Includes
(0036) #include "command.h"
(0037) 
(0038) #include "config.h"
(0039) 
(0040) //States used in the receive state machine
(0041) #define	ST_START		0xF000
(0042) #define	ST_GET_SEQ_NUM	0xF001
(0043) #define ST_MSG_SIZE_1	0xF002
(0044) #define ST_MSG_SIZE_2	0xF003
(0045) #define ST_GET_TOKEN	0xF004
(0046) #define ST_GET_DATA		0xF005
(0047) #define	ST_GET_CHECK	0xF006
(0048) #define	ST_PROCESS		0xF007
(0049) 
(0050) 
(0051) void chip_init(void);
(0052) unsigned char adc_get(char n);
(0053) void process_command(unsigned char seq_num);
(0054) 
(0055) //Some global variables
(0056) unsigned char msg_buffer[300];
(0057) unsigned char clock_speed;
(0058) unsigned char reset_polarity;
(0059) unsigned char param_controller_init;
(0060) unsigned char prgmode;
(0061) 
(0062) unsigned long address;
(0063) 
(0064) int main(void)
(0065) {
(0066)   unsigned int i=0;
     1F4 2400      CLR	R0
     1F5 2411      CLR	R1
     1F6 8219      STD	Y+1,R1
     1F7 8208      STD	Y+0,R0
(0067) 
(0068)   unsigned char seq_num=0;
     1F8 820A      STD	Y+2,R0
(0069)   unsigned int msg_size=0;
     1F9 24CC      CLR	R12
     1FA 24DD      CLR	R13
(0070)   unsigned char checksum=0;
     1FB 2766      CLR	R22
(0071) 
(0072)   /// next state
(0073)   unsigned int state=ST_START;
     1FC E040      LDI	R20,0
     1FD EF50      LDI	R21,0xF0
(0074) 
(0075)   unsigned char t;
(0076)   signed int rec_data;
(0077) 
(0078)   chip_init();
     1FE 940E 0AF6 CALL	_chip_init
(0079)   interface_init();
     200 940E 0052 CALL	_interface_init
(0080)   spi_disable();
     202 940E 00CA CALL	_spi_disable
(0081) 
(0082)   clock_speed=EEPROMread((int)&eeprom_sck_period);
     204 E000      LDI	R16,0
     205 E010      LDI	R17,0
     206 940E 0B52 CALL	_EEPROMread
     208 9300 0074 STS	clock_speed,R16
(0083)   if (clock_speed==0xFF) clock_speed=SPI_SPEED_125KHZ;
     20A 3F0F      CPI	R16,0xFF
     20B F419      BNE	0x020F
     20C E085      LDI	R24,5
     20D 9380 0074 STS	clock_speed,R24
(0084)   spi_set_speed(clock_speed);
     20F 9100 0074 LDS	R16,clock_speed
     211 940E 00DD CALL	_spi_set_speed
(0085) 
(0086)   SEI();
     213 9478      BSET	7
(0087) 
(0088)   LED_GN_ON;
     214 9A92      SBI	0x12,2
(0089)   LED_RT_OFF;
     215 EF87      LDI	R24,0xF7
     216 EF9F      LDI	R25,0xFF
     217 B222      IN	R2,0x12
     218 2228      AND	R2,R24
     219 BA22      OUT	0x12,R2
     21A C06C      RJMP	0x0287
(0090) 
(0091)   /*
(0092)   while(2)
(0093)   {
(0094)   	rec_data=interface_getc();
(0095)   	//if a byte has been received -> process it
(0096)   	if(rec_data!=-1)
(0097)   	{
(0098)   		interface_putc(rec_data);
(0099)   		LED_GN_TOG;
(0100)   		LED_RT_TOG;
(0101)   	}
(0102)   }
(0103)   */
(0104) 
(0105)   while (2)
(0106)     {
(0107)       
(0108)       rec_data=interface_getc();
     21B 940E 0059 CALL	_interface_getc
     21D 0158      MOVW	R10,R16
(0109)       
(0110)       
(0111)       //if a aviliable byte has been received -> process it.
(0112)       if (rec_data!=-1)
     21E 01C5      MOVW	R24,R10
     21F 3F0F      CPI	R16,0xFF
     220 EFEF      LDI	R30,0xFF
     221 071E      CPC	R17,R30
     222 F409      BNE	0x0224
     223 C063      RJMP	0x0287
(0113)         {
(0114)           t=rec_data&0xFF;
     224 7090      ANDI	R25,0
     225 2EA8      MOV	R10,R24
(0115) 
(0116)           if (state==ST_START)
     226 3040      CPI	R20,0
     227 EFE0      LDI	R30,0xF0
     228 075E      CPC	R21,R30
     229 F439      BNE	0x0231
(0117)             {
(0118)               if (t==MESSAGE_START)
     22A 318B      CPI	R24,0x1B
     22B F009      BEQ	0x022D
     22C C05A      RJMP	0x0287
(0119)                 {
(0120)                   state = ST_GET_SEQ_NUM;
     22D E041      LDI	R20,1
     22E EF50      LDI	R21,0xF0
(0121)                   checksum = MESSAGE_START^0;
     22F E16B      LDI	R22,0x1B
(0122)                 }
(0123)             }
     230 C056      RJMP	0x0287
(0124)           else if (state==ST_GET_SEQ_NUM)
     231 3041      CPI	R20,1
     232 EFE0      LDI	R30,0xF0
     233 075E      CPC	R21,R30
     234 F429      BNE	0x023A
(0125)             {
(0126)               seq_num = t;
     235 82AA      STD	Y+2,R10
(0127)               state = ST_MSG_SIZE_1;
     236 E042      LDI	R20,2
     237 EF50      LDI	R21,0xF0
(0128)               checksum ^= t;
     238 256A      EOR	R22,R10
(0129)             }
     239 C04D      RJMP	0x0287
(0130)           else if (state==ST_MSG_SIZE_1)
     23A 3042      CPI	R20,2
     23B EFE0      LDI	R30,0xF0
     23C 075E      CPC	R21,R30
     23D F441      BNE	0x0246
(0131)             {
(0132)               msg_size = t<<8;
     23E 2CCA      MOV	R12,R10
     23F 24DD      CLR	R13
     240 2CDC      MOV	R13,R12
     241 24CC      CLR	R12
(0133)               state = ST_MSG_SIZE_2;
     242 E043      LDI	R20,3
     243 EF50      LDI	R21,0xF0
(0134)               checksum ^= t;
     244 256A      EOR	R22,R10
(0135)             }
     245 C041      RJMP	0x0287
(0136)           else if (state==ST_MSG_SIZE_2)
     246 3043      CPI	R20,3
     247 EFE0      LDI	R30,0xF0
     248 075E      CPC	R21,R30
     249 F441      BNE	0x0252
(0137)             {
(0138)               msg_size |= t;
     24A 2C2A      MOV	R2,R10
     24B 2433      CLR	R3
     24C 28C2      OR	R12,R2
     24D 28D3      OR	R13,R3
(0139)               state = ST_GET_TOKEN;
     24E E044      LDI	R20,4
     24F EF50      LDI	R21,0xF0
(0140)               checksum ^= t;
     250 2562      EOR	R22,R2
(0141)             }
     251 C035      RJMP	0x0287
(0142)           else if (state==ST_GET_TOKEN)
     252 3044      CPI	R20,4
     253 EFE0      LDI	R30,0xF0
     254 075E      CPC	R21,R30
     255 F471      BNE	0x0264
(0143)             {
(0144)               if (t==TOKEN)
     256 2D8A      MOV	R24,R10
     257 308E      CPI	R24,0xE
     258 F441      BNE	0x0261
(0145)                 {
(0146)                   state = ST_GET_DATA;
     259 E045      LDI	R20,5
     25A EF50      LDI	R21,0xF0
(0147)                   checksum ^= t;
     25B 2768      EOR	R22,R24
(0148)                   i=0;
     25C 2400      CLR	R0
     25D 2411      CLR	R1
     25E 8219      STD	Y+1,R1
     25F 8208      STD	Y+0,R0
(0149)                 }
     260 C026      RJMP	0x0287
(0150)               else state = ST_START;
     261 E040      LDI	R20,0
     262 EF50      LDI	R21,0xF0
(0151)             }
     263 C023      RJMP	0x0287
(0152)           else if (state==ST_GET_DATA)
     264 3045      CPI	R20,5
     265 EFE0      LDI	R30,0xF0
     266 075E      CPC	R21,R30
     267 F4A9      BNE	0x027D
(0153)             {
(0154)               msg_buffer[i++] = t;
     268 80E8      LDD	R14,Y+0
     269 80F9      LDD	R15,Y+1
     26A 01C7      MOVW	R24,R14
     26B 9601      ADIW	R24,1
     26C 8399      STD	Y+1,R25
     26D 8388      STD	Y+0,R24
     26E E785      LDI	R24,0x75
     26F E090      LDI	R25,0
     270 01F7      MOVW	R30,R14
     271 0FE8      ADD	R30,R24
     272 1FF9      ADC	R31,R25
     273 82A0      STD	Z+0,R10
(0155)               checksum ^= t;
     274 256A      EOR	R22,R10
(0156)               if (i==msg_size)
     275 8008      LDD	R0,Y+0
     276 8019      LDD	R1,Y+1
     277 140C      CP	R0,R12
     278 041D      CPC	R1,R13
     279 F469      BNE	0x0287
(0157)                 {
(0158)                   state = ST_GET_CHECK;
     27A E046      LDI	R20,6
     27B EF50      LDI	R21,0xF0
(0159)                 }
(0160)             }
     27C C00A      RJMP	0x0287

⌨️ 快捷键说明

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