📄 chap9.lis
字号:
01C8 .dbline 0 ; func end
01C8 0895 ret
01CA .dbsym r endp 20 c
01CA .dbsym r bRecipient 20 c
01CA .dbend
01CA .dbfunc e set_address _set_address fV
.even
01CA _set_address::
01CA .dbline -1
01CA .dbline 191
01CA ; void set_address(void)
01CA ; {
01CA .dbline 192
01CA ; D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue&DEVICE_ADDRESS_MASK),1);
01CA 21E0 ldi R18,1
01CC 00910200 lds R16,_ControlData+2
01D0 0F77 andi R16,127
01D2 1070 andi R17,0
01D4 0E940000 xcall _D12_SetAddressEnable
01D8 .dbline 193
01D8 ; single_transmit(0,0);
01D8 2227 clr R18
01DA 0027 clr R16
01DC 1127 clr R17
01DE .dbline -2
01DE .dbline 194
01DE ; }
01DE L42:
01DE .dbline 0 ; func end
01DE 0C940000 xjmp _single_transmit
01E2 .dbend
01E2 .dbfunc e get_descriptor _get_descriptor fV
01E2 ; bDescriptor -> R20
.even
01E2 _get_descriptor::
01E2 0E940000 xcall push_gset1
01E6 .dbline -1
01E6 .dbline 196
01E6 ; void get_descriptor(void)
01E6 ; {
01E6 .dbline 197
01E6 ; unsigned char bDescriptor=MSB(ControlData.DeviceRequest.wValue);
01E6 40910200 lds R20,_ControlData+2
01EA 50910300 lds R21,_ControlData+2+1
01EE 452F mov R20,R21
01F0 5527 clr R21
01F2 5070 andi R21,0
01F4 .dbline 198
01F4 ; if(bDescriptor==USB_DEVICE_DESCRIPTOR_TYPE)
01F4 4130 cpi R20,1
01F6 39F4 brne L46
01F8 .dbline 199
01F8 ; {
01F8 .dbline 200
01F8 ; code_transmit((unsigned char*)&DeviceDescr,sizeof(USB_DEVICE_DESCRIPTOR));
01F8 22E1 ldi R18,18
01FA 30E0 ldi R19,0
01FC 00E0 ldi R16,<_DeviceDescr
01FE 10E0 ldi R17,>_DeviceDescr
0200 0E940000 xcall _code_transmit
0204 .dbline 201
0204 ; }
0204 0BC0 xjmp L47
0206 L46:
0206 .dbline 202
0206 ; else if(bDescriptor==USB_CONFIGURATION_DESCRIPTOR_TYPE)
0206 4230 cpi R20,2
0208 39F4 brne L48
020A .dbline 203
020A ; {
020A .dbline 204
020A ; code_transmit((unsigned char *)&ConfigDescr,CONFIG_DESCRIPTOR_LENGTH);
020A 2EE2 ldi R18,46
020C 30E0 ldi R19,0
020E 00E0 ldi R16,<_ConfigDescr
0210 10E0 ldi R17,>_ConfigDescr
0212 0E940000 xcall _code_transmit
0216 .dbline 205
0216 ; }
0216 02C0 xjmp L49
0218 L48:
0218 .dbline 206
0218 ; else stall_ep0();
0218 0E940000 xcall _stall_ep0
021C L49:
021C L47:
021C .dbline -2
021C .dbline 207
021C ; }
021C L44:
021C 0E940000 xcall pop_gset1
0220 .dbline 0 ; func end
0220 0895 ret
0222 .dbsym r bDescriptor 20 c
0222 .dbend
0222 .dbfunc e get_configuration _get_configuration fV
0222 ; c -> y+0
.even
0222 _get_configuration::
0222 2197 sbiw R28,1
0224 .dbline -1
0224 .dbline 209
0224 ; void get_configuration(void)
0224 ; {
0224 .dbline 210
0224 ; unsigned char c=bEPPflags.bits.configuration;
0224 80910000 lds R24,_bEPPflags
0228 8695 lsr R24
022A 8695 lsr R24
022C 8695 lsr R24
022E 8695 lsr R24
0230 8695 lsr R24
0232 8695 lsr R24
0234 8695 lsr R24
0236 8170 andi R24,1
0238 8883 std y+0,R24
023A .dbline 211
023A ; single_transmit(&c,1);
023A 21E0 ldi R18,1
023C 8E01 movw R16,R28
023E 0E940000 xcall _single_transmit
0242 .dbline -2
0242 .dbline 212
0242 ; }
0242 L50:
0242 2196 adiw R28,1
0244 .dbline 0 ; func end
0244 0895 ret
0246 .dbsym l c 0 c
0246 .dbend
0246 .dbfunc e set_configuration _set_configuration fV
.even
0246 _set_configuration::
0246 .dbline -1
0246 .dbline 214
0246 ; void set_configuration(void)
0246 ; {
0246 .dbline 215
0246 ; if(ControlData.DeviceRequest.wValue==0)
0246 20900200 lds R2,_ControlData+2
024A 30900300 lds R3,_ControlData+2+1
024E 2220 tst R2
0250 89F4 brne L52
0252 3320 tst R3
0254 79F4 brne L52
0256 X2:
0256 .dbline 216
0256 ; {
0256 .dbline 217
0256 ; single_transmit(0,0);
0256 2227 clr R18
0258 0027 clr R16
025A 1127 clr R17
025C 0E940000 xcall _single_transmit
0260 .dbline 218
0260 ; DISABLE;
0260 F894 cli
0262 .dbline 219
0262 ; bEPPflags.bits.configuration=0;
0262 80910000 lds R24,_bEPPflags
0266 8F77 andi R24,127
0268 80930000 sts _bEPPflags,R24
026C .dbline 220
026C ; ENABLE;
026C 7894 sei
026E .dbline 221
026E ; init_unconfig();
026E 0E940000 xcall _init_unconfig
0272 .dbline 222
0272 ; }
0272 1BC0 xjmp L53
0274 L52:
0274 .dbline 223
0274 ; else if(ControlData.DeviceRequest.wValue==1)
0274 80910200 lds R24,_ControlData+2
0278 90910300 lds R25,_ControlData+2+1
027C 8130 cpi R24,1
027E E0E0 ldi R30,0
0280 9E07 cpc R25,R30
0282 89F4 brne L55
0284 .dbline 224
0284 ; {
0284 .dbline 225
0284 ; single_transmit(0,0);
0284 2227 clr R18
0286 0027 clr R16
0288 1127 clr R17
028A 0E940000 xcall _single_transmit
028E .dbline 226
028E ; init_unconfig();
028E 0E940000 xcall _init_unconfig
0292 .dbline 227
0292 ; init_config();
0292 0E940000 xcall _init_config
0296 .dbline 228
0296 ; DISABLE;
0296 F894 cli
0298 .dbline 229
0298 ; bEPPflags.bits.configuration=1;
0298 80910000 lds R24,_bEPPflags
029C 8068 ori R24,128
029E 80930000 sts _bEPPflags,R24
02A2 .dbline 230
02A2 ; ENABLE;
02A2 7894 sei
02A4 .dbline 231
02A4 ; }
02A4 02C0 xjmp L56
02A6 L55:
02A6 .dbline 232
02A6 ; else stall_ep0();
02A6 0E940000 xcall _stall_ep0
02AA L56:
02AA L53:
02AA .dbline -2
02AA .dbline 233
02AA ; }
02AA L51:
02AA .dbline 0 ; func end
02AA 0895 ret
02AC .dbend
02AC .dbfunc e get_interface _get_interface fV
02AC ; txdat -> y+0
.even
02AC _get_interface::
02AC 2197 sbiw R28,1
02AE .dbline -1
02AE .dbline 235
02AE ; void get_interface(void)
02AE ; {
02AE .dbline 236
02AE ; unsigned char txdat=0;
02AE 2224 clr R2
02B0 2882 std y+0,R2
02B2 .dbline 237
02B2 ; single_transmit(&txdat,1);
02B2 21E0 ldi R18,1
02B4 8E01 movw R16,R28
02B6 0E940000 xcall _single_transmit
02BA .dbline -2
02BA .dbline 238
02BA ; }
02BA L58:
02BA 2196 adiw R28,1
02BC .dbline 0 ; func end
02BC 0895 ret
02BE .dbsym l txdat 0 c
02BE .dbend
02BE .dbfunc e set_interface _set_interface fV
.even
02BE _set_interface::
02BE .dbline -1
02BE .dbline 240
02BE ; void set_interface(void)
02BE ; {
02BE .dbline 241
02BE ; if(ControlData.DeviceRequest.wValue==0&&ControlData.DeviceRequest.wIndex==0)
02BE 20900200 lds R2,_ControlData+2
02C2 30900300 lds R3,_ControlData+2+1
02C6 2220 tst R2
02C8 81F4 brne L60
02CA 3320 tst R3
02CC 71F4 brne L60
02CE X3:
02CE 20900400 lds R2,_ControlData+4
02D2 30900500 lds R3,_ControlData+4+1
02D6 2220 tst R2
02D8 41F4 brne L60
02DA 3320 tst R3
02DC 31F4 brne L60
02DE X4:
02DE .dbline 242
02DE ; single_transmit(0,0);
02DE 2227 clr R18
02E0 0027 clr R16
02E2 1127 clr R17
02E4 0E940000 xcall _single_transmit
02E8 02C0 xjmp L61
02EA L60:
02EA .dbline 243
02EA 0E940000 xcall _stall_ep0
02EE L61:
02EE .dbline -2
02EE .dbline 244
02EE ; else stall_ep0();
02EE ; }
02EE L59:
02EE .dbline 0 ; func end
02EE 0895 ret
02F0 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -