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

📄 82930ha.cod

📁 mcs51,2051,x86系列MCU
💻 COD
📖 第 1 页 / 共 5 页
字号:
   mov   TXCON, #0$$TXCON2$h
   mov   RXCON, #0$$RXCON2$h 
   mov   EPCON, #0$$EPCON2$h 
   
   mov   EPINDEX, #03h          ; initialize EP3
   mov   TXCON3, #0$$TXCON3$h
   mov   RXCON, #0$$RXCON3$h
   mov   EPCON, #0$$EPCON3$h

   mov   IPL1, #0$$IPL1$h       ;init priority registers
   mov   IPH1, #0$$IPH1$h
   mov   IPL0, #0$$IPL0$h
   mov   IPH0, #0$$IPH0$h
   mov   FIE, #0$$FIE$h
   mov   IEN1, #0$$IEN1$h       ;init interrupt registers
   mov   IEN0, #0$$IEN0$h
   mov   SOFH, #0$$SOFH$h

   ret


##82930H enum1#
; ----------------------------
; USB 8x930Ax enumeration code
; ----------------------------


DISABLED        equ     0
ENABLED         equ     1
RISM            equ     ENABLED
			; When converting between RISM and EPROM, The user
			; Needs to first change this variable from ENABLED to 
			;  DISABLED
			; The user also needs to change the address in the 
			;  Target Setup
			; Window for DATA, CODE and VECTOR address.
			; For RISM, DATA = 41h..XXXX, CODE = 4000h - 0FFFFh,     
			;  VECTOR = 4000h
			; For ROM,  DATA = 21h..XXXX, CODE = FF0000h - 0FFFFFFh, 
			;  VECTOR = FF0000h                        


i82930HAX        equ    1


PROC            equ    i82930HAX

; These include file are located in <install>\usb\code\
INCLUDE "Ax_regs.inc"
INCLUDE "equates.inc"


GET_COMMAND         equ     080h
SETUP_PHASE         equ     000h
DATA_PHASE          equ     001h
STATUS_PHASE        equ     002h


EP0_MAX_PACKET_SIZE     equ     0$$MAXPACKET$h
NULL_DATA_PACKET        equ     000h

IF RISM == DISABLED
; These lines will not be used if using RISM
; These CCBs are located for a 32K EPROM
; For a 64K EPROM, they need to be placed at ffFFF8
DEFINE CCB_SEGMENT, SPACE=CODE, ORG=FF7ff8H
SEGMENT CCB_SEGMENT
       db 0D0h       ;Original Binary Mode-Paged Mode
       db 0F7h
ENDIF

;----------------------------------------------------
;- 
;- Place the reset & ISR Vectors based on RISM or ROM
;----------------------------------------------------

IF RISM == ENABLED
DEFINE RESET_SEGMENT, SPACE=CODE, ORG=004000H
SEGMENT RESET_SEGMENT

	ljmp    main

$$IF$ TXCON1.3 || TXCON2.3 || TXCON3.3 || RXCON1.3 || RXCON2.3 || RXCON3.3
DEFINE ASOF_SEGMENT, SPACE=CODE, ORG=004043H
SEGMENT ASOF_SEGMENT

       ljmp    SOF_ISR
$$END$

DEFINE FUNCTION_ISR_SEGMENT, SPACE=CODE, ORG=00404BH
SEGMENT FUNCTION_ISR_SEGMENT
	ljmp    FUNCTION_ISR

DEFINE SUSPEND_SEGMENT, SPACE=CODE, ORG=004053H
SEGMENT SUSPEND_SEGMENT
	ljmp    FUNCTION_ISR
	
ELSE

DEFINE RESET_SEGMENT, SPACE=CODE, ORG=FF0000H
SEGMENT RESET_SEGMENT

	ljmp    main

$$IF$ TXCON1.3 || TXCON2.3 || TXCON3.3 || RXCON1.3 || RXCON2.3 || RXCON3.3
DEFINE ASOF_SEGMENT, SPACE=CODE, ORG=FF0043H
SEGMENT ASOF_SEGMENT       
       ljmp    SOF_ISR
$$END$

DEFINE FUNCTION_ISR_SEGMENT, SPACE=CODE, ORG=FF004BH
SEGMENT FUNCTION_ISR_SEGMENT
	ljmp    FUNCTION_ISR

DEFINE SUSPEND_SEGMENT, SPACE=CODE, ORG=FF0053H
SEGMENT SUSPEND_SEGMENT
	ljmp    FUNCTION_ISR
	

ENDIF




;----------------------------------------------------
;- Main Segment is ORGed at 100, but the linker will 
;- Place the rest of the significant figures
;----------------------------------------------------

IF RISM == ENABLED
DEFINE CODE_SEGMENT, SPACE=CODE, ORG=4080H
ELSE
DEFINE CODE_SEGMENT, SPACE=CODE, ORG=FF0080H
ENDIF

SEGMENT CODE_SEGMENT

;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
;M---------------------------------------------------------------------M
;M                   MAIN                                              M
;M---------------------------------------------------------------------M
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM


main:
	mov      P1, #011h

	mov     SP,     #00h
	mov     SPH,    #05h               ; Set the stack to start @ 00:0500h

	mov     P1,     #025h
	mov     DPXL,   #0ffh              ; Set DPXL to point at the FLASH 
					   ;  device to access constants

	lCall   INIT_VARIABLES             ; Initialize the RAM space as 
					   ;  required
	lCall   INIT_USB
	ljmp    ActiveLoop                 ; Jump over the ISR stubs to the 
					   ;  main loop.


;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;A---------------------------------------------------------------------A
;A                  ACTIVE LOOP                                        A
;A---------------------------------------------------------------------A
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

COMMENT *------------------------------------------------------------
ISR Registers
IF the user makes this into an ISR, they will need to save certain registers
upon entry into this code.  The firmware has been writen such that the 
only registers which are modified in this code are A, R0, R1 & EPINDEX.
While DPX is used within the code, it is saved locally only when needed.
This will allow the ISR to run slightly faster.
--------------------------------------------------------------------*

COMMENT *------------------------------------------------------------
Function name     : ActiveLoop
Brief Description : This routine simply sets and clears P1.3 at a periodic rate
		  : It's purpose is to let the user know the part is alive.
		  :
Regs preserved    : No reg. is saved
--------------------------------------------------------------------*


SCOPE

ActiveLoop:

;------------------------------------------------------------------
;-- Heart Beat
;------------------------------------------------------------------
	CLR     LC                ; Nothing to do so reduce current draw 
				  ; by dropping the clk frequency by 75%
	mov     WR0,    Heart1
	inc     WR0,    #1
	mov     Heart1, WR0
	cmp     WR0,    #7FFFh
	jl      ClearBit
	setb    P1.3
	jmp     ActiveLoop
ClearBit:
	clr     P1.3
	jmp     ActiveLoop
	

;----------------------------------------------------------------
;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
;FF                 FUNCTION ISR 
;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
;----------------------------------------------------------------
COMMENT *------------------------------------------------------------
Function name     : FUNCTION_ISR
Brief Description : Service the FUNCTION_ISR Interrupt
		  : This routine scans the interrupt pending bits in order
		  : and branches to any routines that have pending interrupts.
		  : After finishing the routine jumps back to the top of
		  : the scanning loop to preserve interrupt priority.
		  :
		  : NOTE: The order of precidence is set by the order in which 
		  : the user places the checks.
		  :
Regs preserved    : Reg. A, B  & EPINDEX are saved
--------------------------------------------------------------------*
SCOPE

FUNCTION_ISR:
	 push   ACC
	 push   B
	 push   EPINDEX
	 CLR    LC                          ; Reduce simulation time.

ProcessFunctionEndpoints:

;----------------------------------------------------------------
;-- NOTE: Priority of the check sequence determines priority.  --
;----------------------------------------------------------------
First_Check:        
	jnb     FRXD0,  ISRCheck1
	mov     P1,     #0FFh
	mov     P1,     #40h

	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#00
	lCall   ProcessOutToken             ; 82930H has received a packet 
					    ;  from HC
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
ISRCheck1:
	jnb     FTXD0,  ISRCheck2
	mov     P1,     #0FFh
	mov     P1,     #41h
	CLR     LC                          ; Reduce simulation time.        
	mov     EPINDEX,#00
	lCall   ProcessInToken              ; 82930H has sent a packet to HC
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
ISRCheck2:                      
$$IF$ (BENCFG11 == 1)
$$IF$ (EPADDR11 == 129)  
$$IFN$ (EPATT11 == 1)  
	jnb     FTXD1,  ISRCheck3   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG12 == 1)
$$IF$ (EPADDR12 == 129)  
$$IFN$ (EPATT12 == 1)  
	jnb     FTXD1,  ISRCheck3   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG13 == 1)
$$IF$ (EPADDR13 == 129)  
$$IFN$ (EPATT13 == 1)  
	jnb     FTXD1,  ISRCheck3   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG14 == 1)
$$IF$ (EPADDR14 == 129)  
$$IFN$ (EPATT14 == 1)  
	jnb     FTXD1,  ISRCheck3   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG15 == 1)
$$IF$ (EPADDR15 == 129)  
$$IFN$ (EPATT15 == 1)  
	jnb     FTXD1,  ISRCheck3   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG16 == 1)
$$IF$ (EPADDR16 == 129)  
$$IFN$ (EPATT16 == 1)  
	jnb     FTXD1,  ISRCheck3   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
ISRCheck3:        
$$IF$ (BENCFG11 == 1)
$$IF$ (EPADDR11 == 1)
$$IFN$ (EPATT11 == 1)       
	jnb     FRXD1,  ISRCheck4   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_RX_ISR                  ; 82930H has receoved a packet 
					    ; from HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG12 == 1)
$$IF$ (EPADDR12 == 1)
$$IFN$ (EPATT12 == 1)       
	jnb     FRXD1,  ISRCheck4   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_RX_ISR                  ; 82930H has receoved a packet 
					    ; from HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG13 == 1)
$$IF$ (EPADDR13 == 1)
$$IFN$ (EPATT13 == 1)       
	jnb     FRXD1,  ISRCheck4   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_RX_ISR                  ; 82930H has receoved a packet 
					    ; from HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG14 == 1)
$$IF$ (EPADDR14 == 1)
$$IFN$ (EPATT14 == 1)       
	jnb     FRXD1,  ISRCheck4   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_RX_ISR                  ; 82930H has receoved a packet 
					    ; from HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG15 == 1)
$$IF$ (EPADDR15 == 1)
$$IFN$ (EPATT15 == 1)       
	jnb     FRXD1,  ISRCheck4   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_RX_ISR                  ; 82930H has receoved a packet 
					    ; from HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG16 == 1)
$$IF$ (EPADDR16 == 1)
$$IFN$ (EPATT16 == 1)       
	jnb     FRXD1,  ISRCheck4   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#01
	lCall   EP1_RX_ISR                  ; 82930H has receoved a packet 
					    ; from HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
ISRCheck4:                      
$$IF$ (BENCFG11 == 1)
$$IF$ (EPADDR11 == 130)  
$$IFN$ (EPATT11 == 1) 
	jnb     FTXD2,  ISRCheck5   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#02
	lCall   EP2_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG12 == 1)
$$IF$ (EPADDR12 == 130)  
$$IFN$ (EPATT12 == 1) 
	jnb     FTXD2,  ISRCheck5   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#02
	lCall   EP2_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG13 == 1)
$$IF$ (EPADDR13 == 130)  
$$IFN$ (EPATT13 == 1) 
	jnb     FTXD2,  ISRCheck5   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#02
	lCall   EP2_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG14 == 1)
$$IF$ (EPADDR14 == 130)  
$$IFN$ (EPATT14 == 1) 
	jnb     FTXD2,  ISRCheck5   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#02
	lCall   EP2_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG15 == 1)
$$IF$ (EPADDR15 == 130)  
$$IFN$ (EPATT15 == 1) 
	jnb     FTXD2,  ISRCheck5   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#02
	lCall   EP2_TX_ISR                  ; 82930H has sent a packet to HC        
	jmp     ProcessFunctionEndpoints    ; Look at all Interrupt flags again
$$END$
$$END$
$$END$
$$IF$ (BENCFG16 == 1)
$$IF$ (EPADDR16 == 130)  
$$IFN$ (EPATT16 == 1) 
	jnb     FTXD2,  ISRCheck5   
	CLR     LC                          ; Reduce simulation time.
	mov     EPINDEX,#02

⌨️ 快捷键说明

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