📄 usb.lis
字号:
0110 L24:
0110 .dbline 66
0110 80E0 ldi R24,<_SectorBuffer
0112 90E0 ldi R25,>_SectorBuffer
0114 FA01 movw R30,R20
0116 E80F add R30,R24
0118 F91F adc R31,R25
011A 0081 ldd R16,z+0
011C 6ED0 xcall _USBTxChar
011E L25:
011E .dbline 66
011E 4F5F subi R20,255 ; offset = 1
0120 5F4F sbci R21,255
0122 L27:
0122 .dbline 66
0122 ; for (i=0;i<512;i++) USBTxChar(SectorBuffer[i]);
0122 4030 cpi R20,0
0124 E2E0 ldi R30,2
0126 5E07 cpc R21,R30
0128 98F3 brlo L24
012A .dbline -2
012A .dbline 67
012A ; }
012A L23:
012A 2896 adiw R28,8
012C 0E940000 xcall pop_gset1
0130 2496 adiw R28,4
0132 .dbline 0 ; func end
0132 0895 ret
0134 .dbsym r i 20 i
0134 .dbsym l Sector 10 l
0134 .dbend
0134 .dbfunc e USBWriteSector _USBWriteSector fV
0134 ; i -> R10,R11
0134 ; TimeOut -> y+4
0134 ; Sector -> y+14
.even
0134 _USBWriteSector::
0134 0E940000 xcall push_arg4
0138 0E940000 xcall push_gset3
013C 2897 sbiw R28,8
013E .dbline -1
013E .dbline 72
013E ;
013E ; /*********************************************************/
013E ;
013E ; void USBWriteSector(unsigned long Sector)
013E ; {
013E .dbline 77
013E ; unsigned int i;
013E ; unsigned long TimeOut;
013E ; extern unsigned char SectorBuffer[512];
013E ;
013E ; UCSR0B = 0x18; // Rx enable Tx Enable RxInt Disable
013E 88E1 ldi R24,24
0140 8AB9 out 0xa,R24
0142 .dbline 78
0142 ; for (i=0;i<512;i++)
0142 AA24 clr R10
0144 BB24 clr R11
0146 35C0 xjmp L32
0148 L29:
0148 .dbline 79
0148 ; {
0148 .dbline 80
0148 ; TimeOut = 0;
0148 40E0 ldi R20,0
014A 50E0 ldi R21,0
014C 60E0 ldi R22,0
014E 70E0 ldi R23,0
0150 FE01 movw R30,R28
0152 4483 std z+4,R20
0154 5583 std z+5,R21
0156 6683 std z+6,R22
0158 7783 std z+7,R23
015A 1EC0 xjmp L34
015C L33:
015C .dbline 82
015C ; while (USBIsChar() == 0)
015C ; {
015C .dbline 83
015C ; WDR();
015C A895 wdr
015E .dbline 84
015E ; TimeOut++;
015E 41E0 ldi R20,1
0160 50E0 ldi R21,0
0162 60E0 ldi R22,0
0164 70E0 ldi R23,0
0166 FE01 movw R30,R28
0168 2480 ldd R2,z+4
016A 3580 ldd R3,z+5
016C 4680 ldd R4,z+6
016E 5780 ldd R5,z+7
0170 240E add R2,R20
0172 351E adc R3,R21
0174 461E adc R4,R22
0176 571E adc R5,R23
0178 2482 std z+4,R2
017A 3582 std z+5,R3
017C 4682 std z+6,R4
017E 5782 std z+7,R5
0180 .dbline 85
0180 ; if (TimeOut == 1000000) // Wait 3 second for each char,
0180 40E4 ldi R20,64
0182 52E4 ldi R21,66
0184 6FE0 ldi R22,15
0186 70E0 ldi R23,0
0188 2416 cp R2,R20
018A 3506 cpc R3,R21
018C 4606 cpc R4,R22
018E 5706 cpc R5,R23
0190 19F4 brne L36
0192 .dbline 86
0192 ; {
0192 .dbline 87
0192 ; UCSR0B = 0x98; // Rx enable Tx Enable RxInt Enable
0192 88E9 ldi R24,152
0194 8AB9 out 0xa,R24
0196 .dbline 88
0196 ; return;
0196 26C0 xjmp L28
0198 L36:
0198 .dbline 90
0198 L34:
0198 .dbline 81
0198 2AD0 xcall _USBIsChar
019A 0023 tst R16
019C F9F2 breq L33
019E .dbline 91
019E 80E0 ldi R24,<_SectorBuffer
01A0 90E0 ldi R25,>_SectorBuffer
01A2 F501 movw R30,R10
01A4 E80F add R30,R24
01A6 F91F adc R31,R25
01A8 2CB0 in R2,0xc
01AA 2082 std z+0,R2
01AC .dbline 92
01AC L30:
01AC .dbline 78
01AC C501 movw R24,R10
01AE 0196 adiw R24,1
01B0 5C01 movw R10,R24
01B2 L32:
01B2 .dbline 78
01B2 C501 movw R24,R10
01B4 8030 cpi R24,0
01B6 E2E0 ldi R30,2
01B8 9E07 cpc R25,R30
01BA 08F4 brsh X2
01BC C5CF xjmp L29
01BE X2:
01BE .dbline 93
01BE ; }
01BE ; }
01BE ; SectorBuffer[i] = UDR0;
01BE ; }
01BE ; ata_write_sector(0, Sector, &SectorBuffer[0]);
01BE 80E0 ldi R24,<_SectorBuffer
01C0 90E0 ldi R25,>_SectorBuffer
01C2 9B83 std y+3,R25
01C4 8A83 std y+2,R24
01C6 FE01 movw R30,R28
01C8 2684 ldd R2,z+14
01CA 3784 ldd R3,z+15
01CC 4088 ldd R4,z+16
01CE 5188 ldd R5,z+17
01D0 4882 std y+0,R4
01D2 5982 std y+1,R5
01D4 9101 movw R18,R2
01D6 0027 clr R16
01D8 0E940000 xcall _ata_write_sector
01DC .dbline 94
01DC ; USBTxChar('!');
01DC 01E2 ldi R16,33
01DE 0DD0 xcall _USBTxChar
01E0 .dbline 95
01E0 ; UCSR0B = 0x98; // Rx enable Tx Enable RxInt Enable
01E0 88E9 ldi R24,152
01E2 8AB9 out 0xa,R24
01E4 .dbline -2
01E4 .dbline 96
01E4 ; }
01E4 L28:
01E4 2896 adiw R28,8
01E6 0E940000 xcall pop_gset3
01EA 2496 adiw R28,4
01EC .dbline 0 ; func end
01EC 0895 ret
01EE .dbsym r i 10 i
01EE .dbsym l TimeOut 4 l
01EE .dbsym l Sector 14 l
01EE .dbend
01EE .dbfunc e USBIsChar _USBIsChar fc
.even
01EE _USBIsChar::
01EE .dbline -1
01EE .dbline 101
01EE ;
01EE ; /*********************************************************/
01EE ;
01EE ; unsigned char USBIsChar(void)
01EE ; {
01EE .dbline 102
01EE ; if (UCSR0A & 0x80) return 1;
01EE 5F9B sbis 0xb,7
01F0 02C0 rjmp L39
01F2 .dbline 102
01F2 01E0 ldi R16,1
01F4 01C0 xjmp L38
01F6 L39:
01F6 .dbline 103
01F6 ; return 0;
01F6 0027 clr R16
01F8 .dbline -2
01F8 L38:
01F8 .dbline 0 ; func end
01F8 0895 ret
01FA .dbend
01FA .dbfunc e USBTxChar _USBTxChar fV
01FA ; ch -> R16
.even
01FA _USBTxChar::
01FA .dbline -1
01FA .dbline 109
01FA ; }
01FA ;
01FA ; /*********************************************************/
01FA ;
01FA ; void USBTxChar(unsigned char ch)
01FA ; {
01FA 01C0 xjmp L43
01FC L42:
01FC .dbline 110
01FC A895 wdr
01FE L43:
01FE .dbline 110
01FE ; while (!(UCSR0A & 0x20)) WDR(); // Wait for empty transmit buffer
01FE 5D9B sbis 0xb,5
0200 FDCF rjmp L42
0202 .dbline 111
0202 ; UDR0 = ch; // Write char
0202 0CB9 out 0xc,R16
0204 .dbline -2
0204 .dbline 112
0204 ; }
0204 L41:
0204 .dbline 0 ; func end
0204 0895 ret
0206 .dbsym r ch 16 c
0206 .dbend
.area data(ram, con, rel)
0000 .dbfile C:\DATA\MP3\Player\Code2\usb.c
0000 L20:
0000 .blkb 5
.area idata
0000 2B2B2B5700 .byte 43,43,43,'W,0
.area data(ram, con, rel)
0005 .dbfile C:\DATA\MP3\Player\Code2\usb.c
0005 L15:
0005 .blkb 5
.area idata
0005 2B2B2B5200 .byte 43,43,43,'R,0
.area data(ram, con, rel)
000A .dbfile C:\DATA\MP3\Player\Code2\usb.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -