📄 usb.lis
字号:
.module usb.c
.area text(rom, con, rel)
0000 .dbfile C:\DATA\MP3\Player\Code2\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 .dbline 20
000E ; }
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 C:\DATA\MP3\Player\Code2\usb.c
.area bss(ram, con, rel)
0000 .dbfile C:\DATA\MP3\Player\Code2\usb.c
0000 L3:
0000 .blkb 1
0001 L4:
0001 .blkb 15
.area text(rom, con, rel)
0010 .dbfile C:\DATA\MP3\Player\Code2\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 ; #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 4EC0 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 69F4 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 20D0 xcall _USBReadSector
0092 .dbline 48
0092 ; }
0092 L13:
0092 .dbline 50
0092 84E0 ldi R24,4
0094 90E0 ldi R25,0
0096 9983 std y+1,R25
0098 8883 std y+0,R24
009A 20E0 ldi R18,<L20
009C 30E0 ldi R19,>L20
009E 00E0 ldi R16,<L4
00A0 10E0 ldi R17,>L4
00A2 0E940000 xcall _strncmp
00A6 0030 cpi R16,0
00A8 0107 cpc R16,R17
00AA 69F4 brne L18
00AC X1:
00AC .dbline 51
00AC .dbline 52
00AC 2224 clr R2
00AE 20920D00 sts L4+12,R2
00B2 .dbline 53
00B2 00E0 ldi R16,<L4+4
00B4 10E0 ldi R17,>L4+4
00B6 0E940000 xcall _atol
00BA FE01 movw R30,R28
00BC 0283 std z+2,R16
00BE 1383 std z+3,R17
00C0 2483 std z+4,R18
00C2 3583 std z+5,R19
00C4 .dbline 54
00C4 37D0 xcall _USBWriteSector
00C6 .dbline 55
00C6 L18:
00C6 .dbline -2
00C6 .dbline 56
00C6 ;
00C6 ; if (strncmp(&USBCommand[0],"+++W",4) == 0)
00C6 ; {
00C6 ; USBCommand[12] = 0x00;
00C6 ; Sector = atol(&USBCommand[4]);
00C6 ; USBWriteSector(Sector);
00C6 ; }
00C6 ; }
00C6 L2:
00C6 2696 adiw R28,6
00C8 0E940000 xcall pop_gset1
00CC 0E940000 xcall pop_lset
00D0 .dbline 0 ; func end
00D0 1895 reti
00D2 .dbsym l Sector 2 l
00D2 .dbsym r i 20 c
00D2 .dbend
00D2 .dbfunc e USBReadSector _USBReadSector fV
00D2 ; i -> R20,R21
00D2 ; Sector -> y+10
.even
00D2 _USBReadSector::
00D2 0E940000 xcall push_arg4
00D6 0E940000 xcall push_gset1
00DA 2897 sbiw R28,8
00DC .dbline -1
00DC .dbline 61
00DC ;
00DC ; /*********************************************************/
00DC ;
00DC ; void USBReadSector(unsigned long Sector)
00DC ; {
00DC .dbline 65
00DC ; unsigned int i;
00DC ; extern unsigned char SectorBuffer[512];
00DC ;
00DC ; ata_read_sector_byte(0, Sector, 0, 512, (unsigned char*)&SectorBuffer);
00DC 80E0 ldi R24,<_SectorBuffer
00DE 90E0 ldi R25,>_SectorBuffer
00E0 9F83 std y+7,R25
00E2 8E83 std y+6,R24
00E4 80E0 ldi R24,512
00E6 92E0 ldi R25,2
00E8 9D83 std y+5,R25
00EA 8C83 std y+4,R24
00EC 2224 clr R2
00EE 3324 clr R3
00F0 3B82 std y+3,R3
00F2 2A82 std y+2,R2
00F4 FE01 movw R30,R28
00F6 2284 ldd R2,z+10
00F8 3384 ldd R3,z+11
00FA 4484 ldd R4,z+12
00FC 5584 ldd R5,z+13
00FE 4882 std y+0,R4
0100 5982 std y+1,R5
0102 9101 movw R18,R2
0104 0027 clr R16
0106 0E940000 xcall _ata_read_sector_byte
010A .dbline 66
010A 4427 clr R20
010C 5527 clr R21
010E 09C0 xjmp L27
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -