⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb.lis

📁 硬盘MP3播放器-MEGA128-VS1001K-USB-遥控-LCD-ICCAVR代码-硬盘-支持FAT32-单面PCB
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -