📄 usb.lis
字号:
.module usb.c
.area text(rom, con, rel)
0000 .dbfile G:\IccPro\Mp3Ide\usb.c
0000 .dbfunc e InitUSB _InitUSB fV
.even
0000 _InitUSB::
0000 .dbline -1
0000 .dbline 16
0000 ; #include <iom128v.h>
0000 ; #include "usb.h"
0000 ; #include "ata.h"
0000 ; #include "generic.h"
0000 ; #include <macros.h>
0000 ; #include <string.h>
0000 ; #include <stdio.h>
0000 ; #include <stdlib.h>
0000 ;
0000 ; //******************************************************************
0000 ; //* Init USB Serial Port
0000 ; //*
0000 ; //*
0000 ; //******************************************************************
0000 ; void InitUSB(void)
0000 ; {
0000 .dbline 17
0000 ; UCSR0C = 0x86; // Asyn,NoParity,1StopBit,8Bit,
0000 86E8 ldi R24,134
0002 80939500 sts 149,R24
0006 .dbline 18
0006 ; UBRR0L = 16; // 8->115200 at 16Mhz // 16->57600 at 16Mhz // 25->38400bps at 16Mhz
0006 80E1 ldi R24,16
0008 89B9 out 0x9,R24
000A .dbline 19
000A ; UCSR0B = 0x98; // Rx enable Tx Enable RxInt Enable
000A 88E9 ldi R24,152
000C 8AB9 out 0xa,R24
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
.area vector(rom, abs)
.org 72
0048 0C940800 jmp _USBRxChar
.area text(rom, con, rel)
0010 .dbfile G:\IccPro\Mp3Ide\usb.c
.area bss(ram, con, rel)
0000 .dbfile G:\IccPro\Mp3Ide\usb.c
0000 L3:
0000 .blkb 1
0001 L4:
0001 .blkb 15
.area text(rom, con, rel)
0010 .dbfile G:\IccPro\Mp3Ide\usb.c
0010 .dbfunc e USBRxChar _USBRxChar fV
0010 .dbsym s USBCommand L4 A[15:15]c
0010 .dbsym s InChar L3 c
0010 ; Sector -> y+2
0010 ; i -> R20
.even
0010 _USBRxChar::
0010 0E940000 xcall push_lset
0014 0E940000 xcall push_gset1
0018 2697 sbiw R28,6
001A .dbline -1
001A .dbline 25
001A ; }
001A ;
001A ; /*********************************************************/
001A ; #pragma interrupt_handler USBRxChar:19
001A ; void USBRxChar(void)
001A ; {
001A .dbline 32
001A ; extern volatile unsigned char IsPlaying;
001A ; static unsigned char InChar;
001A ; static unsigned char USBCommand[15];
001A ; unsigned long Sector;
001A ; unsigned char i;
001A ;
001A ; if (IsPlaying == TRUE)
001A 80910000 lds R24,_IsPlaying
001E 8130 cpi R24,1
0020 21F4 brne L5
0022 .dbline 33
0022 ; {
0022 .dbline 34
0022 ; InChar = UDR0;
0022 2CB0 in R2,0xc
0024 20920000 sts L3,R2
0028 .dbline 35
0028 ; return;
0028 58C0 xjmp L2
002A L5:
002A .dbline 38
002A ; }
002A ;
002A ; InChar = UDR0;
002A 2CB0 in R2,0xc
002C 20920000 sts L3,R2
0030 .dbline 40
0030 41E0 ldi R20,1
0032 0FC0 xjmp L10
0034 L7:
0034 .dbline 40
0034 80E0 ldi R24,<L4
0036 90E0 ldi R25,>L4
0038 E42F mov R30,R20
003A FF27 clr R31
003C E80F add R30,R24
003E F91F adc R31,R25
0040 2080 ldd R2,z+0
0042 80E0 ldi R24,<L4-1
0044 90E0 ldi R25,>L4-1
0046 E42F mov R30,R20
0048 FF27 clr R31
004A E80F add R30,R24
004C F91F adc R31,R25
004E 2082 std z+0,R2
0050 L8:
0050 .dbline 40
0050 4395 inc R20
0052 L10:
0052 .dbline 40
0052 ;
0052 ; for (i=1;i<12;i++) USBCommand[i-1] = USBCommand[i]; // Shift buffer
0052 4C30 cpi R20,12
0054 78F3 brlo L7
0056 .dbline 41
0056 ; USBCommand[11] = InChar;
0056 20900000 lds R2,L3
005A 20920C00 sts L4+11,R2
005E .dbline 43
005E ;
005E ; if (strncmp(&USBCommand[0],"+++R",4) == 0)
005E 84E0 ldi R24,4
0060 90E0 ldi R25,0
0062 9983 std y+1,R25
0064 8883 std y+0,R24
0066 20E0 ldi R18,<L15
0068 30E0 ldi R19,>L15
006A 00E0 ldi R16,<L4
006C 10E0 ldi R17,>L4
006E 0E940000 xcall _strncmp
0072 0030 cpi R16,0
0074 0107 cpc R16,R17
0076 91F4 brne L13
0078 X0:
0078 .dbline 44
0078 ; {
0078 .dbline 45
0078 ; USBCommand[12] = 0x00;
0078 2224 clr R2
007A 20920D00 sts L4+12,R2
007E .dbline 46
007E ; Sector = atol(&USBCommand[4]);
007E 00E0 ldi R16,<L4+4
0080 10E0 ldi R17,>L4+4
0082 0E940000 xcall _atol
0086 FE01 movw R30,R28
0088 0283 std z+2,R16
008A 1383 std z+3,R17
008C 2483 std z+4,R18
008E 3583 std z+5,R19
0090 .dbline 47
0090 ; USBReadSector(Sector);
0090 FE01 movw R30,R28
0092 0281 ldd R16,z+2
0094 1381 ldd R17,z+3
0096 2481 ldd R18,z+4
0098 3581 ldd R19,z+5
009A 25D0 xcall _USBReadSector
009C .dbline 48
009C ; }
009C L13:
009C .dbline 50
009C 84E0 ldi R24,4
009E 90E0 ldi R25,0
00A0 9983 std y+1,R25
00A2 8883 std y+0,R24
00A4 20E0 ldi R18,<L20
00A6 30E0 ldi R19,>L20
00A8 00E0 ldi R16,<L4
00AA 10E0 ldi R17,>L4
00AC 0E940000 xcall _strncmp
00B0 0030 cpi R16,0
00B2 0107 cpc R16,R17
00B4 91F4 brne L18
00B6 X1:
00B6 .dbline 51
00B6 .dbline 52
00B6 2224 clr R2
00B8 20920D00 sts L4+12,R2
00BC .dbline 53
00BC 00E0 ldi R16,<L4+4
00BE 10E0 ldi R17,>L4+4
00C0 0E940000 xcall _atol
00C4 FE01 movw R30,R28
00C6 0283 std z+2,R16
00C8 1383 std z+3,R17
00CA 2483 std z+4,R18
00CC 3583 std z+5,R19
00CE .dbline 54
00CE FE01 movw R30,R28
00D0 0281 ldd R16,z+2
00D2 1381 ldd R17,z+3
00D4 2481 ldd R18,z+4
00D6 3581 ldd R19,z+5
00D8 37D0 xcall _USBWriteSector
00DA .dbline 55
00DA L18:
00DA .dbline -2
00DA L2:
00DA 2696 adiw R28,6
00DC 0E940000 xcall pop_gset1
00E0 0E940000 xcall pop_lset
00E4 .dbline 0 ; func end
00E4 1895 reti
00E6 .dbsym l Sector 2 l
00E6 .dbsym r i 20 c
00E6 .dbend
00E6 .dbfunc e USBReadSector _USBReadSector fV
00E6 ; i -> R20,R21
00E6 ; Sector -> y+10
.even
00E6 _USBReadSector::
00E6 0E940000 xcall push_arg4
00EA 0E940000 xcall push_gset1
00EE 2897 sbiw R28,8
00F0 .dbline -1
00F0 .dbline 61
00F0 ;
00F0 ; if (strncmp(&USBCommand[0],"+++W",4) == 0)
00F0 ; {
00F0 ; USBCommand[12] = 0x00;
00F0 ; Sector = atol(&USBCommand[4]);
00F0 ; USBWriteSector(Sector);
00F0 ; }
00F0 ; }
00F0 ;
00F0 ; /*********************************************************/
00F0 ;
00F0 ; void USBReadSector(unsigned long Sector)
00F0 ; {
00F0 .dbline 65
00F0 ; unsigned int i;
00F0 ; extern unsigned char SectorBuffer[512];
00F0 ;
00F0 ; ata_read_sector_byte(0, Sector, 0, 512, (unsigned char*)&SectorBuffer);
00F0 80E0 ldi R24,<_SectorBuffer
00F2 90E0 ldi R25,>_SectorBuffer
00F4 9F83 std y+7,R25
00F6 8E83 std y+6,R24
00F8 80E0 ldi R24,512
00FA 92E0 ldi R25,2
00FC 9D83 std y+5,R25
00FE 8C83 std y+4,R24
0100 2224 clr R2
0102 3324 clr R3
0104 3B82 std y+3,R3
0106 2A82 std y+2,R2
0108 FE01 movw R30,R28
010A 2284 ldd R2,z+10
010C 3384 ldd R3,z+11
010E 4484 ldd R4,z+12
0110 5584 ldd R5,z+13
0112 4882 std y+0,R4
0114 5982 std y+1,R5
0116 9101 movw R18,R2
0118 0027 clr R16
011A 0E940000 xcall _ata_read_sector_byte
011E .dbline 66
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -