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