isojtag_avr910_3.8.s

来自「GCC source code for do it yoursel a avr 」· S 代码 · 共 1,955 行 · 第 1/4 页

S
1,955
字号
	rol ZH
	rcall	put_string		// put hardware version	rjmp	waitcmd//====== 't' - Show Supported Devices =======================================w3:		cpi	u_data,'t'		// 't' Show supported devices	brne	w4	//table	Dev_S	ldi	ZL,lo8(pm(Dev_S))		// low	ldi	ZH,hi8(pm(Dev_S))		// high	lsl ZL
	rol ZH
	rcall	put_table		// put supported devices codes	//table	Dev_M	ldi	ZL,lo8(pm(Dev_M))		// low	ldi	ZH,hi8(pm(Dev_M))		// high	lsl ZL
	rol ZH
	rcall	put_table		// put supported devices codes	ldi	u_data,0x00		// putc(0x00) - end of device list	rcall	putc	rjmp	waitcmd//====== 'p' - Return Programmer Type =======================================w4:		cpi	u_data,'p'		// 'p' Return programmer type	brne	w5	ldi	u_data,'S'		// putc('S') - serial programmer	rcall	putc	rjmp	waitcmd//====== 'a' - Return autoincrement address support =========================w5:		cpi	u_data,'a'		// 'a' Return address auto increment	brne	w51	ldi	u_data,'Y'		// putc('Y') - supports autoinc	rcall	putc	rjmp	waitcmd//====== 'M' - Return enhanced Mode support (Note 14) ========================w51:	//	cpi	u_data,'M'		// 'M' Return enhanced mode Support//	brne	w52//	ldi u_data,'Y'			// putc('Y') - supports enhanced Mode//	rcall putc//	rjmp	waitcmd//====== 'i' - Return Chip ID (Note 14) ======================================w52:	cpi	u_data,'i'		// 'i' Return Chip ID	brne	w53	//table	ChipID	ldi	ZL,lo8(pm(ChipID))		// low	ldi	ZH,hi8(pm(ChipID))		// high	lsl ZL
	rol ZH
	rcall	put_string		// put Chip ID string 	ldi u_data,0x0a			// putc(LF)	rcall 	putc	rjmp	put_ret//====== 'b' - Return Block write Mode support (Note 17) ========================w53:		cpi	u_data,'b'		// 'b' Return enhanced mode Support	brne	w6	ldi u_data,'Y'			// putc('Y') - supports enhanced Mode	rcall putc	ldi	u_data,hi8(pm(BUFSIZE))// putc((BUFSIZE>>8) & 0xff)//	rcall putc	ldi	u_data,lo8(pm(BUFSIZE))	// putc(BUFSIZE&0xff)//	rcall putc	rjmp	waitcmd//====== 'x' - Set LED ======================================================w6:		cpi	u_data,'x'		// 'x' Set LED (LED off or green)	brne	w61	rcall	getc			// get parameter	set_LED	rjmp	put_ret//====== 'y' - Clear LED ====================================================w61:		cpi	u_data,'y'		// 'y' Clear LED (LED on or red)	brne	w7	rcall	getc			// get parameter	clr_LED	rjmp	put_ret//===========================================================================// We require that the device code be selected before any of the other commandsw7:	//table	Dev_S			// load pointer	ldi	ZL,lo8(pm(Dev_S))		// low	ldi	ZH,hi8(pm(Dev_S))		// high	lsl ZL
	rol ZH
	rcall	bel_table	brcc	w71				// device belongs to table	//table	Dev_M		ldi	ZL,lo8(pm(Dev_M))		// low	ldi	ZH,hi8(pm(Dev_M))		// high	lsl ZL
	rol ZH
	rcall	bel_table	brcc	w71				// device belongs to table	rjmp	put_err			// not match, goto put_err()////====== 'P' - Enter Programming Mode =======================================w71:		cpi	u_data,'P'		// 'P' Enter programming mode	breq	w70	rjmp	w8w70:		clr_LED					// LED on	rcall catch_ports				// catch ports	clr_SCK					// clear SCK	rcall pas_RESET				// set RESET passive	ldi	temp1,50			// delay 50mS//	rcall	delay	rcall act_RESET				// set RESET active	ldi	temp1,50			// delay 50mS//	rcall	delay		ldi	s_data,0xac		rcall	wrser			// wrser(0xac) SPI write (byte 1)	ldi	s_data,0x53		rcall	wrser			// wrser(0x53) SPI write (byte 2)							// SPI Synchronization (fix!)	cpi	device,0x20			// if ( (device >= 0x20) && (device <= 0x7F) )	brlo	s2	tst	device	brmi	s2		ldi	temp3,32			// count = 32//s1:	rcall	rdser			// SPI read  (byte 3)	cpi	s_data,0x53			// if (rdser == 0x53)	breq	s3				// break	ldi	s_data,0x00						rcall	wrser			// wrser(0x00) SPI write (byte 4)	rcall pulse_SCK				// pulse SCK	ldi	s_data,0xac			rcall	wrser			// wrser(0xac) SPI write (byte 1)	ldi	s_data,0x53			rcall	wrser			// wrser(0x53) SPI write (byte 2)	dec	temp3				// count-1	brne	s1				// loop	rjmp	s3				// elses2:	ldi	s_data,0x00		rcall	wrser			// wrser(0x00) SPI write (byte 3)s3:	tst	device	brmi	s4				// S89 device	ldi	s_data,0x00		rcall	wrser			// wrser(0x00) SPI write (byte 4)s4:	ldi	temp1,4				// delay 4mS//	rcall	delay	rjmp	put_ret//====== 'c' - Write Program Memory, Low Byte ===============================w8:		cpi	u_data,'c'		// 'c' Write program memory, low byte	brne	w9	rcall	getc			// get data bytew8b: 	ldi	s_data,0x40	mov	pol_cmd,s_data		// save command for polling		tst	device	brmi	w81			// S89 device	rcall	wrser			// wrser(0x40)   SPI write (byte 1)	mov	s_data,addrh	rjmp	w82w81:	mov	s_data,addrh		// s_data = (addrh << 3) | 0x02//	rcall	shift_s_data3	ori	s_data,0x02w82:	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)	mov	p_data,u_data		// save data for polling	mov	pol_al,addrl		// save address for polling	mov	pol_ah,addrh	tst	device	brpl	w83 	adiw	addrl,1			// Auto increment address for S89 devicew83:	rjmp	wait_S			// write FLASH delay//====== 'C' - Write Program Memory, High Byte ==============================w9:		cpi	u_data,'C'		// 'C' Write program memory, high byte	brne	w92	rcall	getc			// get data bytew9a:	tst	device	brmi	w91			// S89 device	ldi	s_data,0x48		mov	pol_cmd,s_data		// save command for polling		rcall	wrser			// wrser(0x48)   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)	mov	s_data,u_data		// wrser(u_data) SPI write (byte 4)	rcall	wrser	mov	p_data,u_data		// save data for polling	mov	pol_al,addrl		// save address for polling	mov	pol_ah,addrh	adiw	addrl,1			// Auto increment address	rjmp	wait_S			// write FLASH delayw91:	rjmp	put_err			// S89 device have byte wide program memory!	//====== 'B' Block Write Memory (see Note 17) ======================w92:		cpi	u_data,'B'		// 'B' Block Write Program Memory	breq w92a	rjmp w10w92a:	rcall	getc			// get count High Byte	tst u_data	breq w92b	ldi u_data,1	rjmp put_err	w92b:	rcall	getc			// get count Low Byte	cpi u_data,BUFSIZE+1		// check maximum count 	brlo w92c	ldi u_data,2	rjmp put_errw92c:	mov Bcnt1, u_data		// ignore BUFSIZE high Byte (must be 0 here)	mov Bcnt2, u_data	rcall	getc			// get Memory type to write	mov Memtype,u_data		// Flag for Memtype	clr XH	ldi XL, RAMSTART		// set X pointer to SRAM beginw93:	rcall	getc			// get data until Bcnt1 is reached		st X+, u_data			// store data to SRAM	dec Bcnt1	brne w93	clr XH	ldi XL, RAMSTART		// set X pointer to SRAM begin	ldi temp3,1	mov B_Mode,temp3		// B_Mode != 0	mov u_data,Memtype		// restore Memtype 	cpi	u_data,'F'		// 'F' Flash Memory ist to write	breq	w94a	cpi	u_data,'E'		// 'E' eeprom Memory ist to write	breq	w94				// Entry Point for Data Memory Block write	ldi u_data,3	rjmp put_errw94:						// write Data (EEPROM) Memory	ld u_data,X+	rcall eeprom_write	dec Bcnt2	brne w94	rjmp put_ret//Entry Point for Flash Block writew94a:	//table	Dev_M		ldi	ZL,lo8(pm(Dev_M))		// low	ldi	ZH,hi8(pm(Dev_M))		// high	lsl ZL
	rol ZH
	rcall	bel_table	brcc w95				// device belongs to table	rjmp	w96				// not match, goto "non Paged" Modew95:						// Entry Point for AVRProg Block Flash write	ldi	s_data,0x40			// write low byte	rcall spi123	ld	s_data, X+	rcall	wrser			// wrser(s_data) SPI write (byte 4)	ldi	s_data,0x48			// write high byte	mov	pol_cmd,s_data		// save command for polling		rcall spi123	ld	s_data, X+	mov	p_data,s_data		// save data for polling	mov	pol_al,addrl		// save address for polling	mov	pol_ah,addrh	rcall	wrser			// wrser(u_data) SPI write (byte 4)	adiw	addrl,1			// Auto increment address	dec Bcnt2	breq w95b	dec Bcnt2	breq w95b	tst B_Mode	breq w95				// Loop for "Block Mode Commands" see Note 16	dec Bcnt3				// count Bytes for Pagesize	brne w95w95b:	tst B_Mode	brne w95c	rjmp put_retw95c:	dec Bcnt3				// Bcnt3 will be set correct after write	ldi	s_data,0x4c			// write Memory Page	rcall	wrser			// wrser(0x4c)  SPI write (byte 1)	mov	s_data,pol_ah		// last written Adress is in Page to be programmed!	rcall	wrser			// wrser(addrh) SPI write (byte 2)	mov	s_data,pol_al		// last written Adress is in Page to be programmed!	rcall	wrser			// wrser(addrl) SPI write (byte 3)	ldi	s_data,0x00	rcall	wrser			// wrser(0x00)  SPI write (byte 4)	mov Bcnt3,Pagewords		// reload Counter für Pagesize	rjmp wait_M//#@KL4 test for 89S8252 Devicew96:						// Non Page Mode Flash write	tst	device	brmi	w96b			// S89 device	ld	p_data, X+			// load byte to Poll data	cpi	p_data,0xFF			// if (p_data == 0xFF) 	breq	w961			// skip burning	ldi	s_data,0x40			// write low byte	mov	pol_cmd,s_data		// save command for polling		rcall spi123	mov	s_data,p_data		// reload data from Poll data	rcall	wrser			// wrser(s_data) SPI write (byte 4)	mov	pol_al,addrl		// save address for polling	mov	pol_ah,addrh	rcall Bws_polw961:	dec Bcnt2	ld	p_data, X+			// load byte to Poll data	cpi	p_data,0xFF			// if (p_data == 0xFF) 	breq	w962	ldi	s_data,0x48			// write high byte	mov	pol_cmd,s_data		// save command for polling		rcall spi123	mov	s_data,p_data		// reload data from Poll data	rcall	wrser			// wrser(u_data) SPI write (byte 4)w96a:	mov	pol_al,addrl	// save address for polling	mov	pol_ah,addrh	rcall Bws_polw962:	adiw	addrl,1			// Auto increment address	dec Bcnt2	brne w96	rjmp put_ret			// replyw96b:					// Code for 89S8252//	ldi	s_data,0x40//	mov	pol_cmd,s_data		// save command for polling		mov	s_data,addrh		// s_data = (addrh << 3) | 0x02//	rcall	shift_s_data3	ori	s_data,0x02	rcall	wrser			// wrser(addrh)  SPI write (byte 1)	mov	s_data,addrl		rcall	wrser			// wrser(addrl)  SPI write (byte 2)	ld	s_data, X+		mov	p_data,s_data		// save data for polling	rcall	wrser			// wrser(u_data) SPI write (byte 3)	rjmp	w96a//====== 'R' - Read Program Memory ==========================================w10:		cpi	u_data,'R'		// 'R' Read program memory	brne	w10B	tst	device	brmi	rpm1			// S89 device	ldi	s_data,0x28			// read high Byte (order is different from Block Read!)	rcall	wrser			// wrser(0x28)  SPI write (byte 1)	mov	s_data,addrh	rjmp	rpm2rpm1:	mov	s_data,addrh		// s_data = (addrh << 3) | 0x01//	rcall	shift_s_data3	ori	s_data,0x01rpm2:	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	tst	device	brmi	rpm3			// S89 device	ldi	s_data,0x20			// read Low 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 datarpm3:	adiw	addrl,1			// Auto increment address	rjmp	waitcmd			// goto waitcmd()////====== 'g' - Block Read Memory (See Note 17) ======================w10B:		cpi	u_data,'g'		// 'g' Block Read Program Memory	brne	w11	rcall	getc			// XH = getc()//	mov	XH,u_data	rcall	getc			// XL = getc()//	mov	XL,u_data	rcall	getc			// getc(Memorytype)//	cpi u_data,'F'	breq w10B2	cpi u_data,'E'	breq w10B1	rjmp put_errw10B1:	rcall read_send_datamem	sbiw XL, 1   	brne w10B1	rjmp waitcmd			// goto waitcmd()//w10B2: 	rcall read_send_progmem	tst device	brmi w10B3	sbiw XL, 2	brne w10B2	rjmp waitcmdw10B3:	sbiw XL, 1   	brne w10B2	rjmp waitcmd			// goto waitcmd()////====== 'A' - Load Address =================================================w11:		cpi	u_data,'A'		// 'A' Load address	brne	w12	rcall	getc			// addrh = getc()//	mov	addrh,u_data	rcall	getc			// addrl = getc()//	mov	addrl,u_data	rjmp	put_ret			// goto reply()////====== 'D' - Write Data Memory ============================================w12:		cpi	u_data,'D'		// 'D' Write data memory	brne	w13	rcall	getc			// get data	rcall eeprom_write	rjmp	put_ret//====== 'd' - Read Data Memory =============================================w13:		cpi	u_data,'d'		// 'd' Read data memory	brne	w14	rcall   read_send_datamem	rjmp	waitcmd			// goto waitcmd()////====== 'L' - Leave Programming Mode =======================================w14:		cpi	u_data,'L'		// 'L' Leave programming mode	brne	w142w141:	rcall pas_RESET				// set RESET passive	rcall release_ports			// release ports	set_LED					// LED off	rjmp    put_ret//====== 'E' - Exit , release all Ports, inhibit AVR910 =====================w142:	

⌨️ 快捷键说明

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