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

📄 main.lss

📁 ATmega16L控制IDE硬盘的源代码,可以读写扇区,无文件系统
💻 LSS
📖 第 1 页 / 共 4 页
字号:
 2a2:	df 93       	push	r29
 2a4:	cd b7       	in	r28, 0x3d	; 61
 2a6:	de b7       	in	r29, 0x3e	; 62
	Set_Bit(PORTC,Write);
 2a8:	80 91 35 00 	lds	r24, 0x0035
 2ac:	80 68       	ori	r24, 0x80	; 128
 2ae:	80 93 35 00 	sts	0x0035, r24
	Set_Bit(PORTC,Read);
 2b2:	80 91 35 00 	lds	r24, 0x0035
 2b6:	80 64       	ori	r24, 0x40	; 64
 2b8:	80 93 35 00 	sts	0x0035, r24
	Clr_Bit(PORTC,CS0);
 2bc:	80 91 35 00 	lds	r24, 0x0035
 2c0:	8e 7f       	andi	r24, 0xFE	; 254
 2c2:	80 93 35 00 	sts	0x0035, r24
	Set_Bit(PORTC,CS1);
 2c6:	80 91 35 00 	lds	r24, 0x0035
 2ca:	82 60       	ori	r24, 0x02	; 2
 2cc:	80 93 35 00 	sts	0x0035, r24
	WriteReg(_DeviceAndHead,0xa0);
 2d0:	60 ea       	ldi	r22, 0xA0	; 160
 2d2:	86 e0       	ldi	r24, 0x06	; 6
 2d4:	0e 94 34 02 	call	0x468
	do
	{
		WriteReg(_DeviceAndHead,0xa0);
 2d8:	60 ea       	ldi	r22, 0xA0	; 160
 2da:	86 e0       	ldi	r24, 0x06	; 6
 2dc:	0e 94 34 02 	call	0x468
		HDstate=ReadReg(_Status_AND_Command);       
 2e0:	87 e0       	ldi	r24, 0x07	; 7
 2e2:	0e 94 a0 01 	call	0x340
 2e6:	80 93 63 02 	sts	0x0263, r24
	}while((!DRDY)||BSY);
 2ea:	80 91 63 02 	lds	r24, 0x0263
 2ee:	99 27       	eor	r25, r25
 2f0:	00 24       	eor	r0, r0
 2f2:	88 0f       	add	r24, r24
 2f4:	99 1f       	adc	r25, r25
 2f6:	00 1c       	adc	r0, r0
 2f8:	88 0f       	add	r24, r24
 2fa:	99 1f       	adc	r25, r25
 2fc:	00 1c       	adc	r0, r0
 2fe:	89 2f       	mov	r24, r25
 300:	90 2d       	mov	r25, r0
 302:	81 70       	andi	r24, 0x01	; 1
 304:	90 70       	andi	r25, 0x00	; 0
 306:	00 97       	sbiw	r24, 0x00	; 0
 308:	39 f3       	breq	.-50     	; 0x2d8
 30a:	80 91 63 02 	lds	r24, 0x0263
 30e:	88 23       	and	r24, r24
 310:	1c f3       	brlt	.-58     	; 0x2d8
	WriteReg(_DeviceAndHead,0x40);
 312:	60 e4       	ldi	r22, 0x40	; 64
 314:	86 e0       	ldi	r24, 0x06	; 6
 316:	0e 94 34 02 	call	0x468
	WriteReg(_SecCount,60);
 31a:	6c e3       	ldi	r22, 0x3C	; 60
 31c:	82 e0       	ldi	r24, 0x02	; 2
 31e:	0e 94 34 02 	call	0x468
	WriteReg(_Status_AND_Command,CMD_INITIALIZE_DRIVE_PARAMETERS);//0x91
 322:	61 e9       	ldi	r22, 0x91	; 145
 324:	87 e0       	ldi	r24, 0x07	; 7
 326:	0e 94 34 02 	call	0x468
	WaitBSY();
 32a:	0e 94 65 02 	call	0x4ca
	WriteReg(_Status_AND_Command,CMD_RECALIBRATE);//0x10
 32e:	60 e1       	ldi	r22, 0x10	; 16
 330:	87 e0       	ldi	r24, 0x07	; 7
 332:	0e 94 34 02 	call	0x468
	WaitBSY();
 336:	0e 94 65 02 	call	0x4ca
 33a:	df 91       	pop	r29
 33c:	cf 91       	pop	r28
 33e:	08 95       	ret

00000340 <ReadReg>:
}
/************************************************************
*函数名称:byte ReadReg(byte byAddr)							*
*用途:读寄存器												*
************************************************************/ 
byte ReadReg(byte byAddr)
{
 340:	cf 93       	push	r28
 342:	df 93       	push	r29
 344:	cd b7       	in	r28, 0x3d	; 61
 346:	de b7       	in	r29, 0x3e	; 62
 348:	22 97       	sbiw	r28, 0x02	; 2
 34a:	0f b6       	in	r0, 0x3f	; 63
 34c:	f8 94       	cli
 34e:	de bf       	out	0x3e, r29	; 62
 350:	0f be       	out	0x3f, r0	; 63
 352:	cd bf       	out	0x3d, r28	; 61
 354:	89 83       	std	Y+1, r24	; 0x01
	byte temp;
	RegAddrChangePhysics(byAddr);
 356:	89 81       	ldd	r24, Y+1	; 0x01
 358:	0e 94 94 02 	call	0x528
	DDRA=0;
 35c:	10 92 3a 00 	sts	0x003A, r1
	PORTA=0xff;
 360:	8f ef       	ldi	r24, 0xFF	; 255
 362:	80 93 3b 00 	sts	0x003B, r24
	Clr_Bit(PORTC,Read);
 366:	80 91 35 00 	lds	r24, 0x0035
 36a:	8f 7b       	andi	r24, 0xBF	; 191
 36c:	80 93 35 00 	sts	0x0035, r24
	...
	nop();
	nop();
	nop();
	nop();
	temp=ReversalData(RDataL);
 378:	80 91 39 00 	lds	r24, 0x0039
 37c:	0e 94 2e 05 	call	0xa5c
 380:	8a 83       	std	Y+2, r24	; 0x02
//	temp=RDataL;
	Set_Bit(PORTC,Read);
 382:	80 91 35 00 	lds	r24, 0x0035
 386:	80 64       	ori	r24, 0x40	; 64
 388:	80 93 35 00 	sts	0x0035, r24
	return temp;
 38c:	8a 81       	ldd	r24, Y+2	; 0x02
 38e:	99 27       	eor	r25, r25
 390:	22 96       	adiw	r28, 0x02	; 2
 392:	0f b6       	in	r0, 0x3f	; 63
 394:	f8 94       	cli
 396:	de bf       	out	0x3e, r29	; 62
 398:	0f be       	out	0x3f, r0	; 63
 39a:	cd bf       	out	0x3d, r28	; 61
 39c:	df 91       	pop	r29
 39e:	cf 91       	pop	r28
 3a0:	08 95       	ret

000003a2 <ReadData>:
}
//******************************************************************************
/********************************************************
*函数名称:void ReadData(void)							*
*函数用途:读硬盘数据寄存器内容							*
********************************************************/
void ReadData(void)
{
 3a2:	cf 93       	push	r28
 3a4:	df 93       	push	r29
 3a6:	cd b7       	in	r28, 0x3d	; 61
 3a8:	de b7       	in	r29, 0x3e	; 62
	PORTA=0xff;
 3aa:	8f ef       	ldi	r24, 0xFF	; 255
 3ac:	80 93 3b 00 	sts	0x003B, r24
	DDRA=0;
 3b0:	10 92 3a 00 	sts	0x003A, r1
	PORTB=0xff;
 3b4:	8f ef       	ldi	r24, 0xFF	; 255
 3b6:	80 93 38 00 	sts	0x0038, r24
	DDRB=0;
 3ba:	10 92 37 00 	sts	0x0037, r1
	RegAddrChangePhysics(_Data);
 3be:	80 e0       	ldi	r24, 0x00	; 0
 3c0:	0e 94 94 02 	call	0x528
	Clr_Bit(PORTC,Read);
 3c4:	80 91 35 00 	lds	r24, 0x0035
 3c8:	8f 7b       	andi	r24, 0xBF	; 191
 3ca:	80 93 35 00 	sts	0x0035, r24
	...
	nop();
	nop();
	nop();
	nop();
	HDDATAL=ReversalData(RDataL);
 3d6:	80 91 39 00 	lds	r24, 0x0039
 3da:	0e 94 2e 05 	call	0xa5c
 3de:	80 93 61 02 	sts	0x0261, r24
//	HDDATAL=RDataL;
	HDDATAH=RDataH;
 3e2:	80 91 36 00 	lds	r24, 0x0036
 3e6:	80 93 62 02 	sts	0x0262, r24
	Set_Bit(PORTC,Read);
 3ea:	80 91 35 00 	lds	r24, 0x0035
 3ee:	80 64       	ori	r24, 0x40	; 64
 3f0:	80 93 35 00 	sts	0x0035, r24
 3f4:	df 91       	pop	r29
 3f6:	cf 91       	pop	r28
 3f8:	08 95       	ret

000003fa <WriteData>:
}
//******************************************************************************
/********************************************************
*函数名称:void WriteData(byte byDataL,byte byDataH)		*
*函数用途:写硬盘数据寄存器内容							*
********************************************************/
void WriteData(byte byDataL,byte byDataH)
{
 3fa:	cf 93       	push	r28
 3fc:	df 93       	push	r29
 3fe:	cd b7       	in	r28, 0x3d	; 61
 400:	de b7       	in	r29, 0x3e	; 62
 402:	22 97       	sbiw	r28, 0x02	; 2
 404:	0f b6       	in	r0, 0x3f	; 63
 406:	f8 94       	cli
 408:	de bf       	out	0x3e, r29	; 62
 40a:	0f be       	out	0x3f, r0	; 63
 40c:	cd bf       	out	0x3d, r28	; 61
 40e:	89 83       	std	Y+1, r24	; 0x01
 410:	6a 83       	std	Y+2, r22	; 0x02
	byDataL=ReversalData(byDataL);
 412:	89 81       	ldd	r24, Y+1	; 0x01
 414:	0e 94 2e 05 	call	0xa5c
 418:	89 83       	std	Y+1, r24	; 0x01
	DDRA=0xff;
 41a:	8f ef       	ldi	r24, 0xFF	; 255
 41c:	80 93 3a 00 	sts	0x003A, r24
	DDRB=0xff;
 420:	8f ef       	ldi	r24, 0xFF	; 255
 422:	80 93 37 00 	sts	0x0037, r24
	RegAddrChangePhysics(_Data);
 426:	80 e0       	ldi	r24, 0x00	; 0
 428:	0e 94 94 02 	call	0x528
	WDataL=byDataL;
 42c:	89 81       	ldd	r24, Y+1	; 0x01
 42e:	80 93 3b 00 	sts	0x003B, r24
	WDataH=byDataH;
 432:	8a 81       	ldd	r24, Y+2	; 0x02
 434:	80 93 38 00 	sts	0x0038, r24
	Clr_Bit(PORTC,Write);
 438:	9f e7       	ldi	r25, 0x7F	; 127
 43a:	80 91 35 00 	lds	r24, 0x0035
 43e:	89 23       	and	r24, r25
 440:	80 93 35 00 	sts	0x0035, r24
	...
	nop();
	nop();
	nop();
	nop();
	Set_Bit(PORTC,Write);
 44c:	80 91 35 00 	lds	r24, 0x0035
 450:	80 68       	ori	r24, 0x80	; 128
 452:	80 93 35 00 	sts	0x0035, r24
 456:	22 96       	adiw	r28, 0x02	; 2
 458:	0f b6       	in	r0, 0x3f	; 63
 45a:	f8 94       	cli
 45c:	de bf       	out	0x3e, r29	; 62
 45e:	0f be       	out	0x3f, r0	; 63
 460:	cd bf       	out	0x3d, r28	; 61
 462:	df 91       	pop	r29
 464:	cf 91       	pop	r28
 466:	08 95       	ret

00000468 <WriteReg>:
}
/************************************************************
*函数名称:void WriteReg(byte byAddr,byte byData)			*
*用途:写寄存器:寄存器地址,数据,无返回值					*
************************************************************/ 
void WriteReg(byte byAddr,byte byData)
{
 468:	cf 93       	push	r28
 46a:	df 93       	push	r29
 46c:	cd b7       	in	r28, 0x3d	; 61
 46e:	de b7       	in	r29, 0x3e	; 62
 470:	22 97       	sbiw	r28, 0x02	; 2
 472:	0f b6       	in	r0, 0x3f	; 63
 474:	f8 94       	cli
 476:	de bf       	out	0x3e, r29	; 62
 478:	0f be       	out	0x3f, r0	; 63
 47a:	cd bf       	out	0x3d, r28	; 61
 47c:	89 83       	std	Y+1, r24	; 0x01
 47e:	6a 83       	std	Y+2, r22	; 0x02
	byData=ReversalData(byData);
 480:	8a 81       	ldd	r24, Y+2	; 0x02
 482:	0e 94 2e 05 	call	0xa5c
 486:	8a 83       	std	Y+2, r24	; 0x02
	RegAddrChangePhysics(byAddr);
 488:	89 81       	ldd	r24, Y+1	; 0x01
 48a:	0e 94 94 02 	call	0x528
	DDRA=0xff;
 48e:	8f ef       	ldi	r24, 0xFF	; 255
 490:	80 93 3a 00 	sts	0x003A, r24
	WDataL=byData;
 494:	8a 81       	ldd	r24, Y+2	; 0x02
 496:	80 93 3b 00 	sts	0x003B, r24
	Clr_Bit(PORTC,Write);
 49a:	9f e7       	ldi	r25, 0x7F	; 127
 49c:	80 91 35 00 	lds	r24, 0x0035
 4a0:	89 23       	and	r24, r25
 4a2:	80 93 35 00 	sts	0x0035, r24
	...
	nop();
	nop();
	nop();
	nop();
	Set_Bit(PORTC,Write);
 4ae:	80 91 35 00 	lds	r24, 0x0035
 4b2:	80 68       	ori	r24, 0x80	; 128
 4b4:	80 93 35 00 	sts	0x0035, r24
 4b8:	22 96       	adiw	r28, 0x02	; 2
 4ba:	0f b6       	in	r0, 0x3f	; 63
 4bc:	f8 94       	cli
 4be:	de bf       	out	0x3e, r29	; 62
 4c0:	0f be       	out	0x3f, r0	; 63
 4c2:	cd bf       	out	0x3d, r28	; 61
 4c4:	df 91       	pop	r29
 4c6:	cf 91       	pop	r28
 4c8:	08 95       	ret

000004ca <WaitBSY>:
}
/************************************************************
*函数名称:byte WaitBSY(void)								*
*用途:等待BSY信号											*
************************************************************/ 
byte WaitBSY(void)
{
 4ca:	cf 93       	push	r28
 4cc:	df 93       	push	r29
 4ce:	cd b7       	in	r28, 0x3d	; 61
 4d0:	de b7       	in	r29, 0x3e	; 62
	//byte timeOut=0;
	do
	{
		HDstate=ReadReg(_Status_AND_Command);
 4d2:	87 e0       	ldi	r24, 0x07	; 7
 4d4:	0e 94 a0 01 	call	0x340
 4d8:	80 93 63 02 	sts	0x0263, r24
 		//timeOut++;
		//if(timeOut>=254)
			//return(0xff);	//超时
	}while(BSY);
 4dc:	80 91 63 02 	lds	r24, 0x0263
 4e0:	88 23       	and	r24, r24
 4e2:	0c f4       	brge	.+2      	; 0x4e6
 4e4:	f6 cf       	rjmp	.-20     	; 0x4d2
	return(1);
 4e6:	81 e0       	ldi	r24, 0x01	; 1
 4e8:	90 e0       	ldi	r25, 0x00	; 0
 4ea:	df 91       	pop	r29
 4ec:	cf 91       	pop	r28
 4ee:	08 95       	ret

000004f0 <WaitDRQ>:
}
/************************************************************
*函数名称:byte WaitDRQ(void)								*
*用途:等待DRQ信号											*
************************************************************/ 
byte WaitDRQ(void)
{
 4f0:	cf 93       	push	r28
 4f2:	df 93       	push	r29
 4f4:	cd b7       	in	r28, 0x3d	; 61
 4f6:	de b7       	in	r29, 0x3e	; 62
	//byte timeOut=0;
	do
	{
		HDstate=ReadReg(_Status_AND_Command);
 4f8:	87 e0       	ldi	r24, 0x07	; 7
 4fa:	0e 94 a0 01 	call	0x340
 4fe:	80 93 63 02 	sts	0x0263, r24
 		//timeOut++;
		//if(timeOut>=254)
			//return(0xff);	//超时
	}while(!DRQ);
 502:	80 91 63 02 	lds	r24, 0x0263
 506:	99 27       	eor	r25, r25
 508:	96 95       	lsr	r25
 50a:	87 95       	ror	r24
 50c:	96 95       	lsr	r25
 50e:	87 95       	ror	r24
 510:	96 95       	lsr	r25
 512:	87 95       	ror	r24
 514:	81 70       	andi	r24, 0x01	; 1
 516:	90 70       	andi	r25, 0x00	; 0
 518:	00 97       	sbiw	r24, 0x00	; 0
 51a:	09 f4       	brne	.+2      	; 0x51e
 51c:	ed cf       	rjmp	.-38     	; 0x4f8
	return(1);
 51e:	81 e0       	ldi	r24, 0x01	; 1
 520:	90 e0       	ldi	r25, 0x00	; 0
 522:	df 91       	pop	r29
 524:	cf 91       	pop	r28
 526:	08 95       	ret

00000528 <RegAddrChangePhysics>:
}
/************************************************************
*函数名称:void RegAddrChangePhysics(byte byRegAddr)			*
*用途:把寄存器地址转化为物理接口							*
************************************************************/ 
void RegAddrChangePhysics(byte byRegAddr)
{
 528:	cf 93       	push	r28
 52a:	df 93       	push	r29
 52c:	cd b7       	in	r28, 0x3d	; 61
 52e:	de b7       	in	r29, 0x3e	; 62
 530:	23 97       	sbiw	r28, 0x03	; 3
 532:	0f b6       	in	r0, 0x3f	; 63
 534:	f8 94       	cli
 536:	de bf       	out	0x3e, r29	; 62
 538:	0f be       	out	0x3f, r0	; 63
 53a:	cd bf       	out	0x3d, r28	; 61
 53c:	89 83       	std	Y+1, r24	; 0x01
	Clr_Bit(PORTC,CS0);
 53e:	80 91 35 00 	lds	r24, 0x0035
 542:	8e 7f       	andi	r24, 0xFE	; 254
 544:	80 93 35 00 	sts	0x0035, r24
	Set_Bit(PORTC,CS1);
 548:	80 91 35 00 	lds	r24, 0x0035
 54c:	82 60       	ori	r24, 0x02	; 2
 54e:	80 93 35 00 	sts	0x0035, r24
	switch(byRegAddr)
 552:	89 81       	ldd	r24, Y+1	; 0x01
 554:	28 2f       	mov	r18, r24
 556:	33 27       	eor	r19, r19
 558:	2a 83       	std	Y+2, r18	; 0x02
 55a:	3b 83       	std	Y+3, r19	; 0x03
 55c:	8a 81       	ldd	r24, Y+2	; 0x02
 55e:	9b 81       	ldd	r25, Y+3	; 0x03
 560:	83 30       	cpi	r24, 0x03	; 3
 562:	91 05       	cpc	r25, r1

⌨️ 快捷键说明

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