?? chap_9.src
字號:
MOV R4,USB_Int_Flag
MOV DPTR,#D14_Cntrl_Reg+018H
LCALL ?C?LSTXDATA
; if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
; SOURCE LINE # 558
MOV R7,USB_Int_Flag
MOV A,R7
RRC A
RRC A
RRC A
ANL A,#01FH
MOV R7,A
MOV A,R7
JNB ACC.0,$ + 6H
LJMP ?C0071
MOV R7,USB_Int_Flag
MOV A,R7
JNB ACC.0,?C0067
RET
; return;
; }
; SOURCE LINE # 560
?C0068:
; USB_Int_Flag.BITS.EP0TX = 0;
; SOURCE LINE # 561
MOV R7,USB_Int_Flag+01H
MOV A,R7
ANL A,#0F7H
MOV USB_Int_Flag+01H,A
; }
; SOURCE LINE # 562
RET
?C0066:
; else
; {
; SOURCE LINE # 564
; Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to Bulk Out endpoint descriptor
; SOURCE LINE # 565
MOV R6,#HIGH (Bulk_Out_Descriptor)
MOV R7,#LOW (Bulk_Out_Descriptor)
MOV Descriptor_Ptr,R6
MOV Descriptor_Ptr+01H,R7
; count = *Descriptor_Ptr; //read in descriptor length
; SOURCE LINE # 566
MOV R6,Descriptor_Ptr
MOV R7,Descriptor_Ptr+01H
MOV DPL,R7
MOV DPH,R6
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV R6,#00H
MOV count,R6
MOV count+01H,R7
; D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
; SOURCE LINE # 567
MOV DPTR,#D14_Cntrl_Reg+02CH
MOV A,#01H
MOVX @DPTR,A
; if(count >= USB_Device_Request.wLength)
; SOURCE LINE # 568
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
CLR C
MOV A,count+01H
SUBB A,R7
MOV A,count
SUBB A,R6
JC ?C0073
; {
; SOURCE LINE # 569
; Temp = USB_Device_Request.wLength;
; SOURCE LINE # 570
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV Temp,A
INC R0
MOV A,@R0
MOV Temp+01H,A
; //send endpoint descriptor
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
; SOURCE LINE # 572
MOV R7,Temp+01H
MOV DPTR,#D14_Cntrl_Reg+01CH
MOV A,R7
MOVX @DPTR,A
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
; SOURCE LINE # 573
MOV A,Temp
MOV R7,A
MOV R6,#00H
MOV DPTR,#D14_Cntrl_Reg+01DH
MOV A,R7
MOVX @DPTR,A
; for(count = 0 ; count < USB_Device_Request.wLength ; count++)
; SOURCE LINE # 574
MOV count,#00H
MOV count+01H,#00H
?C0074:
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
CLR C
MOV A,count+01H
SUBB A,R7
MOV A,count
SUBB A,R6
JNC ?C0075
; {
; SOURCE LINE # 575
; D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
; SOURCE LINE # 576
MOV R6,Descriptor_Ptr
MOV R7,Descriptor_Ptr+01H
MOV DPL,R7
MOV DPH,R6
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV DPTR,#D14_Cntrl_Reg+020H
MOV A,R7
MOVX @DPTR,A
; Descriptor_Ptr++;
; SOURCE LINE # 577
INC Descriptor_Ptr+01H
MOV A,Descriptor_Ptr+01H
JNZ ?C0232
INC Descriptor_Ptr
?C0232:
; }
; SOURCE LINE # 578
INC count+01H
MOV A,count+01H
JNZ ?C0233
INC count
?C0233:
SJMP ?C0074
?C0075:
; wait_ep0tx();
; SOURCE LINE # 579
LCALL wait_ep0tx
; ep0out_ack();
; SOURCE LINE # 580
LCALL ep0out_ack
; }
; SOURCE LINE # 581
RET
?C0073:
; else
; {
; SOURCE LINE # 583
; USB_Device_Request.wLength -= count; //send Endpoint descriptor
; SOURCE LINE # 584
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
CLR C
MOV A,R7
SUBB A,count+01H
MOV R7,A
MOV A,R6
SUBB A,count
MOV R6,A
MOV R0,#LOW (USB_Device_Request+06H)
MOV @R0,AR6
INC R0
MOV @R0,AR7
; Temp += count;
; SOURCE LINE # 585
MOV A,count+01H
ADD A,Temp+01H
MOV Temp+01H,A
MOV A,count
ADDC A,Temp
MOV Temp,A
?C0078:
; while(count != 0)
; SOURCE LINE # 586
MOV A,count+01H
ORL A,count
JZ ?C0079
; {
; SOURCE LINE # 587
; D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
; SOURCE LINE # 588
MOV R6,Descriptor_Ptr
MOV R7,Descriptor_Ptr+01H
MOV DPL,R7
MOV DPH,R6
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV DPTR,#D14_Cntrl_Reg+020H
MOV A,R7
MOVX @DPTR,A
; count--;
; SOURCE LINE # 589
MOV A,count+01H
DEC count+01H
JNZ ?C0234
DEC count
?C0234:
; Descriptor_Ptr++;
; SOURCE LINE # 590
INC Descriptor_Ptr+01H
MOV A,Descriptor_Ptr+01H
JNZ ?C0235
INC Descriptor_Ptr
?C0235:
; }
; SOURCE LINE # 591
SJMP ?C0078
?C0079:
; Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to Bulk In endpoint descriptor
; SOURCE LINE # 592
MOV R6,#HIGH (Bulk_In_Descriptor)
MOV R7,#LOW (Bulk_In_Descriptor)
MOV Descriptor_Ptr,R6
MOV Descriptor_Ptr+01H,R7
; count = *Descriptor_Ptr; //read in descriptor length
; SOURCE LINE # 593
MOV R6,Descriptor_Ptr
MOV R7,Descriptor_Ptr+01H
MOV DPL,R7
MOV DPH,R6
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV R6,#00H
MOV count,R6
MOV count+01H,R7
; if(count >= USB_Device_Request.wLength)
; SOURCE LINE # 594
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
CLR C
MOV A,count+01H
SUBB A,R7
MOV A,count
SUBB A,R6
JC ?C0080
; {
; SOURCE LINE # 595
; Temp += USB_Device_Request.wLength;
; SOURCE LINE # 596
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
MOV A,R7
ADD A,Temp+01H
MOV Temp+01H,A
MOV A,R6
ADDC A,Temp
MOV Temp,A
; //send endpoint descriptor
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
; SOURCE LINE # 598
MOV R7,Temp+01H
MOV DPTR,#D14_Cntrl_Reg+01CH
MOV A,R7
MOVX @DPTR,A
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
; SOURCE LINE # 599
MOV A,Temp
MOV R7,A
MOV R6,#00H
MOV DPTR,#D14_Cntrl_Reg+01DH
MOV A,R7
MOVX @DPTR,A
; for(count = 0 ; count < USB_Device_Request.wLength ; count++)
; SOURCE LINE # 600
MOV count,#00H
MOV count+01H,#00H
?C0081:
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
CLR C
MOV A,count+01H
SUBB A,R7
MOV A,count
SUBB A,R6
JNC ?C0082
; {
; SOURCE LINE # 601
; D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
; SOURCE LINE # 602
MOV R6,Descriptor_Ptr
MOV R7,Descriptor_Ptr+01H
MOV DPL,R7
MOV DPH,R6
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV DPTR,#D14_Cntrl_Reg+020H
MOV A,R7
MOVX @DPTR,A
; Descriptor_Ptr++;
; SOURCE LINE # 603
INC Descriptor_Ptr+01H
MOV A,Descriptor_Ptr+01H
JNZ ?C0236
INC Descriptor_Ptr
?C0236:
; }
; SOURCE LINE # 604
INC count+01H
MOV A,count+01H
JNZ ?C0237
INC count
?C0237:
SJMP ?C0081
?C0082:
; wait_ep0tx();
; SOURCE LINE # 605
LCALL wait_ep0tx
; ep0out_ack();
; SOURCE LINE # 606
LCALL ep0out_ack
; }
; SOURCE LINE # 607
RET
?C0080:
; else
; {
; SOURCE LINE # 609
; USB_Device_Request.wLength -= count; //send Endpoint descriptor
; SOURCE LINE # 610
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
CLR C
MOV A,R7
SUBB A,count+01H
MOV R7,A
MOV A,R6
SUBB A,count
MOV R6,A
MOV R0,#LOW (USB_Device_Request+06H)
MOV @R0,AR6
INC R0
MOV @R0,AR7
; Temp += count;
; SOURCE LINE # 611
MOV A,count+01H
ADD A,Temp+01H
MOV Temp+01H,A
MOV A,count
ADDC A,Temp
MOV Temp,A
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
; SOURCE LINE # 612
MOV R7,Temp+01H
MOV DPTR,#D14_Cntrl_Reg+01CH
MOV A,R7
MOVX @DPTR,A
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
; SOURCE LINE # 613
MOV A,Temp
MOV R7,A
MOV R6,#00H
MOV DPTR,#D14_Cntrl_Reg+01DH
MOV A,R7
MOVX @DPTR,A
?C0085:
; while(count != 0)
; SOURCE LINE # 614
MOV A,count+01H
ORL A,count
JZ ?C0086
; {
; SOURCE LINE # 615
; D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
; SOURCE LINE # 616
MOV R6,Descriptor_Ptr
MOV R7,Descriptor_Ptr+01H
MOV DPL,R7
MOV DPH,R6
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV DPTR,#D14_Cntrl_Reg+020H
MOV A,R7
MOVX @DPTR,A
; count--;
; SOURCE LINE # 617
MOV A,count+01H
DEC count+01H
JNZ ?C0238
DEC count
?C0238:
; Descriptor_Ptr++;
; SOURCE LINE # 618
INC Descriptor_Ptr+01H
MOV A,Descriptor_Ptr+01H
JNZ ?C0239
INC Descriptor_Ptr
?C0239:
; }
; SOURCE LINE # 619
SJMP ?C0085
?C0086:
; wait_ep0tx();
; SOURCE LINE # 620
LCALL wait_ep0tx
; ep0out_ack();
; SOURCE LINE # 621
LCALL ep0out_ack
; }
; SOURCE LINE # 622
; }
; SOURCE LINE # 623
; }
; SOURCE LINE # 624
; break;
; SOURCE LINE # 625
RET
;
; case 6: //獲取設備限制描述符
; SOURCE LINE # 627
?C0087:
; Descriptor_Ptr = &HS_Device_Qualifier[0]; //set pointer to High Speed device descriptor
; SOURCE LINE # 628
MOV R6,#HIGH (HS_Device_Qualifier)
MOV R7,#LOW (HS_Device_Qualifier)
MOV Descriptor_Ptr,R6
MOV Descriptor_Ptr+01H,R7
; count = *Descriptor_Ptr; //read in descriptor length
; SOURCE LINE # 629
MOV R6,Descriptor_Ptr
MOV R7,Descriptor_Ptr+01H
MOV DPL,R7
MOV DPH,R6
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV R6,#00H
MOV count,R6
MOV count+01H,R7
; D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
; SOURCE LINE # 630
MOV DPTR,#D14_Cntrl_Reg+02CH
MOV A,#01H
MOVX @DPTR,A
; if(USB_Device_Request.wLength < count)
; SOURCE LINE # 631
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
CLR C
MOV A,R7
SUBB A,count+01H
MOV A,R6
SUBB A,count
JNC ?C0088
; {
; SOURCE LINE # 632
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
; SOURCE LINE # 633
MOV R0,#LOW (USB_Device_Request+07H)
MOV A,@R0
MOV R7,A
MOV DPTR,#D14_Cntrl_Reg+01CH
MOV A,R7
MOVX @DPTR,A
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
; SOURCE LINE # 634
MOV DPTR,#D14_Cntrl_Reg+01DH
CLR A
MOVX @DPTR,A
; count = USB_Device_Request.wLength;
; SOURCE LINE # 635
MOV R0,#LOW (USB_Device_Request+06H)
MOV A,@R0
MOV count,A
INC R0
MOV A,@R0
MOV count+01H,A
; }
; SOURCE LINE # 636
SJMP ?C0090
?C0088:
; else
; {
; SOURCE LINE # 638
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
; SOURCE LINE # 639
MOV R7,count+01H
MOV DPTR,#D14_Cntrl_Reg+01CH
MOV A,R7
MOVX @DPTR,A
; D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
; SOURCE LINE # 640
MOV DPTR,#D14_Cntrl_Reg+01DH
CLR A
MOVX @DPTR,A
; }
; SOURCE LINE # 641
?C0090:
; while(count != 0)
; SOURCE LINE # 642
MOV A,count+01H
ORL A,count
JZ ?C0091
; {
; SOURCE LINE # 643
; D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr; //fill up FIFO
; SOURCE LINE # 644
MOV R6,Descriptor_Ptr
MOV R7,Descriptor_Ptr+01H
MOV DPL,R7
MOV DPH,R6
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV DPTR,#D14_Cntrl_Reg+020H
MOV A,R7
MOVX @DPTR,A
; Descriptor_Ptr++;
; SOURCE LINE # 645
INC Descriptor_Ptr+01H
MOV A,Descriptor_Ptr+01H
JNZ ?C0240
INC Descriptor_Ptr
?C0240:
; count--;
; SOURCE LINE # 646
MOV A,count+01H
DEC count+01H
JNZ ?C0241
DEC count
?C0241:
; };
; SOURCE
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -