📄 chap9.lis
字号:
.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 J:\PDIUSBD12-Materials\富昌\优盘5.0\CHAP9.C
0012 .dbstruct 0 18 _USB_DEVICE_DESCRIPTOR
0012 .dbfield 0 bLength c
0012 .dbfield 1 bDescriptorType c
0012 .dbfield 2 bcdUSB s
0012 .dbfield 4 bDeviceClass c
0012 .dbfield 5 bDeviceSubClass c
0012 .dbfield 6 bDeviceProtocol c
0012 .dbfield 7 bMaxPacketSize0 c
0012 .dbfield 8 idVendor s
0012 .dbfield 10 idProduct s
0012 .dbfield 12 bcdDevice s
0012 .dbfield 14 iManufacturer c
0012 .dbfield 15 iProduct c
0012 .dbfield 16 iSerialNumber c
0012 .dbfield 17 bNumConfigurations c
0012 .dbend
0012 .dbsym e DeviceDescr _DeviceDescr kS[_USB_DEVICE_DESCRIPTOR]
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 .dbstruct 0 9 _USB_CONFIGURATION_DESCRIPTOR
001B .dbfield 0 bLength c
001B .dbfield 1 bDescriptorType c
001B .dbfield 2 wTotalLength s
001B .dbfield 4 bNumInterfaces c
001B .dbfield 5 bConfigurationValue c
001B .dbfield 6 iConfiguration c
001B .dbfield 7 bmAttributes c
001B .dbfield 8 MaxPower c
001B .dbend
001B .dbsym e ConfigDescr _ConfigDescr kS[_USB_CONFIGURATION_DESCRIPTOR]
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 .dbstruct 0 9 _USB_INTERFACE_DESCRIPTOR
0024 .dbfield 0 bLength c
0024 .dbfield 1 bDescriptorType c
0024 .dbfield 2 bInterfaceNumber c
0024 .dbfield 3 bAlternateSetting c
0024 .dbfield 4 bNumEndpoints c
0024 .dbfield 5 bInterfaceClass c
0024 .dbfield 6 bInterfaceSubClass c
0024 .dbfield 7 bInterfaceProtocol c
0024 .dbfield 8 iInterface c
0024 .dbend
0024 .dbsym e InterfaceDescr _InterfaceDescr kS[_USB_INTERFACE_DESCRIPTOR]
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 .dbstruct 0 7 _USB_ENDPOINT_DESCRIPTOR
002B .dbfield 0 bLength c
002B .dbfield 1 bDescriptorType c
002B .dbfield 2 bEndpointAddress c
002B .dbfield 3 bmAttributes c
002B .dbfield 4 wMaxPacketSize s
002B .dbfield 6 bInterval c
002B .dbend
002B .dbsym e EP1_TXDescr _EP1_TXDescr kS[_USB_ENDPOINT_DESCRIPTOR]
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 kS[_USB_ENDPOINT_DESCRIPTOR]
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 kS[_USB_ENDPOINT_DESCRIPTOR]
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 kS[_USB_ENDPOINT_DESCRIPTOR]
.area text(rom, con, rel)
0000 .dbfile J:\PDIUSBD12-Materials\富昌\优盘5.0\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 0E940000 xcall _stall_ep0
0004 .dbline -2
0004 L1:
0004 .dbline 0 ; func end
0004 0895 ret
0006 .dbend
0006 .dbfunc e get_status _get_status fV
0006 ; c -> R20
0006 ; endp -> R22
0006 ; txdat -> y+0
0006 ; bRecipient -> R20
.even
0006 _get_status::
0006 0E940000 xcall push_gset2
000A 2297 sbiw R28,2
000C .dbline -1
000C .dbline 107
000C ; }
000C ; //USB standard device requests
000C ; void get_status(void)
000C ; {
000C .dbline 109
000C ; unsigned char endp,txdat[2];
000C ; unsigned char bRecipient=ControlData.DeviceRequest.bmRequestType&USB_RECIPIENT;
000C 40910000 lds R20,_ControlData
0010 4F71 andi R20,31
0012 .dbline 111
0012 ; unsigned char c;
0012 ; if(bRecipient==USB_RECIPIENT_DEVICE)
0012 A1F4 brne L3
0014 .dbline 112
0014 ; {
0014 .dbline 113
0014 ; if(bEPPflags.bits.remote_wakeup==1)
0014 80910000 lds R24,_bEPPflags
0018 8695 lsr R24
001A 8695 lsr R24
001C 8695 lsr R24
001E 8170 andi R24,1
0020 8130 cpi R24,1
0022 19F4 brne L5
0024 .dbline 114
0024 ; txdat[0]=3;
0024 83E0 ldi R24,3
0026 8883 std y+0,R24
0028 02C0 xjmp L6
002A L5:
002A .dbline 116
002A ; else
002A ; txdat[0]=1;
002A 81E0 ldi R24,1
002C 8883 std y+0,R24
002E L6:
002E .dbline 117
002E ; txdat[1]=0;
002E 2224 clr R2
0030 2982 std y+1,R2
0032 .dbline 118
0032 ; single_transmit(txdat,2);
0032 22E0 ldi R18,2
0034 8E01 movw R16,R28
0036 0E940000 xcall _single_transmit
003A .dbline 119
003A ; }
003A 34C0 xjmp L4
003C L3:
003C .dbline 120
003C ; else if(bRecipient==USB_RECIPIENT_INTERFACE)
003C 4130 cpi R20,1
003E 41F4 brne L8
0040 .dbline 121
0040 ; {
0040 .dbline 122
0040 ; txdat[0]=0;
0040 2224 clr R2
0042 2882 std y+0,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -