⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap9.s

📁 优盘程序,符合USB1.1规范。硬件平台:ATmega162+PDIUSBD12+K9F5608。软件平台:ICCAVR。协议:Bulk-Only Transport,Reduced block co
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -