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

📄 f34x_msd_usb_main.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 2 页
字号:
			; SOURCE LINE # 161
	LCALL	Delay
?C0004:
; 
;    while(!(CLKMUL & 0x20));                // Wait for multiplier to lock
			; SOURCE LINE # 163
	MOV  	A,CLKMUL
	JNB  	ACC.5,?C0004
?C0005:
; #ifdef __F340_VER__
; #ifdef F340_24M
;   CLKSEL = SYS_4X_DIV_2;
; #else
;   CLKSEL = SYS_4X_MUL;
; #endif
; #else
; #ifdef __F326_VER__
;    CLKSEL  = SYS_4X_DIV_2;
; #else
;    CLKSEL  = SYS_INT_OSC;                // Select system clock  
			; SOURCE LINE # 174
	CLR  	A
	MOV  	CLKSEL,A
; #endif
; #endif
;    CLKSEL |= USB_4X_CLOCK;               // Select USB clock
			; SOURCE LINE # 177
; #endif  /* _USB_LOW_SPEED_ */
; }
			; SOURCE LINE # 179
	RET  	
; END OF Sys_Clk_Init

; 
; 
; //----------------------------------------------------------------------------
; // Port_Init
; //----------------------------------------------------------------------------
; //
; // Configure the Crossbar and GPIO ports.
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Port_Init(void) {

	RSEG  ?PR?Port_Init?F34X_MSD_USB_MAIN
Port_Init:
	USING	0
			; SOURCE LINE # 192
; 	// Default values on reset:
; 	// P0MDIN=0xFF;		P1MDIN=0xFF;	P2MDIN=0xFF;	P3MDIN=0xFF; 
; 	// P0MDOUT=0x00;	P1MDOUT=0x00;	P2MDOUT=0x00;	P3MDOUT=0x00;
; 	// P0SKIP=0x00;		P1SKIP=0x00;	P2SKIP=0x00;
; 	// XBR0=0x00;
; 	data	int i;
; #ifdef __F326_VER__
; 
; 	GPIOCN |= 0x40;
; 	P0MDOUT = 0x0d;
; 	P0 |= 0x02;
; 	SCS = 1;
; 	SCLK = 1;
; #else
; 	P1MDIN = 0xff;
			; SOURCE LINE # 207
	MOV  	P1MDIN,#0FFH
; 
; //   P1MDIN  = 0x7F;                        // Port 1 pin 7 set as analog input
;    ////p1.0 - out,p1.1-out,p1.2 - out,p1.3 -in,p1.4 - in p1.6 - out
;    P1MDOUT = 0xC7;
			; SOURCE LINE # 211
	MOV  	P1MDOUT,#0C7H
;    P1 = 0x18;
			; SOURCE LINE # 212
	MOV  	P1,#018H
;    P3MDIN = 0xff;
			; SOURCE LINE # 213
	MOV  	P3MDIN,#0FFH
;    P3MDOUT = 0xFF;
			; SOURCE LINE # 214
	MOV  	P3MDOUT,#0FFH
;    P3 &= ~(0xe0) ;
			; SOURCE LINE # 215
	ANL  	P3,#01FH
;    P4MDIN = 0xff;
			; SOURCE LINE # 216
	MOV  	P4MDIN,#0FFH
;    P4MDOUT = 0x00;
			; SOURCE LINE # 217
	CLR  	A
	MOV  	P4MDOUT,A
;    P4  = 0xff;
			; SOURCE LINE # 218
	MOV  	P4,#0FFH
;    P0MDOUT = 0x1D;                    // enable TX0,SCK,MOSI as a push-pull
			; SOURCE LINE # 219
	MOV  	P0MDOUT,#01DH
;    P2MDOUT = 0x0C;                    // enable LEDs as a push-pull output
			; SOURCE LINE # 220
	MOV  	P2MDOUT,#0CH
;    XBR0    = 0x03;                     // UART0 TX and RX pins enabled, SPI enabled
			; SOURCE LINE # 221
	MOV  	XBR0,#03H
;    XBR1=(0x40 | 0x80); // Enable crossbar, disable weak pull-up
			; SOURCE LINE # 222
	MOV  	XBR1,#0C0H
;   // XBR1=0x40 ;
;    CF_OE = 0;
			; SOURCE LINE # 224
	CLR  	CF_OE
;    C_PWR = 1;
			; SOURCE LINE # 225
	SETB 	C_PWR
; 	for(i=0;i<5000;i++)
			; SOURCE LINE # 226
	MOV  	i?240,A
	MOV  	i?240+01H,A
?C0007:
; 	   Delay();
			; SOURCE LINE # 227
	LCALL	Delay
	INC  	i?240+01H
	MOV  	A,i?240+01H
	JNZ  	?C0033
	INC  	i?240
?C0033:
	LCALL	L?0038
	JC   	?C0007
?C0008:
;    XBR1 &= ~ 0x80;
			; SOURCE LINE # 228
	ANL  	XBR1,#07FH
;    CF_OE = 1;
			; SOURCE LINE # 229
	SETB 	CF_OE
;    C_PWR = 0;
			; SOURCE LINE # 230
	CLR  	C_PWR
;    	for(i=0;i<5000;i++)
			; SOURCE LINE # 231
	CLR  	A
	MOV  	i?240,A
	MOV  	i?240+01H,A
?C0010:
; 	   Delay();	
			; SOURCE LINE # 232
	LCALL	Delay
	INC  	i?240+01H
	MOV  	A,i?240+01H
	JNZ  	?C0034
	INC  	i?240
?C0034:
	LCALL	L?0038
	JC   	?C0010
?C0011:
;    XBR1 |= 0x80; // week pull-up off for CF
			; SOURCE LINE # 233
	ORL  	XBR1,#080H
; #endif
; 
; }
			; SOURCE LINE # 236
	RET  	
; END OF Port_Init

; 
; 
; //----------------------------------------------------------------------------
; // USB0_Init
; //----------------------------------------------------------------------------
; //
; // USB Initialization
; // - Initialize USB0
; // - Enable USB0 interrupts
; // - Enable USB0 transceiver
; // - Enable USB0 with suspend detection
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void USB0_Init(void)

	RSEG  ?PR?USB0_Init?F34X_MSD_USB_MAIN
USB0_Init:
			; SOURCE LINE # 253
; {
			; SOURCE LINE # 254
?C0014:
;    POLL_WRITE_BYTE(POWER,  0x08);          // Force Asynchronous USB Reset
			; SOURCE LINE # 255
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0014
?C0015:
	MOV  	USB0ADR,#01H
	MOV  	USB0DAT,#08H
?C0016:
;    POLL_WRITE_BYTE(IN1IE,  0x07);          // Enable Endpoint 0-2 in interrupts
			; SOURCE LINE # 256
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0016
?C0017:
	MOV  	USB0ADR,#07H
	MOV  	USB0DAT,#07H
?C0018:
;    POLL_WRITE_BYTE(OUT1IE, 0x07);          // Enable Endpoint 0-2 out interrupts
			; SOURCE LINE # 257
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0018
?C0019:
	MOV  	USB0ADR,#09H
	MOV  	USB0DAT,#07H
?C0020:
;    POLL_WRITE_BYTE(CMIE,   0x07);          // Enable Reset, Resume, and Suspend interrupts
			; SOURCE LINE # 258
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0020
?C0021:
	MOV  	USB0ADR,#0BH
	MOV  	USB0DAT,#07H
; #ifdef _USB_LOW_SPEED_
;    USB0XCN = 0xC0;                         // Enable transceiver; select low speed
;    POLL_WRITE_BYTE(CLKREC, 0xA0);          // Enable clock recovery; single-step mode
;                                            // disabled; low speed mode enabled
; #else                                      
;    USB0XCN = 0xE0;                         // Enable transceiver; select full speed
			; SOURCE LINE # 264
	MOV  	USB0XCN,#0E0H
?C0022:
;    POLL_WRITE_BYTE(CLKREC, 0x80);          // Enable clock recovery, single-step mode
			; SOURCE LINE # 265
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0022
?C0023:
	MOV  	USB0ADR,#0FH
	MOV  	USB0DAT,#080H
;                                            // disabled
; #endif /* _USB_LOW_SPEED_ */
; 
;    EIE1 |= 0x02;                           // Enable USB0 Interrupts
			; SOURCE LINE # 269
	ORL  	EIE1,#02H
;    EA = 1;                                 // Global Interrupt enable
			; SOURCE LINE # 270
	SETB 	EA
?C0024:
;                                            // Enable USB0 by clearing the USB Inhibit bit
;    POLL_WRITE_BYTE(POWER,  0x01);          // and enable suspend detection
			; SOURCE LINE # 272
	MOV  	A,USB0ADR
	JB   	ACC.7,?C0024
?C0025:
	MOV  	USB0ADR,#01H
	MOV  	USB0DAT,#01H
; 
; 
; }
			; SOURCE LINE # 275
	RET  	
; END OF USB0_Init

; 
; 
; //----------------------------------------------------------------------------
; // Timer_Init
; //----------------------------------------------------------------------------
; //
; // Timer initialization
; // - Timer 2 reload, used to check if switch pressed on overflow and
; // used for ADC continuous conversion
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Timer_Init(void)

	RSEG  ?PR?Timer_Init?F34X_MSD_USB_MAIN
Timer_Init:
			; SOURCE LINE # 290
; {
			; SOURCE LINE # 291
; #ifdef __F326_VER__
; 	TMOD = 0x01;						//Timer 0 - 16 bit timer
; 	CKCON = 0x00;
; 	TL0		= 0x2e;
; 	TH0		= 0xf8;
; 	ET0		= 1;						// enable timer 0 interrupt
;     TR0		= 1;						// start timer 0
; #else
; 	
;    TMR2CN  = 0x00;                        // Stop Timer2; Clear TF2;
			; SOURCE LINE # 301
	CLR  	A
	MOV  	TMR2CN,A
; 
;    CKCON  &= ~0xF0;                       // Timer2 clocked based on T2XCLK;
			; SOURCE LINE # 303
	ANL  	CKCON,#0FH
;    TMR2RL  = 0xF000;                      // Initialize reload value
			; SOURCE LINE # 304
	MOV  	TMR2RL+01H,#0F0H
	MOV  	TMR2RL,A
;    TMR2    = 0xffff;                      // Set to reload immediately
			; SOURCE LINE # 305
	MOV  	A,#0FFH
	MOV  	TMR2+01H,A
	MOV  	TMR2,A
; 
;    ET2     = 1;                           // Enable Timer2 interrupts
			; SOURCE LINE # 307
	SETB 	ET2
;    TR2     = 1;                           // Start Timer2
			; SOURCE LINE # 308
	SETB 	TR2
; #endif
; }
			; SOURCE LINE # 310
	RET  	
; END OF Timer_Init

CSEG	AT	0002BH
	LJMP	Timer2_ISR

; 
; 
; //----------------------------------------------------------------------------
; // Timer2_ISR
; //----------------------------------------------------------------------------
; //
; // Timer 2 interrupt routine
; // Called when timer 2 overflows
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; #ifndef __F326_VER__
; void Timer2_ISR(void) interrupt 5 {

	RSEG  ?PR?Timer2_ISR?F34X_MSD_USB_MAIN
	USING	0
Timer2_ISR:
	PUSH 	ACC
	PUSH 	B
	PUSH 	DPH
	PUSH 	DPL
	PUSH 	PSW
	MOV  	A,R0
	PUSH 	ACC
	MOV  	A,R4
	PUSH 	ACC
	MOV  	A,R5
	PUSH 	ACC
	MOV  	A,R6
	PUSH 	ACC
	MOV  	A,R7
	PUSH 	ACC
	USING	0
			; SOURCE LINE # 325
; 	tickcount++;
			; SOURCE LINE # 326
	MOV  	DPTR,#tickcount
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#01H
	MOV  	R7,A
	CLR  	A
	ADDC 	A,R6
	MOV  	R6,A
	CLR  	A
	ADDC 	A,R5
	MOV  	R5,A
	CLR  	A
	ADDC 	A,R4
	MOV  	R4,A
	MOV  	DPTR,#tickcount
	LCALL	?C?LSTXDATA
; #ifdef __F340_VER__
; #ifdef F340_24M
; 	TMR2RL = 0xF82e;
; #endif 
; 	TMR2RL = 0xF05e;
; //	TMR2RL = 0xFC16; 
; #else
; 	TMR2RL = 0xFC16; 		// Re-initialize reload value (1kHz, 1ms)
			; SOURCE LINE # 334
	MOV  	TMR2RL+01H,#0FCH
	MOV  	TMR2RL,#016H
; #endif
; 	//TMR2RL = 0xE0B0; 		// Re-initialize reload value (125Hz, 8ms)
; 	TF2H=0; 				// Clear interrupt
			; SOURCE LINE # 337
	CLR  	TF2H
; }
			; SOURCE LINE # 338
	POP  	ACC
	MOV  	R7,A
	POP  	ACC
	MOV  	R6,A
	POP  	ACC
	MOV  	R5,A
	POP  	ACC
	MOV  	R4,A
	POP  	ACC
	MOV  	R0,A
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	B
	POP  	ACC
	RETI 	
; END OF Timer2_ISR

; 
; #else
; 
; //----------------------------------------------------------------------------
; // Timer0_ISR
; //----------------------------------------------------------------------------
; //
; // Timer 0 interrupt routine
; // Called when timer 0 overflows
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; void Timer0_ISR(void) interrupt 1
; {
; 
; 	TL0		+= 0x2e;
; 	TH0		= 0xf8;
; 	tickcount++;
; }
; #endif
; 
; 
; //----------------------------------------------------------------------------
; // Delay
; //----------------------------------------------------------------------------
; //
; // Used for a small pause, approximately 80 us in Full Speed,
; // and 1 ms when clock is configured for Low Speed
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Delay(void)

	RSEG  ?PR?Delay?F34X_MSD_USB_MAIN
Delay:
			; SOURCE LINE # 373
; {
			; SOURCE LINE # 374
;    data int x;
;    for(x = 0;x < 500;x)
			; SOURCE LINE # 376
	CLR  	A
	MOV  	x?641,A
	MOV  	x?641+01H,A
?C0029:
;       x++;
			; SOURCE LINE # 377
	INC  	x?641+01H
	MOV  	A,x?641+01H
	JNZ  	?C0035
	INC  	x?641
?C0035:
	XRL  	A,#0F4H
	JNZ  	?C0036
	MOV  	A,x?641
	XRL  	A,#01H
?C0036:
	JNZ  	?C0029
; }
			; SOURCE LINE # 378
?C0032:
	RET  	
; END OF Delay

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -