📄 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 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 + -