📄 chap9.s
字号:
.dbline 161
; else
; D12_SetEndpointStatus(endp*2,0);
clr R18
ldi R24,2
mul R24,R20
mov R16,R0
xcall _D12_SetEndpointStatus
L29:
.dbline 162
; single_transmit(0,0);
clr R18
clr R16
clr R17
xcall _single_transmit
.dbline 163
; }
xjmp L25
L24:
.dbline 164
; else stall_ep0();
xcall _stall_ep0
L25:
L22:
.dbline -2
.dbline 165
; }
L20:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r endp 20 c
.dbsym r bRecipient 20 c
.dbend
.dbfunc e set_feature _set_feature fV
; endp -> R20
; bRecipient -> R20
.even
_set_feature::
xcall push_gset1
.dbline -1
.dbline 167
; void set_feature(void)
; {
.dbline 169
; unsigned char endp;
; unsigned char bRecipient=ControlData.DeviceRequest.bmRequestType&USB_RECIPIENT;
lds R20,_ControlData
andi R20,31
.dbline 170
; if(bRecipient==USB_RECIPIENT_DEVICE
brne L32
lds R24,_ControlData+2
lds R25,_ControlData+2+1
cpi R24,1
ldi R30,0
cpc R25,R30
brne L32
.dbline 172
; &&ControlData.DeviceRequest.wValue==USB_FEATURE_REMOTE_WAKEUP)
; {
.dbline 173
; DISABLE;
cli
.dbline 174
; bEPPflags.bits.remote_wakeup=1;
lds R24,_bEPPflags
ori R24,8
sts _bEPPflags,R24
.dbline 175
; ENABLE;
sei
.dbline 176
; single_transmit(0,0);
clr R18
clr R16
clr R17
xcall _single_transmit
.dbline 177
; }
xjmp L33
L32:
.dbline 178
; else if(bRecipient==USB_RECIPIENT_ENDPOINT
cpi R20,2
brne L35
lds R2,_ControlData+2
lds R3,_ControlData+2+1
tst R2
brne L35
tst R3
brne L35
X1:
.dbline 180
; &&ControlData.DeviceRequest.wValue==USB_FEATURE_ENDPOINT_STALL)
; {
.dbline 181
; endp=(unsigned char)(ControlData.DeviceRequest.wIndex&MAX_ENDPOINTS);
lds R20,_ControlData+4
andi R20,3
andi R21,0
.dbline 182
; if(ControlData.DeviceRequest.wIndex&(unsigned char)USB_ENDPOINT_DIRECTION_MASK)
lds R2,_ControlData+4
lds R3,_ControlData+4+1
sbrs R2,7
rjmp L39
.dbline 183
; D12_SetEndpointStatus(endp*2+1,1);
ldi R18,1
ldi R24,2
mul R24,R20
mov R16,R0
subi R16,255 ; addi 1
xcall _D12_SetEndpointStatus
xjmp L40
L39:
.dbline 185
; else
; D12_SetEndpointStatus(endp*2,1);
ldi R18,1
ldi R24,2
mul R24,R20
mov R16,R0
xcall _D12_SetEndpointStatus
L40:
.dbline 186
; single_transmit(0,0);
clr R18
clr R16
clr R17
xcall _single_transmit
.dbline 187
; }
xjmp L36
L35:
.dbline 188
; else stall_ep0();
xcall _stall_ep0
L36:
L33:
.dbline -2
.dbline 189
; }
L31:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r endp 20 c
.dbsym r bRecipient 20 c
.dbend
.dbfunc e set_address _set_address fV
.even
_set_address::
.dbline -1
.dbline 191
; void set_address(void)
; {
.dbline 192
; D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue&DEVICE_ADDRESS_MASK),1);
ldi R18,1
lds R16,_ControlData+2
andi R16,127
andi R17,0
xcall _D12_SetAddressEnable
.dbline 193
; single_transmit(0,0);
clr R18
clr R16
clr R17
.dbline -2
.dbline 194
; }
L42:
.dbline 0 ; func end
xjmp _single_transmit
.dbend
.dbfunc e get_descriptor _get_descriptor fV
; bDescriptor -> R20
.even
_get_descriptor::
xcall push_gset1
.dbline -1
.dbline 196
; void get_descriptor(void)
; {
.dbline 197
; unsigned char bDescriptor=MSB(ControlData.DeviceRequest.wValue);
lds R20,_ControlData+2
lds R21,_ControlData+2+1
mov R20,R21
clr R21
andi R21,0
.dbline 198
; if(bDescriptor==USB_DEVICE_DESCRIPTOR_TYPE)
cpi R20,1
brne L46
.dbline 199
; {
.dbline 200
; code_transmit((unsigned char*)&DeviceDescr,sizeof(USB_DEVICE_DESCRIPTOR));
ldi R18,18
ldi R19,0
ldi R16,<_DeviceDescr
ldi R17,>_DeviceDescr
xcall _code_transmit
.dbline 201
; }
xjmp L47
L46:
.dbline 202
; else if(bDescriptor==USB_CONFIGURATION_DESCRIPTOR_TYPE)
cpi R20,2
brne L48
.dbline 203
; {
.dbline 204
; code_transmit((unsigned char *)&ConfigDescr,CONFIG_DESCRIPTOR_LENGTH);
ldi R18,46
ldi R19,0
ldi R16,<_ConfigDescr
ldi R17,>_ConfigDescr
xcall _code_transmit
.dbline 205
; }
xjmp L49
L48:
.dbline 206
; else stall_ep0();
xcall _stall_ep0
L49:
L47:
.dbline -2
.dbline 207
; }
L44:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r bDescriptor 20 c
.dbend
.dbfunc e get_configuration _get_configuration fV
; c -> y+0
.even
_get_configuration::
sbiw R28,1
.dbline -1
.dbline 209
; void get_configuration(void)
; {
.dbline 210
; unsigned char c=bEPPflags.bits.configuration;
lds R24,_bEPPflags
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
std y+0,R24
.dbline 211
; single_transmit(&c,1);
ldi R18,1
movw R16,R28
xcall _single_transmit
.dbline -2
.dbline 212
; }
L50:
adiw R28,1
.dbline 0 ; func end
ret
.dbsym l c 0 c
.dbend
.dbfunc e set_configuration _set_configuration fV
.even
_set_configuration::
.dbline -1
.dbline 214
; void set_configuration(void)
; {
.dbline 215
; if(ControlData.DeviceRequest.wValue==0)
lds R2,_ControlData+2
lds R3,_ControlData+2+1
tst R2
brne L52
tst R3
brne L52
X2:
.dbline 216
; {
.dbline 217
; single_transmit(0,0);
clr R18
clr R16
clr R17
xcall _single_transmit
.dbline 218
; DISABLE;
cli
.dbline 219
; bEPPflags.bits.configuration=0;
lds R24,_bEPPflags
andi R24,127
sts _bEPPflags,R24
.dbline 220
; ENABLE;
sei
.dbline 221
; init_unconfig();
xcall _init_unconfig
.dbline 222
; }
xjmp L53
L52:
.dbline 223
; else if(ControlData.DeviceRequest.wValue==1)
lds R24,_ControlData+2
lds R25,_ControlData+2+1
cpi R24,1
ldi R30,0
cpc R25,R30
brne L55
.dbline 224
; {
.dbline 225
; single_transmit(0,0);
clr R18
clr R16
clr R17
xcall _single_transmit
.dbline 226
; init_unconfig();
xcall _init_unconfig
.dbline 227
; init_config();
xcall _init_config
.dbline 228
; DISABLE;
cli
.dbline 229
; bEPPflags.bits.configuration=1;
lds R24,_bEPPflags
ori R24,128
sts _bEPPflags,R24
.dbline 230
; ENABLE;
sei
.dbline 231
; }
xjmp L56
L55:
.dbline 232
; else stall_ep0();
xcall _stall_ep0
L56:
L53:
.dbline -2
.dbline 233
; }
L51:
.dbline 0 ; func end
ret
.dbend
.dbfunc e get_interface _get_interface fV
; txdat -> y+0
.even
_get_interface::
sbiw R28,1
.dbline -1
.dbline 235
; void get_interface(void)
; {
.dbline 236
; unsigned char txdat=0;
clr R2
std y+0,R2
.dbline 237
; single_transmit(&txdat,1);
ldi R18,1
movw R16,R28
xcall _single_transmit
.dbline -2
.dbline 238
; }
L58:
adiw R28,1
.dbline 0 ; func end
ret
.dbsym l txdat 0 c
.dbend
.dbfunc e set_interface _set_interface fV
.even
_set_interface::
.dbline -1
.dbline 240
; void set_interface(void)
; {
.dbline 241
; if(ControlData.DeviceRequest.wValue==0&&ControlData.DeviceRequest.wIndex==0)
lds R2,_ControlData+2
lds R3,_ControlData+2+1
tst R2
brne L60
tst R3
brne L60
X3:
lds R2,_ControlData+4
lds R3,_ControlData+4+1
tst R2
brne L60
tst R3
brne L60
X4:
.dbline 242
; single_transmit(0,0);
clr R18
clr R16
clr R17
xcall _single_transmit
xjmp L61
L60:
.dbline 243
xcall _stall_ep0
L61:
.dbline -2
.dbline 244
; else stall_ep0();
; }
L59:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -