📄 u_u_usb_macro.inc
字号:
// ====================================================================================
// Macro program (USB Library v1.2)
//
// ====================================================================================
;1 USB REGISTER ACCESS DELAY TIMEING
N_NOP MACRO
CALL N_NOP_DELAY
ENDM
;2 USB INITIAL SUB (USB ENABLE/BANK 1/IAP0 AUTO+1/FLAG SETTING/USB INT ENABLE/SPPED SELECT/PLUG IN)
_ADD_USB_INITIAL_SUB MACRO
CALL USB_INITIAL
ENDM
_ADD_USB_INITIAL_WORK_SUB MACRO
ENDM
;3 USB BUS RESET INT SUB (DEFAULT THE DEVICE WORK)
_ADD_USB_BUS_RESET_SUB MACRO
BC BULK_STATE,CONFIG
MOV A,#0X01
MOV RAMBS1,A
MOV A,#ep1csr
MOV IAP1,A
NOP
; BC IAC1,1
n_nop
; BC IAC1,0
n_nop
call busresetsub
; bs count3,7
ENDM
;4 USB IDLE INT SUB (PREPARE GO TO USB SUSPEND)
_ADD_USB_IDLE_INT_SUB MACRO
ENDM
;5 USB HUB DOWNSTREAM PORT WAKE-UP INT FROM SUSPEND
_ADD_USB_WAKEUP_INT_SUB MACRO
ENDM
;6 USB HOST RESUME INT
_ADD_USB_RESUME_INT_SUB MACRO
ENDM
;7 USB SOF INT (FOR COUNT TIMEING :1ms)
_ADD_USB_SOF_INT_SUB MACRO
ENDM
;8 USB EP1 INT (EP1 DATA MANAGEMENT)
_ADD_USB_EP1_SUB MACRO
CALL ADD_USB_EP1_SUB
ENDM
;8.1 USB EP1 WORK MACRO (EP1 OUT/IN DATA MANAGEMENT IN MAIN LOOP)
_ADD_USB_EP1_WORK_SUB MACRO
CALL ADD_USB_EP1_WORK_SUB
ENDM
;9 USB EP2 INT (EP2 DATA MANAGEMENT)
_ADD_USB_EP2_SUB MACRO
BS BULK_STATE,OUT_USB_FIFO_FULL
MOV A,#0X01
MOV RAMBS1,A
MOV A,#EP2CTR
MOV IAP1,A
NOP
MOV A,IAC1
MOV TEMP1,A
n_nop
ENDM
;9.1 USB EP2 WORK SUB (EP2 OUT/IN DATA MANAGEMENT IN MAIN LOOP)
_ADD_USB_EP2_WORK_SUB MACRO
CALL ADD_USB_EP2_WORK_SUB
ENDM
;10 USB EP3 INT (EP3 DATA MANAGEMENT)
_ADD_USB_EP3_SUB MACRO
ENDM
//10.1 USB EP3 WORK SUB (EP3 OUT/IN DATA MANAGEMENT IN MAIN LOOP)
_ADD_USB_EP3_WORK_SUB MACRO
ENDM
;11 USB EXPAND bmRequestType COMMAND
_ADD_USB_bmRequestType MACRO //ADD VENDOR COMMAND
MOV A,#0X41
XOR A,TEMP_UREG
JBS STTS,Z,RequestType41
MOV A,#0XC1
XOR A,TEMP_UREG
JBS STTS,Z,RequestTypeC1
ENDM
;12 USB EXPAND Request COMMAND
;12.1
_ADD_USB_RT0X00_Request MACRO
ENDM
;12.2
_ADD_USB_RT0X01_Request MACRO
ENDM
;12.3
_ADD_USB_RT0X02_Request MACRO
ENDM
;12.4
_ADD_USB_RT0X80_Request MACRO
ENDM
;12.5
_ADD_USB_RT0X81_Request MACRO
ENDM
;12.6
_ADD_USB_RT0X82_Request MACRO
ENDM
;12.7
_ADD_USB_RT0X20_Request MACRO
ENDM
;12.8
_ADD_USB_RT0X21_Request MACRO
trap
ENDM
;12.9
_ADD_USB_RT0X23_Request MACRO
ENDM
;12.10
_ADD_USB_RT0XA0_Request MACRO
ENDM
;12.11
_ADD_USB_RT0XA1_Request MACRO
MOV A,#0xfe // get max LUN
XOR A,TEMP_UREG
JBC STATUS,Z,UNKNOWN_bRequest
MOV A,#0X01
MOV EP0TXCTR,A
N_NOP
MOV A,#0X00
MOV EP0TXDAR,A
BS EP2CSR,RXTXEN
; BC EP2CSR,SESTALL
RET
ENDM
;23
_ADD_USB_RT0XA3_Request MACRO
ENDM
;24
_ADD_USB_DEVICE_CONFIG_OK MACRO
BS BULK_STATE,CONFIG
ENDM
;25
_ADD_USB_SET_REPORT_SUB MACRO
// VENDER COMMAND OUT DATA
BC FC_STATUS,DATA_OUT
MOV A,EP0RXDAR
MOV TEMP1,A
MOV A,EP0RXDAR
/*
MOV BULK_OUT_BUFH,A
MOV A,EP0RXDAR
MOV BULK_OUT_BUFM,A
MOV A,EP0RXDAR
MOV BULK_OUT_BUFL,A
BS EP2CSR,RXTXEN
N_NOP
BS BULK_STATE,IMAGE_RESTART
*/
ENDM
;26
_ADD_USB_GET_REPORT_SUB MACRO
ENDM
;27
_ADD_USB_GET_REPORT_EXP_SUB MACRO
ENDM
;28
_ADD_USB_STRING_INDEX_HM MACRO
MOV A,#High(String_index_HManufacture_table<<1)
MOV TBHPTR,A
MOV A,#Low(String_index_HManufacture_table<<1)
MOV TBLPTR,A
JMP F_TABLE_READ
ENDM
;29
_ADD_USB_STRING_INDEX_HP MACRO
MOV A,#High(String_index_HProduct_table<<1)
MOV TBHPTR,A
MOV A,#Low(String_index_HProduct_table<<1)
MOV TBLPTR,A
JMP F_TABLE_READ
ENDM
;30
_ADD_USB_STRING_INDEX_HS MACRO
ENDM
;31
_ADD_USB_STRING_INDEX_HC MACRO
ENDM
;32
_ADD_USB_STRING_INDEX_HI MACRO
ENDM
;33
_ADD_USB_STRING_INDEX_DM MACRO
ENDM
;34
_ADD_USB_STRING_INDEX_DP MACRO
ENDM
;35
_ADD_USB_STRING_INDEX_DS MACRO
ENDM
;36
_ADD_USB_STRING_INDEX_DC MACRO
ENDM
;37
_ADD_USB_STRING_INDEX_DI MACRO
ENDM
;38
_ADD_USB_HID_DESCRIPTION_SUB MACRO
if _USB_HID == _ENABLE
MOV A,#High(Descriptor_type_21_index00_table<<1)
MOV TBHPTR,A
MOV A,#Low(Descriptor_type_21_index00_table<<1)
MOV TBLPTR,A
//table length
JMP F_TABLE_READ
endif
ENDM
_ADD_USB_HID_DESCRIPTION_SUB1 MACRO
if _USB_CD_bNumInterface == 2
MOV A,#High(Descriptor_type_21_index01_table<<1)
MOV TBHPTR,A
MOV A,#Low(Descriptor_type_21_index01_table<<1)
MOV TBLPTR,A
//table length
JMP F_TABLE_READ
endif
ENDM
;39
_ADD_USB_HID_REPORT_SUB1 MACRO
if _USB_HID == _ENABLE
MOV A,#High(Descriptor_type_22_index00_table<<1)
MOV TBHPTR,A
MOV A,#Low(Descriptor_type_22_index00_table<<1)
MOV TBLPTR,A
//table length
MOV A,#_USB_HID_wDescriptorLength0
MOV TBLL,A
JMP F_TABLE_READ_1
endif
ENDM
;40
_ADD_USB_HID_REPORT_SUB2 MACRO
if _USB_CD_bNumInterface == 2
MOV A,#High(Descriptor_type_22_index01_table<<1)
MOV TBHPTR,A
MOV A,#Low(Descriptor_type_22_index01_table<<1)
MOV TBLPTR,A
//table length
MOV A,#_USB_HID_wDescriptorLength1
MOV TBLL,A
JMP F_TABLE_READ_1
endif
ENDM
;41
_ADD_USB_HID_PHYSCIAL_SUB MACRO
ENDM
;*********************************************************
ADD_USB_EP1_SUB:
BS BULK_STATE,IN_USB_FIFO_FULL
RET
ADD_USB_EP1_WORK_SUB:
MOV A,#0X01
MOV RAMBS1,A
MOV A,#EP1CSR
MOV IAP1,A
NOP
MOV A,#EP1CTR
MOV IAP1,A
MOV A,TEMP1
MOV IAC1,A
MOV A,#EP1DAR
MOV IAP1,A
BC Flash_Ctrl_Port_B,_CE
EP1_LOOP:
BC Flash_Ctrl_Port_B,_RE
nop
MOV A,Flash_Data_Port
BS Flash_Ctrl_Port_B,_RE
MOV IAC1,A
DJZ TEMP1,EP1_LOOP_END
JMP EP1_LOOP
EP1_LOOP_END:
BS Flash_Ctrl_Port_B,_CE
MOV A,#EP1CSR
MOV IAP1,A
NOP
n_nop
BS IAC1,RXTXEN
N_NOP
loop_ep1_work_sub:
; jbs count3,7,exit64bytre
JBS IAC1,SESTALL,loop_ep1_work_sub
JBS IAC1,RXTXEN,loop_ep1_work_sub
exit64bytre:
jBc BULK_STATE,IN_USB_FIFO_FULL,$
Bc BULK_STATE,IN_USB_FIFO_FULL
; trap
NOP
RET
;*********************************************************
ADD_USB_EP2_WORK_SUB:
MOV A,#0X01
MOV RAMBS1,A
MOV A,#EP2CSR
MOV IAP1,A
NOP
MOV A,#EP2DAR
MOV IAP1,A
NOP
EP2_LOOP:
MOV A,IAC1
MOV IAC0,A
DJZ TEMP1,EP2_LOOP_END
JMP EP2_LOOP
EP2_LOOP_END:
MOV A,#EP2CSR
MOV IAP1,A
NOP
BS IAC1,RXTXEN
N_NOP
EP2_RET: bc iac1,1
RET
;*********************************************************
;==========================================================
//Decode Ve Vendor Command
;=========================================================
RequestTypeC1: //C1 B2 COMMAND --> RETURN BULK IN DATA LENGTH
//BULK IN
MOV A,IAC0
MOV TEMP_UREG,A
MOV A,#0XB2 // bRequest
XOR A,TEMP_UREG
JBS STATUS,Z,HOST_BULK_IN_CHK
JMP UNKNOWN_bRequest
RequestType41: //41 B3 COMMAND --> BULK OUT BEGIN
//BULK OUT
MOV A,IAC0
MOV TEMP_UREG,A
MOV A,#0XB3
XOR A,TEMP_UREG
JBS STATUS,Z,HOST_BULK_OUT_CHK
JMP UNKNOWN_bRequest
HOST_BULK_IN_CHK:
/*
MOV A,#0X04
MOV EP0TXCTR,A
N_NOP
MOV A,#0X00
MOV EP0TXDAR,A
N_NOP
MOV A,BULK_IN_BUFH
MOV EP0TXDAR,A
N_NOP
MOV A,BULK_IN_BUFM
MOV EP0TXDAR,A
N_NOP
MOV A,BULK_IN_BUFL
MOV EP0TXDAR,A
N_NOP
BS BULK_STATE,BEGIN_PUT_EP1_DATA
*/
RET
HOST_BULK_OUT_CHK:
BS FC_STATUS,DATA_OUT
RET
/*
INC_ADD_TEMP1:
JBS STTS,C,INC_ADD_TEMP2
RET
INC_ADD_TEMP2:
INC ADD_TEMP2
JBS STTS,C,INC_ADD_TEMP3
RET
INC_ADD_TEMP3:
INC ADD_TEMP3
JBC ADD_TEMP3,1,$+3
CLR ADD_TEMP3
RET
*/
// **********************************************
// Macro Sub N_NOP
// **********************************************
N_NOP_DELAY:
if _USB_LOW_SPEED == _DISABLE
nop
nop
NOP
RET
else
///////12M
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
endif
busresetsub:
mov a,temp3
jbc stts,z,skipreset
mov a,read_block_no
jbc stts,z,skipreset
; trap
skipreset:
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -