📄 main.lss
字号:
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 + -