📄 usb.src
字号:
?C0055:
; ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
; SOURCE LINE # 291
MOV A,ControlData+02H
MOV R5,A
MOV A,ControlData+03H
MOV ControlData+02H,A
MOV A,R5
MOV ControlData+03H,A
; ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
; SOURCE LINE # 292
MOV A,ControlData+04H
MOV R5,A
MOV A,ControlData+05H
MOV ControlData+04H,A
MOV A,R5
MOV ControlData+05H,A
; ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
; SOURCE LINE # 293
MOV A,ControlData+06H
MOV R5,A
MOV A,ControlData+07H
MOV ControlData+06H,A
MOV A,R5
MOV ControlData+07H,A
;
; //对控制端点的输入/输出进行应答
; D12_AcknowledgeEndpoint(0);
; SOURCE LINE # 296
CLR A
MOV R7,A
LCALL _D12_AcknowledgeEndpoint
; D12_AcknowledgeEndpoint(1);
; SOURCE LINE # 297
MOV R7,#01H
LCALL _D12_AcknowledgeEndpoint
;
; ControlData.wLength = ControlData.DeviceRequest.wLength;
; SOURCE LINE # 299
MOV ControlData+08H,ControlData+06H
MOV ControlData+09H,ControlData+07H
; ControlData.wCount = 0;
; SOURCE LINE # 300
CLR A
MOV ControlData+0AH,A
MOV ControlData+0BH,A
;
; if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
; SOURCE LINE # 302
MOV A,ControlData
JNB ACC.7,?C0057
; {
; SOURCE LINE # 303
; //从主机传输数据
; bEPPflags.bits.setup_packet = 1;
; SOURCE LINE # 305
MOV R7,bEPPflags
MOV A,R7
ORL A,#08H
MOV bEPPflags,A
; bEPPflags.bits.control_state = USB_TRANSMIT; /* get command */
; SOURCE LINE # 306
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
ORL A,#040H
MOV bEPPflags,A
; }
; SOURCE LINE # 307
RET
?C0057:
; else
; {
; SOURCE LINE # 309
; if (ControlData.DeviceRequest.wLength == 0)
; SOURCE LINE # 310
MOV A,ControlData+07H
ORL A,ControlData+06H
JNZ ?C0059
; {
; SOURCE LINE # 311
; bEPPflags.bits.setup_packet = 1;
; SOURCE LINE # 312
MOV R7,bEPPflags
MOV A,R7
ORL A,#08H
MOV bEPPflags,A
; bEPPflags.bits.control_state = USB_IDLE; /* set command */
; SOURCE LINE # 313
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
; }
; SOURCE LINE # 314
RET
?C0059:
; else
; {
; SOURCE LINE # 316
; if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE)
; SOURCE LINE # 317
SETB C
MOV A,ControlData+07H
SUBB A,#08H
MOV A,ControlData+06H
SUBB A,#00H
JC ?C0061
; {
; SOURCE LINE # 318
; //接收数据长度为0
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 320
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
; D12_SetEndpointStatus(0, 1);
; SOURCE LINE # 321
LCALL L?0216
; D12_SetEndpointStatus(1, 1);
; SOURCE LINE # 322
MOV R5,#01H
MOV R7,#01H
LJMP _D12_SetEndpointStatus
; }
; SOURCE LINE # 323
?C0061:
; else
; {
; SOURCE LINE # 325
; bEPPflags.bits.control_state = USB_RECEIVE; //设置接收状态
; SOURCE LINE # 326
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
ORL A,#080H
MOV bEPPflags,A
; }
; SOURCE LINE # 327
; } // set command with data
; SOURCE LINE # 328
; } // else set command
; SOURCE LINE # 329
; } // if setup packet
; SOURCE LINE # 330
RET
?C0054:
; else if (bEPPflags.bits.control_state == USB_RECEIVE)
; SOURCE LINE # 331
MOV R7,bEPPflags
MOV A,R7
SWAP A
RRC A
RRC A
ANL A,#03H
XRL A,#02H
JNZ ?C0064
; {
; SOURCE LINE # 332
; //接收数据
; i = D12_ReadEndpoint(0, EP0_PACKET_SIZE,
; SOURCE LINE # 334
MOV A,#LOW (ControlData+0FH)
ADD A,ControlData+0BH
MOV R1,A
CLR A
MOV R2,A
MOV R3,A
MOV R5,#010H
MOV R7,A
LCALL _D12_ReadEndpoint
;---- Variable 'i?1653' assigned to Register 'R7' ----
; ControlData.dataBuffer + ControlData.wCount);
; ControlData.wCount += i;
; SOURCE LINE # 336
MOV A,R7
ADD A,ControlData+0BH
MOV ControlData+0BH,A
CLR A
ADDC A,ControlData+0AH
MOV ControlData+0AH,A
; if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength)
; SOURCE LINE # 337
CJNE R7,#010H,?C0066
CLR C
MOV A,ControlData+0BH
SUBB A,ControlData+09H
MOV A,ControlData+0AH
SUBB A,ControlData+08H
JC ?C0056
?C0066:
; {
; SOURCE LINE # 338
; //数据接收完毕
; bEPPflags.bits.setup_packet = 1;
; SOURCE LINE # 340
MOV R7,bEPPflags
MOV A,R7
ORL A,#08H
MOV bEPPflags,A
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 341
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
; }
; SOURCE LINE # 342
; }
; SOURCE LINE # 343
RET
?C0064:
; else
; {
; SOURCE LINE # 345
; bEPPflags.bits.control_state = USB_IDLE;//进入等待状态
; SOURCE LINE # 346
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
; }
; SOURCE LINE # 347
; }
; SOURCE LINE # 348
?C0056:
RET
; END OF ep0_rxdone
;
; //端点0IN处理
; void ep0_txdone(void)
RSEG ?PR?ep0_txdone?USB
ep0_txdone:
USING 0
; SOURCE LINE # 351
; {
; SOURCE LINE # 352
;
; short i = ControlData.wLength - ControlData.wCount;
; SOURCE LINE # 354
CLR C
MOV A,ControlData+09H
SUBB A,ControlData+0BH
MOV i?1754+01H,A
MOV A,ControlData+08H
SUBB A,ControlData+0AH
MOV i?1754,A
;
; D12_ReadLastTransactionStatus(1); //清中断标志位
; SOURCE LINE # 356
MOV R7,#01H
LCALL _D12_ReadLastTransactionStatus
; if (bEPPflags.bits.control_state != USB_TRANSMIT) return;//非发送状态,返回
; SOURCE LINE # 357
MOV R7,bEPPflags
MOV A,R7
SWAP A
RRC A
RRC A
ANL A,#03H
XRL A,#01H
JNZ ?C0069
?C0068:
; if( i >= EP0_PACKET_SIZE)
; SOURCE LINE # 358
CLR C
MOV A,i?1754+01H
SUBB A,#010H
MOV A,i?1754
XRL A,#080H
SUBB A,#080H
JC ?C0070
; {
; SOURCE LINE # 359
; //剩下数据大于16字节,发送16字节
; D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
; SOURCE LINE # 361
MOV R3,ControlData+0CH
MOV A,ControlData+0EH
ADD A,ControlData+0BH
MOV R1,A
MOV A,ControlData+0DH
ADDC A,ControlData+0AH
MOV R2,A
MOV R5,#010H
MOV R7,#01H
LCALL _D12_WriteEndpoint
; ControlData.wCount += EP0_PACKET_SIZE;
; SOURCE LINE # 362
MOV A,#010H
ADD A,ControlData+0BH
MOV ControlData+0BH,A
CLR A
ADDC A,ControlData+0AH
MOV ControlData+0AH,A
; bEPPflags.bits.control_state = USB_TRANSMIT;
; SOURCE LINE # 363
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
ORL A,#040H
MOV bEPPflags,A
; }
; SOURCE LINE # 364
RET
?C0070:
; else if( i != 0)
; SOURCE LINE # 365
MOV A,i?1754+01H
ORL A,i?1754
JZ ?C0072
; {
; SOURCE LINE # 366
; //发送剩下数据
; D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
; SOURCE LINE # 368
MOV R5,i?1754+01H
MOV R3,ControlData+0CH
MOV A,ControlData+0EH
ADD A,ControlData+0BH
MOV R1,A
MOV A,ControlData+0DH
ADDC A,ControlData+0AH
MOV R2,A
MOV R7,#01H
LCALL _D12_WriteEndpoint
; ControlData.wCount += i;
; SOURCE LINE # 369
MOV A,i?1754+01H
ADD A,ControlData+0BH
MOV ControlData+0BH,A
MOV A,i?1754
ADDC A,ControlData+0AH
MOV ControlData+0AH,A
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 370
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
;
; }
; SOURCE LINE # 372
RET
?C0072:
; else if (i == 0)
; SOURCE LINE # 373
MOV A,i?1754+01H
ORL A,i?1754
JNZ ?C0069
; {
; SOURCE LINE # 374
; D12_WriteEndpoint(1, 0, 0); //发送完毕,发送0字节
; SOURCE LINE # 375
MOV R3,A
MOV R2,A
MOV R1,A
MOV R5,A
MOV R7,#01H
LCALL _D12_WriteEndpoint
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 376
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
; }
; SOURCE LINE # 377
; }
; SOURCE LINE # 378
?C0069:
RET
; END OF ep0_txdone
;
; //DMA结束处理
; void dma_eot(void)
RSEG ?PR?dma_eot?USB
dma_eot:
; SOURCE LINE # 381
; {
; SOURCE LINE # 382
; }
; SOURCE LINE # 383
RET
; END OF dma_eot
;
; //端点1OUT处理
; void ep1_txdone(void)
RSEG ?PR?ep1_txdone?USB
ep1_txdone:
USING 0
; SOURCE LINE # 386
; {
; SOURCE LINE # 387
; D12_ReadLastTransactionStatus(3); //清中断标志位
; SOURCE LINE # 388
MOV R7,#03H
LJMP _D12_ReadLastTransactionStatus
; END OF ep1_txdone
; }
;
; //端点1IN处理
; void ep1_rxdone(void)
RSEG ?PR?ep1_rxdone?USB
ep1_rxdone:
USING 0
; SOURCE LINE # 392
; {
; SOURCE LINE # 393
; unsigned char len;
;
; D12_ReadLastTransactionStatus(2); //清中断标志位
; SOURCE LINE # 396
MOV R7,#02H
LCALL _D12_ReadLastTransactionStatus
; len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);//读取数据
; SOURCE LINE # 397
MOV R3,#00H
MOV R2,#HIGH (GenEpBuf)
MOV R1,#LOW (GenEpBuf)
MOV R5,#010H
MOV R7,#02H
LCALL _D12_ReadEndpoint
;---- Variable 'len?2055' assigned to Register 'R7' ----
; if(len != 0) bEPPflags.bits.ep1_rxdone = 1;//标志接收到数据
; SOURCE LINE # 398
MOV A,R7
JZ ?C0077
MOV R6,bEPPflags+01H
MOV A,R6
ORL A,#04H
MOV bEPPflags+01H,A
?C0077:
; rcv_data_len = len ;
; SOURCE LINE # 399
MOV rcv_data_len,R7
; }
; SOURCE LINE # 400
RET
; END OF ep1_rxdone
;
; //主端点OUT控制
; void main_txdone(void)
RSEG ?PR?main_txdone?USB
main_txdone:
USING 0
; SOURCE LINE # 403
; {
; SOURCE LINE # 404
; D12_ReadLastTransactionStatus(5); //清中断标志位
; SOURCE LINE # 405
MOV R7,#05H
LJMP _D12_ReadLastTransactionStatus
; END OF main_txdone
; }
;
; //主端点IN控制
; void main_rxdone(void)
RSEG ?PR?main_rxdone?USB
main_rxdone:
USING 0
; SOURCE LINE # 409
; {
; SOURCE LINE # 410
; unsigned char len,epstatus;
;
; D12_ReadLastTransactionStatus(4); //清中断标志位
; SOURCE LINE # 413
MOV R7,#04H
LCALL _D12_ReadLastTransactionStatus
; len = D12_ReadEndpoint(4, 64, EpBuf); //接收数据
; SOURCE LINE # 414
LCALL L?0213
MOV len?2256,R7
; epstatus=D12_ReadEndpointStatus(4);
; SOURCE LINE # 415
MOV R7,#04H
LCALL _D12_ReadEndpointStatus
;---- Variable 'epstatus?2257' assigned to Register 'R7' ----
; epstatus &= 0x60;
; SOURCE LINE # 416
ANL AR7,#060H
; if (epstatus == 0x60) len = D12_ReadEndpoint(4, 64, EpBuf);//读取双缓冲区数据
; SOURCE LINE # 417
CJNE R7,#060H,?C0080
LCALL L?0213
MOV len?2256,R7
?C0080:
; rcv_data_len = len ;
; SOURCE LINE # 418
MOV rcv_data_len,len?2256
; bEPPflags.bits.ep2_rxdone = 1 ;
; SOURCE LINE # 419
MOV R7,bEPPflags+02H
MOV A,R7
ORL A,#01H
MOV bEPPflags+02H,A
; }
; SOURCE LINE # 420
RET
; END OF main_rxdone
; void reserved(void)
RSEG ?PR?reserved?USB
reserved:
USING 0
; SOURCE LINE # 421
; {
; SOURCE LINE # 422
; stall_ep0();
; SOURCE LINE # 423
LJMP stall_ep0
; END OF reserved
; }
;
;
; //获取设备状态
; void get_status(void)
RSEG ?PR?get_status?USB
get_status:
USING 0
; SOURCE LINE # 428
; {
; SOURCE LINE # 429
; unsigned char endp, txdat[2];
; unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
; SOURCE LINE # 431
MOV A,ControlData
ANL A,#01FH
MOV bRecipient?2460,A
; unsigned char c;
; if (bRecipient == USB_RECIPIENT_DEVICE)
; SOURCE LINE # 433
JNZ ?C0083
; {
; SOURCE LINE # 434
; if(bEPPflags.bits.remote_wakeup == 1) //获取远程唤醒状态
; SOURCE LINE # 435
MOV R7,bEPPflags
MOV A,R7
SWAP A
ANL A,#0FH
JNB ACC.0,?C0084
; txdat[0] = 3;
; SOURCE LINE # 436
MOV txdat?2459,#03H
SJMP ?C0085
?C0084:
; else
; txdat[0] = 1;
; SOURCE LINE # 438
MOV txdat?2459,#01H
?C0085:
; txdat[1]=0;
; SOURCE LINE # 439
CLR A
MOV txdat?2459+01H,A
; single_transmit(txdat, 2);
; SOURCE LINE # 440
MOV R3,A
MOV R2,#HIGH (txdat?2459)
MOV R1,#LOW (txdat?2459)
MOV R5,#02H
LJMP _single_transmit
; }
; SOURCE LINE # 441
?C0083:
; else if (bRecipient == USB_RECIPIENT_INTERFACE)
; SOURCE LINE # 442
MOV A,bRecipient?2460
CJNE A,#01H,?C0087
; { //获取接口状态
; SOURCE LINE # 443
; txdat[0]=0;
; SOURCE LINE # 444
CLR A
MOV txdat?2459,A
; txdat[1]=0;
; SOURCE LINE # 445
MOV txdat?2459+01H,A
; single_transmit(txdat, 2);
; SOURCE LINE # 446
MOV R3,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -