📄 f34x_msd_usb_main.src
字号:
; 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 + -