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

📄 older_m88.lss

📁 脱机ISP编程器
💻 LSS
📖 第 1 页 / 共 5 页
字号:
{
    do {} while (!eeprom_is_ready ());
     4be:	f9 99       	sbic	0x1f, 1	; 31
     4c0:	fe cf       	rjmp	.-4      	; 0x4be <exe_proglockbit+0x8>
#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
     4c2:	90 e0       	ldi	r25, 0x00	; 0
     4c4:	c0 96       	adiw	r24, 0x30	; 48
     4c6:	92 bd       	out	0x22, r25	; 34
     4c8:	81 bd       	out	0x21, r24	; 33
#endif
    EECR |= (1 << EERE);
     4ca:	f8 9a       	sbi	0x1f, 0	; 31
    return EEDR;
     4cc:	80 b5       	in	r24, 0x20	; 32
     4ce:	80 93 dd 01 	sts	0x01DD, r24
	
	if (write_lockbit(avr_lockbit))sendstr(msg_fail);
     4d2:	fd d4       	rcall	.+2554   	; 0xece <write_lockbit>
     4d4:	88 23       	and	r24, r24
     4d6:	19 f0       	breq	.+6      	; 0x4de <exe_proglockbit+0x28>
     4d8:	80 ee       	ldi	r24, 0xE0	; 224
     4da:	91 e0       	ldi	r25, 0x01	; 1
     4dc:	02 c0       	rjmp	.+4      	; 0x4e2 <exe_proglockbit+0x2c>
	else sendstr(msg_done);
     4de:	86 ee       	ldi	r24, 0xE6	; 230
     4e0:	91 e0       	ldi	r25, 0x01	; 1
     4e2:	69 d7       	rcall	.+3794   	; 0x13b6 <sendstr>
     4e4:	08 95       	ret

000004e6 <exe_progfuse>:
	xmodem2df(3840+section*8);
	sei();
}

void exe_progfuse(void)
{
     4e6:	f9 99       	sbic	0x1f, 1	; 31
     4e8:	fe cf       	rjmp	.-4      	; 0x4e6 <exe_progfuse>
	
	//pgm_sendstr(&instr_sheet[13].explain[0]);
	eeprom_busy_wait();
	avr_fuse[0]=eeprom_read_byte(FUSE_ADDRESS+section*3);
     4ea:	90 91 57 02 	lds	r25, 0x0257
     4ee:	83 e0       	ldi	r24, 0x03	; 3
     4f0:	98 9f       	mul	r25, r24
     4f2:	90 01       	movw	r18, r0
     4f4:	11 24       	eor	r1, r1
/** \ingroup avr_eeprom
    Read one byte from EEPROM address \a __p.
 */
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
    do {} while (!eeprom_is_ready ());
     4f6:	f9 99       	sbic	0x1f, 1	; 31
     4f8:	fe cf       	rjmp	.-4      	; 0x4f6 <exe_progfuse+0x10>
#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
     4fa:	32 bd       	out	0x22, r19	; 34
     4fc:	21 bd       	out	0x21, r18	; 33
#endif
    EECR |= (1 << EERE);
     4fe:	f8 9a       	sbi	0x1f, 0	; 31
    return EEDR;
     500:	50 b5       	in	r21, 0x20	; 32
     502:	50 93 da 01 	sts	0x01DA, r21
	eeprom_busy_wait();
     506:	f9 99       	sbic	0x1f, 1	; 31
     508:	fe cf       	rjmp	.-4      	; 0x506 <__stack+0x7>
/** \ingroup avr_eeprom
    Read one byte from EEPROM address \a __p.
 */
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
    do {} while (!eeprom_is_ready ());
     50a:	f9 99       	sbic	0x1f, 1	; 31
     50c:	fe cf       	rjmp	.-4      	; 0x50a <__stack+0xb>
#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
     50e:	c9 01       	movw	r24, r18
     510:	01 96       	adiw	r24, 0x01	; 1
     512:	92 bd       	out	0x22, r25	; 34
     514:	81 bd       	out	0x21, r24	; 33
#endif
    EECR |= (1 << EERE);
     516:	f8 9a       	sbi	0x1f, 0	; 31
    return EEDR;
     518:	60 b5       	in	r22, 0x20	; 32
	avr_fuse[1]=eeprom_read_byte(FUSE_ADDRESS+1+section*3);
     51a:	60 93 db 01 	sts	0x01DB, r22
	eeprom_busy_wait();
     51e:	f9 99       	sbic	0x1f, 1	; 31
     520:	fe cf       	rjmp	.-4      	; 0x51e <__stack+0x1f>
/** \ingroup avr_eeprom
    Read one byte from EEPROM address \a __p.
 */
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
    do {} while (!eeprom_is_ready ());
     522:	f9 99       	sbic	0x1f, 1	; 31
     524:	fe cf       	rjmp	.-4      	; 0x522 <__stack+0x23>
#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
     526:	c9 01       	movw	r24, r18
     528:	02 96       	adiw	r24, 0x02	; 2
     52a:	92 bd       	out	0x22, r25	; 34
     52c:	81 bd       	out	0x21, r24	; 33
#endif
    EECR |= (1 << EERE);
     52e:	f8 9a       	sbi	0x1f, 0	; 31
    return EEDR;
     530:	40 b5       	in	r20, 0x20	; 32
	avr_fuse[2]=eeprom_read_byte(FUSE_ADDRESS+2+section*3);
     532:	40 93 dc 01 	sts	0x01DC, r20
	
	if (write_fuse(avr_fuse[0],avr_fuse[1],avr_fuse[2]))sendstr(msg_fail);
     536:	85 2f       	mov	r24, r21
     538:	5a d4       	rcall	.+2228   	; 0xdee <write_fuse>
     53a:	88 23       	and	r24, r24
     53c:	19 f0       	breq	.+6      	; 0x544 <__stack+0x45>
     53e:	80 ee       	ldi	r24, 0xE0	; 224
     540:	91 e0       	ldi	r25, 0x01	; 1
     542:	02 c0       	rjmp	.+4      	; 0x548 <__stack+0x49>
	else sendstr(msg_done);
     544:	86 ee       	ldi	r24, 0xE6	; 230
     546:	91 e0       	ldi	r25, 0x01	; 1
     548:	36 d7       	rcall	.+3692   	; 0x13b6 <sendstr>
     54a:	08 95       	ret

0000054c <exe_downloadeeprom>:
	
	sei();
}

void exe_downloadeeprom(void)
{
     54c:	f8 94       	cli
	//pgm_sendstr(&instr_sheet[12].explain[0]);
	cli();
	xmodem2df(3840+section*8);
     54e:	80 91 57 02 	lds	r24, 0x0257
     552:	90 e0       	ldi	r25, 0x00	; 0
     554:	80 52       	subi	r24, 0x20	; 32
     556:	9e 4f       	sbci	r25, 0xFE	; 254
     558:	53 e0       	ldi	r21, 0x03	; 3
     55a:	88 0f       	add	r24, r24
     55c:	99 1f       	adc	r25, r25
     55e:	5a 95       	dec	r21
     560:	e1 f7       	brne	.-8      	; 0x55a <exe_downloadeeprom+0xe>
     562:	a9 d7       	rcall	.+3922   	; 0x14b6 <xmodem2df>
	sei();
     564:	78 94       	sei
}
     566:	08 95       	ret

00000568 <exe_downloadflash>:
	getlockbit_flag=1;
	sendstr("LOCKBIT:");
}

void exe_downloadflash(void)
{
     568:	f8 94       	cli
	//pgm_sendstr(&instr_sheet[11].explain[0]);
	cli();
	xmodem2df(section*256);
     56a:	80 e0       	ldi	r24, 0x00	; 0
     56c:	90 91 57 02 	lds	r25, 0x0257
     570:	a2 d7       	rcall	.+3908   	; 0x14b6 <xmodem2df>
	//hex2send(section);
	
	sei();
     572:	78 94       	sei
}
     574:	08 95       	ret

00000576 <exe_readlockbit>:
		sendstr(msg_done);
	}
}

void exe_readlockbit(void)
{
     576:	e0 d4       	rcall	.+2496   	; 0xf38 <read_lockbit>
	//pgm_sendstr(&instr_sheet[8].explain[0]);
	unsigned char tmp;
	tmp=read_lockbit();
	
	if (tmp!=1)
     578:	81 30       	cpi	r24, 0x01	; 1
     57a:	21 f0       	breq	.+8      	; 0x584 <exe_readlockbit+0xe>
	{
		hex2send(tmp);
     57c:	c0 d6       	rcall	.+3456   	; 0x12fe <hex2send>
		sendstr(msg_done);
     57e:	86 ee       	ldi	r24, 0xE6	; 230
     580:	91 e0       	ldi	r25, 0x01	; 1
     582:	02 c0       	rjmp	.+4      	; 0x588 <exe_readlockbit+0x12>
	}
	
	else sendstr(msg_fail);
     584:	80 ee       	ldi	r24, 0xE0	; 224
     586:	91 e0       	ldi	r25, 0x01	; 1
     588:	16 d7       	rcall	.+3628   	; 0x13b6 <sendstr>
     58a:	08 95       	ret

0000058c <get_data>:
	if (i>=sizeof(instr_sheet)/sizeof(struct_instr_sheet))
		sendstr("Invalid instruction!");
}

void get_data(void)
{
     58c:	0f 93       	push	r16
     58e:	1f 93       	push	r17
	if ((getfuse_flag==1)&&(com.rxcnt==8)&&(com.rxbuf[2]==0x20)&&
     590:	80 91 38 02 	lds	r24, 0x0238
     594:	81 30       	cpi	r24, 0x01	; 1
     596:	09 f0       	breq	.+2      	; 0x59a <get_data+0xe>
     598:	77 c0       	rjmp	.+238    	; 0x688 <get_data+0xfc>
     59a:	80 91 4b 02 	lds	r24, 0x024B
     59e:	88 30       	cpi	r24, 0x08	; 8
     5a0:	09 f0       	breq	.+2      	; 0x5a4 <get_data+0x18>
     5a2:	72 c0       	rjmp	.+228    	; 0x688 <get_data+0xfc>
     5a4:	80 91 3d 02 	lds	r24, 0x023D
     5a8:	80 32       	cpi	r24, 0x20	; 32
     5aa:	09 f0       	breq	.+2      	; 0x5ae <get_data+0x22>
     5ac:	6d c0       	rjmp	.+218    	; 0x688 <get_data+0xfc>
     5ae:	80 91 40 02 	lds	r24, 0x0240
     5b2:	80 32       	cpi	r24, 0x20	; 32
     5b4:	09 f0       	breq	.+2      	; 0x5b8 <get_data+0x2c>
     5b6:	68 c0       	rjmp	.+208    	; 0x688 <get_data+0xfc>
	        (com.rxbuf[5]==0x20))
	{
		avr_fuse[0]=ascii2hex(&com.rxbuf[0]);
     5b8:	8b e3       	ldi	r24, 0x3B	; 59
     5ba:	92 e0       	ldi	r25, 0x02	; 2
     5bc:	2c de       	rcall	.-936    	; 0x216 <ascii2hex>
     5be:	18 2f       	mov	r17, r24
     5c0:	80 93 da 01 	sts	0x01DA, r24
		avr_fuse[1]=ascii2hex(&com.rxbuf[3]);
     5c4:	8e e3       	ldi	r24, 0x3E	; 62
     5c6:	92 e0       	ldi	r25, 0x02	; 2
     5c8:	26 de       	rcall	.-948    	; 0x216 <ascii2hex>
     5ca:	08 2f       	mov	r16, r24
     5cc:	80 93 db 01 	sts	0x01DB, r24
		avr_fuse[2]=ascii2hex(&com.rxbuf[6]);
     5d0:	81 e4       	ldi	r24, 0x41	; 65
     5d2:	92 e0       	ldi	r25, 0x02	; 2
     5d4:	20 de       	rcall	.-960    	; 0x216 <ascii2hex>
     5d6:	48 2f       	mov	r20, r24
     5d8:	80 93 dc 01 	sts	0x01DC, r24
		eeprom_busy_wait();
     5dc:	f9 99       	sbic	0x1f, 1	; 31
     5de:	fe cf       	rjmp	.-4      	; 0x5dc <get_data+0x50>
		eeprom_write_byte(FUSE_ADDRESS+section*3,avr_fuse[0]);
     5e0:	90 91 57 02 	lds	r25, 0x0257
     5e4:	83 e0       	ldi	r24, 0x03	; 3
     5e6:	98 9f       	mul	r25, r24
     5e8:	90 01       	movw	r18, r0
     5ea:	11 24       	eor	r1, r1
/** \ingroup avr_eeprom
    Write a byte \a __value to EEPROM address \a __p.
 */
static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value)
{
    do {} while (!eeprom_is_ready ());
     5ec:	f9 99       	sbic	0x1f, 1	; 31
     5ee:	fe cf       	rjmp	.-4      	; 0x5ec <get_data+0x60>

#if	defined(EEPM0) && defined(EEPM1)
    EECR = 0;		/* Set programming mode: erase and write.	*/
     5f0:	1f ba       	out	0x1f, r1	; 31
#endif

#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
     5f2:	32 bd       	out	0x22, r19	; 34
     5f4:	21 bd       	out	0x21, r18	; 33
#endif
    EEDR = __value;
     5f6:	10 bd       	out	0x20, r17	; 32

    __asm__ __volatile__ (
     5f8:	0f b6       	in	r0, 0x3f	; 63
     5fa:	f8 94       	cli
     5fc:	fa 9a       	sbi	0x1f, 2	; 31
     5fe:	f9 9a       	sbi	0x1f, 1	; 31
     600:	0f be       	out	0x3f, r0	; 63
		eeprom_busy_wait();
     602:	f9 99       	sbic	0x1f, 1	; 31
     604:	fe cf       	rjmp	.-4      	; 0x602 <get_data+0x76>
/** \ingroup avr_eeprom
    Write a byte \a __value to EEPROM address \a __p.
 */
static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value)
{
    do {} while (!eeprom_is_ready ());
     606:	f9 99       	sbic	0x1f, 1	; 31
     608:	fe cf       	rjmp	.-4      	; 0x606 <get_data+0x7a>

#if	defined(EEPM0) && defined(EEPM1)
    EECR = 0;		/* Set programming mode: erase and write.	*/
     60a:	1f ba       	out	0x1f, r1	; 31
#endif

#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
     60c:	c9 01       	movw	r24, r18
     60e:	01 96       	adiw	r24, 0x01	; 1
     610:	92 bd       	out	0x22, r25	; 34
     612:	81 bd       	out	0x21, r24	; 33
#endif
    EEDR = __value;
     614:	00 bd       	out	0x20, r16	; 32

    __asm__ __volatile__ (
     616:	0f b6       	in	r0, 0x3f	; 63
     618:	f8 94       	cli
     61a:	fa 9a       	sbi	0x1f, 2	; 31
     61c:	f9 9a       	sbi	0x1f, 1	; 31
     61e:	0f be       	out	0x3f, r0	; 63
		eeprom_write_byte(FUSE_ADDRESS+1+section*3,avr_fuse[1]);
		eeprom_busy_wait();
     620:	f9 99       	sbic	0x1f, 1	; 31
     622:	fe cf       	rjmp	.-4      	; 0x620 <get_data+0x94>
/** \ingroup avr_eeprom
    Write a byte \a __value to EEPROM address \a __p.
 */
static __inline__ void eeprom_write_byte (uint8_t *__p, uint8_t __value)
{
    do {} while (!eeprom_is_ready ());
     624:	f9 99       	sbic	0x1f, 1	; 31
     626:	fe cf       	rjmp	.-4      	; 0x624 <get_data+0x98>

#if	defined(EEPM0) && defined(EEPM1)
    EECR = 0;		/* Set programming mode: erase and write.	*/
     628:	1f ba       	out	0x1f, r1	; 31
#endif

#if	E2END <= 0xFF
    EEARL = (unsigned)__p;
#else
    EEAR = (unsigned)__p;
     62a:	c9 01       	movw	r24, r18
     62c:	02 96       	adiw	r24, 0x02	; 2
     62e:	92 bd       	out	0x22, r25	; 34
     630:	81 bd       	out	0x21, r24	; 33
#endif
    EEDR = __value;
     632:	40 bd       	out	0x20, r20	; 32

    __asm__ __volatile__ (
     634:	0f b6       	in	r0, 0x3f	; 63
     636:	f8 94       	cli
     638:	fa 9a       	sbi	0x1f, 2	; 31
     63a:	f9 9a       	sbi	0x1f, 1	; 31
     63c:	0f be       	out	0x3f, r0	; 63
		eeprom_write_byte(FUSE_ADDRESS+2+section*3,avr_fuse[2]);
		eeprom_busy_wait();
     63e:	f9 99       	sbic	0x1f, 1	; 31
     640:	fe cf       	rjmp	.-4      	; 0x63e <get_data+0xb2>
/** \ingroup avr_eeprom
    Read one byte from EEPROM address \a __p.
 */
__ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p)
{
    do {} while (!eeprom_is_ready ());
     642:	f9 99       	sbic	0x1f, 1	; 31
     644:	fe cf       	rjmp	.-4      	; 0x642 <get_data+0xb6>
#if	E2END <= 0xFF

⌨️ 快捷键说明

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