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

📄 stk500_isp.lst

📁 很好的制作AVR32 ICE的资料
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
      2F E5CF      LDI	R28,0x5F
      30 E0D8      LDI	R29,0x8
      31 BFCD      OUT	0x3D,R28
      32 BFDE      OUT	0x3E,R29
      33 51CE      SUBI	R28,0x1E
      34 40D0      SBCI	R29,0
      35 EA0A      LDI	R16,0xAA
      36 8308      STD	Y+0,R16
      37 2400      CLR	R0
      38 E6EA      LDI	R30,0x6A
      39 E0F0      LDI	R31,0
      3A E011      LDI	R17,1
      3B 3AE1      CPI	R30,0xA1
      3C 07F1      CPC	R31,R17
      3D F011      BEQ	0x0040
      3E 9201      ST	R0,Z+
      3F CFFB      RJMP	0x003B
      40 8300      STD	Z+0,R16
      41 E5E4      LDI	R30,0x54
      42 E0F0      LDI	R31,0
      43 E6A0      LDI	R26,0x60
      44 E0B0      LDI	R27,0
      45 E010      LDI	R17,0
      46 E000      LDI	R16,0
      47 BF0B      OUT	0x3B,R16
      48 35EE      CPI	R30,0x5E
      49 07F1      CPC	R31,R17
      4A F021      BEQ	0x004F
      4B 95C8      LPM
      4C 9631      ADIW	R30,1
      4D 920D      ST	R0,X+
      4E CFF9      RJMP	0x0048
      4F 940E 01F3 CALL	_main
_exit:
      51 CFFF      RJMP	_exit
FILE: E:\单片机\源程序\Snail_mkII\STK500_V2\ICC\interface.c
(0001) /**	\file
(0002) 	<b>USB receive and transmit</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) 
(0009) #include <iccioavr.h>
(0010) #include "tools.h"
(0011) #include "interface.h"
(0012) 
(0013) #include "config.h"
(0014) 
(0015) unsigned char checksum;
(0016) 
(0017) #ifdef CONFIG_INTERFACE_USB
(0018) 
(0019) //Hardware
(0020) #define	USB_TXE		(PINB&BIT6_POS)
(0021) #define	USB_RXF		(PINC&BIT3_POS)
(0022) #define	USB_RD_ON	PORTC&=BIT1_NEG
(0023) #define	USB_RD_OFF	PORTC|=BIT1_POS
(0024) #define	USB_WR_ON	PORTC|=BIT2_POS
(0025) #define	USB_WR_OFF	PORTC&=BIT2_NEG
(0026) 
(0027) /**
(0028) 	Initializes the usb interface
(0029) */
(0030) void interface_init(void)
(0031) {
(0032)   PORTC |= BIT1_POS;			//USB_RD inactive
(0033)   DDRC |= BIT1_POS|BIT2_POS;	//USB_RD, USB_WR as output
(0034) }
(0035) 
(0036) /**
(0037) 	Reads a byte from the USB interface
(0038) 	
(0039) 	@return received character or -1 if no character has been received
(0040) */
(0041) signed int interface_getc(void)
(0042) {
(0043)   unsigned char t;
(0044) 
(0045)   if (!USB_RXF)
(0046)     {
(0047)       USB_RD_ON;
(0048)       asm("NOP");
(0049)       t = PIND;
(0050)       USB_RD_OFF;
(0051) 
(0052)       return t;
(0053)     }
(0054)   else return -1;
(0055) }
(0056) 
(0057) /**
(0058) 	Writes a byte to the USB
(0059) 	
(0060) 	@param t Byte to be written	
(0061) */
(0062) void interface_putc(unsigned char t)
(0063) {
(0064)   while (USB_TXE);
(0065) 
(0066)   //PORTD auf Ausgang
(0067)   DDRD = 0xFF;
(0068)   //Daten auf den Port
(0069)   PORTD = t;
(0070) 
(0071)   USB_WR_ON;
(0072)   USB_WR_OFF;
(0073) 
(0074)   //PORTC auf Eingang
(0075)   DDRD = 0x00;
(0076)   //Pull-Ups ein
(0077)   PORTD = 0xFF;
(0078) 
(0079)   checksum ^= t;
(0080) }
(0081) 
(0082) #endif
(0083) 
(0084) #ifdef CONFIG_INTERFACE_RS232
(0085) 
(0086) #define USART_BAUD_RATE 115200   
(0087) #define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16l)-1)
(0088) 
(0089) /**
(0090) 	Initializes the rs232 interface
(0091) 	
(0092) 	Autor: Lukas Salzburger
(0093) */
(0094) void interface_init(void)
(0095) {
(0096)   UCSRB =  (1<<RXEN) | (1<<TXEN);
_interface_init:
      52 E188      LDI	R24,0x18
      53 B98A      OUT	0x0A,R24
(0097)   UBRRL = (unsigned char) USART_BAUD_SELECT;
      54 E087      LDI	R24,7
      55 B989      OUT	0x09,R24
(0098)   UBRRH = (unsigned char) (USART_BAUD_SELECT>>8);
      56 2422      CLR	R2
      57 BC20      OUT	0x20,R2
      58 9508      RET
(0099) }
(0100) 
(0101) /**
(0102) 	Reads a byte from the UART interface
(0103) 	
(0104) 	Autor: Lukas Salzburger
(0105) 	
(0106) 	@return received character or -1 if no character has been received
(0107) */
(0108) signed int interface_getc(void)
(0109) {
(0110)   
(0111)   if (UCSRA & (1<<RXC))
_interface_getc:
      59 9B5F      SBIS	0x0B,7
      5A C003      RJMP	0x005E
(0112)     {
(0113)       return UDR;
      5B B10C      IN	R16,0x0C
      5C 2711      CLR	R17
      5D C002      RJMP	0x0060
(0114)     }
(0115)   else return -1;
      5E EF0F      LDI	R16,0xFF
      5F EF1F      LDI	R17,0xFF
      60 9508      RET
(0116) }
(0117) 
(0118) /**
(0119) 	Writes a byte to the UART
(0120) 	
(0121) 	Autor: Lukas Salzburger
(0122) 	
(0123) 	@param t Byte to be written	
(0124) */
(0125) void interface_putc(unsigned char t)
(0126) {
(0127) 
(0128)   while (!(UCSRA & (1<<UDRE)));
_interface_putc:
  t                    --> R16
      61 9B5D      SBIS	0x0B,5
      62 CFFE      RJMP	_interface_putc
(0129) 
(0130)   UDR = t;
      63 B90C      OUT	0x0C,R16
(0131)   checksum ^= t;
      64 9020 006A LDS	R2,checksum
      66 2620      EOR	R2,R16
      67 9220 006A STS	checksum,R2
      69 9508      RET
_interface_print:
  s                    --> R20
      6A 934A      ST	R20,-Y
      6B 935A      ST	R21,-Y
      6C 01A8      MOVW	R20,R16
(0132) }
(0133) 
(0134) #endif
(0135) 
(0136) /**
(0137) 	Writes a string to USB
(0138) 
(0139) 	@param s The string to be send
(0140) */
(0141) void interface_print(unsigned char *s)
(0142) {
      6D C005      RJMP	0x0073
(0143)   while (*s)
(0144)     {
(0145)       interface_putc(*s);
      6E 01FA      MOVW	R30,R20
      6F 8100      LDD	R16,Z+0
      70 DFF0      RCALL	_interface_putc
(0146)       s++;
      71 5F4F      SUBI	R20,0xFF
      72 4F5F      SBCI	R21,0xFF
      73 01FA      MOVW	R30,R20
      74 8020      LDD	R2,Z+0
      75 2022      TST	R2
      76 F7B9      BNE	0x006E
      77 9159      LD	R21,Y+
      78 9149      LD	R20,Y+
      79 9508      RET
_interface_put16:
  t                    --> R20
      7A 934A      ST	R20,-Y
      7B 935A      ST	R21,-Y
      7C 01A8      MOVW	R20,R16
(0147)     }
(0148) }
(0149) 
(0150) /**
(0151) 	Sends a 16 bit value over the USB
(0152) 	MSB first
(0153) 
(0154) 	@param t Value to be send
(0155) */
(0156) void interface_put16(unsigned int t)
(0157) {
(0158)   interface_putc((t>>8)&0xFF);
      7D 018A      MOVW	R16,R20
      7E 2F01      MOV	R16,R17
      7F 2711      CLR	R17
      80 7010      ANDI	R17,0
      81 DFDF      RCALL	_interface_putc
(0159)   interface_putc((t>>0)&0xFF);
      82 018A      MOVW	R16,R20
      83 7010      ANDI	R17,0
      84 DFDC      RCALL	_interface_putc
      85 9159      LD	R21,Y+
      86 9149      LD	R20,Y+
      87 9508      RET
(0160) }
(0161) 
(0162) /**
(0163) 	Resets the checksum accumulator
(0164) */
(0165) void interface_reset_check(void)
(0166) {
(0167)   checksum=0;
_interface_reset_check:
      88 2422      CLR	R2
      89 9220 006A STS	checksum,R2
      8B 9508      RET
(0168) }
(0169) 
(0170) /**
(0171) 	Sends the accumulated checksum
(0172) */
(0173) void interface_send_check(void)
(0174) {
(0175)   interface_putc(checksum);
_interface_send_check:
      8C 9100 006A LDS	R16,checksum
      8E DFD2      RCALL	_interface_putc
(0176)   checksum=0;
      8F 2422      CLR	R2
      90 9220 006A STS	checksum,R2
      92 9508      RET
_spi_enable:
  i0                   --> R20
      93 934A      ST	R20,-Y
FILE: E:\单片机\源程序\Snail_mkII\STK500_V2\ICC\spi.c
(0001) /**	\file
(0002) 	<b>SPI</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) #include <macros.h>
(0011) #include "spi.h"
(0012) #include "tools.h"
(0013) #include "extern_vars.h"
(0014) 
(0015) static unsigned char use_sw_spi = 0;
(0016) 
(0017) 
(0018) #if defined(ATMega8)
(0019) // HW Normal M8 version
(0020)     #define MOSI_SET	PORTB|=BIT(3);
(0021)     #define MOSI_CLEAR	PORTB&=~BIT(3);
(0022) 
(0023)     #define MISO_IN		(PINB & BIT(4))
(0024)     #define SCK_SET     PORTB |= BIT(5);
(0025)     #define SCK_CLEAR   PORTB &= ~BIT(5);
(0026)     
(0027)     #define DDR_MOSI_OUT    DDRB |= BIT(3);
(0028)     #define DDR_MOSI_IN     DDRB &= ~BIT(3);NOP();
(0029)     #define DDR_SCK_OUT     DDRB |= BIT(5);
(0030)     #define DDR_SCK_IN      DDRB &= ~BIT(5);NOP();
(0031)     
(0032) #elif defined(ATMega16) || defined(ATMega32)
(0033) // HW Snail Emluator Kit
(0034)     #define MOSI_SET    PORTB |= BIT(5);
(0035)     #define MOSI_CLEAR	PORTB &= ~BIT(5);
(0036)     
(0037)     #define MISO_IN		(PINB & BIT(6))
(0038)     #define SCK_SET     PORTB |= BIT(7);
(0039)     #define SCK_CLEAR   PORTB &= ~BIT(7);
(0040)     
(0041)     #define DDR_MOSI_OUT    DDRB |= BIT(5);
(0042)     #define DDR_MOSI_IN     DDRB &= ~BIT(5);NOP();
(0043)     #define DDR_SCK_OUT     DDRB |= BIT(7);
(0044)     #define DDR_SCK_IN      DDRB &= ~BIT(7);NOP();
(0045) #endif
(0046) 
(0047) void spi_enable(void)
(0048) {
(0049)   unsigned char i;
(0050) 
(0051)   R_RES_ON;
      94 EE8F      LDI	R24,0xEF
      95 EF9F      LDI	R25,0xFF
      96 B228      IN	R2,0x18
      97 2228      AND	R2,R24
      98 BA28      OUT	0x18,R2
(0052)   wait_ms(2);
      99 E002      LDI	R16,2
      9A E010      LDI	R17,0
      9B 940E 01E4 CALL	_wait_ms
(0053)   
(0054)   //PORTB &= BIT3_NEG & BIT5_NEG;	//MOSI and SCK low
(0055)   //DDRB |= BIT3_POS | BIT5_POS;	//MOSI and SCK als Ausgang
(0056)   MOSI_CLEAR;SCK_CLEAR;
      9D 98C5      CBI	0x18,5
      9E 98C7      CBI	0x18,7
(0057)   DDR_MOSI_OUT;DDR_SCK_OUT
      9F 9ABD      SBI	0x17,5
      A0 9ABF      SBI	0x17,7
(0058)   
(0059)   if (EEPROMread((int)&eeprom_sck_period) > 64)
      A1 E000      LDI	R16,0
      A2 E010      LDI	R17,0
      A3 940E 0B52 CALL	_EEPROMread
      A5 E480      LDI	R24,0x40
      A6 1780      CP	R24,R16
      A7 F430      BCC	0x00AE
(0060)     {
(0061)       use_sw_spi = 1;  //使用模拟SPI
      A8 E081      LDI	R24,1
      A9 9380 0060 STS	0x0060,R24
(0062)       SPCR=0x00;
      AB 2422      CLR	R2
      AC B82D      OUT	0x0D,R2
(0063)     }
      AD C00A      RJMP	0x00B8
(0064)   else
(0065)     {
(0066)       use_sw_spi = 0;  //使用硬件SPI
      AE 2422      CLR	R2
      AF 9220 0060 STS	0x0060,R2
(0067)       SPCR = 0x51;					//SPI Master /16
      B1 E581      LDI	R24,0x51
      B2 B98D      OUT	0x0D,R24
(0068)       spi_set_speed(EEPROMread((int)&eeprom_sck_period));
      B3 E000      LDI	R16,0
      B4 E010      LDI	R17,0
      B5 940E 0B52 CALL	_EEPROMread
      B7 D025      RCALL	_spi_set_speed
(0069)     }
(0070) 
(0071)   R_RES_OFF;
      B8 9AC4      SBI	0x18,4
(0072)   for (i=0;i<200;i++) asm("nop");
      B9 2744      CLR	R20
      BA C002      RJMP	0x00BD
      BB 0000      NOP
      BC 9543      INC	R20
      BD 3C48      CPI	R20,0xC8
      BE F3E0      BCS	0x00BB
(0073)   R_RES_ON;
      BF EE8F      LDI	R24,0xEF
      C0 EF9F      LDI	R25,0xFF
      C1 B228      IN	R2,0x18
      C2 2228      AND	R2,R24
      C3 BA28      OUT	0x18,R2
(0074)   wait_ms(2);
      C4 E002      LDI	R16,2
      C5 E010      LDI	R17,0
      C6 940E 01E4 CALL	_wait_ms
      C8 9149      LD	R20,Y+
      C9 9508      RET
(0075) 
(0076) }
(0077) 
(0078) void spi_disable(void)
(0079) {
(0080)   SPCR=0x00;						//SPI aus
_spi_disable:
      CA 2422      CLR	R2
      CB B82D      OUT	0x0D,R2
(0081)   //DDRB &= BIT3_NEG & BIT5_NEG;	//MOSI und SCK als Eingang (hochohmig)
(0082)   DDR_MOSI_IN;DDR_SCK_IN;
      CC 98BD      CBI	0x17,5
      CD 0000      NOP
      CE 98BF      CBI	0x17,7
      CF 0000      NOP
(0083)   R_RES_OFF;
      D0 9AC4      SBI	0x18,4
      D1 9508      RET

⌨️ 快捷键说明

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