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

📄 isojtag_avr910_3.8.s

📁 GCC source code for do it yoursel a avr programer and jtagice debuger.
💻 S
📖 第 1 页 / 共 4 页
字号:
	adiw	ZL,1			// next char	rjmp	put_stringps_ret:	ret	//**************************************************************************//// FUNCTION//	put_table//// DESCRIPTION//	Send Z - pointed table on the UART Tx line.////**************************************************************************	put_table:	lpm	tst	r0	breq	pt_ret			// check for end of table (0x00)	mov	u_data,r0		rcall	putc			// putc(Byte)	adiw	ZL,2			// skip MSB	rjmp	put_tablept_ret:	ret	//**************************************************************************//// FUNCTION//	bel_table//// DESCRIPTION//	C=0 if device belongs to table.////**************************************************************************bel_table:	lpm						// read table	tst	r0					// check for end of table	breq	c1_ret	cp	device,r0	breq	c0_ret			// C=0	adiw	ZL,2			// skip MSB	rjmp	bel_table	c1_ret:	sec					// C=1c0_ret:	ret		//**************************************************************************//// FUNCTION//	set_pagesize//// DESCRIPTION//	sets programming Page size for selected Device.////**************************************************************************set_pagesize:	lpm						// read table	tst	r0					// check for end of table	breq	spa_end			// no Pagesize to set	cp	device,r0	breq	spa_set			// C=0	adiw	ZL,2			// skip MSB	rjmp	set_pagesize	spa_set:	adiw	ZL,1			// Point to high Byte of Word	lpm						// get Pagesize to R0	mov Pagewords,r0	mov Bcnt3,Pagewords		// initiate Counterspa_end:	ret		//**************************************************************************//// FUNCTION//	set_pollcode//// DESCRIPTION//	sets Code for Polling Flash for selected Device.////**************************************************************************set_pollcode:	lpm						// read table	tst	r0					// check for end of table	breq	spo_end			// no Pollcode to set	cp	device,r0	breq	spo_set			// C=0	adiw	ZL,2			// skip MSB	rjmp	set_pollcode	spo_set:	adiw	ZL,1			// Point to high Byte of Word	lpm						// get Pagesize to R0	mov PollcodeF,r0		// Set Pollcode for Flash Romspo_end:	ret		//**************************************************************************//// FUNCTION//	delay//// DESCRIPTION//	 Make delay 1mS (x temp1).////**************************************************************************delay:		ldi	temp2,40dl2:	ldi	temp3,(XTAL/120)dl1:	dec	temp3	brne	dl1	dec	temp2	brne	dl2	dec	temp1	brne	delay	ret//**************************************************************************//// FUNCTION//	 spi123//// DESCRIPTION//	 Write bytes 1 to 3 on the SPI. Byte 1 must be loadet into s_data//       Byte 2 ist addrh, Byte 3 ist addrl////**************************************************************************spi123:	rcall	wrser			// wrser(s_data) SPI write (byte 1)	mov	s_data,addrh	rcall	wrser			// wrser(addrh)  SPI write (byte 2)	mov	s_data,addrl		rcall	wrser			// wrser(addrl)  SPI write (byte 3)	ret//**************************************************************************//// FUNCTION//	 w1234 (for Code simplification,)//// DESCRIPTION//	 Write SPI bytes 1 to 4.//            Byte 1 must be loadet into cmd1//            Byte 2 must be loadet into cmd2//            Byte 3 must be loadet into cmd3//            Byte 4 must be loadet into u_data////**************************************************************************w1234:	mov s_data,cmd1	rcall wrser	mov s_data,cmd2	rcall wrser	mov s_data,cmd3	rcall wrser	mov s_data,u_data		// get Byte 4 from serial	rcall wrser	ret//**************************************************************************//// FUNCTION//	 w123r4 (for Code simplification)//// DESCRIPTION//	 Write SPI bytes 1 to 3, read Byte 4 to serial.//            Byte 1 must be loadet into cmd1//            Byte 2 must be loadet into cmd2//            Byte 3 must be loadet into cmd3////**************************************************************************w123r4:	mov s_data,cmd1	rcall wrser	mov s_data,cmd2	rcall wrser	mov s_data,cmd3	rcall wrser	rcall rdser	mov u_data,s_data		// put Byte 4 to serial	rcall putc	ret//**************************************************************************//// FUNCTION//	rdser, wrser//// DESCRIPTION//	 Write and read bytes on the SPI.////**************************************************************************rdser:		clr	s_datawrser:		ldi	temp1,8			// load bit counter	ldi	rd_s_data,0wrs0:	rol	s_data	brcc	wrs1	set_MOSI			// MOSI = 1	rjmp	wrs2wrs1:	clr_MOSI			// MOSI = 0wrs2:	lsl	rd_s_data	sbic_MISO			// read MISO	ori	rd_s_data,1	rcall pulse_SCK			// pulse SCK	dec	temp1			// advance bit counter	brne	wrs0			// loop	mov	s_data,rd_s_data	ret//**************************************************************************//// FUNCTION//	read_send_progmem//// DESCRIPTION//	 Read one adress (2 Byte) from Program Memory and send it through UART////**************************************************************************read_send_progmem:	tst	device	brmi	rsp1			// S89 device	ldi	s_data,0x20		// read low Byte	rcall	wrser			// wrser(0x28)  SPI write (byte 1)	mov	s_data,addrh	rjmp	rsp2rsp1:	mov	s_data,addrh		// s_data = (addrh << 3) | 0x01//	rcall	shift_s_data3	ori	s_data,0x01rsp2:	rcall	wrser			// wrser(addrh) SPI write (byte 2) (S89=byte1)	mov	s_data,addrl		rcall	wrser			// wrser(addrl) SPI write (byte 3)	rcall	rdser			//              SPI read  (byte 4)	mov	u_data,s_data	rcall	putc			// send data	tst	device	brmi	rsp3			// S89 device	ldi	s_data,0x28			// read High Byte	rcall	wrser			// wrser(0x20)  SPI write (byte 1)	mov	s_data,addrh		rcall	wrser			// wrser(addrh) SPI write (byte 2)	mov	s_data,addrl		rcall	wrser			// wrser(addrl) SPI write (byte 3)	rcall	rdser			//              SPI read  (byte 4)	mov	u_data,s_data	rcall	putc			// send datarsp3:	adiw	addrl,1			// Auto increment address	ret//**************************************************************************//// FUNCTION//	read_send_datamem//// DESCRIPTION//	 Read one Byte from Data Memory (eeprom) and send it through UART////**************************************************************************read_send_datamem:			// Subroutine to read one eeprom Address	tst	device	brmi	rsd1			// S89 device	ldi	s_data,0xa0	rcall	wrser			// wrser(0xa0)   SPI write (byte 1)	mov	s_data,addrh	rjmp	rsd2rsd1:	cpi	device,0x87		// if (device == S53)	breq	rsd3			// no Support for 89S53 device due to Bug in AVRProg V1.37	mov	s_data,addrh	rcall	shift_s_data3	ori	s_data,0x05rsd2:	rcall	wrser			// wrser(addrh)  SPI write (byte 2)	mov	s_data,addrl		rcall	wrser			// wrser(addrl)  SPI write (byte 3)	rcall	rdser			//               SPI read  (byte 4)	mov	u_data,s_data	rcall	putc			// send data	adiw	addrl,1			// Auto increment address	retrsd3:	pop	temp1			// remove return Adress from Stack in case of Error	pop	temp1	rjmp	put_err//**************************************************************************//// FUNCTION//	eeprom_write//// DESCRIPTION//	 Write u_data to Data Memory (eeprom)////**************************************************************************eeprom_write:	tst	device	brmi	eew1			// S89 device	ldi	s_data,0xc0	rcall	wrser			// wrser(0xc0)   SPI write (byte 1)	mov	s_data,addrh	rjmp	eew2	eew1:	cpi	device,0x87		// if (device == S53)	breq	eew3	mov	s_data,addrh	rcall	shift_s_data3	ori	s_data,0x06eew2:	rcall	wrser			// wrser(addrh)  SPI write (byte 2)	mov	s_data,addrl	rcall	wrser			// wrser(addrl)  SPI write (byte 3)	mov	s_data,u_data	rcall	wrser			// wrser(u_data) SPI write (byte 4)	ldi	temp1,10		// delay 10mS	rcall	delay	adiw	addrl,1			// Auto increment address	reteew3:	pop temp1			// remove return Adress from Stack in case of failure	pop temp1	rjmp	put_err//**************************************************************************//// FUNCTION//	shift_s_data3//// DESCRIPTION//	 Shift s_data 3 times left for S89 device.////**************************************************************************shift_s_data3:	lsl	s_data	lsl	s_data	lsl	s_data	brcc	s3_ret	cpi	device,0x87		// if (device != S53)	brne	s3_ret		sbr	s_data, 4		// a13 +s3_ret:	ret//**************************************************************************//// FUNCTION//	healthcheck//// DESCRIPTION//	 changes color of dual color led.////**************************************************************************healthcheck:				// for dual color LED	clr_LED					// LED red	ldi temp1,200			// 200 ms	rcall delay			ldi temp1,200			// again 200 ms	rcall delay	ldi s_data,200			// counter RegisterLEDloop:					// Pulse for yellow LED	set_LED					// LED green	ldi temp1,2				// 2 ms	rcall delay	clr_LED					// LED red	ldi temp1,1				// 1 ms	rcall delay	dec s_data				// dec. counter	brne LEDloop	set_LED					// LED green	ret//**************************************************************************//**************************************************************************//**************************************************************************//// INIT//// DESCRIPTION//	Initialization////**************************************************************************//**************************************************************************//**************************************************************************INIT://	ldi	temp1,RAMEND//	out SPL,temp1			// Locate stack - done automatically by avr-gcc	ldi	temp1,PAGESIZE		// default Pagesize	mov Pagewords,temp1	mov Bcnt3,Pagewords		// set counter for Pagesize	ldi	device,0x20			// S2313 as default	clr B_Mode				// Flag for Block Modes (see Note 16)	clr B_Flag				// Flag for eNhanced Block write	rcall init_ports		// Initialize ports	rcall release_ports		// Release ports	rcall	u_init			// Initialize UART	rcall healthcheck		// show that Prog is working after Powerup (LED test)	 	//**************************************************************************//// PROGRAM//	waitcmd -> main//// DESCRIPTION//	Wait for and execute commands.////**************************************************************************waitcmd:	rcall	getc			// while (getc() == ESC) {}//	cpi		u_data,0x1b	breq	waitcmd//====== 'T' - Device Type ==================================================	cpi	u_data,'T'		// 'T' Device type	brne	w0	rcall	getc	mov	device,u_data		// get device type	//table Dev_M				// prepare to set Pagesize	ldi	ZL,lo8(pm(Dev_M))		// low	ldi	ZH,hi8(pm(Dev_M))		// high	lsl ZL
	rol ZH
	rcall set_pagesize		// If device has Page Mode support, set Pagesize	ldi	temp1,0xFF	mov	PollcodeF,temp1		// preset PollcodeF with 0xFF, will be overwritten if Pollcode known	//table Dev_S				// prepare to set Polling Code	ldi	ZL,lo8(pm(Dev_S))		// low	ldi	ZH,hi8(pm(Dev_S))		// high	lsl ZL
	rol ZH
	rcall set_pollcode		// If device has no Page Size support, set code for Polling Flash	rjmp	put_ret//====== 'S' - Return Software Identifier ===================================w0:		cpi	u_data,'S'		// 'S' Return software identifier	brne	w1	//table	ID_Str	ldi	ZL,lo8(pm(ID_Str))		// low	ldi	ZH,hi8(pm(ID_Str))		// high	lsl ZL
	rol ZH
	rcall	put_string		// put string "AVR ISP"	rjmp	waitcmd//====== 'V' - Return Software Version ======================================w1:		cpi	u_data,'V'		// 'V' Return software version	brne	w2	//table	SW_Ver	ldi	ZL,lo8(pm(SW_Ver))		// low	ldi	ZH,hi8(pm(SW_Ver))		// high	lsl ZL
	rol ZH
	rcall	put_string		// put software version	rjmp	waitcmd//====== 'v' - Return Hardware Version ======================================w2:		cpi	u_data,'v'		// 'v' Return hardware version	brne	w3	//table	HW_Ver	ldi	ZL,lo8(pm(HW_Ver))		// low	ldi	ZH,hi8(pm(HW_Ver))		// high	lsl ZL

⌨️ 快捷键说明

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