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

📄 f34x_msd_usb_isr.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 4 页
字号:
?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 + -