📄 usb_to_serial.lst
字号:
;****************************************************************
; MISCELLANEOUS CONSTANTS
;****************************************************************
0080= ERROR_FLAG: equ 80h ;
0000= RAM: equ 00h ;
0001= ROM: equ 01h ;
0000= EVEN_PARITY: equ FALSE ;
FFFFFFFF= ODD_PARITY: equ TRUE ;
0006= RTS_LAG: equ 06h ;
00C2= BAUD_115200: equ C2h ;
00E1= BAUD_57600: equ E1h ;
0096= BAUD_38400: equ 96h ;
004B= BAUD_19200: equ 4Bh ;
0025= BAUD_9600: equ 25h ;
0012= BAUD_4800: equ 12h ;
0009= BAUD_2400: equ 09h ;
0004= BAUD_1200: equ 04h ;
0002= BAUD_600: equ 02h ;
;****************************************************************
; USB CONSTANTS
;****************************************************************
; Standard Requests
0000= GET_STATUS: equ 0 ;
0001= CLEAR_FEATURE: equ 1 ;
0003= SET_FEATURE: equ 3 ;
0005= SET_ADDRESS: equ 5 ;
0006= GET_DESCRIPTOR: equ 6 ;
0007= SET_DESCRIPTOR: equ 7 ;
0008= GET_CONFIGURATION: equ 8 ;
0009= SET_CONFIGURATION: equ 9 ;
000A= GET_INTERFACE: equ 10 ;
000B= SET_INTERFACE: equ 11 ;
000C= SYNCH_FRAME: equ 12 ;
; Standard Descriptor Types
0001= DEVICE: equ 1 ;
0002= CONFIGURATION: equ 2 ;
0003= STRING: equ 3 ;
0004= INTERFACE: equ 4 ;
0005= ENDPOINT: equ 5 ;
; Standard Feature Selectors
0000= ENDPOINT_STALL: equ 0 ; Endpoint recipient
0001= DEVICE_REMOTE_WAKEUP: equ 1 ; Device recipient
;****************************************************************
; HID CONSTANTS
;****************************************************************
; from HID Class v1.0 Draft #4
;****************************************************************
; Class specific descriptor types from section
; 7.1 Standard Requests
0021= HID: equ 21h ;
0022= REPORT: equ 22h ;
0023= PHYSICAL: equ 23h ;
; Class specific request codes from section 7.2
; Class Specific Requests
0001= GET_REPORT: equ 1 ;
0002= GET_IDLE: equ 2 ;
0003= GET_PROTOCOL: equ 3 ;
0009= SET_REPORT: equ 9 ;
000A= SET_IDLE: equ 10 ;
000B= SET_PROTOCOL: equ 11 ;
0001= CONFIGURED: equ 1 ; configuration status values
0000= UNCONFIGURED: equ 0 ;
0000= BOOT_PROTOCOL: equ 0 ; protocol status values
0001= REPORT_PROTOCOL: equ 1
0000= DISABLE_REMOTE_WAKEUP: equ 0 ; bit[1] = 0
0002= ENABLE_REMOTE_WAKEUP: equ 2 ; bit[1] = 1
;****************************************************************
; CODE STARTS HERE
;****************************************************************
0000 ORG 0000h
**** MACRO **** INTERRUPT_VECTOR_TABLE ;
0000 XPAGEOFF
0000 80 1B [05] jmp Reset_Isr ;
0002 80 52 [05] jmp Bus_Reset_Isr ;
0004 80 1A [05] jmp 128us_Isr ;
0006 80 83 [05] jmp 1ms_Isr ;
0008 86 BF [05] jmp Ep0_Isr ;
000A 80 CC [05] jmp Ep1_Isr ;
000C 80 E4 [05] jmp Ep2_Isr ;
000E 80 1A [05] jmp Ep3_Isr ;
0010 80 1A [05] jmp Ep4_Isr ;
0012 80 1A [05] jmp Reserved_Isr ;
0014 80 1A [05] jmp Dac_Isr ;
0016 84 4C [05] jmp Gpio_Isr ;
0018 80 1A [05] jmp I2c_Isr ;
001A XPAGEON
***END MACRO***
001A CODE_START:
001A XPAGEON
;****************************************************************
; ISR: Reserved_Isr(s)
;****************************************************************
IFDEF 64013
001A Ep3_Isr:
001A Ep4_Isr:
001A I2c_Isr:
001A Dac_Isr:
ENDIF
IFDEF 63743
ENDIF
001A 128us_Isr:
001A Reserved_Isr:
001A 73 [08] reti ;
;****************************************************************
; ISR: Reset_Isr
;****************************************************************
; The reset interrupt resets all the variable to their
; default values and prepares the USB device for enumeration
;****************************************************************
001B Reset_Isr:
IFDEF 63743
ENDIF
001B 19 01 [04] mov A, RUN_EN ;
001D 2A FF [05] iowr CTL ;
001F 19 B8 [04] mov A, DSP_BEGIN ;
0021 30 [05] swap A, DSP ;
;----------------------------------------------------------------
; Clear all of RAM.
0022 19 00 [04] mov A, 00h ;
0024 1C FF [04] mov X, (RAM_SIZE - 1) ;
0026 Clear_Ram_Loop: ;
0026 2A 26 [05] iowr WDT ;
0028 32 00 [06] mov [X + 0], A ;
002A 26 [04] dec X ;
002B D0 26 [05] jnc Clear_Ram_Loop ;
;----------------------------------------------------------------
IFDEF 64013
; The 64013 provides either three or five
; endpoints. Two of the common endpoints
; can provide either 8 or 32-byte fifos.
; Configure the endpoints based on the
; NUM_EPS and FIFO_SIZE defines.
002D 19 00 [04] mov A, 00h ;
; If the number of endpoints is defined as
; 5, set the EP_COUNT bit in the USB_CTL
; register.
IF (NUM_EPS - 5)
ELSE
ENDIF
; If the endpoint fifo size is defined as
; 32, set the EP_SIZE bit in the USB_CTL
; register.
IF (FIFO_SIZE - 32)
ELSE
002F 0D 80 [04] or A, EP_SIZE ;
ENDIF
0031 2A 1F [05] iowr USB_CTL ;
**** MACRO **** DISABLE_SE0 ;
0033 19 10 [04] mov A, 10h ;
0035 2A F2 [05] iowr F2h ;
***END MACRO***
0037 19 AB [04] mov A, ((P3_CFG_MSK & CMOS_NONE) | (P2_CFG_MSK & CMOS_NONE) | (P1_CFG_MSK & CMOS_NONE) | (P0_CFG_MSK & RES_NEG))
0039 2A 08 [05] iowr GPIO_CFG ;
ENDIF
IFDEF 63743
ENDIF
003B 19 FF [04] mov A, FFh ;
003D 31 20 [05] mov [p1_shadow], A ;
003F 19 01 [04] mov A, USB_RST_INT_EN ; Enable Bus Reset Interrupt
0041 2A 20 [05] iowr IE ; disable all other interrupts
0043 19 01 [04] mov A, EP0_IE ; Enable EP0 interrupt
0045 2A 21 [05] iowr EP_IE ;
0047 19 03 [04] mov A, STALL_IN_OUT ; Set Endpoint 0 mode to Stall
0049 2A 12 [05] iowr EP0_MODE ;
004B 19 80 [04] mov A, (USB_ADDR_EN | 00h) ; Enable response to USB address 0
004D 2A 10 [05] iowr USB_ADDR ;
004F 72 [04] ei ;
0050 81 40 [05] jmp Main ;
;****************************************************************
; ISR: Bus_Reset_Isr
;****************************************************************
0052 Bus_Reset_Isr:
0052 2D [05] push A ;
IFDEF 64013
0053 19 AB [04] mov A, ((P3_CFG_MSK & CMOS_NONE) | (P2_CFG_MSK & CMOS_NONE) | (P1_CFG_MSK & CMOS_NONE) | (P0_CFG_MSK & RES_NEG))
0055 2A 08 [05] iowr GPIO_CFG ;
ENDIF
IFDEF 63743
ENDIF
0057 19 FF [04] m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -