📄 f34x_msd_usb_isr.src
字号:
?C0089:
; ;
; if(In_count) {
; SOURCE LINE # 361
MOV DPTR,#In_count
MOVX A,@DPTR
JNZ ?C0091
; return;
; }
; SOURCE LINE # 363
?C0090:
; In_count=count;
; SOURCE LINE # 364
MOV DPTR,#count?649
INC DPTR
MOVX A,@DPTR
MOV DPTR,#In_count
MOVX @DPTR,A
; Handle_In1(ptr_buf);
; SOURCE LINE # 365
MOV DPTR,#ptr_buf?648
LCALL L?0140
LCALL _Handle_In1
; }
; SOURCE LINE # 366
?C0091:
RET
; END OF _USB_In
;
;
; //----------------------------------------------------------------------------
; // Handle_Out2
; //----------------------------------------------------------------------------
; //
; // Take the received packet from the host off the fifo and put it into the
; // Out_Packet array
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Handle_Out2() {
RSEG ?PR?Handle_Out2?F34X_MSD_USB_ISR
Handle_Out2:
USING 0
; SOURCE LINE # 380
; BYTE count=0;
; SOURCE LINE # 381
;---- Variable 'count?751' assigned to Register 'R7' ----
CLR A
MOV R7,A
?C0092:
; BYTE control_reg;
;
; POLL_WRITE_BYTE(INDEX, EP2_OUT_IDX); // Set index to endpoint 2 registers
; SOURCE LINE # 384
MOV A,USB0ADR
JB ACC.7,?C0092
?C0093:
MOV USB0ADR,#0EH
MOV USB0DAT,#02H
?C0094:
; POLL_READ_BYTE(EOUTCSR1, control_reg);
; SOURCE LINE # 385
MOV A,USB0ADR
JB ACC.7,?C0094
?C0095:
MOV USB0ADR,#094H
?C0096:
MOV A,USB0ADR
JB ACC.7,?C0096
?C0097:
;---- Variable 'control_reg?752' assigned to Register 'R6' ----
MOV R6,USB0DAT
;
; if (Ep_Status[2] == EP_HALT) // If endpoint is halted, send a stall
; SOURCE LINE # 387
MOV DPTR,#Ep_Status+02H
MOVX A,@DPTR
CJNE A,#03H,?C0098
; {
; SOURCE LINE # 388
?C0099:
; POLL_WRITE_BYTE(EOUTCSR1, rbOutSDSTL);
; SOURCE LINE # 389
MOV A,USB0ADR
JB ACC.7,?C0099
?C0100:
MOV USB0ADR,#014H
MOV USB0DAT,#020H
; }
; SOURCE LINE # 390
RET
?C0098:
;
; else // Otherwise read received packet from
; // host
; {
; SOURCE LINE # 394
; if (control_reg & rbOutSTSTL) // Clear sent stall bit if last packet
; SOURCE LINE # 395
MOV A,R6
JNB ACC.6,?C0105
; //was a stall
; {
; SOURCE LINE # 397
?C0103:
; POLL_WRITE_BYTE(EOUTCSR1, rbOutCLRDT);
; SOURCE LINE # 398
MOV A,USB0ADR
JB ACC.7,?C0103
?C0104:
MOV USB0ADR,#014H
MOV USB0DAT,#080H
; }
; SOURCE LINE # 399
?C0105:
;
; POLL_READ_BYTE(EOUTCNTL, count);
; SOURCE LINE # 401
MOV A,USB0ADR
JB ACC.7,?C0105
?C0106:
MOV USB0ADR,#096H
?C0107:
MOV A,USB0ADR
JB ACC.7,?C0107
?C0108:
MOV R7,USB0DAT
; Out_Count=count;
; SOURCE LINE # 402
MOV A,R7
MOV R5,A
MOV DPTR,#Out_Count
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
?C0109:
; POLL_READ_BYTE(EOUTCNTH, count);
; SOURCE LINE # 403
MOV A,USB0ADR
JB ACC.7,?C0109
?C0110:
MOV USB0ADR,#097H
?C0111:
MOV A,USB0ADR
JB ACC.7,?C0111
?C0112:
MOV R7,USB0DAT
; Out_Count|=((unsigned)count)<<8;
; SOURCE LINE # 404
MOV A,R7
MOV R6,A
MOV DPTR,#Out_Count
MOVX A,@DPTR
ORL A,R6
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
MOVX @DPTR,A
;
;
; // FOR MSD, the host does not send EP2_PACKET_SIZE bytes, but rather 31 bytes
; // if (count != EP2_PACKET_SIZE) // If host did not send correct packet
; // size, flush buffer
; // {
; // POLL_WRITE_BYTE(EOUTCNTL, rbOutFLUSH);
; // }
; // else // Otherwise get the data packet
; // {
; // Fifo_Read(FIFO_EP2, count, (BYTE*)Out_Packet);
; // }
; // POLL_WRITE_BYTE(EOUTCSR1, 0); // Clear Out Packet ready bit
; }
; SOURCE LINE # 418
; }
; SOURCE LINE # 419
?C0113:
RET
; END OF Handle_Out2
;
; //----------------------------------------------------------------------------
; // Out2_Get_Data
; //----------------------------------------------------------------------------
; //
; // Enter suspend mode after suspend signalling is present on the bus
; //
; // Parameters : ptr_buf - pointer to read data destination buffer
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Out2_Get_Data(BYTE* ptr_buf) {
RSEG ?PR?_Out2_Get_Data?F34X_MSD_USB_ISR
_Out2_Get_Data:
USING 0
; SOURCE LINE # 431
;---- Variable 'ptr_buf?853' assigned to Register 'R1/R2/R3' ----
; Fifo_Read(FIFO_EP2, Out_Count, ptr_buf);
; SOURCE LINE # 432
MOV DPTR,#Out_Count
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV R7,#022H
LJMP _Fifo_Read
; END OF _Out2_Get_Data
; }
;
; //----------------------------------------------------------------------------
; // Out2_Done
; //----------------------------------------------------------------------------
; //
; // This routine clears out packet ready bit and out_counter to boot
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Out2_Done() {
RSEG ?PR?Out2_Done?F34X_MSD_USB_ISR
Out2_Done:
; SOURCE LINE # 445
?C0115:
; POLL_WRITE_BYTE(EOUTCSR1, 0); // Clear Out Packet ready bit
; SOURCE LINE # 446
MOV A,USB0ADR
JB ACC.7,?C0115
?C0116:
MOV USB0ADR,#014H
CLR A
MOV USB0DAT,A
; Out_Count=0;
; SOURCE LINE # 447
MOV DPTR,#Out_Count
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
; }
; SOURCE LINE # 448
RET
; END OF Out2_Done
;
;
; //----------------------------------------------------------------------------
; // USB_Suspend
; //----------------------------------------------------------------------------
; //
; // Enter suspend mode after suspend signalling is present on the bus
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void USB_Suspend(void)
RSEG ?PR?USB_Suspend?F34X_MSD_USB_ISR
USB_Suspend:
; SOURCE LINE # 461
; { // Add power-down features here if
; SOURCE LINE # 462
; // you wish to
; volatile int k; // reduce power consumption during
; // suspend mode
; k++;
; SOURCE LINE # 466
MOV DPTR,#k?1054+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0135
MOV DPTR,#k?1054
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0135:
; }
; SOURCE LINE # 467
RET
; END OF USB_Suspend
;
;
; //----------------------------------------------------------------------------
; // FIFO Read
; //----------------------------------------------------------------------------
; //
; // Read from the selected endpoint FIFO
; //
; // Parameters : addr - target address
; // u_num_bytes - number of bytes to unload
; // ptr_data - read data destination
; // Return Value :
; //----------------------------------------------------------------------------
;
; #if 1
; void Fifo_ReadC(BYTE addr, unsigned int u_num_bytes, BYTE * ptr_data)
RSEG ?PR?_Fifo_ReadC?F34X_MSD_USB_ISR
_Fifo_ReadC:
USING 0
; SOURCE LINE # 483
MOV DPTR,#addr?1155
MOV A,R7
MOVX @DPTR,A
MOV DPTR,#ptr_data?1157
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#u_num_bytes?1156
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; {
; SOURCE LINE # 484
; int i;
;
; if (u_num_bytes) // Check if >0 bytes requested,
; SOURCE LINE # 487
ORL A,R4
JZ ?C0125
; {
; SOURCE LINE # 488
; USB0ADR = (addr); // Set address
; SOURCE LINE # 489
MOV DPTR,#addr?1155
MOVX A,@DPTR
MOV USB0ADR,A
; USB0ADR |= 0xC0; // Set auto-read and initiate
; SOURCE LINE # 490
ORL USB0ADR,#0C0H
; // first read
;
; // Unload <NumBytes> from the selected FIFO
; for(i=0;i<u_num_bytes;i++)
; SOURCE LINE # 494
;---- Variable 'i?1158' assigned to Register 'R6/R7' ----
CLR A
MOV R7,A
MOV R6,A
?C0120:
SETB C
MOV DPTR,#u_num_bytes?1156+01H
MOVX A,@DPTR
SUBB A,R7
MOV DPTR,#u_num_bytes?1156
MOVX A,@DPTR
SUBB A,R6
JC ?C0121
; {
; SOURCE LINE # 495
?C0123:
; while(USB0ADR & 0x80); // Wait for BUSY->'0' (data ready)
; SOURCE LINE # 496
MOV A,USB0ADR
JB ACC.7,?C0123
?C0124:
; ptr_data[i] = USB0DAT; // Copy data byte
; SOURCE LINE # 497
MOV DPTR,#ptr_data?1157
LCALL L?0141
MOV DPL,R7
MOV DPH,R6
MOV A,USB0DAT
LCALL ?C?CSTOPTR
; }
; SOURCE LINE # 498
INC R7
CJNE R7,#00H,?C0136
INC R6
?C0136:
SJMP ?C0120
?C0121:
;
; USB0ADR = 0; // Clear auto-read
; SOURCE LINE # 500
CLR A
MOV USB0ADR,A
; }
; SOURCE LINE # 501
; }
; SOURCE LINE # 502
?C0125:
RET
; END OF _Fifo_ReadC
; #endif
;
; //----------------------------------------------------------------------------
; // FIFO Write
; //----------------------------------------------------------------------------
; //
; // Write to the selected endpoint FIFO
; //
; // Parameters : addr - target address
; // u_num_bytes - number of bytes to write
; // ptr_data - location of source data
; // Return Value :
; //----------------------------------------------------------------------------
;
; #if 0
; void Fifo_Write(BYTE addr, unsigned int u_num_bytes, BYTE * ptr_data) reentrant
; {
; int i;
; START_SPI_TIMEOUT ;
; // If >0 bytes requested,
; if (u_num_bytes)
; {
; while(USB0ADR & 0x80); // Wait for BUSY->'0'
; // (register available)
; USB0ADR = (addr); // Set address (mask out bits7-6)
;
; // Write <NumBytes> to the selected FIFO
; for(i=0;i<u_num_bytes;i++)
; {
; USB0DAT = ptr_data[i];
; while(USB0ADR & 0x80); // Wait for BUSY->'0' (data ready)
; }
; }
; STOP_SPI_TIME_OUT;
; }
; #endif
;
;
; //----------------------------------------------------------------------------
; // Force_Stall
; //----------------------------------------------------------------------------
; //
; // Force a procedural stall to be sent to the host
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Force_Stall(void)
RSEG ?PR?Force_Stall?F34X_MSD_USB_ISR
Force_Stall:
; SOURCE LINE # 551
; {
; SOURCE LINE # 552
?C0126:
; POLL_WRITE_BYTE(INDEX, EP0_IDX);
; SOURCE LINE # 553
MOV A,USB0ADR
JB ACC.7,?C0126
?C0127:
MOV USB0ADR,#0EH
CLR A
MOV USB0DAT,A
?C0128:
; POLL_WRITE_BYTE(E0CSR, rbSDSTL); // Set the send stall bit
; SOURCE LINE # 554
MOV A,USB0ADR
JB ACC.7,?C0128
?C0129:
MOV USB0ADR,#011H
MOV USB0DAT,#020H
; Ep_Status[0] = EP_STALL; // Put the endpoint in stall status
; SOURCE LINE # 555
MOV DPTR,#Ep_Status
MOV A,#04H
MOVX @DPTR,A
; }
; SOURCE LINE # 556
RET
; END OF Force_Stall
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -