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