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

📄 chap9.lis

📁 采用Atmeag162单片机来制作的U盘程序源码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module CHAP9.C
                        .area lit(rom, con, rel)
 0000           _DeviceDescr::
 0000 12                .byte 18
 0001 01                .byte 1
 0002 0100              .word 1
 0004 00                .byte 0
 0005 00                .byte 0
 0006 00                .byte 0
 0007 10                .byte 16
 0008 0584              .word 33797
 000A 0001              .word 256
 000C 0100              .word 1
 000E 00                .byte 0
 000F 00                .byte 0
 0010 00                .byte 0
 0011 01                .byte 1
 0012                   .dbfile D:\AvrUSB\CHAP9.C
 0012                   .dbsym e DeviceDescr _DeviceDescr kX
 0012           _ConfigDescr::
 0012 09                .byte 9
 0013 02                .byte 2
 0014 2E00              .word 46
 0016 01                .byte 1
 0017 01                .byte 1
 0018 00                .byte 0
 0019 80                .byte 128
 001A FA                .byte 250
 001B                   .dbsym e ConfigDescr _ConfigDescr kX
 001B           _InterfaceDescr::
 001B 09                .byte 9
 001C 04                .byte 4
 001D 00                .byte 0
 001E 00                .byte 0
 001F 04                .byte 4
 0020 08                .byte 8
 0021 06                .byte 6
 0022 50                .byte 80
 0023 00                .byte 0
 0024                   .dbsym e InterfaceDescr _InterfaceDescr kX
 0024           _EP1_TXDescr::
 0024 07                .byte 7
 0025 05                .byte 5
 0026 81                .byte 129
 0027 03                .byte 3
 0028 0400              .word 4
 002A 0A                .byte 10
 002B                   .dbsym e EP1_TXDescr _EP1_TXDescr kX
 002B           _EP1_RXDescr::
 002B 07                .byte 7
 002C 05                .byte 5
 002D 01                .byte 1
 002E 03                .byte 3
 002F 0400              .word 4
 0031 0A                .byte 10
 0032                   .dbsym e EP1_RXDescr _EP1_RXDescr kX
 0032           _EP2_TXDescr::
 0032 07                .byte 7
 0033 05                .byte 5
 0034 82                .byte 130
 0035 02                .byte 2
 0036 4000              .word 64
 0038 0A                .byte 10
 0039                   .dbsym e EP2_TXDescr _EP2_TXDescr kX
 0039           _EP2_RXDescr::
 0039 07                .byte 7
 003A 05                .byte 5
 003B 02                .byte 2
 003C 02                .byte 2
 003D 4000              .word 64
 003F 0A                .byte 10
 0040                   .dbsym e EP2_RXDescr _EP2_RXDescr kX
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AvrUSB\CHAP9.C
 0000                   .dbfunc e reserved _reserved fV
                        .even
 0000           _reserved::
 0000                   .dbline -1
 0000                   .dbline 102
 0000           ; #include <macros.h>
 0000           ; #include <stdio.h>
 0000           ; #include <string.h>
 0000           ; 
 0000           ; #include "D12CI.H"
 0000           ; #include "MAIN.H"
 0000           ; #include "USB100.H"
 0000           ; #include "CHAP9.H"
 0000           ; 
 0000           ; extern void single_transmit(unsigned char *buf,unsigned char len);
 0000           ; extern void code_transmit(const unsigned char * pRomData,unsigned short len);
 0000           ; extern void stall_ep0(void);
 0000           ; extern void init_unconfig(void);
 0000           ; extern void init_config(void);
 0000           ; 
 0000           ; #define NUM_ENDPOINTS 4
 0000           ; #define CONFIG_DESCRIPTOR_LENGTH  sizeof(USB_CONFIGURATION_DESCRIPTOR)\
 0000           ;                                  +sizeof(USB_INTERFACE_DESCRIPTOR)\
 0000           ;                                  +(NUM_ENDPOINTS*sizeof(USB_ENDPOINT_DESCRIPTOR))
 0000           ; extern CONTROL_XFER ControlData;
 0000           ; extern IO_REQUEST   ioRequest;
 0000           ; extern EPPFLAGS     bEPPflags;
 0000           ; 
 0000           ; const USB_DEVICE_DESCRIPTOR DeviceDescr=
 0000           ; {
 0000           ;   sizeof(USB_DEVICE_DESCRIPTOR),
 0000           ;   USB_DEVICE_DESCRIPTOR_TYPE,
 0000           ;   0x0001,//SWAP(0x0100),
 0000           ;   0,//USB_CLASS_CODE_TEST_CLASS_DEVICE,
 0000           ;   0,
 0000           ;   0,
 0000           ;   EP0_PACKET_SIZE,
 0000           ;   0x8405,//SWAP(0x0471),
 0000           ;   0x0100,//SWAP(0x0666),
 0000           ;   0x0001,//SWAP(0x0100),
 0000           ;   0,
 0000           ;   0,
 0000           ;   0,
 0000           ;   0x01
 0000           ; };
 0000           ; const USB_CONFIGURATION_DESCRIPTOR ConfigDescr=
 0000           ; {
 0000           ;   sizeof(USB_CONFIGURATION_DESCRIPTOR),
 0000           ;   USB_CONFIGURATION_DESCRIPTOR_TYPE,
 0000           ;   CONFIG_DESCRIPTOR_LENGTH,//SWAP(CONFIG_DESCRIPTOR_LENGTH),
 0000           ;   1,
 0000           ;   1,
 0000           ;   0,
 0000           ;   0x80,
 0000           ;   0xfa
 0000           ; };
 0000           ; const USB_INTERFACE_DESCRIPTOR InterfaceDescr=
 0000           ; {
 0000           ;   sizeof(USB_INTERFACE_DESCRIPTOR),
 0000           ;   USB_INTERFACE_DESCRIPTOR_TYPE,
 0000           ;   0,
 0000           ;   0,
 0000           ;   NUM_ENDPOINTS,
 0000           ;   USB_DEVICE_CLASS_STORAGE,
 0000           ;   0x06,//SCSI
 0000           ;   0x50,//bulk only Transport
 0000           ;   0
 0000           ; };
 0000           ; const USB_ENDPOINT_DESCRIPTOR EP1_TXDescr=
 0000           ; {
 0000           ;   sizeof(USB_ENDPOINT_DESCRIPTOR),
 0000           ;   USB_ENDPOINT_DESCRIPTOR_TYPE,
 0000           ;   0x81,
 0000           ;   USB_ENDPOINT_TYPE_INTERRUPT,
 0000           ;   EP1_PACKET_SIZE,//SWAP(EP1_PACKET_SIZE),
 0000           ;   10
 0000           ; };
 0000           ; const USB_ENDPOINT_DESCRIPTOR EP1_RXDescr=
 0000           ; {
 0000           ;   sizeof(USB_ENDPOINT_DESCRIPTOR),
 0000           ;   USB_ENDPOINT_DESCRIPTOR_TYPE,
 0000           ;   0x1,
 0000           ;   USB_ENDPOINT_TYPE_INTERRUPT,
 0000           ;   EP1_PACKET_SIZE,//SWAP(EP1_PACKET_SIZE),
 0000           ;   10
 0000           ; };
 0000           ; const USB_ENDPOINT_DESCRIPTOR EP2_TXDescr=
 0000           ; {
 0000           ;   sizeof(USB_ENDPOINT_DESCRIPTOR),
 0000           ;   USB_ENDPOINT_DESCRIPTOR_TYPE,
 0000           ;   0x82,
 0000           ;   USB_ENDPOINT_TYPE_BULK,
 0000           ;   EP2_PACKET_SIZE,//SWAP(EP2_PACKET_SIZE),
 0000           ;   10
 0000           ; };
 0000           ; const USB_ENDPOINT_DESCRIPTOR EP2_RXDescr=
 0000           ; {
 0000           ;   sizeof(USB_ENDPOINT_DESCRIPTOR),
 0000           ;   USB_ENDPOINT_DESCRIPTOR_TYPE,
 0000           ;   0x2,
 0000           ;   USB_ENDPOINT_TYPE_BULK,
 0000           ;   EP2_PACKET_SIZE,//SWAP(EP2_PACKET_SIZE),
 0000           ;   10
 0000           ; };
 0000           ; //USB Protocol layer
 0000           ; void reserved(void)
 0000           ; {
 0000                   .dbline 103
 0000           ;   stall_ep0();
 0000                   .dbline -2
 0000                   .dbline 104
 0000           ; }
 0000           L1:
 0000                   .dbline 0 ; func end
 0000 0C940000          xjmp _stall_ep0
 0004                   .dbend
 0004                   .dbfunc e get_status _get_status fV
 0004           ;              c -> R20
 0004           ;           endp -> R22
 0004           ;          txdat -> y+0
 0004           ;     bRecipient -> R20
                        .even
 0004           _get_status::
 0004 0E940000          xcall push_gset2
 0008 2297              sbiw R28,2
 000A                   .dbline -1
 000A                   .dbline 107
 000A           ; //USB standard device requests
 000A           ; void get_status(void)
 000A           ; {
 000A                   .dbline 109
 000A           ;   unsigned char endp,txdat[2];
 000A           ;   unsigned char bRecipient=ControlData.DeviceRequest.bmRequestType&USB_RECIPIENT;
 000A 40910000          lds R20,_ControlData
 000E 4F71              andi R20,31
 0010                   .dbline 111
 0010           ;   unsigned char c;
 0010           ;   if(bRecipient==USB_RECIPIENT_DEVICE)
 0010 A1F4              brne L3
 0012                   .dbline 112
 0012           ;   {
 0012                   .dbline 113
 0012           ;     if(bEPPflags.bits.remote_wakeup==1)
 0012 80910000          lds R24,_bEPPflags
 0016 8695              lsr R24
 0018 8695              lsr R24
 001A 8695              lsr R24
 001C 8170              andi R24,1
 001E 8130              cpi R24,1
 0020 19F4              brne L5
 0022                   .dbline 114
 0022           ;        txdat[0]=3;
 0022 83E0              ldi R24,3
 0024 8883              std y+0,R24
 0026 02C0              xjmp L6
 0028           L5:
 0028                   .dbline 116
 0028           ;     else
 0028           ;        txdat[0]=1;
 0028 81E0              ldi R24,1
 002A 8883              std y+0,R24
 002C           L6:
 002C                   .dbline 117
 002C           ;     txdat[1]=0;
 002C 2224              clr R2
 002E 2982              std y+1,R2
 0030                   .dbline 118
 0030           ;     single_transmit(txdat,2);
 0030 22E0              ldi R18,2
 0032 8E01              movw R16,R28
 0034 0E940000          xcall _single_transmit
 0038                   .dbline 119
 0038           ;   }
 0038 34C0              xjmp L4
 003A           L3:
 003A                   .dbline 120
 003A           ;   else if(bRecipient==USB_RECIPIENT_INTERFACE)
 003A 4130              cpi R20,1
 003C 41F4              brne L8
 003E                   .dbline 121
 003E           ;   {
 003E                   .dbline 122
 003E           ;     txdat[0]=0;
 003E 2224              clr R2
 0040 2882              std y+0,R2
 0042                   .dbline 123
 0042           ;     txdat[1]=0;
 0042 2982              std y+1,R2
 0044                   .dbline 124
 0044           ;     single_transmit(txdat,2);
 0044 22E0              ldi R18,2
 0046 8E01              movw R16,R28
 0048 0E940000          xcall _single_transmit
 004C                   .dbline 125
 004C           ;   }
 004C 2AC0              xjmp L9
 004E           L8:
 004E                   .dbline 126
 004E           ;   else if(bRecipient==USB_RECIPIENT_ENDPOINT)
 004E 4230              cpi R20,2
 0050 31F5              brne L11
 0052                   .dbline 127
 0052           ;   {
 0052                   .dbline 128
 0052           ;     endp=(unsigned char)(ControlData.DeviceRequest.wIndex&MAX_ENDPOINTS);
 0052 60910400          lds R22,_ControlData+4
 0056 6370              andi R22,3
 0058 7070              andi R23,0
 005A                   .dbline 129
 005A           ;     if(ControlData.DeviceRequest.wIndex&(unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 005A 20900400          lds R2,_ControlData+4
 005E 30900500          lds R3,_ControlData+4+1
 0062 27FE              sbrs R2,7
 0064 08C0              rjmp L14
 0066                   .dbline 130
 0066           ;        c=D12_SelectEndpoint(endp*2+1);
 0066 82E0              ldi R24,2
 0068 869F              mul R24,R22

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -