📄 usb.src
字号:
MOV R2,#HIGH (txdat?2459)
MOV R1,#LOW (txdat?2459)
MOV R5,#02H
LJMP _single_transmit
; }
; SOURCE LINE # 447
?C0087:
; else if (bRecipient == USB_RECIPIENT_ENDPOINT)
; SOURCE LINE # 448
MOV A,bRecipient?2460
XRL A,#02H
JNZ ?C0089
; { //获取端点状态
; SOURCE LINE # 449
; endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
; SOURCE LINE # 450
MOV A,ControlData+05H
ANL A,#03H
MOV endp?2458,A
; if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
; SOURCE LINE # 451
MOV A,ControlData+05H
JNB ACC.7,?C0090
; c = D12_SelectEndpoint(endp*2 + 1); /* Control-in */
; SOURCE LINE # 452
MOV A,endp?2458
ADD A,ACC
INC A
MOV R7,A
LCALL _D12_SelectEndpoint
MOV c?2461,R7
SJMP ?C0091
?C0090:
; else
; c = D12_SelectEndpoint(endp*2); /* Control-out */
; SOURCE LINE # 454
MOV A,endp?2458
ADD A,ACC
MOV R7,A
LCALL _D12_SelectEndpoint
MOV c?2461,R7
?C0091:
; if(c & D12_STALL)
; SOURCE LINE # 455
MOV A,c?2461
JNB ACC.1,?C0092
; txdat[0] = 1;
; SOURCE LINE # 456
MOV txdat?2459,#01H
SJMP ?C0093
?C0092:
; else
; txdat[0] = 0;
; SOURCE LINE # 458
CLR A
MOV txdat?2459,A
?C0093:
; txdat[1] = 0;
; SOURCE LINE # 459
CLR A
MOV txdat?2459+01H,A
; single_transmit(txdat, 2);
; SOURCE LINE # 460
MOV R3,A
MOV R2,#HIGH (txdat?2459)
MOV R1,#LOW (txdat?2459)
MOV R5,#02H
LJMP _single_transmit
; }
; SOURCE LINE # 461
?C0089:
; else
; stall_ep0();
; SOURCE LINE # 463
LCALL stall_ep0
; }
; SOURCE LINE # 464
?C0095:
RET
; END OF get_status
;
; //特性清除
; void clear_feature(void)
RSEG ?PR?clear_feature?USB
clear_feature:
USING 0
; SOURCE LINE # 467
; {
; SOURCE LINE # 468
; unsigned char endp;
; unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
; SOURCE LINE # 470
MOV A,ControlData
ANL A,#01FH
MOV bRecipient?2563,A
;
; if (bRecipient == USB_RECIPIENT_DEVICE && ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP)
; SOURCE LINE # 472
JNZ ?C0096
MOV A,ControlData+03H
XRL A,#01H
ORL A,ControlData+02H
JNZ ?C0096
; { //清除远程唤醒功能
; SOURCE LINE # 473
; DISABLE;
; SOURCE LINE # 474
CLR EA
; bEPPflags.bits.remote_wakeup = 0;
; SOURCE LINE # 475
MOV R7,bEPPflags
MOV A,R7
ANL A,#0EFH
; ENABLE;
; SOURCE LINE # 476
; single_transmit(0, 0);
; SOURCE LINE # 477
LJMP L?0211
; }
; SOURCE LINE # 478
?C0096:
; else if (bRecipient == USB_RECIPIENT_ENDPOINT && ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL)
; SOURCE LINE # 479
MOV A,bRecipient?2563
XRL A,#02H
JNZ ?C0098
MOV A,ControlData+03H
ORL A,ControlData+02H
JNZ ?C0098
; { //清除端点stall
; SOURCE LINE # 480
; endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
; SOURCE LINE # 481
MOV A,ControlData+05H
ANL A,#03H
MOV endp?2562,A
; if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
; SOURCE LINE # 482
MOV A,ControlData+05H
JNB ACC.7,?C0099
; /* clear TX stall for IN on EPn. */
; D12_SetEndpointStatus(endp*2 + 1, 0);
; SOURCE LINE # 484
MOV A,endp?2562
ADD A,ACC
INC A
MOV R7,A
CLR A
MOV R5,A
LCALL _D12_SetEndpointStatus
SJMP ?C0100
?C0099:
; else
; /* clear RX stall for OUT on EPn. */
; D12_SetEndpointStatus(endp*2, 0);
; SOURCE LINE # 487
MOV A,endp?2562
ADD A,ACC
MOV R7,A
CLR A
MOV R5,A
LCALL _D12_SetEndpointStatus
?C0100:
; single_transmit(0, 0);
; SOURCE LINE # 488
LJMP L?0212
; }
; SOURCE LINE # 489
?C0098:
; else
; stall_ep0();
; SOURCE LINE # 491
LCALL stall_ep0
; }
; SOURCE LINE # 492
?C0102:
RET
; END OF clear_feature
;
; //特性设置
; void set_feature(void)
RSEG ?PR?set_feature?USB
set_feature:
USING 0
; SOURCE LINE # 495
; {
; SOURCE LINE # 496
; unsigned char endp;
; unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
; SOURCE LINE # 498
MOV A,ControlData
ANL A,#01FH
MOV bRecipient?2665,A
;
; if (bRecipient == USB_RECIPIENT_DEVICE && ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP)
; SOURCE LINE # 500
JNZ ?C0103
MOV A,ControlData+03H
XRL A,#01H
ORL A,ControlData+02H
JNZ ?C0103
; { //设置远程唤醒功能
; SOURCE LINE # 501
; DISABLE;
; SOURCE LINE # 502
CLR EA
; bEPPflags.bits.remote_wakeup = 1;
; SOURCE LINE # 503
MOV R7,bEPPflags
MOV A,R7
ORL A,#010H
; ENABLE;
; SOURCE LINE # 504
; single_transmit(0, 0);
; SOURCE LINE # 505
LJMP L?0211
; }
; SOURCE LINE # 506
?C0103:
; else if (bRecipient == USB_RECIPIENT_ENDPOINT && ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL)
; SOURCE LINE # 507
MOV A,bRecipient?2665
XRL A,#02H
JNZ ?C0105
MOV A,ControlData+03H
ORL A,ControlData+02H
JNZ ?C0105
; { //设置端点stall
; SOURCE LINE # 508
; endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
; SOURCE LINE # 509
MOV A,ControlData+05H
ANL A,#03H
MOV endp?2664,A
; if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
; SOURCE LINE # 510
MOV A,ControlData+05H
JNB ACC.7,?C0106
; /* clear TX stall for IN on EPn. */
; D12_SetEndpointStatus(endp*2 + 1, 1);
; SOURCE LINE # 512
MOV A,endp?2664
ADD A,ACC
INC A
MOV R7,A
MOV R5,#01H
LCALL _D12_SetEndpointStatus
SJMP ?C0107
?C0106:
; else
; /* clear RX stall for OUT on EPn. */
; D12_SetEndpointStatus(endp*2, 1);
; SOURCE LINE # 515
MOV A,endp?2664
ADD A,ACC
MOV R7,A
MOV R5,#01H
LCALL _D12_SetEndpointStatus
?C0107:
; single_transmit(0, 0);
; SOURCE LINE # 516
LJMP L?0212
; }
; SOURCE LINE # 517
?C0105:
; else
; stall_ep0();
; SOURCE LINE # 519
LCALL stall_ep0
; }
; SOURCE LINE # 520
?C0109:
RET
; END OF set_feature
;
; //设置地址
; void set_address(void)
RSEG ?PR?set_address?USB
set_address:
USING 0
; SOURCE LINE # 523
; {
; SOURCE LINE # 524
; D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue & DEVICE_ADDRESS_MASK), 1);
; SOURCE LINE # 525
MOV A,ControlData+03H
ANL A,#07FH
MOV R7,A
MOV R5,#01H
LCALL _D12_SetAddressEnable
; single_transmit(0, 0);
; SOURCE LINE # 526
LJMP L?0212
; END OF set_address
; }
;
; //获取描述符
; void get_descriptor(void)
RSEG ?PR?get_descriptor?USB
get_descriptor:
USING 0
; SOURCE LINE # 530
; {
; SOURCE LINE # 531
; unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);
; SOURCE LINE # 532
MOV A,ControlData+02H
MOV bDescriptor?2866,A
; if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE)
; SOURCE LINE # 533
MOV A,bDescriptor?2866
CJNE A,#01H,?C0111
; { //获取设备描述符
; SOURCE LINE # 534
; code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
; SOURCE LINE # 535
MOV R6,#HIGH (DeviceDescr)
MOV R7,#LOW (DeviceDescr)
MOV R5,#012H
MOV R4,#00H
LJMP _code_transmit
; }
; SOURCE LINE # 536
?C0111:
; else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE)
; SOURCE LINE # 537
MOV A,bDescriptor?2866
CJNE A,#02H,?C0113
; { //获取配置描述符
; SOURCE LINE # 538
; code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
; SOURCE LINE # 539
MOV R6,#HIGH (ConfigDescr)
MOV R7,#LOW (ConfigDescr)
MOV R5,#02EH
MOV R4,#00H
LJMP _code_transmit
; }
; SOURCE LINE # 540
?C0113:
; else
; stall_ep0();
; SOURCE LINE # 542
LCALL stall_ep0
; }
; SOURCE LINE # 543
?C0115:
RET
; END OF get_descriptor
; //获取配置状态
; void get_configuration(void)
RSEG ?PR?get_configuration?USB
get_configuration:
USING 0
; SOURCE LINE # 545
; {
; SOURCE LINE # 546
; unsigned char c = bEPPflags.bits.configuration;
; SOURCE LINE # 547
MOV R7,bEPPflags+01H
MOV A,R7
ANL A,#01H
MOV c?2967,A
; single_transmit(&c, 1);
; SOURCE LINE # 548
MOV R3,#00H
MOV R2,#HIGH (c?2967)
MOV R1,#LOW (c?2967)
MOV R5,#01H
LJMP _single_transmit
; END OF get_configuration
; }
;
; //设置配置状态
; void set_configuration(void)
RSEG ?PR?set_configuration?USB
set_configuration:
USING 0
; SOURCE LINE # 552
; {
; SOURCE LINE # 553
; if (ControlData.DeviceRequest.wValue == 0)
; SOURCE LINE # 554
MOV A,ControlData+03H
ORL A,ControlData+02H
JNZ ?C0117
; {
; SOURCE LINE # 555
; //设备进入未配置状态
; single_transmit(0, 0);
; SOURCE LINE # 557
MOV R3,A
MOV R2,A
MOV R1,A
MOV R5,A
LCALL _single_transmit
; DISABLE;
; SOURCE LINE # 558
CLR EA
; bEPPflags.bits.configuration = 0;
; SOURCE LINE # 559
MOV R7,bEPPflags+01H
MOV A,R7
ANL A,#0FEH
MOV bEPPflags+01H,A
; ENABLE;
; SOURCE LINE # 560
SETB EA
; init_unconfig();
; SOURCE LINE # 561
LJMP init_unconfig
; }
; SOURCE LINE # 562
?C0117:
; else if (ControlData.DeviceRequest.wValue == 1)
; SOURCE LINE # 563
MOV A,ControlData+03H
XRL A,#01H
ORL A,ControlData+02H
JNZ ?C0119
; {
; SOURCE LINE # 564
; //配置设备
; single_transmit(0, 0);
; SOURCE LINE # 566
MOV R3,A
MOV R2,A
MOV R1,A
MOV R5,A
LCALL _single_transmit
;
; init_unconfig();
; SOURCE LINE # 568
LCALL init_unconfig
; init_config();
; SOURCE LINE # 569
LCALL init_config
; DISABLE;
; SOURCE LINE # 570
CLR EA
; bEPPflags.bits.configuration = 1;
; SOURCE LINE # 571
MOV R7,bEPPflags+01H
MOV A,R7
ORL A,#01H
MOV bEPPflags+01H,A
; ENABLE;
; SOURCE LINE # 572
SETB EA
; }
; SOURCE LINE # 573
RET
?C0119:
; else
; stall_ep0();
; SOURCE LINE # 575
LCALL stall_ep0
; }
; SOURCE LINE # 576
?C0121:
RET
; END OF set_configuration
;
; //获取接口状态
; void get_interface(void)
RSEG ?PR?get_interface?USB
get_interface:
USING 0
; SOURCE LINE # 579
; {
; SOURCE LINE # 580
; unsigned char txdat = 0; /* Only/Current interface = 0 */
; SOURCE LINE # 581
CLR A
MOV txdat?3168,A
; single_transmit(&txdat, 1);
; SOURCE LINE # 582
MOV R3,A
MOV R2,#HIGH (txdat?3168)
MOV R1,#LOW (txdat?3168)
MOV R5,#01H
LJMP _single_transmit
; END OF get_interface
; }
;
; //设置接口状态
; void set_interface(void)
RSEG ?PR?set_interface?USB
set_interface:
USING 0
; SOURCE LINE # 586
; {
; SOURCE LINE # 587
; if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0) single_transmit(0, 0);
; SOURCE LINE # 588
MOV A,ControlData+03H
ORL A,ControlData+02H
JNZ ?C0123
MOV A,ControlData+05H
ORL A,ControlData+04H
JNZ ?C0123
MOV R3,A
MOV R2,A
MOV R1,A
MOV R5,A
LJMP _single_transmit
?C0123:
; else
; stall_ep0();
; SOURCE LINE # 590
LCALL stall_ep0
; }
; SOURCE LINE # 591
?C0125:
RET
; END OF set_interface
;
; //设置地址使能
; void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
RSEG ?PR?_D12_SetAddressEnable?USB
_D12_SetAddressEnable:
USING 0
MOV bAddress?3369,R7
MOV bEnable?3370,R5
; SOURCE LINE # 594
; {
; SOURCE LINE # 595
; if(bEPPflags.bits.in_isr == 0) DISABLE;
; SOURCE LINE # 596
MOV R7,bEPPflags
MOV A,R7
SWAP A
RRC A
ANL A,#07H
JB ACC.0,?C0126
CLR EA
?C0126:
; outportb(D12_COMMAND, 0xD0); //输出指令
; SOURCE LINE # 597
MOV R5,#0D0H
LCALL L?0208
; if(bEnable) bAddress |= 0x80;
; SOURCE LINE # 598
MOV A,bEnable?3370
JZ ?C0127
ORL bAddress?3369,#080H
?C0127:
; outportb(D12_DATA, bAddress); //设置地址
; SOURCE LINE # 599
MOV R5,bAddress?3369
MOV R7,#02H
MOV R6,#0FFH
LCALL _outportb
; if(bEPPflags.bits.in_isr == 0) ENABLE;
; SOURCE LINE # 600
MOV R7,bEPPflags
MOV A,R7
SWAP A
RRC A
ANL A,#07H
JB ACC.0,?C0129
SETB EA
; }
; SOURCE LINE # 601
?C0129:
RET
; END OF _D12_SetAddressEnable
;
; //设置端点使能
; void D12_SetEndpointEnable(unsigned char bEnable)
RSEG ?PR?_D12_SetEndpointEnable?USB
_D12_SetEndpointEnable:
USING 0
MOV bEnable?3471,R7
; SOURCE LINE # 604
; {
; SOURCE LINE # 605
; if(bEPPflags.bits.in_isr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -